@tolle_/tolle-ui 0.0.29-beta → 0.0.31-beta

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.
@@ -0,0 +1,433 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { RouterModule } from '@angular/router';
4
+ import { cn } from './utils/cn';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ export class SidebarComponent {
8
+ items = [];
9
+ collapsed = false;
10
+ class = '';
11
+ expandedParents = new Set();
12
+ expandedChildren = new Set();
13
+ cn = cn;
14
+ ngOnChanges(changes) {
15
+ if (changes['collapsed'] && this.collapsed) {
16
+ this.collapseAll();
17
+ return;
18
+ }
19
+ if (changes['items']) {
20
+ this.initializeState();
21
+ }
22
+ }
23
+ // --- STATE INIT ---
24
+ initializeState() {
25
+ this.collapseAll();
26
+ if (!this.items)
27
+ return;
28
+ this.items.forEach((group, gIndex) => {
29
+ group.items.forEach((item, iIndex) => {
30
+ const parentId = this.getParentId(group, item, gIndex, iIndex);
31
+ if (item.expanded) {
32
+ this.expandedParents.add(parentId);
33
+ }
34
+ if (item.items) {
35
+ item.items.forEach((subItem, sIndex) => {
36
+ if (subItem.expanded) {
37
+ const childId = this.getChildId(group, item, subItem, gIndex, iIndex, sIndex);
38
+ this.expandedChildren.add(childId);
39
+ this.expandedParents.add(parentId);
40
+ }
41
+ });
42
+ }
43
+ });
44
+ });
45
+ }
46
+ // --- ID GENERATORS (Now using Group Index correctly) ---
47
+ getGroupId(group, index) {
48
+ return group.id || group.title || `g-${index}`;
49
+ }
50
+ getParentId(group, item, gIndex, iIndex) {
51
+ const groupId = this.getGroupId(group, gIndex);
52
+ const itemId = item.id || item.title || `p-${iIndex}`;
53
+ return `${groupId}__${itemId}`;
54
+ }
55
+ getChildId(group, parent, subItem, gIndex, iIndex, sIndex) {
56
+ const parentId = this.getParentId(group, parent, gIndex, iIndex);
57
+ const subItemId = subItem.id || subItem.title || `c-${sIndex}`;
58
+ return `${parentId}__${subItemId}`;
59
+ }
60
+ // --- ACTIONS ---
61
+ toggleParent(group, item, gIndex, iIndex) {
62
+ if (this.collapsed)
63
+ return;
64
+ const id = this.getParentId(group, item, gIndex, iIndex);
65
+ // Create new Set reference to ensure Change Detection triggers
66
+ const newSet = new Set(this.expandedParents);
67
+ if (newSet.has(id)) {
68
+ newSet.delete(id);
69
+ }
70
+ else {
71
+ newSet.add(id);
72
+ }
73
+ this.expandedParents = newSet;
74
+ }
75
+ toggleChild(group, parent, subItem, gIndex, iIndex, sIndex) {
76
+ const id = this.getChildId(group, parent, subItem, gIndex, iIndex, sIndex);
77
+ // Create new Set reference
78
+ const newSet = new Set(this.expandedChildren);
79
+ if (newSet.has(id)) {
80
+ newSet.delete(id);
81
+ }
82
+ else {
83
+ newSet.add(id);
84
+ }
85
+ this.expandedChildren = newSet;
86
+ }
87
+ collapseAll() {
88
+ this.expandedParents = new Set();
89
+ this.expandedChildren = new Set();
90
+ }
91
+ // --- TEMPLATE HELPERS ---
92
+ isParentExpanded(group, item, gIndex, iIndex) {
93
+ return this.expandedParents.has(this.getParentId(group, item, gIndex, iIndex));
94
+ }
95
+ isChildExpanded(group, parent, subItem, gIndex, iIndex, sIndex) {
96
+ return this.expandedChildren.has(this.getChildId(group, parent, subItem, gIndex, iIndex, sIndex));
97
+ }
98
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
99
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SidebarComponent, isStandalone: true, selector: "tolle-sidebar", inputs: { items: "items", collapsed: "collapsed", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
100
+ <aside [class]="cn(
101
+ 'flex flex-col h-full border-r bg-background transition-[width] duration-300 ease-in-out shrink-0 overflow-hidden',
102
+ collapsed ? 'w-16' : 'w-64',
103
+ class
104
+ )">
105
+ <div class="flex h-14 shrink-0 items-center border-b px-3 overflow-hidden whitespace-nowrap">
106
+ <ng-content select="[header]"></ng-content>
107
+ </div>
108
+
109
+ <div class="flex-1 min-h-0 overflow-y-auto overflow-x-hidden py-4 px-3 custom-scrollbar">
110
+
111
+ @for (group of items; track group.id || group.title || $index; let gIndex = $index) {
112
+ <div class="mb-6">
113
+
114
+ <div [class]="cn(
115
+ 'mb-2 px-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground/70 transition-all duration-200 overflow-hidden',
116
+ collapsed ? 'opacity-0 h-0 mb-0 px-0' : 'opacity-100 h-auto'
117
+ )">
118
+ {{ group.title }}
119
+ </div>
120
+
121
+ <div class="flex flex-col gap-1">
122
+ @for (item of group.items; track item.id || item.title || $index; let i = $index) {
123
+
124
+ @if (item.items && item.items.length) {
125
+ <div class="relative">
126
+ <button
127
+ type="button"
128
+ (click)="toggleParent(group, item, gIndex, i)"
129
+ [disabled]="collapsed"
130
+ [attr.aria-expanded]="isParentExpanded(group, item, gIndex, i)"
131
+ [class]="cn(
132
+ 'group w-full relative flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
133
+ 'hover:bg-accent hover:text-accent-foreground',
134
+ isParentExpanded(group, item, gIndex, i) ? 'text-foreground bg-accent/50' : 'text-muted-foreground',
135
+ collapsed ? 'justify-center' : 'justify-start'
136
+ )"
137
+ >
138
+ <i [class]="cn(
139
+ item.icon || 'ri-circle-fill',
140
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
141
+ !collapsed && 'group-hover:scale-110'
142
+ )"></i>
143
+
144
+ <span [class]="cn(
145
+ 'truncate transition-all duration-300',
146
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
147
+ )">
148
+ {{ item.title }}
149
+ </span>
150
+
151
+ @if (!collapsed) {
152
+ <i [class]="cn(
153
+ 'ri-arrow-down-s-line ml-auto transition-transform duration-300',
154
+ isParentExpanded(group, item, gIndex, i) ? 'rotate-180' : ''
155
+ )"></i>
156
+ }
157
+ </button>
158
+
159
+ <div [class]="cn(
160
+ 'grid transition-[grid-template-rows] duration-300 ease-in-out',
161
+ isParentExpanded(group, item, gIndex, i) && !collapsed ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'
162
+ )">
163
+ <div class="overflow-hidden">
164
+ <div class="flex flex-col gap-1 mt-1 ml-4 border-l border-border/50 pl-2">
165
+
166
+ @for (subItem of item.items; track subItem.id || subItem.title || $index; let j = $index) {
167
+
168
+ @if (subItem.items && subItem.items.length) {
169
+ <div class="relative">
170
+ <button
171
+ type="button"
172
+ (click)="toggleChild(group, item, subItem, gIndex, i, j); $event.stopPropagation()"
173
+ [class]="cn(
174
+ 'group w-full relative flex items-center rounded-md px-3 py-1.5 text-sm font-medium transition-colors',
175
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
176
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'text-foreground bg-accent/30' : ''
177
+ )"
178
+ >
179
+ <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
180
+ <span class="ml-2 truncate">{{ subItem.title }}</span>
181
+ <i [class]="cn(
182
+ 'ri-arrow-right-s-line ml-auto transition-transform duration-300 text-xs',
183
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'rotate-90' : ''
184
+ )"></i>
185
+ </button>
186
+
187
+ <div [class]="cn(
188
+ 'grid transition-[grid-template-rows] duration-300 ease-in-out',
189
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'
190
+ )">
191
+ <div class="overflow-hidden">
192
+ <div class="flex flex-col gap-1 mt-1 ml-4 border-l border-border/30 pl-2">
193
+ @for (grandChild of subItem.items; track grandChild.title) {
194
+ <a
195
+ [routerLink]="grandChild.url"
196
+ routerLinkActive="bg-accent/50 text-accent-foreground"
197
+ [routerLinkActiveOptions]="{ exact: true }"
198
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
199
+ >
200
+ <span class="w-1.5 h-1.5 rounded-full bg-border/70 shrink-0"></span>
201
+ <span class="truncate">{{ grandChild.title }}</span>
202
+ </a>
203
+ }
204
+ </div>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ }
209
+ @else {
210
+ <a
211
+ [routerLink]="subItem.url"
212
+ routerLinkActive="bg-accent/50 text-accent-foreground"
213
+ [routerLinkActiveOptions]="{ exact: true }"
214
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
215
+ >
216
+ <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
217
+ <span class="truncate">{{ subItem.title }}</span>
218
+ </a>
219
+ }
220
+ }
221
+ </div>
222
+ </div>
223
+ </div>
224
+ </div>
225
+ }
226
+ @else {
227
+ <a
228
+ [routerLink]="item.url"
229
+ routerLinkActive="bg-primary/10 text-primary"
230
+ [routerLinkActiveOptions]="{ exact: true }"
231
+ [class]="cn(
232
+ 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
233
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
234
+ collapsed ? 'justify-center' : 'justify-start'
235
+ )"
236
+ >
237
+ <i [class]="cn(
238
+ item.icon || 'ri-circle-fill',
239
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
240
+ !collapsed && 'group-hover:scale-110'
241
+ )"></i>
242
+ <span [class]="cn(
243
+ 'truncate transition-all duration-300',
244
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
245
+ )">
246
+ {{ item.title }}
247
+ </span>
248
+ </a>
249
+ }
250
+ }
251
+ </div>
252
+ </div>
253
+ }
254
+ </div>
255
+
256
+ <div class="border-t shrink-0 p-3 overflow-hidden whitespace-nowrap">
257
+ <ng-content select="[footer]"></ng-content>
258
+ </div>
259
+ </aside>
260
+ `, isInline: true, styles: [":host{display:block;height:100%}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(156,163,175,.3) transparent}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#9ca3af4d;border-radius:20px}button:disabled{cursor:not-allowed;opacity:.6}*{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ml-4{margin-left:1rem}.border-l{border-left-width:1px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
261
+ }
262
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SidebarComponent, decorators: [{
263
+ type: Component,
264
+ args: [{ selector: 'tolle-sidebar', standalone: true, imports: [CommonModule, RouterModule], template: `
265
+ <aside [class]="cn(
266
+ 'flex flex-col h-full border-r bg-background transition-[width] duration-300 ease-in-out shrink-0 overflow-hidden',
267
+ collapsed ? 'w-16' : 'w-64',
268
+ class
269
+ )">
270
+ <div class="flex h-14 shrink-0 items-center border-b px-3 overflow-hidden whitespace-nowrap">
271
+ <ng-content select="[header]"></ng-content>
272
+ </div>
273
+
274
+ <div class="flex-1 min-h-0 overflow-y-auto overflow-x-hidden py-4 px-3 custom-scrollbar">
275
+
276
+ @for (group of items; track group.id || group.title || $index; let gIndex = $index) {
277
+ <div class="mb-6">
278
+
279
+ <div [class]="cn(
280
+ 'mb-2 px-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground/70 transition-all duration-200 overflow-hidden',
281
+ collapsed ? 'opacity-0 h-0 mb-0 px-0' : 'opacity-100 h-auto'
282
+ )">
283
+ {{ group.title }}
284
+ </div>
285
+
286
+ <div class="flex flex-col gap-1">
287
+ @for (item of group.items; track item.id || item.title || $index; let i = $index) {
288
+
289
+ @if (item.items && item.items.length) {
290
+ <div class="relative">
291
+ <button
292
+ type="button"
293
+ (click)="toggleParent(group, item, gIndex, i)"
294
+ [disabled]="collapsed"
295
+ [attr.aria-expanded]="isParentExpanded(group, item, gIndex, i)"
296
+ [class]="cn(
297
+ 'group w-full relative flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
298
+ 'hover:bg-accent hover:text-accent-foreground',
299
+ isParentExpanded(group, item, gIndex, i) ? 'text-foreground bg-accent/50' : 'text-muted-foreground',
300
+ collapsed ? 'justify-center' : 'justify-start'
301
+ )"
302
+ >
303
+ <i [class]="cn(
304
+ item.icon || 'ri-circle-fill',
305
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
306
+ !collapsed && 'group-hover:scale-110'
307
+ )"></i>
308
+
309
+ <span [class]="cn(
310
+ 'truncate transition-all duration-300',
311
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
312
+ )">
313
+ {{ item.title }}
314
+ </span>
315
+
316
+ @if (!collapsed) {
317
+ <i [class]="cn(
318
+ 'ri-arrow-down-s-line ml-auto transition-transform duration-300',
319
+ isParentExpanded(group, item, gIndex, i) ? 'rotate-180' : ''
320
+ )"></i>
321
+ }
322
+ </button>
323
+
324
+ <div [class]="cn(
325
+ 'grid transition-[grid-template-rows] duration-300 ease-in-out',
326
+ isParentExpanded(group, item, gIndex, i) && !collapsed ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'
327
+ )">
328
+ <div class="overflow-hidden">
329
+ <div class="flex flex-col gap-1 mt-1 ml-4 border-l border-border/50 pl-2">
330
+
331
+ @for (subItem of item.items; track subItem.id || subItem.title || $index; let j = $index) {
332
+
333
+ @if (subItem.items && subItem.items.length) {
334
+ <div class="relative">
335
+ <button
336
+ type="button"
337
+ (click)="toggleChild(group, item, subItem, gIndex, i, j); $event.stopPropagation()"
338
+ [class]="cn(
339
+ 'group w-full relative flex items-center rounded-md px-3 py-1.5 text-sm font-medium transition-colors',
340
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
341
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'text-foreground bg-accent/30' : ''
342
+ )"
343
+ >
344
+ <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
345
+ <span class="ml-2 truncate">{{ subItem.title }}</span>
346
+ <i [class]="cn(
347
+ 'ri-arrow-right-s-line ml-auto transition-transform duration-300 text-xs',
348
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'rotate-90' : ''
349
+ )"></i>
350
+ </button>
351
+
352
+ <div [class]="cn(
353
+ 'grid transition-[grid-template-rows] duration-300 ease-in-out',
354
+ isChildExpanded(group, item, subItem, gIndex, i, j) ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'
355
+ )">
356
+ <div class="overflow-hidden">
357
+ <div class="flex flex-col gap-1 mt-1 ml-4 border-l border-border/30 pl-2">
358
+ @for (grandChild of subItem.items; track grandChild.title) {
359
+ <a
360
+ [routerLink]="grandChild.url"
361
+ routerLinkActive="bg-accent/50 text-accent-foreground"
362
+ [routerLinkActiveOptions]="{ exact: true }"
363
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
364
+ >
365
+ <span class="w-1.5 h-1.5 rounded-full bg-border/70 shrink-0"></span>
366
+ <span class="truncate">{{ grandChild.title }}</span>
367
+ </a>
368
+ }
369
+ </div>
370
+ </div>
371
+ </div>
372
+ </div>
373
+ }
374
+ @else {
375
+ <a
376
+ [routerLink]="subItem.url"
377
+ routerLinkActive="bg-accent/50 text-accent-foreground"
378
+ [routerLinkActiveOptions]="{ exact: true }"
379
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
380
+ >
381
+ <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
382
+ <span class="truncate">{{ subItem.title }}</span>
383
+ </a>
384
+ }
385
+ }
386
+ </div>
387
+ </div>
388
+ </div>
389
+ </div>
390
+ }
391
+ @else {
392
+ <a
393
+ [routerLink]="item.url"
394
+ routerLinkActive="bg-primary/10 text-primary"
395
+ [routerLinkActiveOptions]="{ exact: true }"
396
+ [class]="cn(
397
+ 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
398
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
399
+ collapsed ? 'justify-center' : 'justify-start'
400
+ )"
401
+ >
402
+ <i [class]="cn(
403
+ item.icon || 'ri-circle-fill',
404
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
405
+ !collapsed && 'group-hover:scale-110'
406
+ )"></i>
407
+ <span [class]="cn(
408
+ 'truncate transition-all duration-300',
409
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
410
+ )">
411
+ {{ item.title }}
412
+ </span>
413
+ </a>
414
+ }
415
+ }
416
+ </div>
417
+ </div>
418
+ }
419
+ </div>
420
+
421
+ <div class="border-t shrink-0 p-3 overflow-hidden whitespace-nowrap">
422
+ <ng-content select="[footer]"></ng-content>
423
+ </div>
424
+ </aside>
425
+ `, styles: [":host{display:block;height:100%}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(156,163,175,.3) transparent}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#9ca3af4d;border-radius:20px}button:disabled{cursor:not-allowed;opacity:.6}*{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ml-4{margin-left:1rem}.border-l{border-left-width:1px}\n"] }]
426
+ }], propDecorators: { items: [{
427
+ type: Input
428
+ }], collapsed: [{
429
+ type: Input
430
+ }], class: [{
431
+ type: Input
432
+ }] } });
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3NpZGViYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQXFNaEMsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFFcEIsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDcEMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVsQixFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRTNCLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUI7SUFDYixlQUFlO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRXhCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FB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LE1BQWM7UUFDNUgsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7d0dBdkdVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLGtLQTlLakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUtULHVpQkFsS1MsWUFBWSw4QkFBRSxZQUFZOzs0RkErS3pCLGdCQUFnQjtrQkFsTDVCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsWUFDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUtUOzhCQWNRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG4vLyAtLS0gSW50ZXJmYWNlcyAtLS1cbmV4cG9ydCBpbnRlcmZhY2UgU2lkZWJhckl0ZW0ge1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgaXRlbXM/OiBTaWRlYmFySXRlbVtdO1xuICBpZD86IHN0cmluZztcbiAgZXhwYW5kZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJHcm91cCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGl0ZW1zOiBTaWRlYmFySXRlbVtdO1xuICBpZD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtc2lkZWJhcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGFzaWRlIFtjbGFzc109XCJjbihcbiAgICAgICdmbGV4IGZsZXgtY29sIGgtZnVsbCBib3JkZXItciBiZy1iYWNrZ3JvdW5kIHRyYW5zaXRpb24tW3dpZHRoXSBkdXJhdGlvbi0zMDAgZWFzZS1pbi1vdXQgc2hyaW5rLTAgb3ZlcmZsb3ctaGlkZGVuJyxcbiAgICAgIGNvbGxhcHNlZCA/ICd3LTE2JyA6ICd3LTY0JyxcbiAgICAgIGNsYXNzXG4gICAgKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC0xNCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgYm9yZGVyLWIgcHgtMyBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBtaW4taC0wIG92ZXJmbG93LXktYXV0byBvdmVyZmxvdy14LWhpZGRlbiBweS00IHB4LTMgY3VzdG9tLXNjcm9sbGJhclwiPlxuXG4gICAgICAgIEBmb3IgKGdyb3VwIG9mIGl0ZW1zOyB0cmFjayBncm91cC5pZCB8fCBncm91cC50aXRsZSB8fCAkaW5kZXg7IGxldCBnSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuXG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgJ21iLTIgcHgtMiB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZC83MCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgb3ZlcmZsb3ctaGlkZGVuJyxcbiAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ29wYWNpdHktMCBoLTAgbWItMCBweC0wJyA6ICdvcGFjaXR5LTEwMCBoLWF1dG8nXG4gICAgICAgICAgICApXCI+XG4gICAgICAgICAgICAgIHt7IGdyb3VwLnRpdGxlIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBncm91cC5pdGVtczsgdHJhY2sgaXRlbS5pZCB8fCBpdGVtLnRpdGxlIHx8ICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcblxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFyZW50KGdyb3VwLCBpdGVtLCBnSW5kZXgsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzUGFyZW50RXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIGdJbmRleCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICdncm91cCB3LWZ1bGwgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJlbnRFeHBhbmRlZChncm91cCwgaXRlbSwgZ0luZGV4LCBpKSA/ICd0ZXh0LWZvcmVncm91bmQgYmctYWNjZW50LzUwJyA6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ2p1c3RpZnktY2VudGVyJyA6ICdqdXN0aWZ5LXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgIClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmljb24gfHwgJ3JpLWNpcmNsZS1maWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2gtNCB3LTQgdGV4dC1sZyBzaHJpbmstMCB0cmFuc2l0aW9uLXRyYW5zZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFjb2xsYXBzZWQgJiYgJ2dyb3VwLWhvdmVyOnNjYWxlLTExMCdcbiAgICAgICAgICAgICAgICAgICAgICAgIClcIj48L2k+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgICAndHJ1bmNhdGUgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZCA/ICdvcGFjaXR5LTAgdy0wIG1sLTAnIDogJ29wYWNpdHktMTAwIHctYXV0byBtbC0zJ1xuICAgICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JpLWFycm93LWRvd24tcy1saW5lIG1sLWF1dG8gdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMzAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJlbnRFeHBhbmRlZChncm91cCwgaXRlbSwgZ0luZGV4LCBpKSA/ICdyb3RhdGUtMTgwJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICApXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyaWQgdHJhbnNpdGlvbi1bZ3JpZC10ZW1wbGF0ZS1yb3dzXSBkdXJhdGlvbi0zMDAgZWFzZS1pbi1vdXQnLFxuICAgICAgICAgICAgICAgICAgICAgIGlzUGFyZW50RXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIGdJbmRleCwgaSkgJiYgIWNvbGxhcHNlZCA/ICdncmlkLXJvd3MtWzFmcl0gb3BhY2l0eS0xMDAnIDogJ2dyaWQtcm93cy1bMGZyXSBvcGFjaXR5LTAnXG4gICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0xIG1sLTQgYm9yZGVyLWwgYm9yZGVyLWJvcmRlci81MCBwbC0yXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoc3ViSXRlbSBvZiBpdGVtLml0ZW1zOyB0cmFjayBzdWJJdGVtLmlkIHx8IHN1Ykl0ZW0udGl0bGUgfHwgJGluZGV4OyBsZXQgaiA9ICRpbmRleCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzdWJJdGVtLml0ZW1zICYmIHN1Ykl0ZW0uaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDaGlsZChncm91cCwgaXRlbSwgc3ViSXRlbSwgZ0luZGV4LCBpLCBqKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAgdy1mdWxsIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hpbGRFeHBhbmRlZChncm91cCwgaXRlbSwgc3ViSXRlbSwgZ0luZGV4LCBpLCBqKSA/ICd0ZXh0LWZvcmVncm91bmQgYmctYWNjZW50LzMwJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS41IGgtMS41IHJvdW5kZWQtZnVsbCBiZy1ib3JkZXIgc2hyaW5rLTBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yIHRydW5jYXRlXCI+e3sgc3ViSXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmktYXJyb3ctcmlnaHQtcy1saW5lIG1sLWF1dG8gdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMzAwIHRleHQteHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGlsZEV4cGFuZGVkKGdyb3VwLCBpdGVtLCBzdWJJdGVtLCBnSW5kZXgsIGksIGopID8gJ3JvdGF0ZS05MCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdncmlkIHRyYW5zaXRpb24tW2dyaWQtdGVtcGxhdGUtcm93c10gZHVyYXRpb24tMzAwIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NoaWxkRXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIHN1Ykl0ZW0sIGdJbmRleCwgaSwgaikgPyAnZ3JpZC1yb3dzLVsxZnJdIG9wYWNpdHktMTAwJyA6ICdncmlkLXJvd3MtWzBmcl0gb3BhY2l0eS0wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMSBtbC00IGJvcmRlci1sIGJvcmRlci1ib3JkZXIvMzAgcGwtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChncmFuZENoaWxkIG9mIHN1Ykl0ZW0uaXRlbXM7IHRyYWNrIGdyYW5kQ2hpbGQudGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZ3JhbmRDaGlsZC51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImJnLWFjY2VudC81MCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7IGV4YWN0OiB0cnVlIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBob3Zlcjpuby11bmRlcmxpbmUgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LTEuNSBoLTEuNSByb3VuZGVkLWZ1bGwgYmctYm9yZGVyLzcwIHNocmluay0wXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZVwiPnt7IGdyYW5kQ2hpbGQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwic3ViSXRlbS51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYmctYWNjZW50LzUwIHRleHQtYWNjZW50LWZvcmVncm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBob3Zlcjpuby11bmRlcmxpbmUgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy0xLjUgaC0xLjUgcm91bmRlZC1mdWxsIGJnLWJvcmRlciBzaHJpbmstMFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZVwiPnt7IHN1Ykl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS51cmxcIlxuICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYmctcHJpbWFyeS8xMCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICdncm91cCByZWxhdGl2ZSBob3Zlcjpuby11bmRlcmxpbmUgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ2p1c3RpZnktY2VudGVyJyA6ICdqdXN0aWZ5LXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICApXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pY29uIHx8ICdyaS1jaXJjbGUtZmlsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaC00IHctNCB0ZXh0LWxnIHNocmluay0wIHRyYW5zaXRpb24tdHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICFjb2xsYXBzZWQgJiYgJ2dyb3VwLWhvdmVyOnNjYWxlLTExMCdcbiAgICAgICAgICAgICAgICAgICAgICApXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgJ3RydW5jYXRlIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ29wYWNpdHktMCB3LTAgbWwtMCcgOiAnb3BhY2l0eS0xMDAgdy1hdXRvIG1sLTMnXG4gICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci10IHNocmluay0wIHAtMyBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2FzaWRlPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyB9XG4gICAgLmN1c3RvbS1zY3JvbGxiYXIgeyBzY3JvbGxiYXItd2lkdGg6IHRoaW47IHNjcm9sbGJhci1jb2xvcjogcmdiYSgxNTYsIDE2MywgMTc1LCAwLjMpIHRyYW5zcGFyZW50OyB9XG4gICAgLmN1c3RvbS1zY3JvbGxiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDRweDsgfVxuICAgIC5jdXN0b20tc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9XG4gICAgLmN1c3RvbS1zY3JvbGxiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNTYsIDE2MywgMTc1LCAwLjMpOyBib3JkZXItcmFkaXVzOiAyMHB4OyB9XG4gICAgYnV0dG9uOmRpc2FibGVkIHsgY3Vyc29yOiBub3QtYWxsb3dlZDsgb3BhY2l0eTogMC42OyB9XG4gICAgKiB7IHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOyB9XG4gICAgLm1sLTQgeyBtYXJnaW4tbGVmdDogMXJlbTsgfVxuICAgIC5ib3JkZXItbCB7IGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7IH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGl0ZW1zOiBTaWRlYmFyR3JvdXBbXSA9IFtdO1xuICBASW5wdXQoKSBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcblxuICBleHBhbmRlZFBhcmVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZXhwYW5kZWRDaGlsZHJlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbiA9IGNuO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY29sbGFwc2VkJ10gJiYgdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFNUQVRFIElOSVQgLS0tXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuY29sbGFwc2VBbGwoKTtcbiAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcblxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoZ3JvdXAsIGdJbmRleCkgPT4ge1xuICAgICAgZ3JvdXAuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRJZChncm91cCwgaXRlbSwgZ0luZGV4LCBpSW5kZXgpO1xuXG4gICAgICAgIGlmIChpdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgdGhpcy5leHBhbmRlZFBhcmVudHMuYWRkKHBhcmVudElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLml0ZW1zKSB7XG4gICAgICAgICAgaXRlbS5pdGVtcy5mb3JFYWNoKChzdWJJdGVtLCBzSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWJJdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkSWQgPSB0aGlzLmdldENoaWxkSWQoZ3JvdXAsIGl0ZW0sIHN1Ykl0ZW0sIGdJbmRleCwgaUluZGV4LCBzSW5kZXgpO1xuICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGRyZW4uYWRkKGNoaWxkSWQpO1xuICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkUGFyZW50cy5hZGQocGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBJRCBHRU5FUkFUT1JTIChOb3cgdXNpbmcgR3JvdXAgSW5kZXggY29ycmVjdGx5KSAtLS1cbiAgZ2V0R3JvdXBJZChncm91cDogU2lkZWJhckdyb3VwLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ3JvdXAuaWQgfHwgZ3JvdXAudGl0bGUgfHwgYGctJHtpbmRleH1gO1xuICB9XG5cbiAgZ2V0UGFyZW50SWQoZ3JvdXA6IFNpZGViYXJHcm91cCwgaXRlbTogU2lkZWJhckl0ZW0sIGdJbmRleDogbnVtYmVyLCBpSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZ3JvdXBJZCA9IHRoaXMuZ2V0R3JvdXBJZChncm91cCwgZ0luZGV4KTtcbiAgICBjb25zdCBpdGVtSWQgPSBpdGVtLmlkIHx8IGl0ZW0udGl0bGUgfHwgYHAtJHtpSW5kZXh9YDtcbiAgICByZXR1cm4gYCR7Z3JvdXBJZH1fXyR7aXRlbUlkfWA7XG4gIH1cblxuICBnZXRDaGlsZElkKGdyb3VwOiBTaWRlYmFyR3JvdXAsIHBhcmVudDogU2lkZWJhckl0ZW0sIHN1Ykl0ZW06IFNpZGViYXJJdGVtLCBnSW5kZXg6IG51bWJlciwgaUluZGV4OiBudW1iZXIsIHNJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50SWQoZ3JvdXAsIHBhcmVudCwgZ0luZGV4LCBpSW5kZXgpO1xuICAgIGNvbnN0IHN1Ykl0ZW1JZCA9IHN1Ykl0ZW0uaWQgfHwgc3ViSXRlbS50aXRsZSB8fCBgYy0ke3NJbmRleH1gO1xuICAgIHJldHVybiBgJHtwYXJlbnRJZH1fXyR7c3ViSXRlbUlkfWA7XG4gIH1cblxuICAvLyAtLS0gQUNUSU9OUyAtLS1cbiAgdG9nZ2xlUGFyZW50KGdyb3VwOiBTaWRlYmFyR3JvdXAsIGl0ZW06IFNpZGViYXJJdGVtLCBnSW5kZXg6IG51bWJlciwgaUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0UGFyZW50SWQoZ3JvdXAsIGl0ZW0sIGdJbmRleCwgaUluZGV4KTtcblxuICAgIC8vIENyZWF0ZSBuZXcgU2V0IHJlZmVyZW5jZSB0byBlbnN1cmUgQ2hhbmdlIERldGVjdGlvbiB0cmlnZ2Vyc1xuICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQodGhpcy5leHBhbmRlZFBhcmVudHMpO1xuICAgIGlmIChuZXdTZXQuaGFzKGlkKSkge1xuICAgICAgbmV3U2V0LmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1NldC5hZGQoaWQpO1xuICAgIH1cbiAgICB0aGlzLmV4cGFuZGVkUGFyZW50cyA9IG5ld1NldDtcbiAgfVxuXG4gIHRvZ2dsZUNoaWxkKGdyb3VwOiBTaWRlYmFyR3JvdXAsIHBhcmVudDogU2lkZWJhckl0ZW0sIHN1Ykl0ZW06IFNpZGViYXJJdGVtLCBnSW5kZXg6IG51bWJlciwgaUluZGV4OiBudW1iZXIsIHNJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldENoaWxkSWQoZ3JvdXAsIHBhcmVudCwgc3ViSXRlbSwgZ0luZGV4LCBpSW5kZXgsIHNJbmRleCk7XG5cbiAgICAvLyBDcmVhdGUgbmV3IFNldCByZWZlcmVuY2VcbiAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHRoaXMuZXhwYW5kZWRDaGlsZHJlbik7XG4gICAgaWYgKG5ld1NldC5oYXMoaWQpKSB7XG4gICAgICBuZXdTZXQuZGVsZXRlKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U2V0LmFkZChpZCk7XG4gICAgfVxuICAgIHRoaXMuZXhwYW5kZWRDaGlsZHJlbiA9IG5ld1NldDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGFwc2VBbGwoKSB7XG4gICAgdGhpcy5leHBhbmRlZFBhcmVudHMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5leHBhbmRlZENoaWxkcmVuID0gbmV3IFNldCgpO1xuICB9XG5cbiAgLy8gLS0tIFRFTVBMQVRFIEhFTFBFUlMgLS0tXG4gIGlzUGFyZW50RXhwYW5kZWQoZ3JvdXA6IFNpZGViYXJHcm91cCwgaXRlbTogU2lkZWJhckl0ZW0sIGdJbmRleDogbnVtYmVyLCBpSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkUGFyZW50cy5oYXModGhpcy5nZXRQYXJlbnRJZChncm91cCwgaXRlbSwgZ0luZGV4LCBpSW5kZXgpKTtcbiAgfVxuXG4gIGlzQ2hpbGRFeHBhbmRlZChncm91cDogU2lkZWJhckdyb3VwLCBwYXJlbnQ6IFNpZGViYXJJdGVtLCBzdWJJdGVtOiBTaWRlYmFySXRlbSwgZ0luZGV4OiBudW1iZXIsIGlJbmRleDogbnVtYmVyLCBzSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ2hpbGRyZW4uaGFzKHRoaXMuZ2V0Q2hpbGRJZChncm91cCwgcGFyZW50LCBzdWJJdGVtLCBnSW5kZXgsIGlJbmRleCwgc0luZGV4KSk7XG4gIH1cbn1cbiJdfQ==
@@ -56,4 +56,6 @@ export * from './lib/popover.component';
56
56
  export * from './lib/popover-content.component';
57
57
  export * from './lib/radio-group.component';
58
58
  export * from './lib/radio-item.component';
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMsMEJBQTBCLENBQUE7QUFDeEMsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLDZCQUE2QixDQUFBO0FBQzNDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsZ0NBQWdDLENBQUE7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLHVCQUF1QixDQUFBO0FBQ3JDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLDJCQUEyQixDQUFBO0FBQ3pDLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyxtQ0FBbUMsQ0FBQTtBQUNqRCxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsK0JBQStCLENBQUE7QUFDN0MsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHRvbGxlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvY24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3QtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3Qtc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zd2l0Y2guY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JhZGdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9za2VsZXRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hlY2tib3guY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvYXN0LnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2FzdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2xsZS1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbXVsdGktc2VsZWN0LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhbGVuZGFyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hc2tlZC1pbnB1dC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLXBpY2tlci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wYWdpbmF0aW9uLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGEtdGFibGUuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9sbGUtY2VsbC5kaXJlY3RpdmUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hY2NvcmRpb24taXRlbS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hY2NvcmRpb24uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwtcmVmJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLXN0YWNrLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi1ncm91cC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYW5nZS1jYWxlbmRhci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi90aGVtZS5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24taXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tbGFiZWwuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tbWVudS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1zZXBhcmF0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLXRyaWdnZXIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RleHRhcmVhLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXZhdGFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdmF0YXItZmFsbGJhY2suY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWItbGluay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi1zZXBhcmF0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWItaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL290cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3RwLXNsb3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL290cC1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcG9wb3Zlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcG9wb3Zlci1jb250ZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYWRpby1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFkaW8taXRlbS5jb21wb25lbnQnO1xuIl19
59
+ export * from './lib/segment.component';
60
+ export * from './lib/sidebar.component';
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMsMEJBQTBCLENBQUE7QUFDeEMsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLDZCQUE2QixDQUFBO0FBQzNDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsZ0NBQWdDLENBQUE7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLHVCQUF1QixDQUFBO0FBQ3JDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLDJCQUEyQixDQUFBO0FBQ3pDLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyxtQ0FBbUMsQ0FBQTtBQUNqRCxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsK0JBQStCLENBQUE7QUFDN0MsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0b2xsZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2NuJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LXNlcGFyYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3dpdGNoLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYWRnZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2tlbGV0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoZWNrYm94LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b29sdGlwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2FzdC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9hc3Rlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9sbGUtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL211bHRpLXNlbGVjdC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYWxlbmRhci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXNrZWQtaW5wdXQuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1waWNrZXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGFnaW5hdGlvbi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvbGxlLWNlbGwuZGlyZWN0aXZlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWNjb3JkaW9uLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLXJlZidcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC1zdGFjay5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24tZ3JvdXAuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFuZ2UtY2FsZW5kYXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGhlbWUuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLWxhYmVsLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi10cmlnZ2VyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0YXJlYS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxlcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXZhdGFyLWZhbGxiYWNrLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iLWxpbmsuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWItc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vdHAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL290cC1zbG90LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vdHAtZ3JvdXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BvcG92ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BvcG92ZXItY29udGVudC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFkaW8tZ3JvdXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhZGlvLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlZ21lbnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NpZGViYXIuY29tcG9uZW50JztcbiJdfQ==