cloud-ide-layout 1.0.8 → 1.0.10

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 (83) hide show
  1. package/README.md +34 -448
  2. package/fesm2022/{cloud-ide-layout-cloud-ide-layout-D3xzVSNA.mjs → cloud-ide-layout-cloud-ide-layout-DLceZY3Y.mjs} +335 -343
  3. package/fesm2022/{cloud-ide-layout-cloud-ide-layout-D3xzVSNA.mjs.map → cloud-ide-layout-cloud-ide-layout-DLceZY3Y.mjs.map} +1 -1
  4. package/fesm2022/{cloud-ide-layout-drawer-theme.component-BSUFE_o2.mjs → cloud-ide-layout-drawer-theme.component-Bn5--C_Q.mjs} +69 -67
  5. package/fesm2022/{cloud-ide-layout-drawer-theme.component-BSUFE_o2.mjs.map → cloud-ide-layout-drawer-theme.component-Bn5--C_Q.mjs.map} +1 -1
  6. package/fesm2022/{cloud-ide-layout-home-wrapper.component-Dr4MO4MB.mjs → cloud-ide-layout-home-wrapper.component-Bo-4LNLx.mjs} +56 -51
  7. package/fesm2022/{cloud-ide-layout-home-wrapper.component-Dr4MO4MB.mjs.map → cloud-ide-layout-home-wrapper.component-Bo-4LNLx.mjs.map} +1 -1
  8. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-BWx03JYS.mjs → cloud-ide-layout-sidedrawer-notes.component-BmadMzdl.mjs} +28 -32
  9. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-BWx03JYS.mjs.map → cloud-ide-layout-sidedrawer-notes.component-BmadMzdl.mjs.map} +1 -1
  10. package/fesm2022/cloud-ide-layout.mjs +1 -1
  11. package/index.d.ts +579 -3
  12. package/package.json +4 -6
  13. package/esm2022/cloud-ide-layout.mjs +0 -5
  14. package/esm2022/lib/cloud-ide-layout.component.mjs +0 -16
  15. package/esm2022/lib/cloud-ide-layout.routes.mjs +0 -28
  16. package/esm2022/lib/cloud-ide-layout.service.mjs +0 -14
  17. package/esm2022/lib/layout/console/console-wrapper/console-wrapper.component.mjs +0 -11
  18. package/esm2022/lib/layout/console/console.service.mjs +0 -28
  19. package/esm2022/lib/layout/footer/footer-wrapper/footer-wrapper.component.mjs +0 -20
  20. package/esm2022/lib/layout/footer/footer.service.mjs +0 -28
  21. package/esm2022/lib/layout/header/header-wrapper/header-wrapper.component.mjs +0 -84
  22. package/esm2022/lib/layout/header/header.service.mjs +0 -28
  23. package/esm2022/lib/layout/home/home-wrapper/home-wrapper.component.mjs +0 -198
  24. package/esm2022/lib/layout/layout/layout-wrapper/layout-wrapper.component.mjs +0 -28
  25. package/esm2022/lib/layout/request/request-wrapper/request-wrapper.component.mjs +0 -60
  26. package/esm2022/lib/layout/request/request.service.mjs +0 -235
  27. package/esm2022/lib/layout/request/tab-content/tab-content.component.mjs +0 -84
  28. package/esm2022/lib/layout/shared/shared-wrapper/shared-wrapper.component.mjs +0 -49
  29. package/esm2022/lib/layout/shared/shared.service.mjs +0 -508
  30. package/esm2022/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.mjs +0 -488
  31. package/esm2022/lib/layout/sidebar/sidebar.service.mjs +0 -35
  32. package/esm2022/lib/layout/sidedrawer/cide-lyt-drawer-base.class.mjs +0 -40
  33. package/esm2022/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.mjs +0 -296
  34. package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.mjs +0 -175
  35. package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.mjs +0 -51
  36. package/esm2022/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.mjs +0 -257
  37. package/esm2022/lib/layout/sidedrawer/sidedrawer.service.mjs +0 -70
  38. package/esm2022/lib/services/app-state/app-state-helper.service.mjs +0 -222
  39. package/esm2022/lib/services/app-state/app-state.service.mjs +0 -256
  40. package/esm2022/lib/services/app-state/index.mjs +0 -3
  41. package/esm2022/lib/services/cache-manager/cache-manager.service.mjs +0 -112
  42. package/esm2022/lib/services/file-manager/file-manager.service.mjs +0 -21
  43. package/esm2022/lib/services/tab-state.service.mjs +0 -128
  44. package/esm2022/lib/services/theme/theme.service.mjs +0 -151
  45. package/esm2022/lib/services/user-status/user-status.service.mjs +0 -135
  46. package/esm2022/lib/utils/custom-route-reuse-strategy.mjs +0 -61
  47. package/esm2022/lib/utils/index.mjs +0 -2
  48. package/esm2022/public-api.mjs +0 -18
  49. package/lib/cloud-ide-layout.component.d.ts +0 -5
  50. package/lib/cloud-ide-layout.routes.d.ts +0 -3
  51. package/lib/cloud-ide-layout.service.d.ts +0 -6
  52. package/lib/layout/console/console-wrapper/console-wrapper.component.d.ts +0 -5
  53. package/lib/layout/console/console.service.d.ts +0 -9
  54. package/lib/layout/footer/footer-wrapper/footer-wrapper.component.d.ts +0 -9
  55. package/lib/layout/footer/footer.service.d.ts +0 -9
  56. package/lib/layout/header/header-wrapper/header-wrapper.component.d.ts +0 -25
  57. package/lib/layout/header/header.service.d.ts +0 -9
  58. package/lib/layout/home/home-wrapper/home-wrapper.component.d.ts +0 -94
  59. package/lib/layout/layout/layout-wrapper/layout-wrapper.component.d.ts +0 -5
  60. package/lib/layout/request/request-wrapper/request-wrapper.component.d.ts +0 -14
  61. package/lib/layout/request/request.service.d.ts +0 -60
  62. package/lib/layout/request/tab-content/tab-content.component.d.ts +0 -19
  63. package/lib/layout/shared/shared-wrapper/shared-wrapper.component.d.ts +0 -17
  64. package/lib/layout/shared/shared.service.d.ts +0 -114
  65. package/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.d.ts +0 -140
  66. package/lib/layout/sidebar/sidebar.service.d.ts +0 -12
  67. package/lib/layout/sidedrawer/cide-lyt-drawer-base.class.d.ts +0 -16
  68. package/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.d.ts +0 -71
  69. package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.d.ts +0 -48
  70. package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.d.ts +0 -13
  71. package/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.d.ts +0 -30
  72. package/lib/layout/sidedrawer/sidedrawer.service.d.ts +0 -30
  73. package/lib/services/app-state/app-state-helper.service.d.ts +0 -150
  74. package/lib/services/app-state/app-state.service.d.ts +0 -85
  75. package/lib/services/app-state/index.d.ts +0 -3
  76. package/lib/services/cache-manager/cache-manager.service.d.ts +0 -64
  77. package/lib/services/file-manager/file-manager.service.d.ts +0 -9
  78. package/lib/services/tab-state.service.d.ts +0 -79
  79. package/lib/services/theme/theme.service.d.ts +0 -71
  80. package/lib/services/user-status/user-status.service.d.ts +0 -57
  81. package/lib/utils/custom-route-reuse-strategy.d.ts +0 -15
  82. package/lib/utils/index.d.ts +0 -1
  83. package/public-api.d.ts +0 -12
@@ -1,488 +0,0 @@
1
- import { Component, ElementRef, HostListener, inject, effect } from '@angular/core';
2
- import { trigger, state, style, transition, animate } from '@angular/animations';
3
- import { CommonModule } from '@angular/common';
4
- import { Router } from '@angular/router';
5
- import { CideLytSidebarService } from '../sidebar.service';
6
- import { CideEleResizerDirective, CideIconComponent, CideInputComponent, TooltipDirective, CideSpinnerComponent } from 'cloud-ide-element';
7
- import { AppStateHelperService } from '../../../services/app-state';
8
- import { CideLytUserStatusService } from '../../../services/user-status/user-status.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/common";
11
- export class CideLytSidebarWrapperComponent {
12
- // Add this getter to retrieve the menu tree for the selected module
13
- get selectedModuleMenus() {
14
- return this.core_system_menu || [];
15
- }
16
- /**
17
- * Gets the CSS classes for the user status indicator
18
- * Uses the injected user status service
19
- */
20
- getUserStatusClass() {
21
- return this.userStatusService.statusColor();
22
- }
23
- /**
24
- * Gets the tooltip text for the user status
25
- * Uses the injected user status service
26
- */
27
- getUserStatusText() {
28
- return this.userStatusService.statusText();
29
- }
30
- /**
31
- * Sets the user status (delegates to service)
32
- * @param status The new status to set
33
- * @param message Optional custom status message
34
- */
35
- setUserStatus(status, message) {
36
- this.userStatusService.setStatus(status, message);
37
- }
38
- /**
39
- * Gets the current user status data
40
- */
41
- get currentUserStatus() {
42
- return this.userStatusService.userStatus();
43
- }
44
- /**
45
- * Gets the icon for the currently active module
46
- * @returns The icon name for the active module or a default icon
47
- */
48
- getActiveModuleIcon() {
49
- if (this.core_system_module && this.core_system_module.length > 0 && this.activeModuleId) {
50
- const activeModule = this.core_system_module.find(m => m._id === this.activeModuleId);
51
- return activeModule?.syme_icon || 'dashboard';
52
- }
53
- return 'dashboard';
54
- }
55
- // Add a click handler for menu navigation
56
- onMenuClick(menu) {
57
- if (menu.syme_path) {
58
- // Check if this is an entity-related menu
59
- // Navigate to entity list component
60
- this.router.navigate([`/control-panel/${menu.syme_path}`]);
61
- // window.location.hash = menu.syme_path;
62
- }
63
- }
64
- /**
65
- * Toggle section expand/collapse state
66
- */
67
- toggleSection(sectionId) {
68
- this.expandedSections[sectionId] = !this.expandedSections[sectionId];
69
- console.log('📂 SIDEBAR: Section', sectionId, 'expanded:', this.expandedSections[sectionId]);
70
- }
71
- /**
72
- * Check if section is expanded
73
- */
74
- isSectionExpanded(sectionId) {
75
- return this.expandedSections[sectionId] ?? true; // Default to expanded
76
- }
77
- constructor() {
78
- this.sidebarSetupData = {
79
- cide_lyt_sidebar_width: 0
80
- };
81
- this.isCollapsed = false;
82
- this.darkMode = false;
83
- this.showUserMenu = false;
84
- this.showOptions = false;
85
- this.showNotifications = false;
86
- this.showNotificationsPanel = false;
87
- this.searchText = '';
88
- this.isExpanded = true;
89
- this.searchResults = [];
90
- // Collapsed section states tracking
91
- this.collapsedSections = {
92
- 'company': false,
93
- 'account': false,
94
- 'advanced': false,
95
- 'recent': false
96
- };
97
- // Track expanded state for menu sections
98
- this.expandedSections = {};
99
- // For scroll-based animation
100
- this.animateSections = [false, false, false, false, false];
101
- this.lastScrollTop = 0;
102
- this.scrolledPast = [false, false, false, false, false];
103
- this.core_system_menu = [];
104
- this.core_system_module = [];
105
- // Track active state for enhanced visual effects
106
- this.activeModuleId = '';
107
- this.hoverModuleId = '';
108
- this.animateItems = false;
109
- this.moduleLoadComplete = false;
110
- this.menuLoadComplete = false;
111
- this.loadingMenus = false;
112
- this.sidebarService = inject(CideLytSidebarService);
113
- this.elementRef = inject(ElementRef);
114
- this.appState = inject(AppStateHelperService);
115
- this.router = inject(Router);
116
- this.userStatusService = inject(CideLytUserStatusService);
117
- // React to active module changes using signal effects
118
- effect(() => {
119
- const activeModule = this.appState.activeModule();
120
- if (activeModule) {
121
- console.log('🔄 SIDEBAR: Active module signal changed:', activeModule.syme_title);
122
- // Update local state when active module changes
123
- this.activeModuleId = activeModule._id;
124
- // Always try to load menus when active module changes
125
- this.loadMenusForModule(activeModule);
126
- }
127
- });
128
- }
129
- ngOnInit() {
130
- // Modern ES2022+ pattern: Use Promise-based delays instead of nested setTimeout
131
- const initializeAnimations = async () => {
132
- await new Promise(resolve => setTimeout(resolve, 100));
133
- this.animateItems = true;
134
- await new Promise(resolve => setTimeout(resolve, 200));
135
- this.animateSections = [true, true, true, true, true];
136
- };
137
- initializeAnimations();
138
- // Get sidebar menu data with loading state tracking
139
- this.sidebarService?.getSidebarMenues({ syme_type: "module", sort: 'asc', syme_title: "" })?.subscribe({
140
- next: (res) => {
141
- this.core_system_module = res?.data || [];
142
- // Handle module initialization and active module setup
143
- if (this.core_system_module.length > 0) {
144
- const activeModule = this.appState.activeModule();
145
- console.log('🔍 SIDEBAR: Modules loaded. Current active module:', activeModule?.syme_title || 'none');
146
- console.log('📊 SIDEBAR: Available modules:', this.core_system_module.map(m => m.syme_title).join(', '));
147
- if (activeModule) {
148
- // Active module exists, verify it's in the loaded modules
149
- const foundModule = this.core_system_module.find(m => m._id === activeModule._id);
150
- if (foundModule) {
151
- console.log('✅ SIDEBAR: Active module found in loaded modules:', foundModule.syme_title);
152
- // The effect should have already triggered, but ensure menus are loaded
153
- if (this.core_system_menu.length === 0) {
154
- console.log('🔄 SIDEBAR: No menus loaded yet, triggering load for active module');
155
- this.loadMenusForModule(activeModule);
156
- }
157
- }
158
- else {
159
- console.log('⚠️ SIDEBAR: Active module not found in loaded modules, setting first as active');
160
- this.setActiveMenuByIndex(0);
161
- }
162
- }
163
- else {
164
- console.log('📌 SIDEBAR: No active module, setting first module as active');
165
- this.setActiveMenuByIndex(0);
166
- }
167
- }
168
- // Modern ES2022+ pattern: Use Promise-based delay
169
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
170
- delay(300).then(() => {
171
- this.moduleLoadComplete = true;
172
- });
173
- },
174
- error: (err) => {
175
- console.error('Error loading sidebar modules:', err);
176
- this.moduleLoadComplete = true; // Set to true even on error to ensure UI is responsive
177
- }
178
- });
179
- // collecte the width of the sidebar by using the style property
180
- const cide_lyt_stack_wrapper_width = parseInt(window.getComputedStyle(document.documentElement).getPropertyValue('--cide-lyt-stack-wrapper-width'));
181
- const cide_lyt_sidebar_menu_width = parseInt(window.getComputedStyle(document.documentElement).getPropertyValue('--cide-lyt-sidebar-menu-width'));
182
- this.sidebarSetupData.cide_lyt_sidebar_width = (cide_lyt_stack_wrapper_width + cide_lyt_sidebar_menu_width);
183
- }
184
- /**
185
- * Load menus for a specific module
186
- * @param module The module to load menus for
187
- */
188
- loadMenusForModule(module) {
189
- if (!module?._id) {
190
- console.warn('🚫 SIDEBAR: Cannot load menus - no module ID provided');
191
- return;
192
- }
193
- console.log('📂 SIDEBAR: Loading menus for module:', module.syme_title, 'ID:', module._id);
194
- this.loadingMenus = true;
195
- this.menuLoadComplete = false;
196
- // Fetch menus for the selected module
197
- this.sidebarService?.getSidebarMenues({
198
- syme_id: module._id,
199
- sort: 'asc'
200
- })?.subscribe({
201
- next: (res) => {
202
- const menus = res?.data || [];
203
- this.core_system_menu = menus;
204
- this.loadingMenus = false;
205
- console.log('✅ SIDEBAR: Loaded', menus, 'menus for module:', module.syme_title);
206
- console.log('📋 SIDEBAR: Menu titles:', menus.map(m => m.syme_title).join(', '));
207
- // Modern ES2022+ pattern: Use Promise-based delay
208
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
209
- delay(200).then(() => {
210
- this.menuLoadComplete = true;
211
- console.log('🎯 SIDEBAR: Menu loading complete for:', module.syme_title);
212
- });
213
- },
214
- error: (err) => {
215
- console.error('❌ SIDEBAR: Error loading menus for module:', module.syme_title, err);
216
- this.core_system_menu = [];
217
- this.loadingMenus = false;
218
- this.menuLoadComplete = true;
219
- }
220
- });
221
- }
222
- toggleSidebar() {
223
- this.isCollapsed = !this.isCollapsed;
224
- // Add animation class
225
- const sidebarElement = this.elementRef.nativeElement.querySelector('.cide-lyt-sidebar');
226
- sidebarElement.classList.add('animating');
227
- // Remove animation class after animation completes
228
- // Modern ES2022+ pattern: Use Promise-based delay
229
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
230
- delay(300).then(() => {
231
- sidebarElement.classList.remove('animating');
232
- });
233
- // this.sidebarService.toggleSidebar();
234
- }
235
- toggleUserMenu() {
236
- this.showUserMenu = !this.showUserMenu;
237
- // Close other menus if open
238
- if (this.showUserMenu) {
239
- this.showOptions = false;
240
- this.showNotifications = false;
241
- }
242
- // Add subtle animation when opening menu
243
- if (this.showUserMenu) {
244
- this.animateMenuOpen('user-menu');
245
- }
246
- }
247
- /**
248
- * Sets the active menu item with animation
249
- * @param moduleId The ID of the module to set as active
250
- */
251
- setActiveMenu(moduleId) {
252
- if (this.activeModuleId === moduleId)
253
- return;
254
- // Set the active module in app state - the effect will handle local state updates
255
- const selectedModule = this.core_system_module.find(m => m._id === moduleId);
256
- if (selectedModule) {
257
- this.appState.setActiveModule(selectedModule);
258
- // The effect will automatically update this.activeModuleId and load menus
259
- }
260
- // You could trigger custom animations here
261
- }
262
- /**
263
- * Sets the active menu item by index with animation
264
- * @param index The index of the menu item
265
- */
266
- setActiveMenuByIndex(index) {
267
- const selectedModule = this.core_system_module[index];
268
- if (selectedModule) {
269
- this.appState.setActiveModule(selectedModule);
270
- // The effect will automatically update this.activeModuleId and load menus
271
- }
272
- }
273
- /**
274
- * Public method to set active module by ID from external components
275
- * This is useful when you want to programmatically set the active module
276
- * @param moduleId The ID of the module to set as active
277
- * @returns boolean indicating if the module was found and set as active
278
- */
279
- setActiveModuleById(moduleId) {
280
- const module = this.core_system_module.find(m => m._id === moduleId);
281
- if (module) {
282
- this.setActiveMenu(moduleId);
283
- return true;
284
- }
285
- console.warn(`Module with ID "${moduleId}" not found in sidebar modules`);
286
- return false;
287
- }
288
- /**
289
- * Public method to get the currently active module ID
290
- * @returns The ID of the currently active module, or empty string if none
291
- */
292
- getActiveModuleId() {
293
- return this.activeModuleId;
294
- }
295
- /**
296
- * Tracks hover state for enhanced visual feedback
297
- * @param moduleId The ID of the hovered module, or empty string for none
298
- */
299
- onItemHover(moduleId) {
300
- this.hoverModuleId = moduleId;
301
- }
302
- /**
303
- * Adds subtle animations when opening dropdown menus
304
- * @param menuId The ID of the menu element
305
- */
306
- animateMenuOpen(menuId) {
307
- const menuElement = this.elementRef.nativeElement.querySelector(`.${menuId}`);
308
- if (!menuElement)
309
- return;
310
- // First set initial state
311
- menuElement.style.opacity = '0';
312
- menuElement.style.transform = 'translateY(-8px) scale(0.95)';
313
- // Then animate to final state
314
- setTimeout(() => {
315
- menuElement.style.transition = 'opacity 0.2s ease, transform 0.2s ease';
316
- menuElement.style.opacity = '1';
317
- menuElement.style.transform = 'translateY(0) scale(1)';
318
- }, 10);
319
- }
320
- /**
321
- * Updates tooltip position for more accurate placement
322
- * @param event MouseEvent from hovering
323
- * @param tooltip The tooltip element
324
- */
325
- updateTooltipPosition(event, tooltipIndex) {
326
- const tooltip = this.elementRef.nativeElement.querySelectorAll('.nav-tooltip')[tooltipIndex];
327
- if (!tooltip)
328
- return;
329
- // Get the vertical position of the cursor
330
- const cursorY = event.clientY;
331
- // Set the tooltip position to match the cursor Y position
332
- tooltip.style.top = `${cursorY}px`;
333
- // Add a slight animation
334
- tooltip.style.transition = 'opacity 0.2s ease, transform 0.2s ease';
335
- tooltip.style.transform = 'translateY(-50%)';
336
- }
337
- toggleNotificationsPanel() {
338
- this.showNotificationsPanel = !this.showNotificationsPanel;
339
- this.showNotifications = this.showNotificationsPanel;
340
- // Close other menus if open
341
- if (this.showNotificationsPanel) {
342
- this.showUserMenu = false;
343
- this.showOptions = false;
344
- }
345
- // Add animation when opening panel
346
- if (this.showNotificationsPanel) {
347
- this.animateMenuOpen('notifications-panel');
348
- }
349
- }
350
- toggleTheme() {
351
- this.darkMode = !this.darkMode;
352
- // Add dark mode class to sidebar element
353
- const sidebarElement = this.elementRef.nativeElement.querySelector('.cide-lyt-sidebar');
354
- if (this.darkMode) {
355
- sidebarElement.classList.add('dark-mode');
356
- }
357
- else {
358
- sidebarElement.classList.remove('dark-mode');
359
- }
360
- }
361
- toggleOptions() {
362
- this.showOptions = !this.showOptions;
363
- // Close other menus if open
364
- if (this.showOptions) {
365
- this.showUserMenu = false;
366
- this.showNotifications = false;
367
- }
368
- // Add subtle animation when opening menu
369
- if (this.showOptions) {
370
- this.animateMenuOpen('options-menu');
371
- }
372
- }
373
- /**
374
- * Toggle old-style collapsed sections (for backwards compatibility)
375
- */
376
- toggleCollapsedSection(section) {
377
- this.collapsedSections[section] = !this.collapsedSections[section];
378
- }
379
- isSectionCollapsed(section) {
380
- return this.collapsedSections[section];
381
- }
382
- onSearch() {
383
- // Reset animation trigger when searching
384
- this.resetAnimations();
385
- // Mock search functionality - would be integrated with actual search service
386
- if (this.searchText.trim() === '') {
387
- this.searchResults = [];
388
- return;
389
- }
390
- // Example search results - would come from actual data source
391
- const allItems = [
392
- { icon: 'settings', title: 'General Settings' },
393
- { icon: 'payments', title: 'Billing & Payments' },
394
- { icon: 'shield', title: 'Security Settings' },
395
- { icon: 'person', title: 'Profile Settings' },
396
- { icon: 'notifications', title: 'Notification Preferences' },
397
- { icon: 'integration_instructions', title: 'API Integrations' },
398
- { icon: 'key', title: 'API Keys' },
399
- { icon: 'groups', title: 'Team Members' },
400
- { icon: 'devices', title: 'Connected Devices' },
401
- { icon: 'language', title: 'Language Settings' },
402
- ];
403
- // Simple text search on title
404
- this.searchResults = allItems.filter(item => item.title.toLowerCase().includes(this.searchText.toLowerCase()));
405
- }
406
- onScroll(event) {
407
- const scrollTop = event.target.scrollTop;
408
- const sections = this.elementRef.nativeElement.querySelectorAll('.sidebar-section');
409
- // Reset animations if scrolling back to top
410
- if (scrollTop < 10) {
411
- this.resetAnimations();
412
- return;
413
- }
414
- // Animate sections as they come into view
415
- sections.forEach((section, index) => {
416
- if (index >= this.animateSections.length)
417
- return;
418
- const sectionTop = section.offsetTop;
419
- const scrollPosition = scrollTop + 300; // Offset to trigger animation before fully visible
420
- // When scrolling down and section comes into view
421
- if (scrollPosition > sectionTop && !this.scrolledPast[index] && scrollTop > this.lastScrollTop) {
422
- this.animateSections[index] = true;
423
- this.scrolledPast[index] = true;
424
- }
425
- // When scrolling up to top, reset animation
426
- if (scrollTop < 50 && this.lastScrollTop > scrollTop) {
427
- this.resetAnimations();
428
- }
429
- });
430
- this.lastScrollTop = scrollTop;
431
- }
432
- resetAnimations() {
433
- this.animateSections = [false, false, false, false, false];
434
- this.scrolledPast = [false, false, false, false, false];
435
- // Re-trigger animations
436
- setTimeout(() => {
437
- this.animateSections = [true, true, true, true, true];
438
- }, 50);
439
- }
440
- onDocumentClick(event) {
441
- // Close dropdown menus when clicking outside
442
- const clickedInside = this.elementRef.nativeElement.contains(event.target);
443
- if (!clickedInside) {
444
- this.showUserMenu = false;
445
- this.showOptions = false;
446
- }
447
- }
448
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSidebarWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
449
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: CideLytSidebarWrapperComponent, isStandalone: true, selector: "cide-lyt-sidebar-wrapper", host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<nav class=\"cide-lyt-sidebar tw-flex tw-h-full tw-select-none\" [class.collapsed]=\"isCollapsed\">\n <!-- First tier sidebar (Icon only) -->\n <div class=\"cide-lyt-stack tw-h-full tw-flex tw-flex-col tw-items-center tw-border-r tw-border-gray-100\">\n <!-- Scrollable content -->\n <div class=\"sidebar-scroll-content\">\n <!-- Collapse/Expand toggle -->\n <div class=\"nav-item collapse-toggle\" tabindex=\"0\" (click)=\"toggleSidebar()\"\n (keydown.enter)=\"toggleSidebar()\">\n <div class=\"nav-tooltip\">{{isCollapsed ? 'Expand' : 'Collapse'}} Sidebar</div>\n <cide-ele-icon size=\"xs\" type=\"box\" class=\"tw-text-gray-500 hover:tw-text-gray-700\">\n {{isCollapsed ? 'chevron_right' : 'chevron_left'}}\n </cide-ele-icon>\n </div> <!-- Main navigation icons - Enhanced Design -->\n <div class=\"tw-flex tw-flex-col tw-gap-4\">\n @for (core_system_module_item of core_system_module; track $index) {\n <div class=\"nav-item tw-relative tw-group\" (click)=\"setActiveMenu(core_system_module_item._id)\"\n [cideEleTooltip]=\"core_system_module_item.syme_title\" [tooltipShowArrow]=\"true\"\n tooltipPlacement=\"right\"\n [ngClass]=\"{'nav-item-active': activeModuleId === core_system_module_item._id}\"\n (mouseenter)=\"onItemHover(core_system_module_item._id)\" (mouseleave)=\"onItemHover('')\"\n [tabindex]=\"$index\" (keydown.enter)=\"setActiveMenu(core_system_module_item._id)\">\n\n <!-- Notification Badge with enhanced design -->\n @if (core_system_module_item?.syme_ping) {\n <div class=\"nav-badge tw-absolute -tw-top-1 -tw-right-1 tw-w-1.5 tw-h-1.5 tw-rounded-full tw-animate-ping\"\n style=\"background-color: var(--cide-theme-error-color);\">\n </div>\n }\n\n <!-- Enhanced icon with better visual effects -->\n <div\n class=\"tw-p-2 tw-rounded-xl tw-transition-all tw-duration-200 tw-ease-in-out\n group-hover:tw-bg-blue-50 group-hover:tw-shadow-md group-hover:tw-scale-105\n tw-border-2 tw-border-transparent\n {{activeModuleId === core_system_module_item._id ? 'tw-bg-blue-100 tw-border-blue-200 tw-shadow-sm' : 'tw-bg-gray-50'}}\">\n <cide-ele-icon type=\"box\" size=\"xs\"\n class=\"tw-transition-all tw-duration-200 tw-ease-in-out\n {{activeModuleId === core_system_module_item._id ? 'tw-text-blue-600' : 'tw-text-gray-600 group-hover:tw-text-blue-500'}}\">\n {{core_system_module_item?.syme_icon || 'dashboard'}}\n </cide-ele-icon>\n </div>\n\n <!-- Modern active indicator -->\n @if (activeModuleId === core_system_module_item._id) {\n <div\n class=\"nav-indicator tw-absolute tw-left-0 tw-top-1/2 tw-transform -tw-translate-y-1/2 tw-w-1 tw-h-8 tw-bg-blue-500 tw-rounded-r-full tw-shadow-lg tw-transition-all tw-duration-300\">\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Bottom section with enhanced theme toggle and user avatar -->\n <div class=\"tw-flex tw-flex-col tw-items-center tw-gap-3 tw-mt-auto tw-pb-4\">\n <!-- Theme toggle with modern design -->\n <div class=\"nav-item tw-group\">\n <div class=\"nav-tooltip\">Toggle Theme</div>\n <button class=\"theme-toggle\" (click)=\"toggleTheme()\" (keydown.enter)=\"toggleTheme()\"\n (keydown.space)=\"toggleTheme()\" tabindex=\"0\" role=\"button\" aria-label=\"Toggle theme\">\n <cide-ele-icon type=\"box\" size=\"sm\">\n {{darkMode ? 'light_mode' : 'dark_mode'}}\n </cide-ele-icon>\n </button>\n </div>\n\n <!-- User avatar with dropdown -->\n <div class=\"tw-relative user-dropdown\" \n (click)=\"toggleUserMenu()\"\n (keydown.enter)=\"toggleUserMenu()\"\n (keydown.space)=\"toggleUserMenu()\"\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"Toggle user menu\"\n [attr.aria-expanded]=\"showUserMenu\">\n <div class=\"nav-tooltip\">Your Profile</div>\n <div class=\"user-avatar tw-w-10 tw-h-10 tw-rounded-full tw-overflow-hidden tw-bg-gray-200 tw-border-2 tw-shadow-sm tw-cursor-pointer hover:tw-shadow\"\n style=\"border-color: var(--cide-theme-sidebar-color);\">\n <img src=\"data:image/png;base64,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\"\n alt=\"User\" class=\"tw-w-full tw-h-full tw-object-cover\"\n onerror=\"this.src='data:image/png;base64,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'\">\n <!-- Modern Status Indicator Circle -->\n <div class=\"tw-absolute -tw-bottom-0.5 -tw-right-0.5 tw-w-3.5 tw-h-3.5 tw-rounded-full tw-border-2 tw-border-white tw-shadow-sm tw-transition-all tw-duration-200\n {{getUserStatusClass()}}\" [cideEleTooltip]=\"getUserStatusText()\"\n tooltipPlacement=\"left\">\n <!-- Pulse animation for active status -->\n <div class=\"tw-absolute tw-inset-0 tw-rounded-full tw-animate-pulse tw-opacity-50\n {{getUserStatusClass()}}\"></div>\n </div>\n </div>\n\n <!-- Enhanced User dropdown menu with modern status options -->\n <div *ngIf=\"showUserMenu\"\n class=\"user-menu tw-absolute tw-left-full tw-bottom-0 tw-mt-2 tw-ml-2 tw-w-72 tw-rounded-xl tw-shadow-2xl tw-bg-white tw-ring-1 tw-ring-black/5 tw-divide-y tw-divide-gray-100 tw-z-50 tw-backdrop-blur-sm\">\n\n <!-- Enhanced User Info Section -->\n <div class=\"tw-p-5 tw-bg-gradient-to-br tw-from-blue-50 tw-to-indigo-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-relative\">\n <div\n class=\"tw-w-12 tw-h-12 tw-rounded-xl tw-bg-gradient-to-br tw-from-blue-500 tw-via-purple-500 tw-to-indigo-600 tw-flex tw-items-center tw-justify-center tw-text-white tw-font-semibold tw-text-lg tw-shadow-lg\">\n JD\n </div>\n <!-- Enhanced status indicator -->\n <div class=\"tw-absolute -tw-bottom-1 -tw-right-1 tw-w-4 tw-h-4 tw-rounded-full tw-border-2 tw-border-white tw-shadow-md tw-transition-all tw-duration-300\"\n [class]=\"getUserStatusClass()\" [title]=\"getUserStatusText()\">\n <div class=\"tw-absolute tw-inset-0 tw-rounded-full tw-animate-pulse tw-opacity-50\"\n [class]=\"getUserStatusClass()\"></div>\n </div>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <div class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-truncate\">John Doe</div>\n <div class=\"tw-text-sm tw-text-gray-600 tw-truncate\">john.doe&#64;company.com</div>\n <div class=\"tw-text-xs tw-text-gray-500 tw-mt-1 tw-flex tw-items-center tw-gap-1\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full tw-bg-green-500 tw-animate-pulse\">\n </div>\n <span>Active now</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Enhanced Status Selection Section -->\n <div class=\"tw-p-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <h4 class=\"tw-text-sm tw-font-semibold tw-text-gray-800 tw-flex tw-items-center tw-gap-2\">\n <div\n class=\"tw-w-5 tw-h-5 tw-rounded-md tw-bg-blue-100 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon type=\"none\" size=\"2xs\"\n class=\"tw-text-blue-600\">radio_button_checked</cide-ele-icon>\n </div>\n Set Status\n </h4>\n <span\n class=\"tw-text-xs tw-text-gray-500 tw-bg-gray-100 tw-px-2 tw-py-1 tw-rounded-full\">Auto-away\n in 5min</span>\n </div>\n\n <div class=\"tw-space-y-1\">\n <button (click)=\"setUserStatus('online')\"\n class=\"status-option tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-text-sm tw-rounded-lg tw-transition-all tw-duration-200 hover:tw-bg-green-50 tw-group\"\n [class.tw-bg-green-50]=\"userStatusService.userStatus().status === 'online'\"\n [class.tw-ring-2]=\"userStatusService.userStatus().status === 'online'\"\n [class.tw-ring-green-200]=\"userStatusService.userStatus().status === 'online'\">\n <div class=\"tw-relative\">\n <div\n class=\"tw-w-3 tw-h-3 tw-rounded-full tw-bg-green-500 tw-shadow-sm group-hover:tw-scale-110 tw-transition-transform\">\n <div class=\"tw-absolute tw-inset-0 tw-rounded-full tw-bg-green-500 tw-animate-ping tw-opacity-75\"\n *ngIf=\"userStatusService.userStatus().status === 'online'\"></div>\n </div>\n </div>\n <span class=\"tw-text-gray-700 tw-font-medium tw-flex-1\">Online</span>\n <cide-ele-icon *ngIf=\"userStatusService.userStatus().status === 'online'\" type=\"none\"\n size=\"xs\" class=\"tw-text-green-600\">check</cide-ele-icon>\n </button>\n\n <button (click)=\"setUserStatus('away')\"\n class=\"status-option tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-text-sm tw-rounded-lg tw-transition-all tw-duration-200 hover:tw-bg-yellow-50 tw-group\"\n [class.tw-bg-yellow-50]=\"userStatusService.userStatus().status === 'away'\"\n [class.tw-ring-2]=\"userStatusService.userStatus().status === 'away'\"\n [class.tw-ring-yellow-200]=\"userStatusService.userStatus().status === 'away'\">\n <div\n class=\"tw-w-3 tw-h-3 tw-rounded-full tw-bg-yellow-500 tw-shadow-sm group-hover:tw-scale-110 tw-transition-transform\">\n </div>\n <span class=\"tw-text-gray-700 tw-font-medium tw-flex-1\">Away</span>\n <cide-ele-icon *ngIf=\"userStatusService.userStatus().status === 'away'\" type=\"none\"\n size=\"xs\" class=\"tw-text-yellow-600\">check</cide-ele-icon>\n </button>\n\n <button (click)=\"setUserStatus('busy')\"\n class=\"status-option tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-text-sm tw-rounded-lg tw-transition-all tw-duration-200 hover:tw-bg-orange-50 tw-group\"\n [class.tw-bg-orange-50]=\"userStatusService.userStatus().status === 'busy'\"\n [class.tw-ring-2]=\"userStatusService.userStatus().status === 'busy'\"\n [class.tw-ring-orange-200]=\"userStatusService.userStatus().status === 'busy'\">\n <div\n class=\"tw-w-3 tw-h-3 tw-rounded-full tw-bg-orange-500 tw-shadow-sm group-hover:tw-scale-110 tw-transition-transform\">\n </div>\n <span class=\"tw-text-gray-700 tw-font-medium tw-flex-1\">Busy</span>\n <cide-ele-icon *ngIf=\"userStatusService.userStatus().status === 'busy'\" type=\"none\"\n size=\"xs\" class=\"tw-text-orange-600\">check</cide-ele-icon>\n </button>\n\n <button (click)=\"setUserStatus('do-not-disturb')\"\n class=\"status-option tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-text-sm tw-rounded-lg tw-transition-all tw-duration-200 hover:tw-bg-red-50 tw-group\"\n [class.tw-bg-red-50]=\"userStatusService.userStatus().status === 'do-not-disturb'\"\n [class.tw-ring-2]=\"userStatusService.userStatus().status === 'do-not-disturb'\"\n [class.tw-ring-red-200]=\"userStatusService.userStatus().status === 'do-not-disturb'\">\n <div\n class=\"tw-w-3 tw-h-3 tw-rounded-full tw-bg-red-500 tw-shadow-sm group-hover:tw-scale-110 tw-transition-transform\">\n </div>\n <span class=\"tw-text-gray-700 tw-font-medium tw-flex-1\">Do not disturb</span>\n <cide-ele-icon *ngIf=\"userStatusService.userStatus().status === 'do-not-disturb'\"\n type=\"none\" size=\"xs\" class=\"tw-text-red-600\">check</cide-ele-icon>\n </button>\n </div>\n </div>\n\n <!-- Enhanced Quick Actions Section -->\n <div class=\"tw-p-4 tw-bg-gray-50/50\">\n <h4\n class=\"tw-text-sm tw-font-semibold tw-text-gray-800 tw-mb-3 tw-flex tw-items-center tw-gap-2\">\n <div\n class=\"tw-w-5 tw-h-5 tw-rounded-md tw-bg-gray-100 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon type=\"none\" size=\"2xs\" class=\"tw-text-gray-600\">bolt</cide-ele-icon>\n </div>\n Quick Actions\n </h4>\n <div class=\"tw-space-y-1\">\n <a href=\"#\"\n class=\"quick-action tw-group tw-flex tw-items-center tw-px-3 tw-py-2 tw-text-sm tw-text-gray-700 tw-rounded-lg hover:tw-bg-white tw-transition-all tw-duration-200\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-lg tw-bg-blue-100 tw-flex tw-items-center tw-justify-center tw-mr-3 group-hover:tw-bg-blue-200 tw-transition-colors\">\n <cide-ele-icon type=\"none\" size=\"xs\" class=\"tw-text-blue-600\">person</cide-ele-icon>\n </div>\n <span class=\"tw-flex-1\">View Profile</span>\n <cide-ele-icon type=\"none\" size=\"xs\"\n class=\"tw-text-gray-400 group-hover:tw-text-gray-600 tw-transition-colors\">chevron_right</cide-ele-icon>\n </a>\n <a href=\"#\"\n class=\"quick-action tw-group tw-flex tw-items-center tw-px-3 tw-py-2 tw-text-sm tw-text-gray-700 tw-rounded-lg hover:tw-bg-white tw-transition-all tw-duration-200\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-lg tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-mr-3 group-hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon type=\"none\" size=\"xs\"\n class=\"tw-text-gray-600\">settings</cide-ele-icon>\n </div>\n <span class=\"tw-flex-1\">Preferences</span>\n <cide-ele-icon type=\"none\" size=\"xs\"\n class=\"tw-text-gray-400 group-hover:tw-text-gray-600 tw-transition-colors\">chevron_right</cide-ele-icon>\n </a>\n </div>\n </div>\n\n <!-- Enhanced Sign Out Section -->\n <div class=\"tw-p-4\">\n <a href=\"#\"\n class=\"tw-group tw-flex tw-items-center tw-px-3 tw-py-2.5 tw-text-sm tw-text-red-600 tw-rounded-lg hover:tw-bg-red-50 tw-transition-all tw-duration-200 tw-font-medium\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-lg tw-bg-red-100 tw-flex tw-items-center tw-justify-center tw-mr-3 group-hover:tw-bg-red-200 tw-transition-colors\">\n <cide-ele-icon type=\"none\" size=\"xs\" class=\"tw-text-red-600\">logout</cide-ele-icon>\n </div>\n <span class=\"tw-flex-1\">Sign out</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div> <!-- Second tier sidebar (Expanded view) -->\n <div class=\"cide-lyt-sidebar-menu tw-h-full tw-overflow-hidden tw-shadow-sm\">\n <div class=\"tw-flex tw-flex-col tw-h-full\">\n <!-- Header section with search and options -->\n <div class=\"sidebar-header tw-p-4 tw-border-b tw-border-gray-100\">\n <!-- Title with back button - Clean layout without online indicator -->\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-mb-4\">\n <button\n class=\"back-button tw-p-1.5 tw-rounded-lg tw-text-gray-500 hover:tw-bg-gray-100 hover:tw-text-gray-700 tw-transition-colors tw-flex-shrink-0\"\n [cideEleTooltip]=\"'Back to home'\" tooltipPlacement=\"bottom\">\n <cide-ele-icon type=\"none\" size=\"xs\" class=\"tw-transition-transform hover:tw-scale-110\">{{\n getActiveModuleIcon() }}</cide-ele-icon>\n </button>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h2 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-leading-5\">\n {{ appState.getActiveModuleTitle() || 'Menu' }}\n </h2>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-mt-0.5\">\n Module Dashboard\n </p>\n </div>\n </div>\n\n <!-- Search and options -->\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <div class=\"search-wrapper tw-relative tw-flex-1\">\n <cide-ele-input type=\"text\" leadingIcon=\"search\" size=\"xs\" placeholder=\"Search settings...\"\n [clearInput]=\"true\" [(ngModel)]=\"searchText\" (input)=\"onSearch()\">\n </cide-ele-input>\n <div\n class=\"search-shortcut tw-absolute tw-right-3 tw-top-1/2 -tw-translate-y-1/2 tw-bg-gray-100 tw-text-gray-500 tw-rounded tw-px-1.5 tw-py-0.5 tw-text-xs\">\n \u2318K</div>\n </div>\n <button\n class=\"tw-ml-2 tw-p-1.5 tw-rounded-lg tw-text-gray-500 hover:tw-bg-gray-100 hover:tw-text-gray-700 tw-transition-colors\"\n (click)=\"toggleOptions()\">\n <cide-ele-icon type=\"none\" size=\"xs\">more_vert</cide-ele-icon>\n </button>\n\n <!-- Options dropdown menu -->\n <div *ngIf=\"showOptions\"\n class=\"options-menu tw-absolute tw-right-4 tw-top-16 tw-mt-2 tw-w-48 tw-rounded-md tw-shadow-lg tw-bg-white tw-ring-1 tw-ring-black tw-ring-opacity-5 tw-divide-y tw-divide-gray-100 tw-z-10\">\n <div class=\"tw-py-1\">\n <a href=\"#\"\n class=\"tw-group tw-flex tw-items-center tw-px-4 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100\">\n <cide-ele-icon class=\"tw-mr-3 tw-text-gray-500 tw-group-hover:tw-text-gray-600\"\n type=\"none\" size=\"xs\">refresh</cide-ele-icon>\n Refresh\n </a>\n <a href=\"#\"\n class=\"tw-group tw-flex tw-items-center tw-px-4 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100\">\n <cide-ele-icon class=\"tw-mr-3 tw-text-gray-500 tw-group-hover:tw-text-gray-600\"\n type=\"none\" size=\"xs\">sync</cide-ele-icon>\n Sync settings\n </a>\n </div>\n <div class=\"tw-py-1\">\n <a href=\"#\"\n class=\"tw-group tw-flex tw-items-center tw-px-4 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100\">\n <cide-ele-icon class=\"tw-mr-3 tw-text-gray-500 tw-group-hover:tw-text-gray-600\"\n type=\"none\" size=\"xs\">help_outline</cide-ele-icon>\n Help & support\n </a>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Menu items with categories -->\n <div class=\"sidebar-content tw-overflow-y-auto tw-flex-1\" (scroll)=\"onScroll($event)\">\n <!-- Search results if searching -->\n <div *ngIf=\"searchText\" class=\"sidebar-section tw-p-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\n <h3 class=\"tw-text-xs tw-font-semibold tw-text-gray-500\">SEARCH RESULTS</h3>\n <span class=\"tw-text-xs tw-text-gray-500\">{{searchResults.length}} items</span>\n </div>\n\n <div *ngIf=\"searchResults.length > 0\" class=\"tw-space-y-1\">\n <a *ngFor=\"let item of searchResults\" href=\"#\"\n class=\"menu-item tw-flex tw-items-center tw-px-3 tw-py-2 tw-rounded-md hover:tw-bg-gray-50\">\n <cide-ele-icon class=\"tw-mr-3 tw-text-gray-500\" type=\"none\"\n size=\"xs\">{{item.icon}}</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-700\">{{item.title}}</span>\n </a>\n </div>\n\n <div *ngIf=\"searchResults.length === 0\" class=\"tw-p-4 tw-text-center\">\n <div class=\"tw-flex tw-justify-center tw-mb-3\">\n <cide-ele-icon class=\"tw-text-gray-400\" type=\"none\" size=\"md\">search_off</cide-ele-icon>\n </div>\n <p class=\"tw-text-sm tw-text-gray-500\">No results for \"{{searchText}}\"</p>\n <p class=\"tw-text-xs tw-text-gray-400 tw-mt-1\">Try another search term</p>\n </div>\n </div>\n\n <!-- Only show these sections if not searching -->\n <ng-container *ngIf=\"!searchText\">\n <!-- Loading state -->\n <div *ngIf=\"loadingMenus\" class=\"tw-p-4 tw-text-center\">\n <div class=\"tw-flex tw-justify-center tw-mb-3\">\n <cide-ele-spinner variant=\"circle\" size=\"xs\"></cide-ele-spinner>\n </div>\n <p class=\"tw-text-sm tw-text-gray-500\">Loading menus...</p>\n </div>\n\n <!-- Dynamic menu tree -->\n <div *ngIf=\"!loadingMenus && menuLoadComplete\" class=\"sidebar-section tw-p-4\"\n [class.animate-in]=\"animateSections[0]\">\n <ng-container\n *ngTemplateOutlet=\"recursiveMenu; context: {$implicit: selectedModuleMenus, level: 0}\"></ng-container>\n </div>\n\n <!-- Empty state -->\n <div *ngIf=\"!loadingMenus && menuLoadComplete && selectedModuleMenus.length === 0\"\n class=\"tw-p-4 tw-text-center\">\n <div class=\"tw-flex tw-justify-center tw-mb-3\">\n <cide-ele-icon class=\"tw-text-gray-400\" type=\"none\" size=\"md\">folder_open</cide-ele-icon>\n </div>\n <p class=\"tw-text-sm tw-text-gray-500\">No menus available</p>\n <p class=\"tw-text-xs tw-text-gray-400 tw-mt-1\">Select a module to view its menus</p>\n </div>\n </ng-container>\n\n <!-- Recursive menu template -->\n <ng-template #recursiveMenu let-menus let-level=\"level\">\n <div [class.tw-ml-0]=\"level > 0\">\n <div *ngFor=\"let menu of menus\" class=\"tw-mb-2\">\n <!-- Title type items (section headers) -->\n <div *ngIf=\"menu.syme_type === 'title'\" class=\"tw-mb-3\">\n <h3 class=\"tw-text-xs tw-font-semibold tw-text-gray-500 tw-uppercase tw-mb-2\">{{\n menu.syme_title }}</h3>\n <!-- Render children of title -->\n <ng-container *ngIf=\"menu.children && menu.children.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"recursiveMenu; context: {$implicit: menu.children, level: level + 1}\"></ng-container>\n </ng-container>\n </div>\n\n <!-- Section type items (collapsible sections) -->\n <div *ngIf=\"menu.syme_type === 'section'\" class=\"tw-mb-2\">\n <!-- Section header (clickable to expand/collapse) -->\n <button \n (click)=\"toggleSection(menu._id)\"\n (keydown.enter)=\"toggleSection(menu._id)\"\n (keydown.space)=\"toggleSection(menu._id)\"\n class=\"section-header tw-w-full tw-flex tw-items-center tw-px-3 tw-py-2 tw-rounded-md hover:tw-bg-gray-50 tw-cursor-pointer tw-transition-colors tw-text-left\"\n [class.tw-bg-blue-50]=\"isSectionExpanded(menu._id)\"\n type=\"button\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-expanded]=\"isSectionExpanded(menu._id)\"\n [attr.aria-label]=\"'Toggle ' + menu.syme_title + ' section'\">\n \n <!-- Section Icon (left side, like other menu items) -->\n <cide-ele-icon \n class=\"tw-mr-3 tw-text-gray-500\" \n type=\"none\"\n size=\"xs\">{{ menu.syme_icon || 'folder' }}</cide-ele-icon>\n \n <!-- Section Title -->\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-800\">{{ menu.syme_title }}</span>\n \n <!-- Right side icons container -->\n <div class=\"tw-ml-auto tw-flex tw-items-center tw-space-x-2\">\n <!-- Child Count Badge -->\n <span \n *ngIf=\"menu.children && menu.children.length > 0\"\n class=\"tw-px-2 tw-py-0.5 tw-bg-gray-200 tw-text-gray-600 tw-rounded-full tw-text-xs tw-font-medium\">\n {{ menu.children.length }}\n </span>\n \n <!-- Expand/Collapse Icon (right side) -->\n <cide-ele-icon \n class=\"tw-text-gray-400 tw-transition-transform tw-duration-200\"\n [class.tw-rotate-90]=\"isSectionExpanded(menu._id)\"\n type=\"none\" \n size=\"2xs\">chevron_right</cide-ele-icon>\n </div>\n </button>\n\n <!-- Section Content (collapsible) -->\n <div \n *ngIf=\"isSectionExpanded(menu._id) && menu.children && menu.children.length > 0\"\n class=\"section-content tw-mt-2 tw-ml-2 tw-border-l tw-border-gray-200 tw-pl-3\"\n [@slideInOut]=\"isSectionExpanded(menu._id) ? 'in' : 'out'\">\n <ng-container\n *ngTemplateOutlet=\"recursiveMenu; context: {$implicit: menu.children, level: level + 1}\"></ng-container>\n </div>\n </div>\n\n <!-- Menu type items (clickable links) -->\n <a *ngIf=\"menu.syme_type === 'menu'\" (click)=\"onMenuClick(menu)\"\n (keydown.enter)=\"onMenuClick(menu)\" (keydown.space)=\"onMenuClick(menu)\" tabindex=\"0\"\n role=\"button\"\n class=\"menu-item tw-flex tw-items-center tw-px-1 tw-py-1 tw-rounded-md hover:tw-bg-gray-50 tw-cursor-pointer tw-transition-colors\">\n <cide-ele-icon *ngIf=\"menu.syme_icon\" class=\"tw-mr-3 tw-text-gray-500\" type=\"none\"\n size=\"xs\">{{ menu.syme_icon }}</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-700\">{{ menu.syme_title }}</span>\n <cide-ele-icon *ngIf=\"menu.children && menu.children.length > 0\"\n class=\"tw-ml-auto tw-text-gray-400\" type=\"none\"\n size=\"2xs\">chevron_right</cide-ele-icon>\n </a>\n\n <!-- Render nested children for menu items -->\n <ng-container\n *ngIf=\"menu.syme_type === 'menu' && menu.children && menu.children.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"recursiveMenu; context: {$implicit: menu.children, level: level + 1}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </div>\n\n <!-- Notification panel (overlays content when shown) -->\n <div *ngIf=\"showNotifications\" class=\"notification-panel tw-absolute tw-inset-0 tw-bg-white tw-z-20\">\n <div class=\"tw-p-4 tw-border-b tw-border-gray-100 tw-flex tw-justify-between tw-items-center\">\n <h3 class=\"tw-text-sm tw-font-medium\">Notifications</h3>\n <button class=\"tw-p-1.5 tw-rounded-lg tw-text-gray-500 hover:tw-bg-gray-100\"\n (click)=\"toggleNotificationsPanel()\">\n <cide-ele-icon type=\"none\" size=\"xs\">close</cide-ele-icon>\n </button>\n </div>\n\n <div class=\"tw-p-4\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-4\">\n <div class=\"tw-text-xs tw-text-gray-500\">Today</div>\n <button class=\"tw-text-xs tw-text-blue-500\">Mark all as read</button>\n </div>\n\n <div class=\"tw-space-y-3\">\n <div\n class=\"notification-item tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border-l-4 tw-border-blue-500\">\n <div class=\"tw-flex tw-gap-3\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-blue-100 tw-flex tw-items-center tw-justify-center tw-text-blue-500\">\n <cide-ele-icon type=\"none\" size=\"xs\">notifications</cide-ele-icon>\n </div>\n <div class=\"tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900\">New feature available</div>\n <div class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">Try our new analytics dashboard\n with improved visualizations.</div>\n <div class=\"tw-text-xs tw-text-gray-400 tw-mt-2\">Just now</div>\n </div>\n </div>\n </div>\n\n <div class=\"notification-item tw-p-3 tw-rounded-lg tw-border-l-4 tw-border-transparent\">\n <div class=\"tw-flex tw-gap-3\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-500\">\n <cide-ele-icon type=\"none\" size=\"xs\">person_add</cide-ele-icon>\n </div>\n <div class=\"tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900\">New team member</div>\n <div class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">Jane Smith has joined your team.\n </div>\n <div class=\"tw-text-xs tw-text-gray-400 tw-mt-2\">2 hours ago</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Storage info at bottom -->\n <div class=\"sidebar-footer tw-p-4 tw-border-t tw-border-gray-100\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\n <div class=\"tw-flex tw-items-center\">\n <cide-ele-icon class=\"tw-mr-2 tw-text-gray-500\" type=\"none\"\n size=\"xs\">cloud_upload</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-700\">Storage</span>\n </div>\n <button\n class=\"upgrade-button tw-text-xs tw-text-blue-500 tw-font-medium tw-px-2 tw-py-1 tw-rounded hover:tw-bg-blue-50 tw-transition-colors\">Upgrade</button>\n </div>\n <div class=\"storage-bar tw-bg-gray-200 tw-rounded-full tw-h-1.5\">\n <div class=\"storage-fill tw-bg-blue-500 tw-h-1.5 tw-rounded-full tw-transition-all\"\n style=\"width: 75%\"></div>\n </div>\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mt-1.5\">\n <div class=\"tw-text-xs tw-text-gray-500\">18.2 GB of 20 GB used</div>\n <div class=\"tw-text-xs tw-text-blue-500\">75%</div>\n </div>\n\n <!-- Plan features quick view -->\n <div\n class=\"plan-features tw-flex tw-items-center tw-justify-between tw-mt-3 tw-pt-3 tw-border-t tw-border-gray-100\">\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-xs tw-font-medium tw-text-gray-700\">Free Plan</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Basic features</span>\n </div>\n <div class=\"tw-flex tw-gap-2\">\n <button\n class=\"tw-text-xs tw-bg-white tw-border tw-border-gray-200 tw-text-gray-700 tw-py-1 tw-px-2 tw-rounded hover:tw-bg-gray-50 tw-transition-colors\">Compare\n Plans</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Resizer -->\n <div parentElementSelector=\"#cide-lyt-sidebar-page-inner-wrapper\"\n [minPrevSize]=\"sidebarSetupData.cide_lyt_sidebar_width\" prevElementSelector=\"#cide-lyt-sidebar-page\"\n nextElementSelector=\"#cide-lyt-page-wrapper\" cideEleResizer direction=\"horizontal\">\n <div class=\"cide-lyt-devider-track tw-w-full tw-h-full\"></div>\n </div>\n</nav>", styles: [".cide-lyt-sidebar{display:flex;box-shadow:0 4px 12px #0000000d;overflow:hidden;background-color:var(--cide-theme-sidebar-color);--sidebar-tooltip-bg: var(--cide-theme-dark-color);--sidebar-tooltip-color: var(--cide-theme-light-color);--sidebar-shadow-color: rgba(0, 0, 0, .05);transition:width .3s cubic-bezier(.4,0,.2,1);max-height:100%;isolation:isolate;will-change:width;position:relative}.cide-lyt-sidebar.collapsed{animation:collapseEffect .3s forwards}.cide-lyt-sidebar:not(.collapsed){animation:expandEffect .3s forwards}@keyframes collapseEffect{0%{box-shadow:0 4px 12px var(--sidebar-shadow-color)}to{box-shadow:0 2px 8px var(--sidebar-shadow-color)}}@keyframes expandEffect{0%{box-shadow:0 2px 8px var(--sidebar-shadow-color)}to{box-shadow:0 4px 12px var(--sidebar-shadow-color)}}.cide-lyt-sidebar.animating{transition:width .3s cubic-bezier(.25,.46,.45,.94)}.cide-lyt-sidebar.collapsed .cide-lyt-sidebar-menu{width:0;opacity:0;visibility:hidden;transform:translate(-10px)}.cide-lyt-stack{background:linear-gradient(to bottom,var(--cide-theme-sidebar-color),var(--cide-theme-light-color));z-index:10;border-right:1px solid var(--cide-theme-light-color);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:0 0 1.5rem;transition:all .3s cubic-bezier(.4,0,.2,1);overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--cide-theme-color-brand-primary) transparent;position:relative;will-change:transform;scroll-behavior:smooth;box-shadow:inset -1px 0 0 var(--sidebar-shadow-color)}.cide-lyt-stack:after{content:\"\";position:absolute;bottom:0;left:0;right:0;height:30px;background:linear-gradient(to top,color-mix(in srgb,var(--cide-theme-sidebar-color) 90%,transparent),transparent);pointer-events:none;opacity:0;transition:opacity .3s ease;z-index:2}.cide-lyt-stack:before{content:\"\";position:absolute;top:0;left:0;right:0;height:30px;background:linear-gradient(to bottom,color-mix(in srgb,var(--cide-theme-sidebar-color) 90%,transparent),transparent);pointer-events:none;opacity:0;transition:opacity .3s ease;z-index:2}.cide-lyt-stack.scrolled-down:before{opacity:1}.cide-lyt-stack.scrolled-up:after{opacity:1}.cide-lyt-stack{position:relative;z-index:1;-webkit-overflow-scrolling:touch;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--cide-theme-color-brand-primary) transparent}.cide-lyt-stack::-webkit-scrollbar{width:2px}.cide-lyt-stack::-webkit-scrollbar-track{background:transparent;margin:10px 0}.cide-lyt-stack::-webkit-scrollbar-thumb{background:var(--cide-theme-color-brand-primary);border-radius:4px;box-shadow:0 0 6px var(--cide-theme-color-brand-primary)}.cide-lyt-stack:hover::-webkit-scrollbar-thumb{background:var(--cide-theme-color-brand-primary);box-shadow:0 0 10px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.4)}.cide-lyt-stack:hover::-webkit-scrollbar{width:3px}.cide-lyt-stack:before,.cide-lyt-stack:after,.sidebar-content:before,.sidebar-content:after,.notification-panel:before,.notification-panel:after,.user-menu:before,.user-menu:after,.options-menu:before,.options-menu:after{content:\"\";position:absolute;left:0;right:0;height:24px;z-index:5;pointer-events:none;opacity:0;transition:opacity .3s ease}.cide-lyt-stack:before,.sidebar-content:before,.notification-panel:before,.user-menu:before,.options-menu:before{top:0;background:linear-gradient(to bottom,color-mix(in srgb,var(--cide-theme-sidebar-color) 90%,transparent),#fff0)}.cide-lyt-stack:after,.sidebar-content:after,.notification-panel:after,.user-menu:after,.options-menu:after{bottom:0;background:linear-gradient(to top,color-mix(in srgb,var(--cide-theme-sidebar-color) 90%,transparent),#fff0)}.cide-lyt-stack.is-scrollable-top:before,.sidebar-content.is-scrollable-top:before,.notification-panel.is-scrollable-top:before,.user-menu.is-scrollable-top:before,.options-menu.is-scrollable-top:before{opacity:1}.cide-lyt-stack.is-scrollable-bottom:after,.sidebar-content.is-scrollable-bottom:after,.notification-panel.is-scrollable-bottom:after,.user-menu.is-scrollable-bottom:after,.options-menu.is-scrollable-bottom:after{opacity:1}.collapse-toggle{margin-bottom:.5rem;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);z-index:5;border-radius:50%;overflow:hidden}.collapse-toggle:before{content:\"\";position:absolute;inset:0;background:var(--cide-theme-label-color);opacity:0;transition:opacity .2s ease;z-index:-1}.collapse-toggle:hover{transform:scale(1.1)}.collapse-toggle:hover:before{opacity:1}.collapse-toggle:active{transform:scale(.95);transition:transform .1s ease}.collapse-toggle:focus-visible{outline:2px solid var(--cide-theme-color-brand-primary);outline-offset:2px}.sidebar-scroll-content{width:100%;padding-top:.75rem;position:relative;z-index:1;overflow-y:auto;overflow-x:hidden;flex-grow:1;display:flex;flex-direction:column;align-items:center;padding:1rem 0;gap:.5rem;max-height:calc(100% - 8rem)}.nav-item{position:relative;width:30px;height:30px;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;margin:4px 0;border-radius:10px;box-shadow:0 0 #3b82f600;transform-origin:center;overflow:hidden;color:var(--cide-theme-text-color)}.nav-item:before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at center,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.08),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.01));opacity:0;transition:opacity .3s ease;z-index:-1}.nav-item:hover{background-color:color-mix(in srgb,var(--cide-theme-light-color) 90%,transparent);transform:translateY(-1px);box-shadow:0 2px 6px var(--cide-theme-shadow-color)}.nav-item:hover:before{opacity:1}.nav-item:active{transition:all .1s ease;transform:translateY(-1px);box-shadow:0 2px 6px var(--cide-theme-shadow-color)}.nav-item:active{transform:translateY(1px);transition:all .1s ease}.nav-item-active{background:linear-gradient(135deg,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.08),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.12));box-shadow:0 2px 8px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.15);transform:translateZ(0);color:var(--cide-theme-color-brand-primary)}.nav-item-active:after{content:\"\";position:absolute;bottom:-2px;left:30%;right:30%;height:2px;background:linear-gradient(to right,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0),var(--cide-theme-color-brand-primary),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0));border-radius:1px;animation:pulseGlow 2s infinite}@keyframes pulseGlow{0%{opacity:.4}50%{opacity:1}to{opacity:.4}}.nav-item-active:hover{background:linear-gradient(135deg,#3b82f61a,#3b82f626)}.nav-badge{z-index:5;transition:all .3s ease}.nav-item:hover .nav-badge{transform:scale(1.1)}.nav-tooltip{position:fixed;left:64px;top:50%;transform:translateY(-50%) translate(-5px);background-color:var(--sidebar-tooltip-bg);color:var(--sidebar-tooltip-color);padding:.4rem .75rem;border-radius:.25rem;font-size:.75rem;white-space:nowrap;opacity:0;pointer-events:none;transition:all .2s cubic-bezier(.4,0,.2,1);z-index:1000;box-shadow:0 2px 8px var(--cide-theme-shadow-color);letter-spacing:.01em;will-change:transform,opacity;max-width:220px;text-overflow:ellipsis;overflow:hidden;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.nav-tooltip:before{content:\"\";position:absolute;top:50%;right:100%;transform:translateY(-50%);border-width:6px;border-style:solid;border-color:transparent var(--sidebar-tooltip-bg) transparent transparent;filter:drop-shadow(-2px 0px 1px rgba(0,0,0,.1))}.nav-item:hover .nav-tooltip{opacity:1;transform:translateY(-50%) translate(0);box-shadow:0 3px 12px var(--cide-theme-shadow-color)}.nav-item-active{background-color:color-mix(in srgb,var(--cide-theme-color-brand-primary) 10%,var(--cide-theme-light-color));border-radius:.5rem}.nav-item-active:before{opacity:0}.active-nav-icon{color:var(--cide-lyt-sidebar-nav-item-color-active)!important;filter:drop-shadow(0 0 3px rgba(59,130,246,.3))}.nav-indicator{position:absolute;left:-8px;top:50%;transform:translateY(-50%);width:3px;height:60%;background:var(--cide-theme-color-brand-primary);border-radius:0 4px 4px 0;opacity:0;transition:all .3s ease;box-shadow:0 0 6px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.5)}.nav-item-active .nav-indicator{opacity:1;left:0}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.sidebar-scroll-content .nav-item{opacity:0;animation:fadeSlideIn .5s forwards}.sidebar-scroll-content .nav-item:nth-child(1){animation-delay:.05s}.sidebar-scroll-content .nav-item:nth-child(2){animation-delay:.1s}.sidebar-scroll-content .nav-item:nth-child(3){animation-delay:.15s}.sidebar-scroll-content .nav-item:nth-child(4){animation-delay:.2s}.sidebar-scroll-content .nav-item:nth-child(5){animation-delay:.25s}.sidebar-scroll-content .nav-item:nth-child(6){animation-delay:.3s}.sidebar-scroll-content .nav-item:nth-child(7){animation-delay:.35s}.sidebar-scroll-content .nav-item:nth-child(8){animation-delay:.4s}.sidebar-scroll-content .nav-item:nth-child(9){animation-delay:.45s}.sidebar-scroll-content .nav-item:nth-child(10){animation-delay:.5s}.sidebar-scroll-content .nav-item:nth-child(11){animation-delay:.55s}.sidebar-scroll-content .nav-item:nth-child(12){animation-delay:.6s}.sidebar-scroll-content .nav-item:nth-child(13){animation-delay:.65s}.sidebar-scroll-content .nav-item:nth-child(14){animation-delay:.7s}.sidebar-scroll-content .nav-item:nth-child(15){animation-delay:.75s}cide-ele-icon[type=box]{cursor:pointer;width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:.5rem;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}cide-ele-icon[type=box]:hover{background-color:#f3f4f6;transform:translateY(-1px)}cide-ele-icon[type=box]:active{transform:translateY(0)}.theme-toggle{position:relative;overflow:hidden;padding:.5rem;border-radius:12px;background-color:transparent;border:2px solid transparent;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}.theme-toggle:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background:radial-gradient(circle at center,rgba(59,130,246,.2) 0%,transparent 70%);opacity:0;transition:opacity .3s ease;border-radius:.5rem}.theme-toggle:hover{background-color:var(--cide-theme-hover-bg-color, rgba(243, 244, 246, 1));border-color:var(--cide-theme-color-brand-primary, rgba(59, 130, 246, .3));transform:translateY(-1px);box-shadow:0 4px 12px #0000001a}.theme-toggle:hover:after{opacity:1}.theme-toggle:focus{outline:none;box-shadow:0 0 0 3px #3b82f64d}.theme-toggle cide-ele-icon{color:var(--cide-theme-icon-color, #6b7280);transition:all .2s ease;width:1.25rem;height:1.25rem;display:flex;align-items:center;justify-content:center}.theme-toggle:hover cide-ele-icon{color:var(--cide-theme-color-brand-primary, #3b82f6);transform:scale(1.1) rotate(10deg)}.dark-mode .theme-toggle:after{background:radial-gradient(circle at center,rgba(96,165,250,.2) 0%,transparent 70%)}.dark-mode .theme-toggle:hover{background-color:var(--cide-theme-dark-hover-bg-color, rgba(55, 65, 81, 1));border-color:var(--cide-theme-color-brand-primary, rgba(96, 165, 250, .3))}.notification-badge{font-size:.65rem;min-width:20px;height:20px;box-shadow:0 2px 4px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.25);transform-origin:center;position:relative;animation:pulseNotification 2s infinite;overflow:hidden;background-color:var(--cide-theme-color-brand-primary);color:var(--cide-theme-light-color)}.notification-badge:before{content:\"\";position:absolute;inset:0;background:linear-gradient(135deg,#ffffff4d,#fff0);opacity:0;transition:opacity .3s ease}.notification-badge:hover:before{opacity:1}@keyframes pulseNotification{0%{box-shadow:0 0 rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.4);transform:scale(1)}40%{transform:translateY(-5px)}50%{box-shadow:0 0 0 4px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0);transform:scale(1.05)}60%{transform:translateY(-2px)}to{box-shadow:0 0 rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0);transform:scale(1)}}.user-avatar{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;box-shadow:0 2px 5px #00000014;z-index:2}.user-avatar:hover{transform:scale(1.08);box-shadow:0 4px 12px #00000026}.user-avatar:before{content:\"\";position:absolute;inset:-3px;background:radial-gradient(circle,rgba(59,130,246,.3),transparent 70%);opacity:0;transition:opacity .3s ease;z-index:-1;border-radius:50%}.user-avatar:hover:before{opacity:1}.user-status{position:absolute;bottom:0;right:0;width:10px;height:10px;border-radius:50%;border:2px solid white;transition:all .3s ease}.user-status.online{background-color:#10b981;animation:statusPulse 2s infinite}.user-status.busy{background-color:#f59e0b}.user-status.offline{background-color:#6b7280}.user-status.dnd{background-color:#ef4444}@keyframes statusPulse{0%{box-shadow:0 0 #10b98166}70%{box-shadow:0 0 0 6px #10b98100}to{box-shadow:0 0 #10b98100}}.dark-mode .user-avatar{box-shadow:0 2px 5px #0003}.dark-mode .user-avatar:before{background:radial-gradient(circle,rgba(96,165,250,.4),transparent 70%)}.dark-mode .user-status{border-color:#0f172a}.user-dropdown{position:relative}.user-menu{animation:fadeInUp .2s cubic-bezier(.4,0,.2,1);z-index:30;margin-left:10px;margin-bottom:5px;max-height:80vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(209,213,219,.5) transparent;box-shadow:0 10px 25px #0000001a;border-radius:.75rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);position:absolute;left:100%;bottom:0;margin-top:.5rem;margin-left:.5rem;width:14rem;border-radius:.375rem;box-shadow:0 10px 15px -3px var(--cide-theme-shadow-color),0 4px 6px -2px var(--cide-theme-shadow-color);background-color:var(--cide-theme-sidebar-color);border:1px solid var(--cide-theme-border-color);z-index:50;overflow:hidden}.user-menu a{color:var(--cide-theme-text-color);transition:background-color .2s ease}.user-menu a:hover{background-color:var(--cide-theme-hover-bg-color)}.user-menu .tw-text-red-700{color:var(--cide-theme-error-color)}.user-menu::-webkit-scrollbar{width:3px}.user-menu::-webkit-scrollbar-track{background:transparent}.user-menu::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.user-status{transition:all .3s ease;box-shadow:0 0 0 2px var(--cide-theme-sidebar-color)}.user-status.online{animation:pulseOnline 2s infinite}@keyframes pulseOnline{0%{box-shadow:0 0 #22c55e66,0 0 0 2px var(--cide-theme-sidebar-color)}70%{box-shadow:0 0 0 4px #22c55e00,0 0 0 2px var(--cide-theme-sidebar-color)}to{box-shadow:0 0 #22c55e00,0 0 0 2px var(--cide-theme-sidebar-color)}}.cide-lyt-sidebar-menu{width:auto;background-color:var(--cide-theme-sidebar-color);border-left:1px solid rgba(243,244,246,1);transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;overflow:hidden;max-height:100%;position:relative;will-change:width,opacity,transform}.sidebar-header{background-color:var(--cide-theme-sidebar-color);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);position:sticky;top:0;z-index:10;border-bottom:1px solid rgba(243,244,246,.8);padding:1rem .75rem;transition:all .3s ease}.sidebar-header.scrolled{box-shadow:0 4px 10px -8px #0000001a}.back-button{transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%}.back-button:hover{transform:translate(-2px);background-color:#f3f4f6}.back-button:active{transform:translate(-1px) scale(.95)}.search-wrapper{position:relative;transition:all .3s ease}.search-wrapper:focus-within{transform:translateY(-1px)}.search-shortcut{font-size:.65rem;opacity:.7;letter-spacing:.02em;pointer-events:none;padding:.1rem .3rem;background-color:#f3f4f6cc;border-radius:.25rem;border:1px solid rgba(229,231,235,.8);transition:all .3s ease}.search-wrapper:focus-within .search-shortcut{opacity:.5}.options-menu{animation:fadeInUp .2s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 12px #0000001a;max-height:70vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(209,213,219,.5) transparent;border-radius:.75rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.options-menu::-webkit-scrollbar{width:3px}.options-menu::-webkit-scrollbar-track{background:transparent}.options-menu::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}.sidebar-section{position:relative;padding:.5rem 0}.sidebar-section:not(:first-child):before{content:\"\";height:1px;background:linear-gradient(to right,#e5e7eb00,#e5e7eb80,#e5e7eb00);position:absolute;top:0;left:10%;right:10%}.tw-text-xs.tw-font-semibold.tw-text-gray-500{font-size:.7rem;letter-spacing:.05em;text-transform:uppercase;position:relative;display:inline-block;padding:0 .5rem;color:var(--cide-theme-label-color)}.tw-text-xs.tw-font-semibold.tw-text-gray-500:after{content:\"\";position:absolute;height:3px;width:2rem;background:linear-gradient(to right,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.5),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0));bottom:-4px;left:.5rem;border-radius:3px;transition:width .3s ease}.sidebar-section:hover .tw-text-xs.tw-font-semibold.tw-text-gray-500:after{width:3rem}.menu-item{text-decoration:none;transition:all .25s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;margin:3px 0;border-radius:.5rem;transform:translateZ(0);color:var(--cide-theme-text-color)}.menu-item:hover{transform:translate(3px);background-color:var(--cide-theme-light-color);box-shadow:0 1px 3px var(--sidebar-shadow-color)}.active-menu-item{background-color:rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.08);position:relative;box-shadow:0 2px 5px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.1)}.active-menu-item:after{content:\"\";position:absolute;left:0;top:0;height:100%;width:3px;background:linear-gradient(to bottom,var(--cide-theme-color-brand-primary),var(--cide-theme-secondary-color));border-radius:0 2px 2px 0;box-shadow:0 0 6px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.3);animation:pulseLeftBorder 2s infinite}@keyframes pulseLeftBorder{0%{opacity:.7}50%{opacity:1}to{opacity:.7}}.dark-mode .active-menu-item{background-color:#1e293b80;box-shadow:0 2px 5px #0f172a33}.dark-mode .active-menu-item:after{background:linear-gradient(to bottom,#60a5fa,#3b82f6);box-shadow:0 0 8px #60a5fa66}.quick-actions{transition:all .3s ease;opacity:0;transform:translate(5px);z-index:2}.menu-item:hover .quick-actions{opacity:1;transform:translate(0)}.badge{font-size:.7rem;padding:1px 5px;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;z-index:1}.menu-item:hover .badge{background-color:#d1d5db}.new-badge{animation:pulse 2s infinite;z-index:1}@keyframes pulse{0%{box-shadow:0 0 #3b82f666}70%{box-shadow:0 0 0 4px #3b82f600}to{box-shadow:0 0 #3b82f600}}.toggle-switch{display:inline-flex;align-items:center;transition:all .2s ease}.toggle-switch:hover{transform:scale(1.05)}.toggle-track{position:relative;cursor:pointer;transition:background-color .3s ease;overflow:hidden}.toggle-track:after{content:\"\";position:absolute;top:50%;left:50%;width:5px;height:5px;background:#ffffffb3;opacity:0;border-radius:100%;transform:scale(1) translate(-50%,-50%);transform-origin:50% 50%}.toggle-track.clicked:after{animation:ripple .6s ease-out}@keyframes ripple{0%{opacity:1;transform:scale(0) translate(-50%,-50%)}to{opacity:0;transform:scale(20) translate(-50%,-50%)}}.alert-box{animation:fadeIn .5s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #fde04726;border-radius:.5rem;position:relative;overflow:hidden}.alert-box:before{content:\"\";position:absolute;inset:0;background-image:url(\"data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23fef3c7' fill-opacity='0.4' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E\");opacity:.3;pointer-events:none}@keyframes fadeIn{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.notification-panel{animation:fadeIn .3s cubic-bezier(.4,0,.2,1);overflow-y:auto;max-height:100vh;scrollbar-width:thin;scrollbar-color:rgba(209,213,219,.5) transparent;padding:.75rem;border-radius:.75rem}.notification-panel::-webkit-scrollbar{width:3px}.notification-panel::-webkit-scrollbar-track{background:transparent}.notification-panel::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}.notification-panel:hover::-webkit-scrollbar-thumb{background-color:#9ca3af80}.notification-item{transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;border-radius:.5rem;margin-bottom:.5rem;position:relative;overflow:hidden}.notification-item:hover{background-color:#f3f4f6;transform:translate(1px)}.notification-item:active{transform:scale(.99)}.notification-item.unread:before{content:\"\";position:absolute;left:0;top:0;height:100%;width:3px;background-color:var(--cide-theme-color-brand-primary);border-radius:0 2px 2px 0}.sidebar-footer{background-color:var(--cide-theme-light-color);position:sticky;bottom:0;z-index:10;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:1px solid rgba(243,244,246,.8);padding:.75rem;transition:all .3s ease}.upgrade-button{transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;border-radius:.5rem;color:var(--cide-theme-text-color)}.upgrade-button:hover{background-color:rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.1);transform:translateY(-1px)}.upgrade-button:active{transform:translateY(0) scale(.98)}.upgrade-button:after{content:\"\";position:absolute;width:12px;height:12px;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%233b82f6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'%3E%3C/polygon%3E%3C/svg%3E\");top:5px;right:10px;opacity:.5;transform:scale(0);transition:all .3s ease}.upgrade-button:hover:after{transform:scale(1) rotate(20deg);animation:float 3s ease-in-out infinite}@keyframes float{0%,to{transform:scale(1) rotate(5deg) translate(0)}50%{transform:scale(1.1) rotate(-5deg) translate(-2px,-2px)}}.storage-bar{background-color:#e5e7eb80;overflow:hidden;border-radius:4px;height:6px;position:relative}.storage-fill{background:linear-gradient(to right,var(--cide-theme-color-brand-primary),var(--cide-theme-secondary-color));transition:width 1s cubic-bezier(.4,0,.2,1);position:relative;height:100%;border-radius:4px}.storage-fill:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,#fff0,#fff3,#fff0);animation:shimmer 2s infinite}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.plan-features{transition:all .3s ease;padding:.5rem;border-radius:.5rem}.plan-features:hover{background-color:#f3f4f680}.feature-item{display:flex;align-items:center;margin:.25rem 0;position:relative;padding-left:1.25rem;color:var(--cide-theme-text-color)}.feature-item:before{content:\"\\2713\";position:absolute;left:0;color:var(--cide-theme-color-brand-primary);font-size:.7rem;top:50%;transform:translateY(-50%)}.sidebar-content{scrollbar-width:thin;scrollbar-color:rgba(209,213,219,.5) transparent;flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:0 .75rem;transition:all .3s ease;position:relative;scroll-behavior:smooth;scroll-padding:1rem;overscroll-behavior:contain}.sidebar-content:after{content:\"\";position:absolute;bottom:0;left:0;right:0;height:30px;background:linear-gradient(to top,rgba(255,255,255,.9),transparent);pointer-events:none;opacity:0;transition:opacity .3s ease;z-index:2}.sidebar-content:before{content:\"\";position:absolute;top:0;left:0;right:0;height:30px;background:linear-gradient(to bottom,rgba(255,255,255,.9),transparent);pointer-events:none;opacity:0;transition:opacity .3s ease;z-index:2}.sidebar-content.scrolled-down:before{opacity:1}.sidebar-content.scrolled-up:after{opacity:1}.sidebar-content::-webkit-scrollbar{width:3px}.sidebar-content::-webkit-scrollbar-track{background:transparent}.sidebar-content::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}.sidebar-content:hover::-webkit-scrollbar-thumb{background-color:#9ca3af80}.cide-lyt-sidebar *::-webkit-scrollbar{width:3px}.cide-lyt-sidebar *::-webkit-scrollbar-track{background:transparent}.cide-lyt-sidebar *::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}.cide-lyt-sidebar *:hover::-webkit-scrollbar-thumb{background-color:#9ca3af80}.sidebar-section{transition:all .3s ease-out;transform:translateY(0);opacity:1}.sidebar-section.animate-in{animation:slideInUp .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes slideInUp{0%{opacity:.5;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}.sidebar-section:nth-child(1).animate-in{animation-delay:.1s}.sidebar-section:nth-child(2).animate-in{animation-delay:.2s}.sidebar-section:nth-child(3).animate-in{animation-delay:.3s}.sidebar-section:nth-child(4).animate-in{animation-delay:.4s}.sidebar-section:nth-child(5).animate-in{animation-delay:.5s}:host ::ng-deep cide-ele-input{width:100%}:host ::ng-deep .cide-input-field{border-radius:8px;background-color:#f9fafb;border:1px solid transparent;transition:all .2s cubic-bezier(.4,0,.2,1)}:host ::ng-deep .cide-input-field:focus-within{border-color:#d1d5db;background-color:#fff;box-shadow:0 2px 8px #0000000d;transform:translateY(-1px)}.cide-lyt-sidebar *:focus{outline:none;box-shadow:0 0 0 2px #3b82f64d}.dark-mode{--sidebar-tooltip-bg: var(--cide-theme-dark-color);--sidebar-tooltip-color: var(--cide-theme-light-color);background-color:#1e293b;color:var(--cide-theme-light-color)}.dark-mode .cide-lyt-stack{background-color:#0f172a;border-right-color:#1e293b}.dark-mode .cide-lyt-stack:before,.dark-mode .cide-lyt-stack:after,.dark-mode .sidebar-content:before,.dark-mode .sidebar-content:after{background:linear-gradient(to bottom,rgba(15,23,42,.9),transparent)}.dark-mode .sidebar-content:after,.dark-mode .cide-lyt-stack:after{background:linear-gradient(to top,rgba(15,23,42,.9),transparent)}.dark-mode .cide-lyt-sidebar-menu{background-color:#0f172a;border-left-color:#1e293b}.dark-mode .sidebar-header,.dark-mode .sidebar-footer{background-color:#0f172af2;border-color:#1e293b}.dark-mode .tw-text-gray-700{color:#e2e8f0}.dark-mode .tw-text-gray-500{color:#94a3b8}.dark-mode .tw-bg-gray-50,.dark-mode .menu-item:hover{background-color:#1e293b80}.dark-mode .tw-bg-gray-100{background-color:#1e293b}.dark-mode .tw-bg-gray-200{background-color:#334155}.dark-mode .nav-item:hover:before{background-color:#60a5fa1a}.dark-mode .back-button:hover{background-color:#1e293bb3}.dark-mode .sidebar-section:not(:first-child):before{background:linear-gradient(to right,#33415500,#33415580,#33415500)}.dark-mode .toggle-track:after{background:#00000080}.dark-mode .alert-box:before{opacity:.2}.dark-mode :host ::ng-deep .cide-input-field{background-color:#1e293b;color:#e2e8f0}.dark-mode :host ::ng-deep .cide-input-field:focus-within{border-color:#475569;background-color:#0f172a}.dark-mode *::-webkit-scrollbar-thumb{background-color:#47556980}.dark-mode *:hover::-webkit-scrollbar-thumb{background-color:#64748b99}.nav-item-active .nav-indicator{animation:pulseIndicator 2s infinite}@keyframes pulseIndicator{0%{box-shadow:0 0 #3b82f666}70%{box-shadow:0 0 0 3px #3b82f600}to{box-shadow:0 0 #3b82f600}}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media screen and (max-width: 1024px){.cide-lyt-sidebar-menu{width:220px}.sidebar-content{padding:0 .5rem}.tw-text-xs.tw-font-semibold.tw-text-gray-500{font-size:.65rem}}@media screen and (max-width: 768px){.cide-lyt-sidebar-menu{position:fixed;width:100%;max-width:280px;left:72px;z-index:40;box-shadow:0 10px 25px #00000026;border-radius:0 1rem 1rem 0}.cide-lyt-sidebar.collapsed .cide-lyt-sidebar-menu{left:-100%}.sidebar-overlay{position:fixed;inset:0;background-color:#0000004d;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);opacity:0;pointer-events:none;transition:opacity .3s ease;z-index:35}.sidebar-overlay.active{opacity:1;pointer-events:auto}}.cide-lyt-sidebar,.cide-lyt-stack,.cide-lyt-sidebar-menu,.sidebar-logo,.nav-item,.menu-item,.user-avatar,.upgrade-button,.storage-fill,.notification-item,.sidebar-section.animate-in{transform:translateZ(0);backface-visibility:hidden;perspective:1000px;will-change:transform,opacity}.dark-mode .nav-item-active{background:linear-gradient(135deg,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.15),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.1));box-shadow:0 2px 8px #1e40af40}.dark-mode .nav-item-active:after{background:linear-gradient(to right,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0),rgba(var(--cide-theme-secondary-color-rgb, 74, 222, 128),.6),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0));box-shadow:0 0 5px rgba(var(--cide-theme-secondary-color-rgb, 74, 222, 128),.5)}.dark-mode .nav-item:hover{background-color:#33415580;box-shadow:0 2px 8px #0f172a4d}.dark-mode .nav-tooltip{background-color:#0f172ae6;box-shadow:0 3px 10px #0006;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.dark-mode .nav-tooltip:before{border-color:transparent rgba(15,23,42,.9) transparent transparent}.text-theme-primary{color:var(--cide-theme-color-brand-primary)}.text-theme-secondary{color:var(--cide-theme-secondary-color)}.text-theme-text{color:var(--cide-theme-text-color)}.text-theme-label{color:var(--cide-theme-label-color)}.bg-theme-primary{background-color:var(--cide-theme-color-brand-primary)}.bg-theme-secondary{background-color:var(--cide-theme-secondary-color)}.bg-theme-light{background-color:var(--cide-theme-light-color)}.bg-theme-dark{background-color:var(--cide-theme-dark-color)}.bg-theme-sidebar{background-color:var(--cide-theme-sidebar-color)}.border-theme-light{border-color:var(--cide-theme-light-color)}.border-theme-primary{border-color:var(--cide-theme-color-brand-primary)}.hover-bg-theme-light:hover{background-color:var(--cide-theme-light-color)}.hover-text-theme-primary:hover{color:var(--cide-theme-color-brand-primary)}.tw-text-gray-500{color:var(--cide-theme-icon-color)}.hover\\:tw-text-gray-700:hover{color:var(--cide-theme-icon-hover-color)}.tw-text-gray-700{color:var(--cide-theme-text-color)}.tw-text-red-500,.tw-text-red-600,.tw-text-red-700{color:var(--cide-theme-error-color)}.tw-bg-gray-200{background-color:var(--cide-theme-border-color)}.hover\\:tw-bg-gray-100:hover{background-color:var(--cide-theme-hover-bg-color)}.tw-bg-white{background-color:var(--cide-theme-sidebar-color)}.tw-bg-green-500{background-color:var(--cide-theme-success-color)}.tw-border-gray-100,.tw-divide-gray-100{border-color:var(--cide-theme-border-color)}.tw-shadow-lg{box-shadow:0 10px 15px -3px var(--cide-theme-shadow-color),0 4px 6px -2px var(--cide-theme-shadow-color)}.tw-shadow-sm,.hover\\:tw-shadow:hover{box-shadow:0 1px 2px 0 var(--cide-theme-shadow-color)}.active-nav-icon{color:var(--cide-theme-color-brand-primary)!important}.nav-item{display:flex;align-items:center;justify-content:center;position:relative;border-radius:.375rem}.nav-item:hover{background-color:var(--cide-theme-hover-bg-color)}.nav-item:hover cide-ele-icon{color:var(--cide-theme-icon-hover-color)}.nav-item-active{background-color:color-mix(in srgb,var(--cide-theme-color-brand-primary) 10%,var(--cide-theme-light-color))}.nav-item-active cide-ele-icon{color:var(--cide-theme-color-brand-primary)}.nav-indicator{opacity:0;transition:opacity .2s ease}.nav-item-active .nav-indicator{opacity:1}.nav-tooltip{position:absolute;left:100%;top:50%;transform:translateY(-50%);background-color:var(--sidebar-tooltip-bg);color:var(--sidebar-tooltip-color);padding:.25rem .5rem;border-radius:.25rem;font-size:.75rem;white-space:nowrap;opacity:0;pointer-events:none;transition:all .2s ease;margin-left:.5rem;z-index:30;box-shadow:0 2px 8px var(--cide-theme-shadow-color)}.nav-item:hover .nav-tooltip{opacity:1}.nav-badge{position:absolute;top:-.25rem;right:-.25rem;width:.375rem;height:.375rem;border-radius:9999px;background-color:var(--cide-theme-error-color);animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.user-avatar{width:2.5rem;height:2.5rem;border-radius:9999px;overflow:hidden;background-color:var(--cide-theme-border-color);border:2px solid var(--cide-theme-sidebar-color);box-shadow:0 1px 2px var(--cide-theme-shadow-color);cursor:pointer;transition:box-shadow .2s ease}.user-avatar:hover{box-shadow:0 2px 4px var(--cide-theme-shadow-color)}.user-status{position:absolute;bottom:0;right:0;width:.75rem;height:.75rem;border-radius:9999px;background-color:var(--cide-theme-success-color);border:2px solid var(--cide-theme-sidebar-color)}.dark-mode .nav-item:hover{background-color:#ffffff1a}.dark-mode .nav-item-active{background-color:color-mix(in srgb,var(--cide-theme-color-brand-primary) 30%,var(--cide-theme-dark-color))}.dark-mode .user-avatar{border-color:var(--cide-theme-dark-color);background-color:#ffffff1a}.dark-mode .user-status{border-color:var(--cide-theme-dark-color)}.dark-mode .user-menu{background-color:var(--cide-theme-dark-color);border-color:#ffffff1a}.dark-mode .user-menu a{color:#fffc}.dark-mode .user-menu a:hover{background-color:#ffffff1a}.section-header{transition:all .2s ease;border:1px solid transparent}.section-header:hover{background-color:#f8fafc!important;border-color:#e2e8f0}.section-header:focus{outline:none;box-shadow:0 0 0 2px #3b82f6;border-color:#3b82f6}.section-content{overflow:hidden;transition:all .3s ease}.section-header .tw-rotate-90{transform:rotate(90deg)}.section-content .tw-border-l{border-left-color:#d1d5db}.section-header:hover .tw-text-gray-500{color:#6b7280}.section-header:hover .tw-text-gray-800{color:#374151}\n"], dependencies: [{ kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CideEleResizerDirective, selector: "[cideEleResizer]", inputs: ["direction", "to", "prevElementSelector", "nextElementSelector", "parentElementSelector", "minPrevSize", "minNextSize", "usePercentage"], outputs: ["resizeStart", "resizing", "resizeEnd"] }, { kind: "directive", type: TooltipDirective, selector: "[cideEleTooltip]", inputs: ["cideEleTooltip", "tooltipColor", "tooltipBg", "tooltipPlacement", "tooltipType", "tooltipDelay", "tooltipDir", "tooltipShowArrow", "tooltipMultiline", "tooltipMaxWidth", "tooltipInteractive", "tooltipClass"] }, { kind: "component", type: CideSpinnerComponent, selector: "cide-ele-spinner", inputs: ["size", "type"] }], animations: [
450
- trigger('slideInOut', [
451
- state('in', style({
452
- opacity: 1,
453
- transform: 'translateY(0)',
454
- height: '*'
455
- })),
456
- state('out', style({
457
- opacity: 0,
458
- transform: 'translateY(-10px)',
459
- height: '0px'
460
- })),
461
- transition('in => out', animate('200ms ease-in')),
462
- transition('out => in', animate('200ms ease-out'))
463
- ])
464
- ] }); }
465
- }
466
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSidebarWrapperComponent, decorators: [{
467
- type: Component,
468
- args: [{ selector: 'cide-lyt-sidebar-wrapper', standalone: true, imports: [CideIconComponent, CideInputComponent, CommonModule, CideEleResizerDirective, TooltipDirective, CideSpinnerComponent], animations: [
469
- trigger('slideInOut', [
470
- state('in', style({
471
- opacity: 1,
472
- transform: 'translateY(0)',
473
- height: '*'
474
- })),
475
- state('out', style({
476
- opacity: 0,
477
- transform: 'translateY(-10px)',
478
- height: '0px'
479
- })),
480
- transition('in => out', animate('200ms ease-in')),
481
- transition('out => in', animate('200ms ease-out'))
482
- ])
483
- ], template: "<nav class=\"cide-lyt-sidebar tw-flex tw-h-full tw-select-none\" [class.collapsed]=\"isCollapsed\">\n <!-- First tier sidebar (Icon only) -->\n <div class=\"cide-lyt-stack tw-h-full tw-flex tw-flex-col tw-items-center tw-border-r tw-border-gray-100\">\n <!-- Scrollable content -->\n <div class=\"sidebar-scroll-content\">\n <!-- Collapse/Expand toggle -->\n <div class=\"nav-item collapse-toggle\" tabindex=\"0\" (click)=\"toggleSidebar()\"\n (keydown.enter)=\"toggleSidebar()\">\n <div class=\"nav-tooltip\">{{isCollapsed ? 'Expand' : 'Collapse'}} Sidebar</div>\n <cide-ele-icon size=\"xs\" type=\"box\" class=\"tw-text-gray-500 hover:tw-text-gray-700\">\n {{isCollapsed ? 'chevron_right' : 'chevron_left'}}\n </cide-ele-icon>\n </div> <!-- Main navigation icons - Enhanced Design -->\n <div class=\"tw-flex tw-flex-col tw-gap-4\">\n @for (core_system_module_item of core_system_module; track $index) {\n <div class=\"nav-item tw-relative tw-group\" (click)=\"setActiveMenu(core_system_module_item._id)\"\n [cideEleTooltip]=\"core_system_module_item.syme_title\" [tooltipShowArrow]=\"true\"\n tooltipPlacement=\"right\"\n [ngClass]=\"{'nav-item-active': activeModuleId === core_system_module_item._id}\"\n (mouseenter)=\"onItemHover(core_system_module_item._id)\" (mouseleave)=\"onItemHover('')\"\n [tabindex]=\"$index\" (keydown.enter)=\"setActiveMenu(core_system_module_item._id)\">\n\n <!-- Notification Badge with enhanced design -->\n @if (core_system_module_item?.syme_ping) {\n <div class=\"nav-badge tw-absolute -tw-top-1 -tw-right-1 tw-w-1.5 tw-h-1.5 tw-rounded-full tw-animate-ping\"\n style=\"background-color: var(--cide-theme-error-color);\">\n </div>\n }\n\n <!-- Enhanced icon with better visual effects -->\n <div\n class=\"tw-p-2 tw-rounded-xl tw-transition-all tw-duration-200 tw-ease-in-out\n group-hover:tw-bg-blue-50 group-hover:tw-shadow-md group-hover:tw-scale-105\n tw-border-2 tw-border-transparent\n {{activeModuleId === core_system_module_item._id ? 'tw-bg-blue-100 tw-border-blue-200 tw-shadow-sm' : 'tw-bg-gray-50'}}\">\n <cide-ele-icon type=\"box\" size=\"xs\"\n class=\"tw-transition-all tw-duration-200 tw-ease-in-out\n {{activeModuleId === core_system_module_item._id ? 'tw-text-blue-600' : 'tw-text-gray-600 group-hover:tw-text-blue-500'}}\">\n {{core_system_module_item?.syme_icon || 'dashboard'}}\n </cide-ele-icon>\n </div>\n\n <!-- Modern active indicator -->\n @if (activeModuleId === core_system_module_item._id) {\n <div\n class=\"nav-indicator tw-absolute tw-left-0 tw-top-1/2 tw-transform -tw-translate-y-1/2 tw-w-1 tw-h-8 tw-bg-blue-500 tw-rounded-r-full tw-shadow-lg tw-transition-all tw-duration-300\">\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Bottom section with enhanced theme toggle and user avatar -->\n <div class=\"tw-flex tw-flex-col tw-items-center tw-gap-3 tw-mt-auto tw-pb-4\">\n <!-- Theme toggle with modern design -->\n <div class=\"nav-item tw-group\">\n <div class=\"nav-tooltip\">Toggle Theme</div>\n <button class=\"theme-toggle\" (click)=\"toggleTheme()\" (keydown.enter)=\"toggleTheme()\"\n (keydown.space)=\"toggleTheme()\" tabindex=\"0\" role=\"button\" aria-label=\"Toggle theme\">\n <cide-ele-icon type=\"box\" size=\"sm\">\n {{darkMode ? 'light_mode' : 'dark_mode'}}\n </cide-ele-icon>\n </button>\n </div>\n\n <!-- User avatar with dropdown -->\n <div class=\"tw-relative user-dropdown\" \n (click)=\"toggleUserMenu()\"\n (keydown.enter)=\"toggleUserMenu()\"\n (keydown.space)=\"toggleUserMenu()\"\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"Toggle user menu\"\n [attr.aria-expanded]=\"showUserMenu\">\n <div class=\"nav-tooltip\">Your Profile</div>\n <div class=\"user-avatar tw-w-10 tw-h-10 tw-rounded-full tw-overflow-hidden tw-bg-gray-200 tw-border-2 tw-shadow-sm tw-cursor-pointer hover:tw-shadow\"\n style=\"border-color: var(--cide-theme-sidebar-color);\">\n <img src=\"data:image/png;base64,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\"\n alt=\"User\" class=\"tw-w-full tw-h-full tw-object-cover\"\n onerror=\"this.src='data:image/png;base64,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'\">\n <!-- Modern Status Indicator Circle -->\n <div class=\"tw-absolute -tw-bottom-0.5 -tw-right-0.5 tw-w-3.5 tw-h-3.5 tw-rounded-full tw-border-2 tw-border-white tw-shadow-sm tw-transition-all tw-duration-200\n {{getUserStatusClass()}}\" [cideEleTooltip]=\"getUserStatusText()\"\n tooltipPlacement=\"left\">\n <!-- Pulse animation for active status -->\n <div class=\"tw-absolute tw-inset-0 tw-rounded-full tw-animate-pulse tw-opacity-50\n {{getUserStatusClass()}}\"></div>\n </div>\n </div>\n\n <!-- Enhanced User dropdown menu with modern status options -->\n <div *ngIf=\"showUserMenu\"\n class=\"user-menu tw-absolute tw-left-full tw-bottom-0 tw-mt-2 tw-ml-2 tw-w-72 tw-rounded-xl tw-shadow-2xl tw-bg-white tw-ring-1 tw-ring-black/5 tw-divide-y tw-divide-gray-100 tw-z-50 tw-backdrop-blur-sm\">\n\n <!-- Enhanced User Info Section -->\n <div class=\"tw-p-5 tw-bg-gradient-to-br tw-from-blue-50 tw-to-indigo-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-relative\">\n <div\n class=\"tw-w-12 tw-h-12 tw-rounded-xl tw-bg-gradient-to-br tw-from-blue-500 tw-via-purple-500 tw-to-indigo-600 tw-flex tw-items-center tw-justify-center tw-text-white tw-font-semibold tw-text-lg tw-shadow-lg\">\n JD\n </div>\n <!-- Enhanced status indicator -->\n <div class=\"tw-absolute -tw-bottom-1 -tw-right-1 tw-w-4 tw-h-4 tw-rounded-full tw-border-2 tw-border-white tw-shadow-md tw-transition-all tw-duration-300\"\n [class]=\"getUserStatusClass()\" [title]=\"getUserStatusText()\">\n <div class=\"tw-absolute tw-inset-0 tw-rounded-full tw-animate-pulse tw-opacity-50\"\n [class]=\"getUserStatusClass()\"></div>\n </div>\n </div>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <div class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-truncate\">John Doe</div>\n <div class=\"tw-text-sm tw-text-gray-600 tw-truncate\">john.doe&#64;company.com</div>\n <div class=\"tw-text-xs tw-text-gray-500 tw-mt-1 tw-flex tw-items-center tw-gap-1\">\n <div class=\"tw-w-1.5 tw-h-1.5 tw-rounded-full tw-bg-green-500 tw-animate-pulse\">\n </div>\n <span>Active now</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Enhanced Status Selection Section -->\n <div class=\"tw-p-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\n <h4 class=\"tw-text-sm tw-font-semibold tw-text-gray-800 tw-flex tw-items-center tw-gap-2\">\n <div\n class=\"tw-w-5 tw-h-5 tw-rounded-md tw-bg-blue-100 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon type=\"none\" size=\"2xs\"\n class=\"tw-text-blue-600\">radio_button_checked</cide-ele-icon>\n </div>\n Set Status\n </h4>\n <span\n class=\"tw-text-xs tw-text-gray-500 tw-bg-gray-100 tw-px-2 tw-py-1 tw-rounded-full\">Auto-away\n in 5min</span>\n </div>\n\n <div class=\"tw-space-y-1\">\n <button (click)=\"setUserStatus('online')\"\n class=\"status-option tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-text-sm tw-rounded-lg tw-transition-all tw-duration-200 hover:tw-bg-green-50 tw-group\"\n [class.tw-bg-green-50]=\"userStatusService.userStatus().status === 'online'\"\n [class.tw-ring-2]=\"userStatusService.userStatus().status === 'online'\"\n [class.tw-ring-green-200]=\"userStatusService.userStatus().status === 'online'\">\n <div class=\"tw-relative\">\n <div\n class=\"tw-w-3 tw-h-3 tw-rounded-full tw-bg-green-500 tw-shadow-sm group-hover:tw-scale-110 tw-transition-transform\">\n <div class=\"tw-absolute tw-inset-0 tw-rounded-full tw-bg-green-500 tw-animate-ping tw-opacity-75\"\n *ngIf=\"userStatusService.userStatus().status === 'online'\"></div>\n </div>\n </div>\n <span class=\"tw-text-gray-700 tw-font-medium tw-flex-1\">Online</span>\n <cide-ele-icon *ngIf=\"userStatusService.userStatus().status === 'online'\" type=\"none\"\n size=\"xs\" class=\"tw-text-green-600\">check</cide-ele-icon>\n </button>\n\n <button (click)=\"setUserStatus('away')\"\n class=\"status-option tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-text-sm tw-rounded-lg tw-transition-all tw-duration-200 hover:tw-bg-yellow-50 tw-group\"\n [class.tw-bg-yellow-50]=\"userStatusService.userStatus().status === 'away'\"\n [class.tw-ring-2]=\"userStatusService.userStatus().status === 'away'\"\n [class.tw-ring-yellow-200]=\"userStatusService.userStatus().status === 'away'\">\n <div\n class=\"tw-w-3 tw-h-3 tw-rounded-full tw-bg-yellow-500 tw-shadow-sm group-hover:tw-scale-110 tw-transition-transform\">\n </div>\n <span class=\"tw-text-gray-700 tw-font-medium tw-flex-1\">Away</span>\n <cide-ele-icon *ngIf=\"userStatusService.userStatus().status === 'away'\" type=\"none\"\n size=\"xs\" class=\"tw-text-yellow-600\">check</cide-ele-icon>\n </button>\n\n <button (click)=\"setUserStatus('busy')\"\n class=\"status-option tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-text-sm tw-rounded-lg tw-transition-all tw-duration-200 hover:tw-bg-orange-50 tw-group\"\n [class.tw-bg-orange-50]=\"userStatusService.userStatus().status === 'busy'\"\n [class.tw-ring-2]=\"userStatusService.userStatus().status === 'busy'\"\n [class.tw-ring-orange-200]=\"userStatusService.userStatus().status === 'busy'\">\n <div\n class=\"tw-w-3 tw-h-3 tw-rounded-full tw-bg-orange-500 tw-shadow-sm group-hover:tw-scale-110 tw-transition-transform\">\n </div>\n <span class=\"tw-text-gray-700 tw-font-medium tw-flex-1\">Busy</span>\n <cide-ele-icon *ngIf=\"userStatusService.userStatus().status === 'busy'\" type=\"none\"\n size=\"xs\" class=\"tw-text-orange-600\">check</cide-ele-icon>\n </button>\n\n <button (click)=\"setUserStatus('do-not-disturb')\"\n class=\"status-option tw-w-full tw-flex tw-items-center tw-gap-3 tw-px-3 tw-py-2.5 tw-text-sm tw-rounded-lg tw-transition-all tw-duration-200 hover:tw-bg-red-50 tw-group\"\n [class.tw-bg-red-50]=\"userStatusService.userStatus().status === 'do-not-disturb'\"\n [class.tw-ring-2]=\"userStatusService.userStatus().status === 'do-not-disturb'\"\n [class.tw-ring-red-200]=\"userStatusService.userStatus().status === 'do-not-disturb'\">\n <div\n class=\"tw-w-3 tw-h-3 tw-rounded-full tw-bg-red-500 tw-shadow-sm group-hover:tw-scale-110 tw-transition-transform\">\n </div>\n <span class=\"tw-text-gray-700 tw-font-medium tw-flex-1\">Do not disturb</span>\n <cide-ele-icon *ngIf=\"userStatusService.userStatus().status === 'do-not-disturb'\"\n type=\"none\" size=\"xs\" class=\"tw-text-red-600\">check</cide-ele-icon>\n </button>\n </div>\n </div>\n\n <!-- Enhanced Quick Actions Section -->\n <div class=\"tw-p-4 tw-bg-gray-50/50\">\n <h4\n class=\"tw-text-sm tw-font-semibold tw-text-gray-800 tw-mb-3 tw-flex tw-items-center tw-gap-2\">\n <div\n class=\"tw-w-5 tw-h-5 tw-rounded-md tw-bg-gray-100 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon type=\"none\" size=\"2xs\" class=\"tw-text-gray-600\">bolt</cide-ele-icon>\n </div>\n Quick Actions\n </h4>\n <div class=\"tw-space-y-1\">\n <a href=\"#\"\n class=\"quick-action tw-group tw-flex tw-items-center tw-px-3 tw-py-2 tw-text-sm tw-text-gray-700 tw-rounded-lg hover:tw-bg-white tw-transition-all tw-duration-200\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-lg tw-bg-blue-100 tw-flex tw-items-center tw-justify-center tw-mr-3 group-hover:tw-bg-blue-200 tw-transition-colors\">\n <cide-ele-icon type=\"none\" size=\"xs\" class=\"tw-text-blue-600\">person</cide-ele-icon>\n </div>\n <span class=\"tw-flex-1\">View Profile</span>\n <cide-ele-icon type=\"none\" size=\"xs\"\n class=\"tw-text-gray-400 group-hover:tw-text-gray-600 tw-transition-colors\">chevron_right</cide-ele-icon>\n </a>\n <a href=\"#\"\n class=\"quick-action tw-group tw-flex tw-items-center tw-px-3 tw-py-2 tw-text-sm tw-text-gray-700 tw-rounded-lg hover:tw-bg-white tw-transition-all tw-duration-200\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-lg tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-mr-3 group-hover:tw-bg-gray-200 tw-transition-colors\">\n <cide-ele-icon type=\"none\" size=\"xs\"\n class=\"tw-text-gray-600\">settings</cide-ele-icon>\n </div>\n <span class=\"tw-flex-1\">Preferences</span>\n <cide-ele-icon type=\"none\" size=\"xs\"\n class=\"tw-text-gray-400 group-hover:tw-text-gray-600 tw-transition-colors\">chevron_right</cide-ele-icon>\n </a>\n </div>\n </div>\n\n <!-- Enhanced Sign Out Section -->\n <div class=\"tw-p-4\">\n <a href=\"#\"\n class=\"tw-group tw-flex tw-items-center tw-px-3 tw-py-2.5 tw-text-sm tw-text-red-600 tw-rounded-lg hover:tw-bg-red-50 tw-transition-all tw-duration-200 tw-font-medium\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-lg tw-bg-red-100 tw-flex tw-items-center tw-justify-center tw-mr-3 group-hover:tw-bg-red-200 tw-transition-colors\">\n <cide-ele-icon type=\"none\" size=\"xs\" class=\"tw-text-red-600\">logout</cide-ele-icon>\n </div>\n <span class=\"tw-flex-1\">Sign out</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div> <!-- Second tier sidebar (Expanded view) -->\n <div class=\"cide-lyt-sidebar-menu tw-h-full tw-overflow-hidden tw-shadow-sm\">\n <div class=\"tw-flex tw-flex-col tw-h-full\">\n <!-- Header section with search and options -->\n <div class=\"sidebar-header tw-p-4 tw-border-b tw-border-gray-100\">\n <!-- Title with back button - Clean layout without online indicator -->\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-mb-4\">\n <button\n class=\"back-button tw-p-1.5 tw-rounded-lg tw-text-gray-500 hover:tw-bg-gray-100 hover:tw-text-gray-700 tw-transition-colors tw-flex-shrink-0\"\n [cideEleTooltip]=\"'Back to home'\" tooltipPlacement=\"bottom\">\n <cide-ele-icon type=\"none\" size=\"xs\" class=\"tw-transition-transform hover:tw-scale-110\">{{\n getActiveModuleIcon() }}</cide-ele-icon>\n </button>\n <div class=\"tw-flex-1 tw-min-w-0\">\n <h2 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-leading-5\">\n {{ appState.getActiveModuleTitle() || 'Menu' }}\n </h2>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-mt-0.5\">\n Module Dashboard\n </p>\n </div>\n </div>\n\n <!-- Search and options -->\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <div class=\"search-wrapper tw-relative tw-flex-1\">\n <cide-ele-input type=\"text\" leadingIcon=\"search\" size=\"xs\" placeholder=\"Search settings...\"\n [clearInput]=\"true\" [(ngModel)]=\"searchText\" (input)=\"onSearch()\">\n </cide-ele-input>\n <div\n class=\"search-shortcut tw-absolute tw-right-3 tw-top-1/2 -tw-translate-y-1/2 tw-bg-gray-100 tw-text-gray-500 tw-rounded tw-px-1.5 tw-py-0.5 tw-text-xs\">\n \u2318K</div>\n </div>\n <button\n class=\"tw-ml-2 tw-p-1.5 tw-rounded-lg tw-text-gray-500 hover:tw-bg-gray-100 hover:tw-text-gray-700 tw-transition-colors\"\n (click)=\"toggleOptions()\">\n <cide-ele-icon type=\"none\" size=\"xs\">more_vert</cide-ele-icon>\n </button>\n\n <!-- Options dropdown menu -->\n <div *ngIf=\"showOptions\"\n class=\"options-menu tw-absolute tw-right-4 tw-top-16 tw-mt-2 tw-w-48 tw-rounded-md tw-shadow-lg tw-bg-white tw-ring-1 tw-ring-black tw-ring-opacity-5 tw-divide-y tw-divide-gray-100 tw-z-10\">\n <div class=\"tw-py-1\">\n <a href=\"#\"\n class=\"tw-group tw-flex tw-items-center tw-px-4 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100\">\n <cide-ele-icon class=\"tw-mr-3 tw-text-gray-500 tw-group-hover:tw-text-gray-600\"\n type=\"none\" size=\"xs\">refresh</cide-ele-icon>\n Refresh\n </a>\n <a href=\"#\"\n class=\"tw-group tw-flex tw-items-center tw-px-4 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100\">\n <cide-ele-icon class=\"tw-mr-3 tw-text-gray-500 tw-group-hover:tw-text-gray-600\"\n type=\"none\" size=\"xs\">sync</cide-ele-icon>\n Sync settings\n </a>\n </div>\n <div class=\"tw-py-1\">\n <a href=\"#\"\n class=\"tw-group tw-flex tw-items-center tw-px-4 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100\">\n <cide-ele-icon class=\"tw-mr-3 tw-text-gray-500 tw-group-hover:tw-text-gray-600\"\n type=\"none\" size=\"xs\">help_outline</cide-ele-icon>\n Help & support\n </a>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Menu items with categories -->\n <div class=\"sidebar-content tw-overflow-y-auto tw-flex-1\" (scroll)=\"onScroll($event)\">\n <!-- Search results if searching -->\n <div *ngIf=\"searchText\" class=\"sidebar-section tw-p-4\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\n <h3 class=\"tw-text-xs tw-font-semibold tw-text-gray-500\">SEARCH RESULTS</h3>\n <span class=\"tw-text-xs tw-text-gray-500\">{{searchResults.length}} items</span>\n </div>\n\n <div *ngIf=\"searchResults.length > 0\" class=\"tw-space-y-1\">\n <a *ngFor=\"let item of searchResults\" href=\"#\"\n class=\"menu-item tw-flex tw-items-center tw-px-3 tw-py-2 tw-rounded-md hover:tw-bg-gray-50\">\n <cide-ele-icon class=\"tw-mr-3 tw-text-gray-500\" type=\"none\"\n size=\"xs\">{{item.icon}}</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-700\">{{item.title}}</span>\n </a>\n </div>\n\n <div *ngIf=\"searchResults.length === 0\" class=\"tw-p-4 tw-text-center\">\n <div class=\"tw-flex tw-justify-center tw-mb-3\">\n <cide-ele-icon class=\"tw-text-gray-400\" type=\"none\" size=\"md\">search_off</cide-ele-icon>\n </div>\n <p class=\"tw-text-sm tw-text-gray-500\">No results for \"{{searchText}}\"</p>\n <p class=\"tw-text-xs tw-text-gray-400 tw-mt-1\">Try another search term</p>\n </div>\n </div>\n\n <!-- Only show these sections if not searching -->\n <ng-container *ngIf=\"!searchText\">\n <!-- Loading state -->\n <div *ngIf=\"loadingMenus\" class=\"tw-p-4 tw-text-center\">\n <div class=\"tw-flex tw-justify-center tw-mb-3\">\n <cide-ele-spinner variant=\"circle\" size=\"xs\"></cide-ele-spinner>\n </div>\n <p class=\"tw-text-sm tw-text-gray-500\">Loading menus...</p>\n </div>\n\n <!-- Dynamic menu tree -->\n <div *ngIf=\"!loadingMenus && menuLoadComplete\" class=\"sidebar-section tw-p-4\"\n [class.animate-in]=\"animateSections[0]\">\n <ng-container\n *ngTemplateOutlet=\"recursiveMenu; context: {$implicit: selectedModuleMenus, level: 0}\"></ng-container>\n </div>\n\n <!-- Empty state -->\n <div *ngIf=\"!loadingMenus && menuLoadComplete && selectedModuleMenus.length === 0\"\n class=\"tw-p-4 tw-text-center\">\n <div class=\"tw-flex tw-justify-center tw-mb-3\">\n <cide-ele-icon class=\"tw-text-gray-400\" type=\"none\" size=\"md\">folder_open</cide-ele-icon>\n </div>\n <p class=\"tw-text-sm tw-text-gray-500\">No menus available</p>\n <p class=\"tw-text-xs tw-text-gray-400 tw-mt-1\">Select a module to view its menus</p>\n </div>\n </ng-container>\n\n <!-- Recursive menu template -->\n <ng-template #recursiveMenu let-menus let-level=\"level\">\n <div [class.tw-ml-0]=\"level > 0\">\n <div *ngFor=\"let menu of menus\" class=\"tw-mb-2\">\n <!-- Title type items (section headers) -->\n <div *ngIf=\"menu.syme_type === 'title'\" class=\"tw-mb-3\">\n <h3 class=\"tw-text-xs tw-font-semibold tw-text-gray-500 tw-uppercase tw-mb-2\">{{\n menu.syme_title }}</h3>\n <!-- Render children of title -->\n <ng-container *ngIf=\"menu.children && menu.children.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"recursiveMenu; context: {$implicit: menu.children, level: level + 1}\"></ng-container>\n </ng-container>\n </div>\n\n <!-- Section type items (collapsible sections) -->\n <div *ngIf=\"menu.syme_type === 'section'\" class=\"tw-mb-2\">\n <!-- Section header (clickable to expand/collapse) -->\n <button \n (click)=\"toggleSection(menu._id)\"\n (keydown.enter)=\"toggleSection(menu._id)\"\n (keydown.space)=\"toggleSection(menu._id)\"\n class=\"section-header tw-w-full tw-flex tw-items-center tw-px-3 tw-py-2 tw-rounded-md hover:tw-bg-gray-50 tw-cursor-pointer tw-transition-colors tw-text-left\"\n [class.tw-bg-blue-50]=\"isSectionExpanded(menu._id)\"\n type=\"button\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-expanded]=\"isSectionExpanded(menu._id)\"\n [attr.aria-label]=\"'Toggle ' + menu.syme_title + ' section'\">\n \n <!-- Section Icon (left side, like other menu items) -->\n <cide-ele-icon \n class=\"tw-mr-3 tw-text-gray-500\" \n type=\"none\"\n size=\"xs\">{{ menu.syme_icon || 'folder' }}</cide-ele-icon>\n \n <!-- Section Title -->\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-800\">{{ menu.syme_title }}</span>\n \n <!-- Right side icons container -->\n <div class=\"tw-ml-auto tw-flex tw-items-center tw-space-x-2\">\n <!-- Child Count Badge -->\n <span \n *ngIf=\"menu.children && menu.children.length > 0\"\n class=\"tw-px-2 tw-py-0.5 tw-bg-gray-200 tw-text-gray-600 tw-rounded-full tw-text-xs tw-font-medium\">\n {{ menu.children.length }}\n </span>\n \n <!-- Expand/Collapse Icon (right side) -->\n <cide-ele-icon \n class=\"tw-text-gray-400 tw-transition-transform tw-duration-200\"\n [class.tw-rotate-90]=\"isSectionExpanded(menu._id)\"\n type=\"none\" \n size=\"2xs\">chevron_right</cide-ele-icon>\n </div>\n </button>\n\n <!-- Section Content (collapsible) -->\n <div \n *ngIf=\"isSectionExpanded(menu._id) && menu.children && menu.children.length > 0\"\n class=\"section-content tw-mt-2 tw-ml-2 tw-border-l tw-border-gray-200 tw-pl-3\"\n [@slideInOut]=\"isSectionExpanded(menu._id) ? 'in' : 'out'\">\n <ng-container\n *ngTemplateOutlet=\"recursiveMenu; context: {$implicit: menu.children, level: level + 1}\"></ng-container>\n </div>\n </div>\n\n <!-- Menu type items (clickable links) -->\n <a *ngIf=\"menu.syme_type === 'menu'\" (click)=\"onMenuClick(menu)\"\n (keydown.enter)=\"onMenuClick(menu)\" (keydown.space)=\"onMenuClick(menu)\" tabindex=\"0\"\n role=\"button\"\n class=\"menu-item tw-flex tw-items-center tw-px-1 tw-py-1 tw-rounded-md hover:tw-bg-gray-50 tw-cursor-pointer tw-transition-colors\">\n <cide-ele-icon *ngIf=\"menu.syme_icon\" class=\"tw-mr-3 tw-text-gray-500\" type=\"none\"\n size=\"xs\">{{ menu.syme_icon }}</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-700\">{{ menu.syme_title }}</span>\n <cide-ele-icon *ngIf=\"menu.children && menu.children.length > 0\"\n class=\"tw-ml-auto tw-text-gray-400\" type=\"none\"\n size=\"2xs\">chevron_right</cide-ele-icon>\n </a>\n\n <!-- Render nested children for menu items -->\n <ng-container\n *ngIf=\"menu.syme_type === 'menu' && menu.children && menu.children.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"recursiveMenu; context: {$implicit: menu.children, level: level + 1}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </div>\n\n <!-- Notification panel (overlays content when shown) -->\n <div *ngIf=\"showNotifications\" class=\"notification-panel tw-absolute tw-inset-0 tw-bg-white tw-z-20\">\n <div class=\"tw-p-4 tw-border-b tw-border-gray-100 tw-flex tw-justify-between tw-items-center\">\n <h3 class=\"tw-text-sm tw-font-medium\">Notifications</h3>\n <button class=\"tw-p-1.5 tw-rounded-lg tw-text-gray-500 hover:tw-bg-gray-100\"\n (click)=\"toggleNotificationsPanel()\">\n <cide-ele-icon type=\"none\" size=\"xs\">close</cide-ele-icon>\n </button>\n </div>\n\n <div class=\"tw-p-4\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-mb-4\">\n <div class=\"tw-text-xs tw-text-gray-500\">Today</div>\n <button class=\"tw-text-xs tw-text-blue-500\">Mark all as read</button>\n </div>\n\n <div class=\"tw-space-y-3\">\n <div\n class=\"notification-item tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border-l-4 tw-border-blue-500\">\n <div class=\"tw-flex tw-gap-3\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-blue-100 tw-flex tw-items-center tw-justify-center tw-text-blue-500\">\n <cide-ele-icon type=\"none\" size=\"xs\">notifications</cide-ele-icon>\n </div>\n <div class=\"tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900\">New feature available</div>\n <div class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">Try our new analytics dashboard\n with improved visualizations.</div>\n <div class=\"tw-text-xs tw-text-gray-400 tw-mt-2\">Just now</div>\n </div>\n </div>\n </div>\n\n <div class=\"notification-item tw-p-3 tw-rounded-lg tw-border-l-4 tw-border-transparent\">\n <div class=\"tw-flex tw-gap-3\">\n <div\n class=\"tw-w-8 tw-h-8 tw-rounded-full tw-bg-gray-100 tw-flex tw-items-center tw-justify-center tw-text-gray-500\">\n <cide-ele-icon type=\"none\" size=\"xs\">person_add</cide-ele-icon>\n </div>\n <div class=\"tw-flex-1\">\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900\">New team member</div>\n <div class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">Jane Smith has joined your team.\n </div>\n <div class=\"tw-text-xs tw-text-gray-400 tw-mt-2\">2 hours ago</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Storage info at bottom -->\n <div class=\"sidebar-footer tw-p-4 tw-border-t tw-border-gray-100\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\n <div class=\"tw-flex tw-items-center\">\n <cide-ele-icon class=\"tw-mr-2 tw-text-gray-500\" type=\"none\"\n size=\"xs\">cloud_upload</cide-ele-icon>\n <span class=\"tw-text-sm tw-text-gray-700\">Storage</span>\n </div>\n <button\n class=\"upgrade-button tw-text-xs tw-text-blue-500 tw-font-medium tw-px-2 tw-py-1 tw-rounded hover:tw-bg-blue-50 tw-transition-colors\">Upgrade</button>\n </div>\n <div class=\"storage-bar tw-bg-gray-200 tw-rounded-full tw-h-1.5\">\n <div class=\"storage-fill tw-bg-blue-500 tw-h-1.5 tw-rounded-full tw-transition-all\"\n style=\"width: 75%\"></div>\n </div>\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mt-1.5\">\n <div class=\"tw-text-xs tw-text-gray-500\">18.2 GB of 20 GB used</div>\n <div class=\"tw-text-xs tw-text-blue-500\">75%</div>\n </div>\n\n <!-- Plan features quick view -->\n <div\n class=\"plan-features tw-flex tw-items-center tw-justify-between tw-mt-3 tw-pt-3 tw-border-t tw-border-gray-100\">\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-xs tw-font-medium tw-text-gray-700\">Free Plan</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Basic features</span>\n </div>\n <div class=\"tw-flex tw-gap-2\">\n <button\n class=\"tw-text-xs tw-bg-white tw-border tw-border-gray-200 tw-text-gray-700 tw-py-1 tw-px-2 tw-rounded hover:tw-bg-gray-50 tw-transition-colors\">Compare\n Plans</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Resizer -->\n <div parentElementSelector=\"#cide-lyt-sidebar-page-inner-wrapper\"\n [minPrevSize]=\"sidebarSetupData.cide_lyt_sidebar_width\" prevElementSelector=\"#cide-lyt-sidebar-page\"\n nextElementSelector=\"#cide-lyt-page-wrapper\" cideEleResizer direction=\"horizontal\">\n <div class=\"cide-lyt-devider-track tw-w-full tw-h-full\"></div>\n </div>\n</nav>", styles: [".cide-lyt-sidebar{display:flex;box-shadow:0 4px 12px #0000000d;overflow:hidden;background-color:var(--cide-theme-sidebar-color);--sidebar-tooltip-bg: var(--cide-theme-dark-color);--sidebar-tooltip-color: var(--cide-theme-light-color);--sidebar-shadow-color: rgba(0, 0, 0, .05);transition:width .3s cubic-bezier(.4,0,.2,1);max-height:100%;isolation:isolate;will-change:width;position:relative}.cide-lyt-sidebar.collapsed{animation:collapseEffect .3s forwards}.cide-lyt-sidebar:not(.collapsed){animation:expandEffect .3s forwards}@keyframes collapseEffect{0%{box-shadow:0 4px 12px var(--sidebar-shadow-color)}to{box-shadow:0 2px 8px var(--sidebar-shadow-color)}}@keyframes expandEffect{0%{box-shadow:0 2px 8px var(--sidebar-shadow-color)}to{box-shadow:0 4px 12px var(--sidebar-shadow-color)}}.cide-lyt-sidebar.animating{transition:width .3s cubic-bezier(.25,.46,.45,.94)}.cide-lyt-sidebar.collapsed .cide-lyt-sidebar-menu{width:0;opacity:0;visibility:hidden;transform:translate(-10px)}.cide-lyt-stack{background:linear-gradient(to bottom,var(--cide-theme-sidebar-color),var(--cide-theme-light-color));z-index:10;border-right:1px solid var(--cide-theme-light-color);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:0 0 1.5rem;transition:all .3s cubic-bezier(.4,0,.2,1);overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--cide-theme-color-brand-primary) transparent;position:relative;will-change:transform;scroll-behavior:smooth;box-shadow:inset -1px 0 0 var(--sidebar-shadow-color)}.cide-lyt-stack:after{content:\"\";position:absolute;bottom:0;left:0;right:0;height:30px;background:linear-gradient(to top,color-mix(in srgb,var(--cide-theme-sidebar-color) 90%,transparent),transparent);pointer-events:none;opacity:0;transition:opacity .3s ease;z-index:2}.cide-lyt-stack:before{content:\"\";position:absolute;top:0;left:0;right:0;height:30px;background:linear-gradient(to bottom,color-mix(in srgb,var(--cide-theme-sidebar-color) 90%,transparent),transparent);pointer-events:none;opacity:0;transition:opacity .3s ease;z-index:2}.cide-lyt-stack.scrolled-down:before{opacity:1}.cide-lyt-stack.scrolled-up:after{opacity:1}.cide-lyt-stack{position:relative;z-index:1;-webkit-overflow-scrolling:touch;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:var(--cide-theme-color-brand-primary) transparent}.cide-lyt-stack::-webkit-scrollbar{width:2px}.cide-lyt-stack::-webkit-scrollbar-track{background:transparent;margin:10px 0}.cide-lyt-stack::-webkit-scrollbar-thumb{background:var(--cide-theme-color-brand-primary);border-radius:4px;box-shadow:0 0 6px var(--cide-theme-color-brand-primary)}.cide-lyt-stack:hover::-webkit-scrollbar-thumb{background:var(--cide-theme-color-brand-primary);box-shadow:0 0 10px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.4)}.cide-lyt-stack:hover::-webkit-scrollbar{width:3px}.cide-lyt-stack:before,.cide-lyt-stack:after,.sidebar-content:before,.sidebar-content:after,.notification-panel:before,.notification-panel:after,.user-menu:before,.user-menu:after,.options-menu:before,.options-menu:after{content:\"\";position:absolute;left:0;right:0;height:24px;z-index:5;pointer-events:none;opacity:0;transition:opacity .3s ease}.cide-lyt-stack:before,.sidebar-content:before,.notification-panel:before,.user-menu:before,.options-menu:before{top:0;background:linear-gradient(to bottom,color-mix(in srgb,var(--cide-theme-sidebar-color) 90%,transparent),#fff0)}.cide-lyt-stack:after,.sidebar-content:after,.notification-panel:after,.user-menu:after,.options-menu:after{bottom:0;background:linear-gradient(to top,color-mix(in srgb,var(--cide-theme-sidebar-color) 90%,transparent),#fff0)}.cide-lyt-stack.is-scrollable-top:before,.sidebar-content.is-scrollable-top:before,.notification-panel.is-scrollable-top:before,.user-menu.is-scrollable-top:before,.options-menu.is-scrollable-top:before{opacity:1}.cide-lyt-stack.is-scrollable-bottom:after,.sidebar-content.is-scrollable-bottom:after,.notification-panel.is-scrollable-bottom:after,.user-menu.is-scrollable-bottom:after,.options-menu.is-scrollable-bottom:after{opacity:1}.collapse-toggle{margin-bottom:.5rem;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1);z-index:5;border-radius:50%;overflow:hidden}.collapse-toggle:before{content:\"\";position:absolute;inset:0;background:var(--cide-theme-label-color);opacity:0;transition:opacity .2s ease;z-index:-1}.collapse-toggle:hover{transform:scale(1.1)}.collapse-toggle:hover:before{opacity:1}.collapse-toggle:active{transform:scale(.95);transition:transform .1s ease}.collapse-toggle:focus-visible{outline:2px solid var(--cide-theme-color-brand-primary);outline-offset:2px}.sidebar-scroll-content{width:100%;padding-top:.75rem;position:relative;z-index:1;overflow-y:auto;overflow-x:hidden;flex-grow:1;display:flex;flex-direction:column;align-items:center;padding:1rem 0;gap:.5rem;max-height:calc(100% - 8rem)}.nav-item{position:relative;width:30px;height:30px;display:flex;align-items:center;justify-content:center;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;margin:4px 0;border-radius:10px;box-shadow:0 0 #3b82f600;transform-origin:center;overflow:hidden;color:var(--cide-theme-text-color)}.nav-item:before{content:\"\";position:absolute;inset:0;background:radial-gradient(circle at center,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.08),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.01));opacity:0;transition:opacity .3s ease;z-index:-1}.nav-item:hover{background-color:color-mix(in srgb,var(--cide-theme-light-color) 90%,transparent);transform:translateY(-1px);box-shadow:0 2px 6px var(--cide-theme-shadow-color)}.nav-item:hover:before{opacity:1}.nav-item:active{transition:all .1s ease;transform:translateY(-1px);box-shadow:0 2px 6px var(--cide-theme-shadow-color)}.nav-item:active{transform:translateY(1px);transition:all .1s ease}.nav-item-active{background:linear-gradient(135deg,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.08),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.12));box-shadow:0 2px 8px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.15);transform:translateZ(0);color:var(--cide-theme-color-brand-primary)}.nav-item-active:after{content:\"\";position:absolute;bottom:-2px;left:30%;right:30%;height:2px;background:linear-gradient(to right,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0),var(--cide-theme-color-brand-primary),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0));border-radius:1px;animation:pulseGlow 2s infinite}@keyframes pulseGlow{0%{opacity:.4}50%{opacity:1}to{opacity:.4}}.nav-item-active:hover{background:linear-gradient(135deg,#3b82f61a,#3b82f626)}.nav-badge{z-index:5;transition:all .3s ease}.nav-item:hover .nav-badge{transform:scale(1.1)}.nav-tooltip{position:fixed;left:64px;top:50%;transform:translateY(-50%) translate(-5px);background-color:var(--sidebar-tooltip-bg);color:var(--sidebar-tooltip-color);padding:.4rem .75rem;border-radius:.25rem;font-size:.75rem;white-space:nowrap;opacity:0;pointer-events:none;transition:all .2s cubic-bezier(.4,0,.2,1);z-index:1000;box-shadow:0 2px 8px var(--cide-theme-shadow-color);letter-spacing:.01em;will-change:transform,opacity;max-width:220px;text-overflow:ellipsis;overflow:hidden;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.nav-tooltip:before{content:\"\";position:absolute;top:50%;right:100%;transform:translateY(-50%);border-width:6px;border-style:solid;border-color:transparent var(--sidebar-tooltip-bg) transparent transparent;filter:drop-shadow(-2px 0px 1px rgba(0,0,0,.1))}.nav-item:hover .nav-tooltip{opacity:1;transform:translateY(-50%) translate(0);box-shadow:0 3px 12px var(--cide-theme-shadow-color)}.nav-item-active{background-color:color-mix(in srgb,var(--cide-theme-color-brand-primary) 10%,var(--cide-theme-light-color));border-radius:.5rem}.nav-item-active:before{opacity:0}.active-nav-icon{color:var(--cide-lyt-sidebar-nav-item-color-active)!important;filter:drop-shadow(0 0 3px rgba(59,130,246,.3))}.nav-indicator{position:absolute;left:-8px;top:50%;transform:translateY(-50%);width:3px;height:60%;background:var(--cide-theme-color-brand-primary);border-radius:0 4px 4px 0;opacity:0;transition:all .3s ease;box-shadow:0 0 6px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.5)}.nav-item-active .nav-indicator{opacity:1;left:0}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.sidebar-scroll-content .nav-item{opacity:0;animation:fadeSlideIn .5s forwards}.sidebar-scroll-content .nav-item:nth-child(1){animation-delay:.05s}.sidebar-scroll-content .nav-item:nth-child(2){animation-delay:.1s}.sidebar-scroll-content .nav-item:nth-child(3){animation-delay:.15s}.sidebar-scroll-content .nav-item:nth-child(4){animation-delay:.2s}.sidebar-scroll-content .nav-item:nth-child(5){animation-delay:.25s}.sidebar-scroll-content .nav-item:nth-child(6){animation-delay:.3s}.sidebar-scroll-content .nav-item:nth-child(7){animation-delay:.35s}.sidebar-scroll-content .nav-item:nth-child(8){animation-delay:.4s}.sidebar-scroll-content .nav-item:nth-child(9){animation-delay:.45s}.sidebar-scroll-content .nav-item:nth-child(10){animation-delay:.5s}.sidebar-scroll-content .nav-item:nth-child(11){animation-delay:.55s}.sidebar-scroll-content .nav-item:nth-child(12){animation-delay:.6s}.sidebar-scroll-content .nav-item:nth-child(13){animation-delay:.65s}.sidebar-scroll-content .nav-item:nth-child(14){animation-delay:.7s}.sidebar-scroll-content .nav-item:nth-child(15){animation-delay:.75s}cide-ele-icon[type=box]{cursor:pointer;width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:.5rem;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}cide-ele-icon[type=box]:hover{background-color:#f3f4f6;transform:translateY(-1px)}cide-ele-icon[type=box]:active{transform:translateY(0)}.theme-toggle{position:relative;overflow:hidden;padding:.5rem;border-radius:12px;background-color:transparent;border:2px solid transparent;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}.theme-toggle:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background:radial-gradient(circle at center,rgba(59,130,246,.2) 0%,transparent 70%);opacity:0;transition:opacity .3s ease;border-radius:.5rem}.theme-toggle:hover{background-color:var(--cide-theme-hover-bg-color, rgba(243, 244, 246, 1));border-color:var(--cide-theme-color-brand-primary, rgba(59, 130, 246, .3));transform:translateY(-1px);box-shadow:0 4px 12px #0000001a}.theme-toggle:hover:after{opacity:1}.theme-toggle:focus{outline:none;box-shadow:0 0 0 3px #3b82f64d}.theme-toggle cide-ele-icon{color:var(--cide-theme-icon-color, #6b7280);transition:all .2s ease;width:1.25rem;height:1.25rem;display:flex;align-items:center;justify-content:center}.theme-toggle:hover cide-ele-icon{color:var(--cide-theme-color-brand-primary, #3b82f6);transform:scale(1.1) rotate(10deg)}.dark-mode .theme-toggle:after{background:radial-gradient(circle at center,rgba(96,165,250,.2) 0%,transparent 70%)}.dark-mode .theme-toggle:hover{background-color:var(--cide-theme-dark-hover-bg-color, rgba(55, 65, 81, 1));border-color:var(--cide-theme-color-brand-primary, rgba(96, 165, 250, .3))}.notification-badge{font-size:.65rem;min-width:20px;height:20px;box-shadow:0 2px 4px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.25);transform-origin:center;position:relative;animation:pulseNotification 2s infinite;overflow:hidden;background-color:var(--cide-theme-color-brand-primary);color:var(--cide-theme-light-color)}.notification-badge:before{content:\"\";position:absolute;inset:0;background:linear-gradient(135deg,#ffffff4d,#fff0);opacity:0;transition:opacity .3s ease}.notification-badge:hover:before{opacity:1}@keyframes pulseNotification{0%{box-shadow:0 0 rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.4);transform:scale(1)}40%{transform:translateY(-5px)}50%{box-shadow:0 0 0 4px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0);transform:scale(1.05)}60%{transform:translateY(-2px)}to{box-shadow:0 0 rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0);transform:scale(1)}}.user-avatar{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;box-shadow:0 2px 5px #00000014;z-index:2}.user-avatar:hover{transform:scale(1.08);box-shadow:0 4px 12px #00000026}.user-avatar:before{content:\"\";position:absolute;inset:-3px;background:radial-gradient(circle,rgba(59,130,246,.3),transparent 70%);opacity:0;transition:opacity .3s ease;z-index:-1;border-radius:50%}.user-avatar:hover:before{opacity:1}.user-status{position:absolute;bottom:0;right:0;width:10px;height:10px;border-radius:50%;border:2px solid white;transition:all .3s ease}.user-status.online{background-color:#10b981;animation:statusPulse 2s infinite}.user-status.busy{background-color:#f59e0b}.user-status.offline{background-color:#6b7280}.user-status.dnd{background-color:#ef4444}@keyframes statusPulse{0%{box-shadow:0 0 #10b98166}70%{box-shadow:0 0 0 6px #10b98100}to{box-shadow:0 0 #10b98100}}.dark-mode .user-avatar{box-shadow:0 2px 5px #0003}.dark-mode .user-avatar:before{background:radial-gradient(circle,rgba(96,165,250,.4),transparent 70%)}.dark-mode .user-status{border-color:#0f172a}.user-dropdown{position:relative}.user-menu{animation:fadeInUp .2s cubic-bezier(.4,0,.2,1);z-index:30;margin-left:10px;margin-bottom:5px;max-height:80vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(209,213,219,.5) transparent;box-shadow:0 10px 25px #0000001a;border-radius:.75rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);position:absolute;left:100%;bottom:0;margin-top:.5rem;margin-left:.5rem;width:14rem;border-radius:.375rem;box-shadow:0 10px 15px -3px var(--cide-theme-shadow-color),0 4px 6px -2px var(--cide-theme-shadow-color);background-color:var(--cide-theme-sidebar-color);border:1px solid var(--cide-theme-border-color);z-index:50;overflow:hidden}.user-menu a{color:var(--cide-theme-text-color);transition:background-color .2s ease}.user-menu a:hover{background-color:var(--cide-theme-hover-bg-color)}.user-menu .tw-text-red-700{color:var(--cide-theme-error-color)}.user-menu::-webkit-scrollbar{width:3px}.user-menu::-webkit-scrollbar-track{background:transparent}.user-menu::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}@keyframes fadeInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.user-status{transition:all .3s ease;box-shadow:0 0 0 2px var(--cide-theme-sidebar-color)}.user-status.online{animation:pulseOnline 2s infinite}@keyframes pulseOnline{0%{box-shadow:0 0 #22c55e66,0 0 0 2px var(--cide-theme-sidebar-color)}70%{box-shadow:0 0 0 4px #22c55e00,0 0 0 2px var(--cide-theme-sidebar-color)}to{box-shadow:0 0 #22c55e00,0 0 0 2px var(--cide-theme-sidebar-color)}}.cide-lyt-sidebar-menu{width:auto;background-color:var(--cide-theme-sidebar-color);border-left:1px solid rgba(243,244,246,1);transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;overflow:hidden;max-height:100%;position:relative;will-change:width,opacity,transform}.sidebar-header{background-color:var(--cide-theme-sidebar-color);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);position:sticky;top:0;z-index:10;border-bottom:1px solid rgba(243,244,246,.8);padding:1rem .75rem;transition:all .3s ease}.sidebar-header.scrolled{box-shadow:0 4px 10px -8px #0000001a}.back-button{transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%}.back-button:hover{transform:translate(-2px);background-color:#f3f4f6}.back-button:active{transform:translate(-1px) scale(.95)}.search-wrapper{position:relative;transition:all .3s ease}.search-wrapper:focus-within{transform:translateY(-1px)}.search-shortcut{font-size:.65rem;opacity:.7;letter-spacing:.02em;pointer-events:none;padding:.1rem .3rem;background-color:#f3f4f6cc;border-radius:.25rem;border:1px solid rgba(229,231,235,.8);transition:all .3s ease}.search-wrapper:focus-within .search-shortcut{opacity:.5}.options-menu{animation:fadeInUp .2s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 12px #0000001a;max-height:70vh;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(209,213,219,.5) transparent;border-radius:.75rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.options-menu::-webkit-scrollbar{width:3px}.options-menu::-webkit-scrollbar-track{background:transparent}.options-menu::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}.sidebar-section{position:relative;padding:.5rem 0}.sidebar-section:not(:first-child):before{content:\"\";height:1px;background:linear-gradient(to right,#e5e7eb00,#e5e7eb80,#e5e7eb00);position:absolute;top:0;left:10%;right:10%}.tw-text-xs.tw-font-semibold.tw-text-gray-500{font-size:.7rem;letter-spacing:.05em;text-transform:uppercase;position:relative;display:inline-block;padding:0 .5rem;color:var(--cide-theme-label-color)}.tw-text-xs.tw-font-semibold.tw-text-gray-500:after{content:\"\";position:absolute;height:3px;width:2rem;background:linear-gradient(to right,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.5),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0));bottom:-4px;left:.5rem;border-radius:3px;transition:width .3s ease}.sidebar-section:hover .tw-text-xs.tw-font-semibold.tw-text-gray-500:after{width:3rem}.menu-item{text-decoration:none;transition:all .25s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;margin:3px 0;border-radius:.5rem;transform:translateZ(0);color:var(--cide-theme-text-color)}.menu-item:hover{transform:translate(3px);background-color:var(--cide-theme-light-color);box-shadow:0 1px 3px var(--sidebar-shadow-color)}.active-menu-item{background-color:rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.08);position:relative;box-shadow:0 2px 5px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.1)}.active-menu-item:after{content:\"\";position:absolute;left:0;top:0;height:100%;width:3px;background:linear-gradient(to bottom,var(--cide-theme-color-brand-primary),var(--cide-theme-secondary-color));border-radius:0 2px 2px 0;box-shadow:0 0 6px rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.3);animation:pulseLeftBorder 2s infinite}@keyframes pulseLeftBorder{0%{opacity:.7}50%{opacity:1}to{opacity:.7}}.dark-mode .active-menu-item{background-color:#1e293b80;box-shadow:0 2px 5px #0f172a33}.dark-mode .active-menu-item:after{background:linear-gradient(to bottom,#60a5fa,#3b82f6);box-shadow:0 0 8px #60a5fa66}.quick-actions{transition:all .3s ease;opacity:0;transform:translate(5px);z-index:2}.menu-item:hover .quick-actions{opacity:1;transform:translate(0)}.badge{font-size:.7rem;padding:1px 5px;transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;z-index:1}.menu-item:hover .badge{background-color:#d1d5db}.new-badge{animation:pulse 2s infinite;z-index:1}@keyframes pulse{0%{box-shadow:0 0 #3b82f666}70%{box-shadow:0 0 0 4px #3b82f600}to{box-shadow:0 0 #3b82f600}}.toggle-switch{display:inline-flex;align-items:center;transition:all .2s ease}.toggle-switch:hover{transform:scale(1.05)}.toggle-track{position:relative;cursor:pointer;transition:background-color .3s ease;overflow:hidden}.toggle-track:after{content:\"\";position:absolute;top:50%;left:50%;width:5px;height:5px;background:#ffffffb3;opacity:0;border-radius:100%;transform:scale(1) translate(-50%,-50%);transform-origin:50% 50%}.toggle-track.clicked:after{animation:ripple .6s ease-out}@keyframes ripple{0%{opacity:1;transform:scale(0) translate(-50%,-50%)}to{opacity:0;transform:scale(20) translate(-50%,-50%)}}.alert-box{animation:fadeIn .5s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #fde04726;border-radius:.5rem;position:relative;overflow:hidden}.alert-box:before{content:\"\";position:absolute;inset:0;background-image:url(\"data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23fef3c7' fill-opacity='0.4' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E\");opacity:.3;pointer-events:none}@keyframes fadeIn{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.notification-panel{animation:fadeIn .3s cubic-bezier(.4,0,.2,1);overflow-y:auto;max-height:100vh;scrollbar-width:thin;scrollbar-color:rgba(209,213,219,.5) transparent;padding:.75rem;border-radius:.75rem}.notification-panel::-webkit-scrollbar{width:3px}.notification-panel::-webkit-scrollbar-track{background:transparent}.notification-panel::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}.notification-panel:hover::-webkit-scrollbar-thumb{background-color:#9ca3af80}.notification-item{transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;border-radius:.5rem;margin-bottom:.5rem;position:relative;overflow:hidden}.notification-item:hover{background-color:#f3f4f6;transform:translate(1px)}.notification-item:active{transform:scale(.99)}.notification-item.unread:before{content:\"\";position:absolute;left:0;top:0;height:100%;width:3px;background-color:var(--cide-theme-color-brand-primary);border-radius:0 2px 2px 0}.sidebar-footer{background-color:var(--cide-theme-light-color);position:sticky;bottom:0;z-index:10;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:1px solid rgba(243,244,246,.8);padding:.75rem;transition:all .3s ease}.upgrade-button{transition:all .2s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;border-radius:.5rem;color:var(--cide-theme-text-color)}.upgrade-button:hover{background-color:rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.1);transform:translateY(-1px)}.upgrade-button:active{transform:translateY(0) scale(.98)}.upgrade-button:after{content:\"\";position:absolute;width:12px;height:12px;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%233b82f6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2'%3E%3C/polygon%3E%3C/svg%3E\");top:5px;right:10px;opacity:.5;transform:scale(0);transition:all .3s ease}.upgrade-button:hover:after{transform:scale(1) rotate(20deg);animation:float 3s ease-in-out infinite}@keyframes float{0%,to{transform:scale(1) rotate(5deg) translate(0)}50%{transform:scale(1.1) rotate(-5deg) translate(-2px,-2px)}}.storage-bar{background-color:#e5e7eb80;overflow:hidden;border-radius:4px;height:6px;position:relative}.storage-fill{background:linear-gradient(to right,var(--cide-theme-color-brand-primary),var(--cide-theme-secondary-color));transition:width 1s cubic-bezier(.4,0,.2,1);position:relative;height:100%;border-radius:4px}.storage-fill:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,#fff0,#fff3,#fff0);animation:shimmer 2s infinite}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.plan-features{transition:all .3s ease;padding:.5rem;border-radius:.5rem}.plan-features:hover{background-color:#f3f4f680}.feature-item{display:flex;align-items:center;margin:.25rem 0;position:relative;padding-left:1.25rem;color:var(--cide-theme-text-color)}.feature-item:before{content:\"\\2713\";position:absolute;left:0;color:var(--cide-theme-color-brand-primary);font-size:.7rem;top:50%;transform:translateY(-50%)}.sidebar-content{scrollbar-width:thin;scrollbar-color:rgba(209,213,219,.5) transparent;flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:0 .75rem;transition:all .3s ease;position:relative;scroll-behavior:smooth;scroll-padding:1rem;overscroll-behavior:contain}.sidebar-content:after{content:\"\";position:absolute;bottom:0;left:0;right:0;height:30px;background:linear-gradient(to top,rgba(255,255,255,.9),transparent);pointer-events:none;opacity:0;transition:opacity .3s ease;z-index:2}.sidebar-content:before{content:\"\";position:absolute;top:0;left:0;right:0;height:30px;background:linear-gradient(to bottom,rgba(255,255,255,.9),transparent);pointer-events:none;opacity:0;transition:opacity .3s ease;z-index:2}.sidebar-content.scrolled-down:before{opacity:1}.sidebar-content.scrolled-up:after{opacity:1}.sidebar-content::-webkit-scrollbar{width:3px}.sidebar-content::-webkit-scrollbar-track{background:transparent}.sidebar-content::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}.sidebar-content:hover::-webkit-scrollbar-thumb{background-color:#9ca3af80}.cide-lyt-sidebar *::-webkit-scrollbar{width:3px}.cide-lyt-sidebar *::-webkit-scrollbar-track{background:transparent}.cide-lyt-sidebar *::-webkit-scrollbar-thumb{background-color:#d1d5db80;border-radius:20px}.cide-lyt-sidebar *:hover::-webkit-scrollbar-thumb{background-color:#9ca3af80}.sidebar-section{transition:all .3s ease-out;transform:translateY(0);opacity:1}.sidebar-section.animate-in{animation:slideInUp .4s cubic-bezier(.4,0,.2,1) forwards}@keyframes slideInUp{0%{opacity:.5;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}.sidebar-section:nth-child(1).animate-in{animation-delay:.1s}.sidebar-section:nth-child(2).animate-in{animation-delay:.2s}.sidebar-section:nth-child(3).animate-in{animation-delay:.3s}.sidebar-section:nth-child(4).animate-in{animation-delay:.4s}.sidebar-section:nth-child(5).animate-in{animation-delay:.5s}:host ::ng-deep cide-ele-input{width:100%}:host ::ng-deep .cide-input-field{border-radius:8px;background-color:#f9fafb;border:1px solid transparent;transition:all .2s cubic-bezier(.4,0,.2,1)}:host ::ng-deep .cide-input-field:focus-within{border-color:#d1d5db;background-color:#fff;box-shadow:0 2px 8px #0000000d;transform:translateY(-1px)}.cide-lyt-sidebar *:focus{outline:none;box-shadow:0 0 0 2px #3b82f64d}.dark-mode{--sidebar-tooltip-bg: var(--cide-theme-dark-color);--sidebar-tooltip-color: var(--cide-theme-light-color);background-color:#1e293b;color:var(--cide-theme-light-color)}.dark-mode .cide-lyt-stack{background-color:#0f172a;border-right-color:#1e293b}.dark-mode .cide-lyt-stack:before,.dark-mode .cide-lyt-stack:after,.dark-mode .sidebar-content:before,.dark-mode .sidebar-content:after{background:linear-gradient(to bottom,rgba(15,23,42,.9),transparent)}.dark-mode .sidebar-content:after,.dark-mode .cide-lyt-stack:after{background:linear-gradient(to top,rgba(15,23,42,.9),transparent)}.dark-mode .cide-lyt-sidebar-menu{background-color:#0f172a;border-left-color:#1e293b}.dark-mode .sidebar-header,.dark-mode .sidebar-footer{background-color:#0f172af2;border-color:#1e293b}.dark-mode .tw-text-gray-700{color:#e2e8f0}.dark-mode .tw-text-gray-500{color:#94a3b8}.dark-mode .tw-bg-gray-50,.dark-mode .menu-item:hover{background-color:#1e293b80}.dark-mode .tw-bg-gray-100{background-color:#1e293b}.dark-mode .tw-bg-gray-200{background-color:#334155}.dark-mode .nav-item:hover:before{background-color:#60a5fa1a}.dark-mode .back-button:hover{background-color:#1e293bb3}.dark-mode .sidebar-section:not(:first-child):before{background:linear-gradient(to right,#33415500,#33415580,#33415500)}.dark-mode .toggle-track:after{background:#00000080}.dark-mode .alert-box:before{opacity:.2}.dark-mode :host ::ng-deep .cide-input-field{background-color:#1e293b;color:#e2e8f0}.dark-mode :host ::ng-deep .cide-input-field:focus-within{border-color:#475569;background-color:#0f172a}.dark-mode *::-webkit-scrollbar-thumb{background-color:#47556980}.dark-mode *:hover::-webkit-scrollbar-thumb{background-color:#64748b99}.nav-item-active .nav-indicator{animation:pulseIndicator 2s infinite}@keyframes pulseIndicator{0%{box-shadow:0 0 #3b82f666}70%{box-shadow:0 0 0 3px #3b82f600}to{box-shadow:0 0 #3b82f600}}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media screen and (max-width: 1024px){.cide-lyt-sidebar-menu{width:220px}.sidebar-content{padding:0 .5rem}.tw-text-xs.tw-font-semibold.tw-text-gray-500{font-size:.65rem}}@media screen and (max-width: 768px){.cide-lyt-sidebar-menu{position:fixed;width:100%;max-width:280px;left:72px;z-index:40;box-shadow:0 10px 25px #00000026;border-radius:0 1rem 1rem 0}.cide-lyt-sidebar.collapsed .cide-lyt-sidebar-menu{left:-100%}.sidebar-overlay{position:fixed;inset:0;background-color:#0000004d;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);opacity:0;pointer-events:none;transition:opacity .3s ease;z-index:35}.sidebar-overlay.active{opacity:1;pointer-events:auto}}.cide-lyt-sidebar,.cide-lyt-stack,.cide-lyt-sidebar-menu,.sidebar-logo,.nav-item,.menu-item,.user-avatar,.upgrade-button,.storage-fill,.notification-item,.sidebar-section.animate-in{transform:translateZ(0);backface-visibility:hidden;perspective:1000px;will-change:transform,opacity}.dark-mode .nav-item-active{background:linear-gradient(135deg,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.15),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),.1));box-shadow:0 2px 8px #1e40af40}.dark-mode .nav-item-active:after{background:linear-gradient(to right,rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0),rgba(var(--cide-theme-secondary-color-rgb, 74, 222, 128),.6),rgba(var(--cide-theme-color-brand-primary-rgb, 59, 130, 246),0));box-shadow:0 0 5px rgba(var(--cide-theme-secondary-color-rgb, 74, 222, 128),.5)}.dark-mode .nav-item:hover{background-color:#33415580;box-shadow:0 2px 8px #0f172a4d}.dark-mode .nav-tooltip{background-color:#0f172ae6;box-shadow:0 3px 10px #0006;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.dark-mode .nav-tooltip:before{border-color:transparent rgba(15,23,42,.9) transparent transparent}.text-theme-primary{color:var(--cide-theme-color-brand-primary)}.text-theme-secondary{color:var(--cide-theme-secondary-color)}.text-theme-text{color:var(--cide-theme-text-color)}.text-theme-label{color:var(--cide-theme-label-color)}.bg-theme-primary{background-color:var(--cide-theme-color-brand-primary)}.bg-theme-secondary{background-color:var(--cide-theme-secondary-color)}.bg-theme-light{background-color:var(--cide-theme-light-color)}.bg-theme-dark{background-color:var(--cide-theme-dark-color)}.bg-theme-sidebar{background-color:var(--cide-theme-sidebar-color)}.border-theme-light{border-color:var(--cide-theme-light-color)}.border-theme-primary{border-color:var(--cide-theme-color-brand-primary)}.hover-bg-theme-light:hover{background-color:var(--cide-theme-light-color)}.hover-text-theme-primary:hover{color:var(--cide-theme-color-brand-primary)}.tw-text-gray-500{color:var(--cide-theme-icon-color)}.hover\\:tw-text-gray-700:hover{color:var(--cide-theme-icon-hover-color)}.tw-text-gray-700{color:var(--cide-theme-text-color)}.tw-text-red-500,.tw-text-red-600,.tw-text-red-700{color:var(--cide-theme-error-color)}.tw-bg-gray-200{background-color:var(--cide-theme-border-color)}.hover\\:tw-bg-gray-100:hover{background-color:var(--cide-theme-hover-bg-color)}.tw-bg-white{background-color:var(--cide-theme-sidebar-color)}.tw-bg-green-500{background-color:var(--cide-theme-success-color)}.tw-border-gray-100,.tw-divide-gray-100{border-color:var(--cide-theme-border-color)}.tw-shadow-lg{box-shadow:0 10px 15px -3px var(--cide-theme-shadow-color),0 4px 6px -2px var(--cide-theme-shadow-color)}.tw-shadow-sm,.hover\\:tw-shadow:hover{box-shadow:0 1px 2px 0 var(--cide-theme-shadow-color)}.active-nav-icon{color:var(--cide-theme-color-brand-primary)!important}.nav-item{display:flex;align-items:center;justify-content:center;position:relative;border-radius:.375rem}.nav-item:hover{background-color:var(--cide-theme-hover-bg-color)}.nav-item:hover cide-ele-icon{color:var(--cide-theme-icon-hover-color)}.nav-item-active{background-color:color-mix(in srgb,var(--cide-theme-color-brand-primary) 10%,var(--cide-theme-light-color))}.nav-item-active cide-ele-icon{color:var(--cide-theme-color-brand-primary)}.nav-indicator{opacity:0;transition:opacity .2s ease}.nav-item-active .nav-indicator{opacity:1}.nav-tooltip{position:absolute;left:100%;top:50%;transform:translateY(-50%);background-color:var(--sidebar-tooltip-bg);color:var(--sidebar-tooltip-color);padding:.25rem .5rem;border-radius:.25rem;font-size:.75rem;white-space:nowrap;opacity:0;pointer-events:none;transition:all .2s ease;margin-left:.5rem;z-index:30;box-shadow:0 2px 8px var(--cide-theme-shadow-color)}.nav-item:hover .nav-tooltip{opacity:1}.nav-badge{position:absolute;top:-.25rem;right:-.25rem;width:.375rem;height:.375rem;border-radius:9999px;background-color:var(--cide-theme-error-color);animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.user-avatar{width:2.5rem;height:2.5rem;border-radius:9999px;overflow:hidden;background-color:var(--cide-theme-border-color);border:2px solid var(--cide-theme-sidebar-color);box-shadow:0 1px 2px var(--cide-theme-shadow-color);cursor:pointer;transition:box-shadow .2s ease}.user-avatar:hover{box-shadow:0 2px 4px var(--cide-theme-shadow-color)}.user-status{position:absolute;bottom:0;right:0;width:.75rem;height:.75rem;border-radius:9999px;background-color:var(--cide-theme-success-color);border:2px solid var(--cide-theme-sidebar-color)}.dark-mode .nav-item:hover{background-color:#ffffff1a}.dark-mode .nav-item-active{background-color:color-mix(in srgb,var(--cide-theme-color-brand-primary) 30%,var(--cide-theme-dark-color))}.dark-mode .user-avatar{border-color:var(--cide-theme-dark-color);background-color:#ffffff1a}.dark-mode .user-status{border-color:var(--cide-theme-dark-color)}.dark-mode .user-menu{background-color:var(--cide-theme-dark-color);border-color:#ffffff1a}.dark-mode .user-menu a{color:#fffc}.dark-mode .user-menu a:hover{background-color:#ffffff1a}.section-header{transition:all .2s ease;border:1px solid transparent}.section-header:hover{background-color:#f8fafc!important;border-color:#e2e8f0}.section-header:focus{outline:none;box-shadow:0 0 0 2px #3b82f6;border-color:#3b82f6}.section-content{overflow:hidden;transition:all .3s ease}.section-header .tw-rotate-90{transform:rotate(90deg)}.section-content .tw-border-l{border-left-color:#d1d5db}.section-header:hover .tw-text-gray-500{color:#6b7280}.section-header:hover .tw-text-gray-800{color:#374151}\n"] }]
484
- }], ctorParameters: () => [], propDecorators: { onDocumentClick: [{
485
- type: HostListener,
486
- args: ['document:click', ['$event']]
487
- }] } });
488
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9sYXlvdXQvc2lkZWJhci9zaWRlYmFyLXdyYXBwZXIvc2lkZWJhci13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9sYXlvdXQvc2lkZWJhci9zaWRlYmFyLXdyYXBwZXIvc2lkZWJhci13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzSSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsd0JBQXdCLEVBQW1CLE1BQU0sbURBQW1ELENBQUM7OztBQXlCOUcsTUFBTSxPQUFPLDhCQUE4QjtJQXlDekMsb0VBQW9FO0lBQ3BFLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGdCQUFn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SDt3QkFDVixPQUFPLENBQUMsWUFBWSxFQUFFOzRCQUNwQixLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztnQ0FDaEIsT0FBTyxFQUFFLENBQUM7Z0NBQ1YsU0FBUyxFQUFFLGVBQWU7Z0NBQzFCLE1BQU0sRUFBRSxHQUFHOzZCQUNaLENBQUMsQ0FBQzs0QkFDSCxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztnQ0FDakIsT0FBTyxFQUFFLENBQUM7Z0NBQ1YsU0FBUyxFQUFFLG1CQUFtQjtnQ0FDOUIsTUFBTSxFQUFFLEtBQUs7NkJBQ2QsQ0FBQyxDQUFDOzRCQUNILFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDOzRCQUNqRCxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3lCQUNuRCxDQUFDO3FCQUNIO3dEQWdmRCxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25Jbml0LCBpbmplY3QsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBtZW51UmVzcG9uc2VEYXRhIH0gZnJvbSAnY2xvdWQtaWRlLWxtcy1tb2RlbCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENpZGVMeXRTaWRlYmFyU2VydmljZSB9IGZyb20gJy4uL3NpZGViYXIuc2VydmljZSc7XG5pbXBvcnQgeyBDaWRlRWxlUmVzaXplckRpcmVjdGl2ZSwgQ2lkZUljb25Db21wb25lbnQsIENpZGVJbnB1dENvbXBvbmVudCwgVG9vbHRpcERpcmVjdGl2ZSwgQ2lkZVNwaW5uZXJDb21wb25lbnQgfSBmcm9tICdjbG91ZC1pZGUtZWxlbWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtc3RhdGUnO1xuaW1wb3J0IHsgQ2lkZUx5dFVzZXJTdGF0dXNTZXJ2aWNlLCB0eXBlIFVzZXJTdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91c2VyLXN0YXR1cy91c2VyLXN0YXR1cy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2lkZS1seXQtc2lkZWJhci13cmFwcGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NpZGVJY29uQ29tcG9uZW50LCBDaWRlSW5wdXRDb21wb25lbnQsIENvbW1vbk1vZHVsZSwgQ2lkZUVsZVJlc2l6ZXJEaXJlY3RpdmUsIFRvb2x0aXBEaXJlY3RpdmUsIENpZGVTcGlubmVyQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpZGViYXItd3JhcHBlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpZGViYXItd3JhcHBlci5jb21wb25lbnQuY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZUluT3V0JywgW1xuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoe1xuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyxcbiAgICAgICAgaGVpZ2h0OiAnKidcbiAgICAgIH0pKSxcbiAgICAgIHN0YXRlKCdvdXQnLCBzdHlsZSh7XG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwcHgpJyxcbiAgICAgICAgaGVpZ2h0OiAnMHB4J1xuICAgICAgfSkpLFxuICAgICAgdHJhbnNpdGlvbignaW4gPT4gb3V0JywgYW5pbWF0ZSgnMjAwbXMgZWFzZS1pbicpKSxcbiAgICAgIHRyYW5zaXRpb24oJ291dCA9PiBpbicsIGFuaW1hdGUoJzIwMG1zIGVhc2Utb3V0JykpXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDaWRlTHl0U2lkZWJhcldyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgc2lkZWJhclNldHVwRGF0YSA9IHtcbiAgICBjaWRlX2x5dF9zaWRlYmFyX3dpZHRoOiAwXG4gIH07XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgZGFya01vZGUgPSBmYWxzZTtcbiAgc2hvd1VzZXJNZW51ID0gZmFsc2U7XG4gIHNob3dPcHRpb25zID0gZmFsc2U7XG4gIHNob3dOb3RpZmljYXRpb25zID0gZmFsc2U7XG4gIHNob3dOb3RpZmljYXRpb25zUGFuZWwgPSBmYWxzZTtcbiAgc2VhcmNoVGV4dCA9ICcnO1xuICBpc0V4cGFuZGVkID0gdHJ1ZTtcbiAgc2VhcmNoUmVzdWx0czogeyBpY29uOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgLy8gQ29sbGFwc2VkIHNlY3Rpb24gc3RhdGVzIHRyYWNraW5nXG4gIGNvbGxhcHNlZFNlY3Rpb25zOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHtcbiAgICAnY29tcGFueSc6IGZhbHNlLFxuICAgICdhY2NvdW50JzogZmFsc2UsXG4gICAgJ2FkdmFuY2VkJzogZmFsc2UsXG4gICAgJ3JlY2VudCc6IGZhbHNlXG4gIH07XG5cbiAgLy8gVHJhY2sgZXhwYW5kZWQgc3RhdGUgZm9yIG1lbnUgc2VjdGlvbnNcbiAgZXhwYW5kZWRTZWN0aW9uczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICAvLyBGb3Igc2Nyb2xsLWJhc2VkIGFuaW1hdGlvblxuICBhbmltYXRlU2VjdGlvbnMgPSBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXTtcbiAgbGFzdFNjcm9sbFRvcCA9IDA7XG4gIHNjcm9sbGVkUGFzdCA9IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuICBwdWJsaWMgY29yZV9zeXN0ZW1fbWVudTogbWVudVJlc3BvbnNlRGF0YVtdID0gW107XG4gIHB1YmxpYyBjb3JlX3N5c3RlbV9tb2R1bGU6IG1lbnVSZXNwb25zZURhdGFbXSA9IFtdO1xuXG4gIC8vIFRyYWNrIGFjdGl2ZSBzdGF0ZSBmb3IgZW5oYW5jZWQgdmlzdWFsIGVmZmVjdHNcbiAgYWN0aXZlTW9kdWxlSWQ6IHN0cmluZyA9ICcnO1xuICBob3Zlck1vZHVsZUlkOiBzdHJpbmcgPSAnJztcbiAgYW5pbWF0ZUl0ZW1zOiBib29sZWFuID0gZmFsc2U7XG4gIG1vZHVsZUxvYWRDb21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBtZW51TG9hZENvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIGxvYWRpbmdNZW51czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEFkZCB0aGlzIGdldHRlciB0byByZXRyaWV2ZSB0aGUgbWVudSB0cmVlIGZvciB0aGUgc2VsZWN0ZWQgbW9kdWxlXG4gIGdldCBzZWxlY3RlZE1vZHVsZU1lbnVzKCk6IG1lbnVSZXNwb25zZURhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29yZV9zeXN0ZW1fbWVudSB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBDU1MgY2xhc3NlcyBmb3IgdGhlIHVzZXIgc3RhdHVzIGluZGljYXRvclxuICAgKiBVc2VzIHRoZSBpbmplY3RlZCB1c2VyIHN0YXR1cyBzZXJ2aWNlXG4gICAqL1xuICBnZXRVc2VyU3RhdHVzQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy51c2VyU3RhdHVzU2VydmljZS5zdGF0dXNDb2xvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRvb2x0aXAgdGV4dCBmb3IgdGhlIHVzZXIgc3RhdHVzXG4gICAqIFVzZXMgdGhlIGluamVjdGVkIHVzZXIgc3RhdHVzIHNlcnZpY2VcbiAgICovXG4gIGdldFVzZXJTdGF0dXNUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlclN0YXR1c1NlcnZpY2Uuc3RhdHVzVGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHVzZXIgc3RhdHVzIChkZWxlZ2F0ZXMgdG8gc2VydmljZSlcbiAgICogQHBhcmFtIHN0YXR1cyBUaGUgbmV3IHN0YXR1cyB0byBzZXRcbiAgICogQHBhcmFtIG1lc3NhZ2UgT3B0aW9uYWwgY3VzdG9tIHN0YXR1cyBtZXNzYWdlXG4gICAqL1xuICBzZXRVc2VyU3RhdHVzKHN0YXR1czogVXNlclN0YXR1cywgbWVzc2FnZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXNlclN0YXR1c1NlcnZpY2Uuc2V0U3RhdHVzKHN0YXR1cywgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCB1c2VyIHN0YXR1cyBkYXRhXG4gICAqL1xuICBnZXQgY3VycmVudFVzZXJTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlclN0YXR1c1NlcnZpY2UudXNlclN0YXR1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGljb24gZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIG1vZHVsZVxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiBuYW1lIGZvciB0aGUgYWN0aXZlIG1vZHVsZSBvciBhIGRlZmF1bHQgaWNvblxuICAgKi9cbiAgZ2V0QWN0aXZlTW9kdWxlSWNvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNvcmVfc3lzdGVtX21vZHVsZSAmJiB0aGlzLmNvcmVfc3lzdGVtX21vZHVsZS5sZW5ndGggPiAwICYmIHRoaXMuYWN0aXZlTW9kdWxlSWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZU1vZHVsZSA9IHRoaXMuY29yZV9zeXN0ZW1fbW9kdWxlLmZpbmQobSA9PiBtLl9pZCA9PT0gdGhpcy5hY3RpdmVNb2R1bGVJZCk7XG4gICAgICByZXR1cm4gYWN0aXZlTW9kdWxlPy5zeW1lX2ljb24gfHwgJ2Rhc2hib2FyZCc7XG4gICAgfVxuICAgIHJldHVybiAnZGFzaGJvYXJkJztcbiAgfVxuXG4gIC8vIEFkZCBhIGNsaWNrIGhhbmRsZXIgZm9yIG1lbnUgbmF2aWdhdGlvblxuICBvbk1lbnVDbGljayhtZW51OiBtZW51UmVzcG9uc2VEYXRhKSB7XG4gICAgaWYgKG1lbnUuc3ltZV9wYXRoKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGVudGl0eS1yZWxhdGVkIG1lbnVcbiAgICAgIC8vIE5hdmlnYXRlIHRvIGVudGl0eSBsaXN0IGNvbXBvbmVudFxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvY29udHJvbC1wYW5lbC8ke21lbnUuc3ltZV9wYXRofWBdKTtcbiAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gbWVudS5zeW1lX3BhdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBzZWN0aW9uIGV4cGFuZC9jb2xsYXBzZSBzdGF0ZVxuICAgKi9cbiAgdG9nZ2xlU2VjdGlvbihzZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWRTZWN0aW9uc1tzZWN0aW9uSWRdID0gIXRoaXMuZXhwYW5kZWRTZWN0aW9uc1tzZWN0aW9uSWRdO1xuICAgIGNvbnNvbGUubG9nKCfwn5OCIFNJREVCQVI6IFNlY3Rpb24nLCBzZWN0aW9uSWQsICdleHBhbmRlZDonLCB0aGlzLmV4cGFuZGVkU2VjdGlvbnNbc2VjdGlvbklkXSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgc2VjdGlvbiBpcyBleHBhbmRlZFxuICAgKi9cbiAgaXNTZWN0aW9uRXhwYW5kZWQoc2VjdGlvbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZFNlY3Rpb25zW3NlY3Rpb25JZF0gPz8gdHJ1ZTsgLy8gRGVmYXVsdCB0byBleHBhbmRlZFxuICB9XG5cbiAgcHJpdmF0ZSBzaWRlYmFyU2VydmljZSA9IGluamVjdChDaWRlTHl0U2lkZWJhclNlcnZpY2UpO1xuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHB1YmxpYyBhcHBTdGF0ZSA9IGluamVjdChBcHBTdGF0ZUhlbHBlclNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcm90ZWN0ZWQgdXNlclN0YXR1c1NlcnZpY2UgPSBpbmplY3QoQ2lkZUx5dFVzZXJTdGF0dXNTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBSZWFjdCB0byBhY3RpdmUgbW9kdWxlIGNoYW5nZXMgdXNpbmcgc2lnbmFsIGVmZmVjdHNcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlTW9kdWxlID0gdGhpcy5hcHBTdGF0ZS5hY3RpdmVNb2R1bGUoKTtcbiAgICAgIGlmIChhY3RpdmVNb2R1bGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ/CflIQgU0lERUJBUjogQWN0aXZlIG1vZHVsZSBzaWduYWwgY2hhbmdlZDonLCBhY3RpdmVNb2R1bGUuc3ltZV90aXRsZSk7XG4gICAgICAgIC8vIFVwZGF0ZSBsb2NhbCBzdGF0ZSB3aGVuIGFjdGl2ZSBtb2R1bGUgY2hhbmdlc1xuICAgICAgICB0aGlzLmFjdGl2ZU1vZHVsZUlkID0gYWN0aXZlTW9kdWxlLl9pZDtcbiAgICAgICAgLy8gQWx3YXlzIHRyeSB0byBsb2FkIG1lbnVzIHdoZW4gYWN0aXZlIG1vZHVsZSBjaGFuZ2VzXG4gICAgICAgIHRoaXMubG9hZE1lbnVzRm9yTW9kdWxlKGFjdGl2ZU1vZHVsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBNb2Rlcm4gRVMyMDIyKyBwYXR0ZXJuOiBVc2UgUHJvbWlzZS1iYXNlZCBkZWxheXMgaW5zdGVhZCBvZiBuZXN0ZWQgc2V0VGltZW91dFxuICAgIGNvbnN0IGluaXRpYWxpemVBbmltYXRpb25zID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgICAgdGhpcy5hbmltYXRlSXRlbXMgPSB0cnVlO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMCkpO1xuICAgICAgdGhpcy5hbmltYXRlU2VjdGlvbnMgPSBbdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07XG4gICAgfTtcbiAgICBpbml0aWFsaXplQW5pbWF0aW9ucygpO1xuXG4gICAgLy8gR2V0IHNpZGViYXIgbWVudSBkYXRhIHdpdGggbG9hZGluZyBzdGF0ZSB0cmFja2luZ1xuICAgIHRoaXMuc2lkZWJhclNlcnZpY2U/LmdldFNpZGViYXJNZW51ZXMoeyBzeW1lX3R5cGU6IFwibW9kdWxlXCIsIHNvcnQ6ICdhc2MnLCBzeW1lX3RpdGxlOiBcIlwiIH0pPy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNvcmVfc3lzdGVtX21vZHVsZSA9IHJlcz8uZGF0YSB8fCBbXTtcblxuICAgICAgICAvLyBIYW5kbGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBhY3RpdmUgbW9kdWxlIHNldHVwXG4gICAgICAgIGlmICh0aGlzLmNvcmVfc3lzdGVtX21vZHVsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgYWN0aXZlTW9kdWxlID0gdGhpcy5hcHBTdGF0ZS5hY3RpdmVNb2R1bGUoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygn8J+UjSBTSURFQkFSOiBNb2R1bGVzIGxvYWRlZC4gQ3VycmVudCBhY3RpdmUgbW9kdWxlOicsIGFjdGl2ZU1vZHVsZT8uc3ltZV90aXRsZSB8fCAnbm9uZScpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfwn5OKIFNJREVCQVI6IEF2YWlsYWJsZSBtb2R1bGVzOicsIHRoaXMuY29yZV9zeXN0ZW1fbW9kdWxlLm1hcChtID0+IG0uc3ltZV90aXRsZSkuam9pbignLCAnKSk7XG5cbiAgICAgICAgICBpZiAoYWN0aXZlTW9kdWxlKSB7XG4gICAgICAgICAgICAvLyBBY3RpdmUgbW9kdWxlIGV4aXN0cywgdmVyaWZ5IGl0J3MgaW4gdGhlIGxvYWRlZCBtb2R1bGVzXG4gICAgICAgICAgICBjb25zdCBmb3VuZE1vZHVsZSA9IHRoaXMuY29yZV9zeXN0ZW1fbW9kdWxlLmZpbmQobSA9PiBtLl9pZCA9PT0gYWN0aXZlTW9kdWxlLl9pZCk7XG4gICAgICAgICAgICBpZiAoZm91bmRNb2R1bGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+KchSBTSURFQkFSOiBBY3RpdmUgbW9kdWxlIGZvdW5kIGluIGxvYWRlZCBtb2R1bGVzOicsIGZvdW5kTW9kdWxlLnN5bWVfdGl0bGUpO1xuICAgICAgICAgICAgICAvLyBUaGUgZWZmZWN0IHNob3VsZCBoYXZlIGFscmVhZHkgdHJpZ2dlcmVkLCBidXQgZW5zdXJlIG1lbnVzIGFyZSBsb2FkZWRcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29yZV9zeXN0ZW1fbWVudS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn8J+UhCBTSURFQkFSOiBObyBtZW51cyBsb2FkZWQgeWV0LCB0cmlnZ2VyaW5nIGxvYWQgZm9yIGFjdGl2ZSBtb2R1bGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNZW51c0Zvck1vZHVsZShhY3RpdmVNb2R1bGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygn4pqg77iPIFNJREVCQVI6IEFjdGl2ZSBtb2R1bGUgbm90IGZvdW5kIGluIGxvYWRlZCBtb2R1bGVzLCBzZXR0aW5nIGZpcnN0IGFzIGFjdGl2ZScpO1xuICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZU1lbnVCeUluZGV4KDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygn8J+TjCBTSURFQkFSOiBObyBhY3RpdmUgbW9kdWxlLCBzZXR0aW5nIGZpcnN0IG1vZHVsZSBhcyBhY3RpdmUnKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTWVudUJ5SW5kZXgoMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW9kZXJuIEVTMjAyMisgcGF0dGVybjogVXNlIFByb21pc2UtYmFzZWQgZGVsYXlcbiAgICAgICAgY29uc3QgZGVsYXkgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgICAgIGRlbGF5KDMwMCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2R1bGVMb2FkQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHNpZGViYXIgbW9kdWxlczonLCBlcnIpO1xuICAgICAgICB0aGlzLm1vZHVsZUxvYWRDb21wbGV0ZSA9IHRydWU7IC8vIFNldCB0byB0cnVlIGV2ZW4gb24gZXJyb3IgdG8gZW5zdXJlIFVJIGlzIHJlc3BvbnNpdmVcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGNvbGxlY3RlIHRoZSB3aWR0aCBvZiB0aGUgc2lkZWJhciBieSB1c2luZyB0aGUgc3R5bGUgcHJvcGVydHlcbiAgICBjb25zdCBjaWRlX2x5dF9zdGFja193cmFwcGVyX3dpZHRoID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWNpZGUtbHl0LXN0YWNrLXdyYXBwZXItd2lkdGgnKSk7XG4gICAgY29uc3QgY2lkZV9seXRfc2lkZWJhcl9tZW51X3dpZHRoID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWNpZGUtbHl0LXNpZGViYXItbWVudS13aWR0aCcpKTtcblxuICAgIHRoaXMuc2lkZWJhclNldHVwRGF0YS5jaWRlX2x5dF9zaWRlYmFyX3dpZHRoID0gKGNpZGVfbHl0X3N0YWNrX3dyYXBwZXJfd2lkdGggKyBjaWRlX2x5dF9zaWRlYmFyX21lbnVfd2lkdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbWVudXMgZm9yIGEgc3BlY2lmaWMgbW9kdWxlXG4gICAqIEBwYXJhbSBtb2R1bGUgVGhlIG1vZHVsZSB0byBsb2FkIG1lbnVzIGZvclxuICAgKi9cbiAgbG9hZE1lbnVzRm9yTW9kdWxlKG1vZHVsZTogbWVudVJlc3BvbnNlRGF0YSk6IHZvaWQge1xuICAgIGlmICghbW9kdWxlPy5faWQpIHtcbiAgICAgIGNvbnNvbGUud2Fybign8J+aqyBTSURFQkFSOiBDYW5ub3QgbG9hZCBtZW51cyAtIG5vIG1vZHVsZSBJRCBwcm92aWRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCfwn5OCIFNJREVCQVI6IExvYWRpbmcgbWVudXMgZm9yIG1vZHVsZTonLCBtb2R1bGUuc3ltZV90aXRsZSwgJ0lEOicsIG1vZHVsZS5faWQpO1xuICAgIHRoaXMubG9hZGluZ01lbnVzID0gdHJ1ZTtcbiAgICB0aGlzLm1lbnVMb2FkQ29tcGxldGUgPSBmYWxzZTtcblxuICAgIC8vIEZldGNoIG1lbnVzIGZvciB0aGUgc2VsZWN0ZWQgbW9kdWxlXG4gICAgdGhpcy5zaWRlYmFyU2VydmljZT8uZ2V0U2lkZWJhck1lbnVlcyh7XG4gICAgICBzeW1lX2lkOiBtb2R1bGUuX2lkLFxuICAgICAgc29ydDogJ2FzYydcbiAgICB9KT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgY29uc3QgbWVudXMgPSByZXM/LmRhdGEgfHwgW107XG4gICAgICAgIHRoaXMuY29yZV9zeXN0ZW1fbWVudSA9IG1lbnVzO1xuICAgICAgICB0aGlzLmxvYWRpbmdNZW51cyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCfinIUgU0lERUJBUjogTG9hZGVkJywgbWVudXMsICdtZW51cyBmb3IgbW9kdWxlOicsIG1vZHVsZS5zeW1lX3RpdGxlKTtcbiAgICAgICAgY29uc29sZS5sb2coJ/Cfk4sgU0lERUJBUjogTWVudSB0aXRsZXM6JywgbWVudXMubWFwKG0gPT4gbS5zeW1lX3RpdGxlKS5qb2luKCcsICcpKTtcblxuICAgICAgICAvLyBNb2Rlcm4gRVMyMDIyKyBwYXR0ZXJuOiBVc2UgUHJvbWlzZS1iYXNlZCBkZWxheVxuICAgICAgICBjb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICAgICAgZGVsYXkoMjAwKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm1lbnVMb2FkQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCfwn46vIFNJREVCQVI6IE1lbnUgbG9hZGluZyBjb21wbGV0ZSBmb3I6JywgbW9kdWxlLnN5bWVfdGl0bGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgU0lERUJBUjogRXJyb3IgbG9hZGluZyBtZW51cyBmb3IgbW9kdWxlOicsIG1vZHVsZS5zeW1lX3RpdGxlLCBlcnIpO1xuICAgICAgICB0aGlzLmNvcmVfc3lzdGVtX21lbnUgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTWVudXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZW51TG9hZENvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVNpZGViYXIoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuXG4gICAgLy8gQWRkIGFuaW1hdGlvbiBjbGFzc1xuICAgIGNvbnN0IHNpZGViYXJFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmNpZGUtbHl0LXNpZGViYXInKTtcbiAgICBzaWRlYmFyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdhbmltYXRpbmcnKTtcblxuICAgIC8vIFJlbW92ZSBhbmltYXRpb24gY2xhc3MgYWZ0ZXIgYW5pbWF0aW9uIGNvbXBsZXRlc1xuICAgIC8vIE1vZGVybiBFUzIwMjIrIHBhdHRlcm46IFVzZSBQcm9taXNlLWJhc2VkIGRlbGF5XG4gICAgY29uc3QgZGVsYXkgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgZGVsYXkoMzAwKS50aGVuKCgpID0+IHtcbiAgICAgIHNpZGViYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2FuaW1hdGluZycpO1xuICAgIH0pO1xuXG4gICAgLy8gdGhpcy5zaWRlYmFyU2VydmljZS50b2dnbGVTaWRlYmFyKCk7XG4gIH1cblxuICB0b2dnbGVVc2VyTWVudSgpIHtcbiAgICB0aGlzLnNob3dVc2VyTWVudSA9ICF0aGlzLnNob3dVc2VyTWVudTtcbiAgICAvLyBDbG9zZSBvdGhlciBtZW51cyBpZiBvcGVuXG4gICAgaWYgKHRoaXMuc2hvd1VzZXJNZW51KSB7XG4gICAgICB0aGlzLnNob3dPcHRpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dOb3RpZmljYXRpb25zID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIHN1YnRsZSBhbmltYXRpb24gd2hlbiBvcGVuaW5nIG1lbnVcbiAgICBpZiAodGhpcy5zaG93VXNlck1lbnUpIHtcbiAgICAgIHRoaXMuYW5pbWF0ZU1lbnVPcGVuKCd1c2VyLW1lbnUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWN0aXZlIG1lbnUgaXRlbSB3aXRoIGFuaW1hdGlvblxuICAgKiBAcGFyYW0gbW9kdWxlSWQgVGhlIElEIG9mIHRoZSBtb2R1bGUgdG8gc2V0IGFzIGFjdGl2ZVxuICAgKi9cbiAgc2V0QWN0aXZlTWVudShtb2R1bGVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlTW9kdWxlSWQgPT09IG1vZHVsZUlkKSByZXR1cm47XG5cbiAgICAvLyBTZXQgdGhlIGFjdGl2ZSBtb2R1bGUgaW4gYXBwIHN0YXRlIC0gdGhlIGVmZmVjdCB3aWxsIGhhbmRsZSBsb2NhbCBzdGF0ZSB1cGRhdGVzXG4gICAgY29uc3Qgc2VsZWN0ZWRNb2R1bGUgPSB0aGlzLmNvcmVfc3lzdGVtX21vZHVsZS5maW5kKG0gPT4gbS5faWQgPT09IG1vZHVsZUlkKTtcbiAgICBpZiAoc2VsZWN0ZWRNb2R1bGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuc2V0QWN0aXZlTW9kdWxlKHNlbGVjdGVkTW9kdWxlKTtcbiAgICAgIC8vIFRoZSBlZmZlY3Qgd2lsbCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGlzLmFjdGl2ZU1vZHVsZUlkIGFuZCBsb2FkIG1lbnVzXG4gICAgfVxuXG4gICAgLy8gWW91IGNvdWxkIHRyaWdnZXIgY3VzdG9tIGFuaW1hdGlvbnMgaGVyZVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjdGl2ZSBtZW51IGl0ZW0gYnkgaW5kZXggd2l0aCBhbmltYXRpb25cbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgbWVudSBpdGVtXG4gICAqL1xuICBzZXRBY3RpdmVNZW51QnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRNb2R1bGUgPSB0aGlzLmNvcmVfc3lzdGVtX21vZHVsZVtpbmRleF07XG4gICAgaWYgKHNlbGVjdGVkTW9kdWxlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnNldEFjdGl2ZU1vZHVsZShzZWxlY3RlZE1vZHVsZSk7XG4gICAgICAvLyBUaGUgZWZmZWN0IHdpbGwgYXV0b21hdGljYWxseSB1cGRhdGUgdGhpcy5hY3RpdmVNb2R1bGVJZCBhbmQgbG9hZCBtZW51c1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWMgbWV0aG9kIHRvIHNldCBhY3RpdmUgbW9kdWxlIGJ5IElEIGZyb20gZXh0ZXJuYWwgY29tcG9uZW50c1xuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHByb2dyYW1tYXRpY2FsbHkgc2V0IHRoZSBhY3RpdmUgbW9kdWxlXG4gICAqIEBwYXJhbSBtb2R1bGVJZCBUaGUgSUQgb2YgdGhlIG1vZHVsZSB0byBzZXQgYXMgYWN0aXZlXG4gICAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgbW9kdWxlIHdhcyBmb3VuZCBhbmQgc2V0IGFzIGFjdGl2ZVxuICAgKi9cbiAgcHVibGljIHNldEFjdGl2ZU1vZHVsZUJ5SWQobW9kdWxlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMuY29yZV9zeXN0ZW1fbW9kdWxlLmZpbmQobSA9PiBtLl9pZCA9PT0gbW9kdWxlSWQpO1xuICAgIGlmIChtb2R1bGUpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlTWVudShtb2R1bGVJZCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc29sZS53YXJuKGBNb2R1bGUgd2l0aCBJRCBcIiR7bW9kdWxlSWR9XCIgbm90IGZvdW5kIGluIHNpZGViYXIgbW9kdWxlc2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWMgbWV0aG9kIHRvIGdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBtb2R1bGUgSURcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIG1vZHVsZSwgb3IgZW1wdHkgc3RyaW5nIGlmIG5vbmVcbiAgICovXG4gIHB1YmxpYyBnZXRBY3RpdmVNb2R1bGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZU1vZHVsZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrcyBob3ZlciBzdGF0ZSBmb3IgZW5oYW5jZWQgdmlzdWFsIGZlZWRiYWNrXG4gICAqIEBwYXJhbSBtb2R1bGVJZCBUaGUgSUQgb2YgdGhlIGhvdmVyZWQgbW9kdWxlLCBvciBlbXB0eSBzdHJpbmcgZm9yIG5vbmVcbiAgICovXG4gIG9uSXRlbUhvdmVyKG1vZHVsZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyTW9kdWxlSWQgPSBtb2R1bGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHN1YnRsZSBhbmltYXRpb25zIHdoZW4gb3BlbmluZyBkcm9wZG93biBtZW51c1xuICAgKiBAcGFyYW0gbWVudUlkIFRoZSBJRCBvZiB0aGUgbWVudSBlbGVtZW50XG4gICAqL1xuICBhbmltYXRlTWVudU9wZW4obWVudUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtZW51RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke21lbnVJZH1gKTtcbiAgICBpZiAoIW1lbnVFbGVtZW50KSByZXR1cm47XG5cbiAgICAvLyBGaXJzdCBzZXQgaW5pdGlhbCBzdGF0ZVxuICAgIG1lbnVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgbWVudUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVkoLThweCkgc2NhbGUoMC45NSknO1xuXG4gICAgLy8gVGhlbiBhbmltYXRlIHRvIGZpbmFsIHN0YXRlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBtZW51RWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gJ29wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlJztcbiAgICAgIG1lbnVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgICBtZW51RWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgwKSBzY2FsZSgxKSc7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdG9vbHRpcCBwb3NpdGlvbiBmb3IgbW9yZSBhY2N1cmF0ZSBwbGFjZW1lbnRcbiAgICogQHBhcmFtIGV2ZW50IE1vdXNlRXZlbnQgZnJvbSBob3ZlcmluZ1xuICAgKiBAcGFyYW0gdG9vbHRpcCBUaGUgdG9vbHRpcCBlbGVtZW50XG4gICAqL1xuICB1cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQsIHRvb2x0aXBJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdG9vbHRpcCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uYXYtdG9vbHRpcCcpW3Rvb2x0aXBJbmRleF07XG4gICAgaWYgKCF0b29sdGlwKSByZXR1cm47XG5cbiAgICAvLyBHZXQgdGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3JcbiAgICBjb25zdCBjdXJzb3JZID0gZXZlbnQuY2xpZW50WTtcblxuICAgIC8vIFNldCB0aGUgdG9vbHRpcCBwb3NpdGlvbiB0byBtYXRjaCB0aGUgY3Vyc29yIFkgcG9zaXRpb25cbiAgICB0b29sdGlwLnN0eWxlLnRvcCA9IGAke2N1cnNvcll9cHhgO1xuXG4gICAgLy8gQWRkIGEgc2xpZ2h0IGFuaW1hdGlvblxuICAgIHRvb2x0aXAuc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5IDAuMnMgZWFzZSwgdHJhbnNmb3JtIDAuMnMgZWFzZSc7XG4gICAgdG9vbHRpcC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWSgtNTAlKSc7XG4gIH1cblxuICB0b2dnbGVOb3RpZmljYXRpb25zUGFuZWwoKSB7XG4gICAgdGhpcy5zaG93Tm90aWZpY2F0aW9uc1BhbmVsID0gIXRoaXMuc2hvd05vdGlmaWNhdGlvbnNQYW5lbDtcbiAgICB0aGlzLnNob3dOb3RpZmljYXRpb25zID0gdGhpcy5zaG93Tm90aWZpY2F0aW9uc1BhbmVsO1xuICAgIC8vIENsb3NlIG90aGVyIG1lbnVzIGlmIG9wZW5cbiAgICBpZiAodGhpcy5zaG93Tm90aWZpY2F0aW9uc1BhbmVsKSB7XG4gICAgICB0aGlzLnNob3dVc2VyTWVudSA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFkZCBhbmltYXRpb24gd2hlbiBvcGVuaW5nIHBhbmVsXG4gICAgaWYgKHRoaXMuc2hvd05vdGlmaWNhdGlvbnNQYW5lbCkge1xuICAgICAgdGhpcy5hbmltYXRlTWVudU9wZW4oJ25vdGlmaWNhdGlvbnMtcGFuZWwnKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVUaGVtZSgpIHtcbiAgICB0aGlzLmRhcmtNb2RlID0gIXRoaXMuZGFya01vZGU7XG4gICAgLy8gQWRkIGRhcmsgbW9kZSBjbGFzcyB0byBzaWRlYmFyIGVsZW1lbnRcbiAgICBjb25zdCBzaWRlYmFyRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jaWRlLWx5dC1zaWRlYmFyJyk7XG4gICAgaWYgKHRoaXMuZGFya01vZGUpIHtcbiAgICAgIHNpZGViYXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2RhcmstbW9kZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaWRlYmFyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkYXJrLW1vZGUnKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVPcHRpb25zKCkge1xuICAgIHRoaXMuc2hvd09wdGlvbnMgPSAhdGhpcy5zaG93T3B0aW9ucztcbiAgICAvLyBDbG9zZSBvdGhlciBtZW51cyBpZiBvcGVuXG4gICAgaWYgKHRoaXMuc2hvd09wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2hvd1VzZXJNZW51ID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dOb3RpZmljYXRpb25zID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIHN1YnRsZSBhbmltYXRpb24gd2hlbiBvcGVuaW5nIG1lbnVcbiAgICBpZiAodGhpcy5zaG93T3B0aW9ucykge1xuICAgICAgdGhpcy5hbmltYXRlTWVudU9wZW4oJ29wdGlvbnMtbWVudScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgb2xkLXN0eWxlIGNvbGxhcHNlZCBzZWN0aW9ucyAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KVxuICAgKi9cbiAgdG9nZ2xlQ29sbGFwc2VkU2VjdGlvbihzZWN0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbGxhcHNlZFNlY3Rpb25zW3NlY3Rpb25dID0gIXRoaXMuY29sbGFwc2VkU2VjdGlvbnNbc2VjdGlvbl07XG4gIH1cblxuICBpc1NlY3Rpb25Db2xsYXBzZWQoc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGFwc2VkU2VjdGlvbnNbc2VjdGlvbl07XG4gIH1cblxuICBvblNlYXJjaCgpIHtcbiAgICAvLyBSZXNldCBhbmltYXRpb24gdHJpZ2dlciB3aGVuIHNlYXJjaGluZ1xuICAgIHRoaXMucmVzZXRBbmltYXRpb25zKCk7XG5cbiAgICAvLyBNb2NrIHNlYXJjaCBmdW5jdGlvbmFsaXR5IC0gd291bGQgYmUgaW50ZWdyYXRlZCB3aXRoIGFjdHVhbCBzZWFyY2ggc2VydmljZVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQudHJpbSgpID09PSAnJykge1xuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRXhhbXBsZSBzZWFyY2ggcmVzdWx0cyAtIHdvdWxkIGNvbWUgZnJvbSBhY3R1YWwgZGF0YSBzb3VyY2VcbiAgICBjb25zdCBhbGxJdGVtcyA9IFtcbiAgICAgIHsgaWNvbjogJ3NldHRpbmdzJywgdGl0bGU6ICdHZW5lcmFsIFNldHRpbmdzJyB9LFxuICAgICAgeyBpY29uOiAncGF5bWVudHMnLCB0aXRsZTogJ0JpbGxpbmcgJiBQYXltZW50cycgfSxcbiAgICAgIHsgaWNvbjogJ3NoaWVsZCcsIHRpdGxlOiAnU2VjdXJpdHkgU2V0dGluZ3MnIH0sXG4gICAgICB7IGljb246ICdwZXJzb24nLCB0aXRsZTogJ1Byb2ZpbGUgU2V0dGluZ3MnIH0sXG4gICAgICB7IGljb246ICdub3RpZmljYXRpb25zJywgdGl0bGU6ICdOb3RpZmljYXRpb24gUHJlZmVyZW5jZXMnIH0sXG4gICAgICB7IGljb246ICdpbnRlZ3JhdGlvbl9pbnN0cnVjdGlvbnMnLCB0aXRsZTogJ0FQSSBJbnRlZ3JhdGlvbnMnIH0sXG4gICAgICB7IGljb246ICdrZXknLCB0aXRsZTogJ0FQSSBLZXlzJyB9LFxuICAgICAgeyBpY29uOiAnZ3JvdXBzJywgdGl0bGU6ICdUZWFtIE1lbWJlcnMnIH0sXG4gICAgICB7IGljb246ICdkZXZpY2VzJywgdGl0bGU6ICdDb25uZWN0ZWQgRGV2aWNlcycgfSxcbiAgICAgIHsgaWNvbjogJ2xhbmd1YWdlJywgdGl0bGU6ICdMYW5ndWFnZSBTZXR0aW5ncycgfSxcbiAgICBdO1xuXG4gICAgLy8gU2ltcGxlIHRleHQgc2VhcmNoIG9uIHRpdGxlXG4gICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT5cbiAgICAgIGl0ZW0udGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcbiAgICApO1xuICB9XG5cbiAgb25TY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNpZGViYXItc2VjdGlvbicpO1xuXG4gICAgLy8gUmVzZXQgYW5pbWF0aW9ucyBpZiBzY3JvbGxpbmcgYmFjayB0byB0b3BcbiAgICBpZiAoc2Nyb2xsVG9wIDwgMTApIHtcbiAgICAgIHRoaXMucmVzZXRBbmltYXRpb25zKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQW5pbWF0ZSBzZWN0aW9ucyBhcyB0aGV5IGNvbWUgaW50byB2aWV3XG4gICAgc2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbjogSFRNTEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChpbmRleCA+PSB0aGlzLmFuaW1hdGVTZWN0aW9ucy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgY29uc3Qgc2VjdGlvblRvcCA9IHNlY3Rpb24ub2Zmc2V0VG9wO1xuICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxUb3AgKyAzMDA7ICAvLyBPZmZzZXQgdG8gdHJpZ2dlciBhbmltYXRpb24gYmVmb3JlIGZ1bGx5IHZpc2libGVcblxuICAgICAgLy8gV2hlbiBzY3JvbGxpbmcgZG93biBhbmQgc2VjdGlvbiBjb21lcyBpbnRvIHZpZXdcbiAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiA+IHNlY3Rpb25Ub3AgJiYgIXRoaXMuc2Nyb2xsZWRQYXN0W2luZGV4XSAmJiBzY3JvbGxUb3AgPiB0aGlzLmxhc3RTY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5hbmltYXRlU2VjdGlvbnNbaW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zY3JvbGxlZFBhc3RbaW5kZXhdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gV2hlbiBzY3JvbGxpbmcgdXAgdG8gdG9wLCByZXNldCBhbmltYXRpb25cbiAgICAgIGlmIChzY3JvbGxUb3AgPCA1MCAmJiB0aGlzLmxhc3RTY3JvbGxUb3AgPiBzY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5yZXNldEFuaW1hdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgfVxuXG4gIHJlc2V0QW5pbWF0aW9ucygpIHtcbiAgICB0aGlzLmFuaW1hdGVTZWN0aW9ucyA9IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuICAgIHRoaXMuc2Nyb2xsZWRQYXN0ID0gW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV07XG5cbiAgICAvLyBSZS10cmlnZ2VyIGFuaW1hdGlvbnNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYW5pbWF0ZVNlY3Rpb25zID0gW3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWVdO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgLy8gQ2xvc2UgZHJvcGRvd24gbWVudXMgd2hlbiBjbGlja2luZyBvdXRzaWRlXG4gICAgY29uc3QgY2xpY2tlZEluc2lkZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XG4gICAgICB0aGlzLnNob3dVc2VyTWVudSA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPG5hdiBjbGFzcz1cImNpZGUtbHl0LXNpZGViYXIgdHctZmxleCB0dy1oLWZ1bGwgdHctc2VsZWN0LW5vbmVcIiBbY2xhc3MuY29sbGFwc2VkXT1cImlzQ29sbGFwc2VkXCI+XG4gICAgPCEtLSBGaXJzdCB0aWVyIHNpZGViYXIgKEljb24gb25seSkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNpZGUtbHl0LXN0YWNrIHR3LWgtZnVsbCB0dy1mbGV4IHR3LWZsZXgtY29sIHR3LWl0ZW1zLWNlbnRlciB0dy1ib3JkZXItciB0dy1ib3JkZXItZ3JheS0xMDBcIj5cbiAgICAgICAgPCEtLSBTY3JvbGxhYmxlIGNvbnRlbnQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyLXNjcm9sbC1jb250ZW50XCI+XG4gICAgICAgICAgICA8IS0tIENvbGxhcHNlL0V4cGFuZCB0b2dnbGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0gY29sbGFwc2UtdG9nZ2xlXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGViYXIoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidG9nZ2xlU2lkZWJhcigpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi10b29sdGlwXCI+e3tpc0NvbGxhcHNlZCA/ICdFeHBhbmQnIDogJ0NvbGxhcHNlJ319IFNpZGViYXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiBzaXplPVwieHNcIiB0eXBlPVwiYm94XCIgY2xhc3M9XCJ0dy10ZXh0LWdyYXktNTAwIGhvdmVyOnR3LXRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICAgICAge3tpc0NvbGxhcHNlZCA/ICdjaGV2cm9uX3JpZ2h0JyA6ICdjaGV2cm9uX2xlZnQnfX1cbiAgICAgICAgICAgICAgICA8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICA8L2Rpdj4gPCEtLSBNYWluIG5hdmlnYXRpb24gaWNvbnMgLSBFbmhhbmNlZCBEZXNpZ24gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1mbGV4LWNvbCB0dy1nYXAtNFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNvcmVfc3lzdGVtX21vZHVsZV9pdGVtIG9mIGNvcmVfc3lzdGVtX21vZHVsZTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtIHR3LXJlbGF0aXZlIHR3LWdyb3VwXCIgKGNsaWNrKT1cInNldEFjdGl2ZU1lbnUoY29yZV9zeXN0ZW1fbW9kdWxlX2l0ZW0uX2lkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjaWRlRWxlVG9vbHRpcF09XCJjb3JlX3N5c3RlbV9tb2R1bGVfaXRlbS5zeW1lX3RpdGxlXCIgW3Rvb2x0aXBTaG93QXJyb3ddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnbmF2LWl0ZW0tYWN0aXZlJzogYWN0aXZlTW9kdWxlSWQgPT09IGNvcmVfc3lzdGVtX21vZHVsZV9pdGVtLl9pZH1cIlxuICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbkl0ZW1Ib3Zlcihjb3JlX3N5c3RlbV9tb2R1bGVfaXRlbS5faWQpXCIgKG1vdXNlbGVhdmUpPVwib25JdGVtSG92ZXIoJycpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIiRpbmRleFwiIChrZXlkb3duLmVudGVyKT1cInNldEFjdGl2ZU1lbnUoY29yZV9zeXN0ZW1fbW9kdWxlX2l0ZW0uX2lkKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTm90aWZpY2F0aW9uIEJhZGdlIHdpdGggZW5oYW5jZWQgZGVzaWduIC0tPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvcmVfc3lzdGVtX21vZHVsZV9pdGVtPy5zeW1lX3BpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1iYWRnZSB0dy1hYnNvbHV0ZSAtdHctdG9wLTEgLXR3LXJpZ2h0LTEgdHctdy0xLjUgdHctaC0xLjUgdHctcm91bmRlZC1mdWxsIHR3LWFuaW1hdGUtcGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNpZGUtdGhlbWUtZXJyb3ItY29sb3IpO1wiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRW5oYW5jZWQgaWNvbiB3aXRoIGJldHRlciB2aXN1YWwgZWZmZWN0cyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1wLTIgdHctcm91bmRlZC14bCB0dy10cmFuc2l0aW9uLWFsbCB0dy1kdXJhdGlvbi0yMDAgdHctZWFzZS1pbi1vdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAtaG92ZXI6dHctYmctYmx1ZS01MCBncm91cC1ob3Zlcjp0dy1zaGFkb3ctbWQgZ3JvdXAtaG92ZXI6dHctc2NhbGUtMTA1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3LWJvcmRlci0yIHR3LWJvcmRlci10cmFuc3BhcmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGl2ZU1vZHVsZUlkID09PSBjb3JlX3N5c3RlbV9tb2R1bGVfaXRlbS5faWQgPyAndHctYmctYmx1ZS0xMDAgdHctYm9yZGVyLWJsdWUtMjAwIHR3LXNoYWRvdy1zbScgOiAndHctYmctZ3JheS01MCd9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gdHlwZT1cImJveFwiIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy10cmFuc2l0aW9uLWFsbCB0dy1kdXJhdGlvbi0yMDAgdHctZWFzZS1pbi1vdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FjdGl2ZU1vZHVsZUlkID09PSBjb3JlX3N5c3RlbV9tb2R1bGVfaXRlbS5faWQgPyAndHctdGV4dC1ibHVlLTYwMCcgOiAndHctdGV4dC1ncmF5LTYwMCBncm91cC1ob3Zlcjp0dy10ZXh0LWJsdWUtNTAwJ319XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb3JlX3N5c3RlbV9tb2R1bGVfaXRlbT8uc3ltZV9pY29uIHx8ICdkYXNoYm9hcmQnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBNb2Rlcm4gYWN0aXZlIGluZGljYXRvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVNb2R1bGVJZCA9PT0gY29yZV9zeXN0ZW1fbW9kdWxlX2l0ZW0uX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWluZGljYXRvciB0dy1hYnNvbHV0ZSB0dy1sZWZ0LTAgdHctdG9wLTEvMiB0dy10cmFuc2Zvcm0gLXR3LXRyYW5zbGF0ZS15LTEvMiB0dy13LTEgdHctaC04IHR3LWJnLWJsdWUtNTAwIHR3LXJvdW5kZWQtci1mdWxsIHR3LXNoYWRvdy1sZyB0dy10cmFuc2l0aW9uLWFsbCB0dy1kdXJhdGlvbi0zMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBCb3R0b20gc2VjdGlvbiB3aXRoIGVuaGFuY2VkIHRoZW1lIHRvZ2dsZSBhbmQgdXNlciBhdmF0YXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWZsZXgtY29sIHR3LWl0ZW1zLWNlbnRlciB0dy1nYXAtMyB0dy1tdC1hdXRvIHR3LXBiLTRcIj5cbiAgICAgICAgICAgIDwhLS0gVGhlbWUgdG9nZ2xlIHdpdGggbW9kZXJuIGRlc2lnbiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaXRlbSB0dy1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtdG9vbHRpcFwiPlRvZ2dsZSBUaGVtZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0aGVtZS10b2dnbGVcIiAoY2xpY2spPVwidG9nZ2xlVGhlbWUoKVwiIChrZXlkb3duLmVudGVyKT1cInRvZ2dsZVRoZW1lKClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGVUaGVtZSgpXCIgdGFiaW5kZXg9XCIwXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgdGhlbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gdHlwZT1cImJveFwiIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXJrTW9kZSA/ICdsaWdodF9tb2RlJyA6ICdkYXJrX21vZGUnfX1cbiAgICAgICAgICAgICAgICAgICAgPC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVXNlciBhdmF0YXIgd2l0aCBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1yZWxhdGl2ZSB1c2VyLWRyb3Bkb3duXCIgXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVVc2VyTWVudSgpXCJcbiAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidG9nZ2xlVXNlck1lbnUoKVwiXG4gICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInRvZ2dsZVVzZXJNZW51KClcIlxuICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlRvZ2dsZSB1c2VyIG1lbnVcIlxuICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInNob3dVc2VyTWVudVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtdG9vbHRpcFwiPllvdXIgUHJvZmlsZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWF2YXRhciB0dy13LTEwIHR3LWgtMTAgdHctcm91bmRlZC1mdWxsIHR3LW92ZXJmbG93LWhpZGRlbiB0dy1iZy1ncmF5LTIwMCB0dy1ib3JkZXItMiB0dy1zaGFkb3ctc20gdHctY3Vyc29yLXBvaW50ZXIgaG92ZXI6dHctc2hhZG93XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItY29sb3I6IHZhcigtLWNpZGUtdGhlbWUtc2lkZWJhci1jb2xvcik7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNd0FBQURBQ0FNQUFBQi9Qbnk3QUFBQThGQk1WRVgvLy84UWR2OFFVdWYvLy8wUVVlZ05kUC8vLy9zQWN2OEFiLzhBYmYvTTR2QVNYKzhBYi8zbjd2Z0FidmdFVHVmUjRQUDAvL3NBYWYwQVNlVTZZdU15VytmZThQY0FhZmJDMXZlbHdmR1d1ZkNPc3ZMMS9QM3U5dmg3cWZoM3B2Z0FSdWNSV091MTB2QmdsT21ueHV3MGZPVmFsdVlBYk9kWWsvRUFZUGdBWitvOWhQSk1pK1RIMy9kdW9PTndudXdkZWZlMHl2UnVuZlo2cGUxTGlPazZnZnVSdSt5MTFldXJ2dVUzWXRtUnB1Q2l0T083eHV2RzFPbEpqUFlkYytpTm5PRk9jT0ZjZU9KbGc5M0p6K3dBTnQ2a3RlNThrTnAxa09nQVFNa1pPZFFPVE5VQUtOa2ZVOUZNYjlJOVpzNGdNWjZtQUFBUEtVbEVRVlI0bk8xZEMxZml1aFp1bTZaRm9BK3NGSUgyVEFVY2xRNktnem9LUGxCMDhEZ3ozdi8vYjI2U3RvaGpIMGxhMUxNVzM5S2pJNXlHci91Um5iMTNFMEZZWTQwMTFsaGpqVFhXV0dPTk5kYmdCZ2krQWZrRytBZjVKWHhsOFFQOUJZQVArb2owQUlUREN4bmwxYitFNVg5OGZqTEJ4d1hScHdXT2E5c21nVzI3RHBGUStNcC9nUXRob3doQ3JkeHBqYm9uL2luQ2tIeWRudTZlZEVldFRybUczcWI4RnlSRGJycmRPOXpWZFJHS0lrUlFZUWhWeGIrS3VyNTcyTFBCd29vK0h4QUpCWXRFc1h0Zjl5cWJWVlVVTVprRWxEWXJlMTk3TnBhanNPd2RQZzJRM3JqMm1WODVRTGMva2NVTFlIV3o3NS9acnZBWlRRaTRadk1FaVlTR1NBUjFzL0t0YWJwWU9zcW5JWU0ramJZOTJ0dFVnM3RPeVllOFQ5M2NHMjFyaXFCOE5BY2hjc1NLMmR6WE55QXhFbHJKd09pdGNFUGZiNXJodlBPaFBvNW9pTm0rYmxRWnRPc05xbzNydHJtWVZEK01DeHE3M1BZYmFoNHFHR3BFNXdNbEF3Uzc1ZXU1cVdDTlUvWHJsZzArVURJQTlId3hmVVpoZ0NyNnZZK1FUSEFIUWJtcnE0WHdDQUgxcmgyNGdYZmxRcUtyczM0QkN2YWFqZG8vdzFQT083TUJ3RDQ1S0pnS1ppTWU3TnJLKzlvTmlseDYvWTNpdVdDby9aNzd2bHkwa1Y2a3NVUWcxMVQxa2ZaZVRrMVJnRExZYjZ5QXlvS1J2ajk0SDdlR1JuRjZmbWwxWERCS2ZzOTVIekpPYTVncmVNa0dGS3ZEMWp1d0FVcHRKQmJ0a2YraVFxSnBjZVNzV05YUTVXdGZpd2hmc2dtaENkUlo3U0lIVFdqZlZtd3VMNmgrYzFhNlpsT2NrMm94Z1JnRllPbWt0anBOQTRwTDVNTEVKc3pKd0NBenc4YW0rczFkaldqd010MDlZb3Nyb1M2U2ZGbUVvWWp0amZvU2FGMXc1SzVFTkRqNU10SVppT0NRL252cnVQeUNRYWZWOWNYcXk0bzU2d3BvK2h5dGhBM2kwc1lCUDNXMlF2ZmJBMGQ0aWVkSkxGd2J0SDJXUUFqcWJYY1ZaSnpta0VIcDFmNG9YTlV2M3c4TWM5U25zeDd5SGpoc09nVVR3UmJUdWFIUzl6RGxzdGR6ZzlUZTBtSXJYT083dlQycTFXbndodXBOQnhTYnlzV3JTcC9PS2NQZ0U3eUtGRjkvRWdBR2U5UUpLUlRaK0dXbHdOVWFLVTNzVTArV1VDemRtRXJ5OE9nVjg2WXFVcm8xZExXVElnTWJyR1dIbTVTbWoxM1ZqUWxTTXBRa2EzaERaMy9FOFcwY0ZxbG1RUGxSR2RMZVNtUXZBNUFpR0dJNkNwT21IZndva2t1dFQrL0g0RjRuV3ltUVA2Rm1nOUIzRmFXZzFDMVFqaGdDWmIxTjRVdUI0clFaRnF0cVZ5bXExQVo2RE9HWWVtM1NYZFQwV1piZXZhTHlUK1ZybG9pc1RXZXNRSmhLMVBLRzhOb3VRakpvbVR4aW9BSlBlM1NYRllUTCtrNDR3MUxkSXljL0dYU0Y3Vk1HaTFGOWswb3llTEs1TUhhb1JhNmViaGZnbmxIY3o1SytVSzl0V3VYV2JnMnBJdEpXMnFwSCtTTk9BSHBEQmk2aWZxTFJjUUZBdTdNa2FZZjJ3bkJJcDcrcFkycmZtZkpLZXBkT3QzSDZiV2JKRXBFTkRSZXgxTlh5Y2xHT0cwekxaRGlpVisyNWpNaElGZHJMTnpwNUEwNk5Qc0FrUU1wQUp4bjBmYjVqSURJeUZSdjBIblZmeXpmWmdBNmxHa1JqbnBhcGM5NUEyekt3YkFJMkZJd3FIU1ZYamQzOXhwYUpWWDM2ckNwd2JvbGtFQnVkYXRtbmRuTWtCTkE5SGpCbSsrRTFaYW9MaDg2WURMYWF5RzdTK2FCWEd3UHVPaFJlOHg0eFZwU3dtbEY2WmdETXJZZ01wZDFzSEhISE5MalUxMmZqZ3RDbWxBejZtb1pVRUl3S1ZkNm5iL05SUVZEQTJTWXJGeFZIaEhSa1VBUVFrYUdkYnpiUGVET2N5SFhzc1hJUm9UK2d2ZjU5NE14Q05qSVZtejArS2dpZ3pGNVBocWNkeW90ak10SXlhT3ptb016TjVwQ2pmRUVmUWszcThpc3lSRFlaaEVxSG5GUkFyYzlUdm1qUmVzK3gvSnBNSUp1TUVmZHFuR3c2ckRVSWpNYUk3azZobGFiM1dqQnlwcVpocnBSYS9HYTRROVo2Q2g2dFA2SnlPTWlCVDZVM29zbTJHeHpJc3M0MStPM3VOWHZ4RXZyTks2cUFCczMvOTVNTE9WYlQwbFFOWHJPbk4vSDdCeXhaLzJBa1lqRzA0UXl5R3VtTmFPUU11NEhEQVhQa2pNZHFNZmVSb2JmL29Hem1JLzJ5blJoRnk0eHNxQjNNTWhsd1JGMVpXc0kycFJLUWxjbmxHeXJaYlBRajV2QU1qZVdlc1BaaFlBVTVacmx2NTBZY20zUXZVRDFoTDlxaW1OWm5sUXN5TWRnV0dCcVNwa1lNRlRsZE52Q1V2VWtJQ0d4Wm1ZaE9sMFV5czFqSlpNdzN0QXZ6VjJnemxKWmZ5UGowMmExbzJSeERKazAyZXB1VkNSQnFYM2o2U3VDcFNaZDB3S3B5Vlk5VHN5d3ZVUDFTWTdZWmU1K3JEd3ZIbVhSa0ZHR3lFMnYvR1d5cSs4d3JOR0F5cGY1Zk1LSXQyZUV5Z1B4MjFzejBhYlExaytXUnRrKzV5S2hkT2lYQTBwdFpNWlBtRWhzeGR0YUdwOXZNWkk0NW5Ca2V5amVwOUF5OXc3eElOSm1GYk9MSURJK1p5VFM1dUNBY21TNUZTQVBjcThjMHNTdzA3VzE4cURkWnlZQVdoMmNtR0E2bm1wQldPaWZRcG45UzdJVWdmdmFFVUc4eHpqTkFZYW1mdnNZR3N0Qk1NdWF0bHlXWHBObXowV2FNWjRBejRpYURleG95UnpQL1pCaE1wR2t4WkVhc2piWHVQL3pkOFpYdDFNSElrMTNiRDFSY0lrMWJGdERHUDZ6dDllNFhmaktiR1QzSk9CVDlTVWttSmcrOThZV1ZqUGFkbnd6TzFxZk9uRURRMEJ4REp4bjVqUmNvZldjdG9lVWhBL2ZNTk4rTW43VTFKVHFUaVdFRGVjams2Ri9lYktYMnU2RVh4OVJhSmtsL1oyNTV5UEQzKzBQYzE1UVNCcVRHeS9Gc2xtWERUQWJra294WTNiV1RzelRJWWk0b0xXYVp6WUpQOVozSmlOVnJOOWxzN0FzdisvTy80aEt3Z2J5U3llT2FDWnR2YnBMUjJNK01YQWdXZGdQWlhYT2VTVE5pOHpicXdMc0cyTTlXWmlDVHdnYXlUNXA1d3BtSVRXejFBUWh6THpOYWpzV2k0c0VjemdDbVJyMVl3SmpHTTJ4SDAvaGtXVGFaeUtjMTJxeGsrSmNBRVJleEZYdmR1QVF6RlpkRjl3TmFBakJ4eWJNNGl6QnN4dmd6OUplME5FWVdvVURUV0JkbkF1K3llWWxNSis0R0F1R3l6azJHc0ZFNWxzMmNDWTBGU0JvMTdzSlhXMHl6LzErb2NDVTBUSTVTMHpMVVV6dHVvZ0ZBeThwanBBZ0d6NTRjcVNiZUpHQWtsOUxCdDNpZkE1em4zMHNyWm5hVjIvbk9uZ1RrU3MvQ29JaW5IdlFQQjFwTUN6MTJDWXEyUGJkKzQ0bnpiUkdRQnQ0ajZ3TTFhRkNPeERtaEFqY3JYd2RPdEhsV3pKWFJuNTN0MllNWG16WFBoalZsTFowQjFrYlRCWi9xelZsa0xERmtnaDBlc016czhSL0w0SkNOWEo4d0NnWVBPMkIzWjZvNjNPMjU0ZE5aOFVGenRNY1pGcy81cmNRZXBobGJWOHpWR1FEY0U1VjZjeDhpRTZnUDl6dE85RnhXL0lnZytpSndMcC9ySVIxcVVzWWRYZHZVS3k2a1FNdUM2bkMvVjJNYUI2bWJjejRqZE5MS0FYK1JlZVNwTnJPVnpsVnh2K2tLYWM4QXhkOHg0RTd1REl1ZWl5U05tUjl6d21yQzB0UlE5VnNhVHNreURSTWFqL2J6d3FObUk5ZXYySnNhOE94MlRVMm0rdFVVT0o0TEF3TGg3NWd6MnJXbmJOeHlQcTB4b2cxb0dpUGUvVWpDejZYTlBSS3JaRkdSWk91UnIwOGJkQ2lOWnZNbzUwT3V1SXJtVVhnMFJNYTRWUGphdEd0MHZiTnd6OG43YUF0U3RYL1RhNEloR2VtcFJsY0FmZ3U2dHNaS21mTm12WEJCR0R6UXFKazNUNXlPc3pDZ2FUaXRqdGdjY2hJaGJEYVpldlp3eFh0NWtOa0tqTjFkdjVpOWxZRDVsQzBZNHhmdmd3MUk5aFJOMnFVamw4TXB4OEI5elBiUEQyUHVvYWphNXh1NFRGYUVuaW1YVDFsY2pDZktaOERpdUFoSzVvTU5xcC8zNGFuRmNPbnJhZXpxdkVmK0J4dFFKRGlvcE04MWNJTjd2bnd6bkR0UDB6TmtNTWo4dVhmWHdqNHc4MkdneG5GUjIza0MwTXpRTSs4dU1SbFBjMzBsNnpFdHVKZGVXV1lhN2Y1WHFwNUpENWNDL3pZME9LclZVcE0wVUwwMml5SURnSG1iV29PeW5ybk5QeHFpazVwQTMvaXVGYmZ2Z0pZZVBEOGQ1M1dhUU91bWlZWTVJNTh5a3BEdUFieFpYc0ZrTlo0MldKdHlVb2Y2bVVKRy9uV2Vmd1RnSHFVazBCck40clJNU0NWalBlWlhhSFFCOGdoOXdtU2pOd3VUREs1MkpKTXh0aTd6QjAwZ2ZYT0RBdFVNQUNWUk1ySnN6SXZZM0FBMzBsNG43Z1JXR2hXM0wxUmlDSUFpR2VQV0xDQ2NKU205WHVLV2h0QXZiSjVKYTlxVXBYT2hnTDJjZzJ4UU56RzFVWlFId09yOE03RTUwSnNWc2dBa1VOQlNJRGJ0QkVWNFUwN0s5ek14d1FGQVVqUWp5MDkyY2ZKWGxCOEhTYk9OdWh0WGlHRUVDZ0lWTGJrSjVmZDJvZHZQZ2NPRWhRMkVLcEpOem0wSThYWS81VDlXVWc3QW14ZkVJZ0FRbkpOcVRNdDAwSEZZR1d0YThDN2V5MnZhK0NFeDFlUTlPMEtCNXdaZ2pTNzcxY1JzYmVYWDQ2WHBScm5qcUtZUjUzMFdCVFVRYmkyT1F3enorUEZYY21Pd3RWV2d3NHcrUmVjbStXaUprdlZ3TVozY2EyUkRReVU2Z1NhcFJrUDJCQXU0T3RwOWMzcnhsTkpPWTlWWksrVVVaQlNuT1l4MzBMakhYZCt4dktldDJYU0NKS1NBNkJQSFhFWllORHdxbW5rL21jNytQSGxwcXhpalBpbDRnOE9BamR1TzN6U1N0TFZWZDlBMDdYblMxdDNqZEh4K2I5b3BTd1BITnUvUHgvUFozWmJsZVVaUWRrNFFqV3hNVjdPUnB1Q09ZdVBOY0ZkRjBoSWpHeGE2MGZXdDI3dlpiRDRkVHlhWDkxZFh3VEZIVjFmM2w1UEplRHAvbk4zZGJ0VU56N0tNOUg0QW5QU2ZyMmFMVXdUM0NKYzVFd2pwT3k5YkZSZ1dnbUZJTy9YNjFndnFDRkw0RWtWdENYT1pyWXdMQ2dYeFJycnhiZ0FpdTVHWDduQ29QY1lyWUcyU2s1WHFielllV2ZXdmhnM2Vldm9rMFFtZ1lDQnF2bG9Va0tNUEgvNVpsbGhLc1pMM1A2ZWdiR2tzRk1WSjJIdzZtRDRqR3JLMFZBaDcvWU9hRFpJTFdzSW9xOXgrR3RTK3BweGtCSGRZNnNhcE1LeVpveFM4VWVzYktBN2VzRDBwR05CM2lxRWlHZEljS0tzL2h5TFlTai9CQ3l6N3REeXc2bU1IRkxSelpob1hGSFNtSFhLZzg3ZGdMaUI3RitkT1VuaFhNQmtBQnZ2SmhxUG50aHZaZXI0UFE5SlZxeG1Ha25nd0NBeGpnUngwREd0ZVlNNDNFNEFjMlpLWUY2anl5d2I5YjlhLzUrOTZaSXVRZkpnT2pOaHdjcEVmTHZoM3l1SW1neWJRczBwTXFqT0lCWGdrZzVYVGVwcUVhN2QzaGdMc3JwNlV0SkZZekNhS0dBenJtVzUvMU5YUTZma0pNNDRxTWRBSnV1Y3MrV0tTdTNHRkU4RmFVbXY1ZWltT0VGTXNnTzNldUIxckxMdUpySUFOQVBoa1FGVmNmajU4ZWJWR0NjdTduWnBKYSsxM29oT2tvakdkbUpDQW1vM3NlYmZqb01Idkk4OEdKSXlRWXlOSFVMNlpkN0xaa0FXT1o5MzlOQUZqZitlcUFQNDZIUFRGcFdYTW52aEY3K0hYL0ZKVGlzenk1VUxZWGg0YzI2b3VjY21LT21YTCsvMDhDWTV0L1N4a3dyWnM5Ri9YYnZtTnpZM0FGeEEzb09QYkgwdkk4QjRlTHNhYUMxTFBFUGhnQkVjZGw2SWpndFVsNjVDQ3FWR1dNWkYvWnozN0hWWmZlUkNrai9FaDFLSWVuSEJVSWxtWnBmeU1aRHhkek05eEFBWXlONmY0WUN6OGEzZzgrSzUvUS9KbENGc1h0OCt6K2ZpODdBcmhreWNyWHVIblJyU2lDaWNNZkhDN2VZVmhtcllXWlkxZjVzWlB6U1ZNYzRWTXdrZGxGcThzZnYvQU00RFhXR09OTmRaWVk0MDExbGhqalRVK0kvNFAwRWRCdW5vYktrVUFBQUFBU1VWT1JLNUNZSUk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlVzZXJcIiBjbGFzcz1cInR3LXctZnVsbCB0dy1oLWZ1bGwgdHctb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3I9XCJ0aGlzLnNyYz0nZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNd0FBQURBQ0FNQUFBQi9Qbnk3QUFBQThGQk1WRVgvLy84UWR2OFFVdWYvLy8wUVVlZ05kUC8vLy9zQWN2OEFiLzhBYmYvTTR2QVNYKzhBYi8zbjd2Z0FidmdFVHVmUjRQUDAvL3NBYWYwQVNlVTZZdU15VytmZThQY0FhZmJDMXZlbHdmR1d1ZkNPc3ZMMS9QM3U5dmg3cWZoM3B2Z0FSdWNSV091MTB2QmdsT21ueHV3MGZPVmFsdVlBYk9kWWsvRUFZUGdBWitvOWhQSk1pK1RIMy9kdW9PTndudXdkZWZlMHl2UnVuZlo2cGUxTGlPazZnZnVSdSt5MTFldXJ2dVUzWXRtUnB1Q2l0T083eHV2RzFPbEpqUFlkYytpTm5PRk9jT0ZjZU9KbGc5M0p6K3dBTnQ2a3RlNThrTnAxa09nQVFNa1pPZFFPVE5VQUtOa2ZVOUZNYjlJOVpzNGdNWjZtQUFBUEtVbEVRVlI0bk8xZEMxZml1aFp1bTZaRm9BK3NGSUgyVEFVY2xRNktnem9LUGxCMDhEZ3ozdi8vYjI2U3RvaGpIMGxhMUxNVzM5S2pJNXlHci91Um5iMTNFMEZZWTQwMTFsaGpqVFhXV0dPTk5kYmdCZ2krQWZrRytBZjVKWHhsOFFQOUJZQVArb2owQUlUREN4bmwxYitFNVg5OGZqTEJ4d1hScHdXT2E5c21nVzI3RHBGUStNcC9nUXRob3doQ3JkeHBqYm9uL2luQ2tIeWRudTZlZEVldFRybUczcWI4RnlSRGJycmRPOXpWZFJHS0lrUlFZUWhWeGIrS3VyNTcyTFBCd29vK0h4QUpCWXRFc1h0Zjl5cWJWVlVVTVprRWxEWXJlMTk3TnBhanNPd2RQZzJRM3JqMm1WODVRTGMva2NVTFlIV3o3NS9acnZBWlRRaTRadk1FaVlTR1NBUjFzL0t0YWJwWU9zcW5JWU0ramJZOTJ0dFVnM3RPeVllOFQ5M2NHMjFyaXFCOE5BY2hjc1NLMmR6WE55QXhFbHJKd09pdGNFUGZiNXJodlBPaFBvNW9pTm0rYmxRWnRPc05xbzNydHJtWVZEK01DeHE3M1BZYmFoNHFHR3BFNXdNbEF3Uzc1ZXU1cVdDTlUvWHJsZzArVURJQTlId3hmVVpoZ0NyNnZZK1FUSEFIUWJtcnE0WHdDQUgxcmgyNGdYZmxRcUtyczM0QkN2YWFqZG8vdzFQT083TUJ3RDQ1S0pnS1ppTWU3TnJLKzlvTmlseDYvWTNpdVdDby9aNzd2bHkwa1Y2a3NVUWcxMVQxa2ZaZVRrMVJnRExZYjZ5QXlvS1J2ajk0SDdlR1JuRjZmbWwxWERCS2ZzOTVIekpPYTVncmVNa0dGS3ZEMWp1d0FVcHRKQmJ0a2YraVFxSnBjZVNzV05YUTVXdGZpd2hmc2dtaENkUlo3U0lIVFdqZlZtd3VMNmgrYzFhNlpsT2NrMm94Z1JnRllPbWt0anBOQTRwTDVNTEVKc3pKd0NBenc4YW0rczFkaldqd010MDlZb3Nyb1M2U2ZGbUVvWWp0amZvU2FGMXc1SzVFTkRqNU10SVppT0NRL252cnVQeUNRYWZWOWNYcXk0bzU2d3BvK2h5dGhBM2kwc1lCUDNXMlF2ZmJBMGQ0aWVkSkxGd2J0SDJXUUFqcWJYY1ZaSnpta0VIcDFmNG9YTlV2M3c4TWM5U25zeDd5SGpoc09nVVR3UmJUdWFIUzl6RGxzdGR6ZzlUZTBtSXJYT083dlQycTFXbndodXBOQnhTYnlzV3JTcC9PS2NQZ0U3eUtGRjkvRWdBR2U5UUpLUlRaK0dXbHdOVWFLVTNzVTArV1VDemRtRXJ5OE9nVjg2WXFVcm8xZExXVElnTWJyR1dIbTVTbWoxM1ZqUWxTTXBRa2EzaERaMy9FOFcwY0ZxbG1RUGxSR2RMZVNtUXZBNUFpR0dJNkNwT21IZndva2t1dFQrL0g0RjRuV3ltUVA2Rm1nOUIzRmFXZzFDMVFqaGdDWmIxTjRVdUI0clFaRnF0cVZ5bXExQVo2RE9HWWVtM1NYZFQwV1piZXZhTHlUK1ZybG9pc1RXZXNRSmhLMVBLRzhOb3VRakpvbVR4aW9BSlBlM1NYRllUTCtrNDR3MUxkSXljL0dYU0Y3Vk1HaTFGOWswb3llTEs1TUhhb1JhNmViaGZnbmxIY3o1SytVSzl0V3VYV2JnMnBJdEpXMnFwSCtTTk9BSHBEQmk2aWZxTFJjUUZBdTdNa2FZZjJ3bkJJcDcrcFkycmZtZkpLZXBkT3QzSDZiV2JKRXBFTkRSZXgxTlh5Y2xHT0cwekxaRGlpVisyNWpNaElGZHJMTnpwNUEwNk5Qc0FrUU1wQUp4bjBmYjVqSURJeUZSdjBIblZmeXpmWmdBNmxHa1JqbnBhcGM5NUEyekt3YkFJMkZJd3FIU1ZYamQzOXhwYUpWWDM2ckNwd2JvbGtFQnVkYXRtbmRuTWtCTkE5SGpCbSsrRTFaYW9MaDg2WURMYWF5RzdTK2FCWEd3UHVPaFJlOHg0eFZwU3dtbEY2WmdETXJZZ01wZDFzSEhISE5MalUxMmZqZ3RDbWxBejZtb1pVRUl3S1ZkNm5iL05SUVZEQTJTWXJGeFZIaEhSa1VBUVFrYUdkYnpiUGVET2N5SFhzc1hJUm9UK2d2ZjU5NE14Q05qSVZtejArS2dpZ3pGNVBocWNkeW90ak10SXlhT3ptb016TjVwQ2pmRUVmUWszcThpc3lSRFlaaEVxSG5GUkFyYzlUdm1qUmVzK3gvSnBNSUp1TUVmZHFuR3c2ckRVSWpNYUk3azZobGFiM1dqQnlwcVpocnBSYS9HYTRROVo2Q2g2dFA2SnlPTWlCVDZVM29zbTJHeHpJc3M0MStPM3VOWHZ4RXZyTks2cUFCczMvOTVNTE9WYlQwbFFOWHJPbk4vSDdCeXhaLzJBa1lqRzA0UXl5R3VtTmFPUU11NEhEQVhQa2pNZHFNZmVSb2JmL29Hem1JLzJ5blJoRnk0eHNxQjNNTWhsd1JGMVpXc0kycFJLUWxjbmxHeXJaYlBRajV2QU1qZVdlc1BaaFlBVTVacmx2NTBZY20zUXZVRDFoTDlxaW1OWm5sUXN5TWRnV0dCcVNwa1lNRlRsZE52Q1V2VWtJQ0d4Wm1ZaE9sMFV5czFqSlpNdzN0QXZ6VjJnemxKWmZ5UGowMmExbzJSeERKazAyZXB1VkNSQnFYM2o2U3VDcFNaZDB3S3B5Vlk5VHN5d3ZVUDFTWTdZWmU1K3JEd3ZIbVhSa0ZHR3lFMnYvR1d5cSs4d3JOR0F5cGY1Zk1LSXQyZUV5Z1B4MjFzejBhYlExaytXUnRrKzV5S2hkT2lYQTBwdFpNWlBtRWhzeGR0YUdwOXZNWkk0NW5Ca2V5amVwOUF5OXc3eElOSm1GYk9MSURJK1p5VFM1dUNBY21TNUZTQVBjcThjMHNTdzA3VzE4cURkWnlZQVdoMmNtR0E2bm1wQldPaWZRcG45UzdJVWdmdmFFVUc4eHpqTkFZYW1mdnNZR3N0Qk1NdWF0bHlXWHBObXowV2FNWjRBejRpYURleG95UnpQL1pCaE1wR2t4WkVhc2piWHVQL3pkOFpYdDFNSElrMTNiRDFSY0lrMWJGdERHUDZ6dDllNFhmaktiR1QzSk9CVDlTVWttSmcrOThZV1ZqUGFkbnd6TzFxZk9uRURRMEJ4REp4bjVqUmNvZldjdG9lVWhBL2ZNTk4rTW43VTFKVHFUaVdFRGVjams2Ri9lYktYMnU2RVh4OVJhSmtsL1oyNTV5UEQzKzBQYzE1UVNCcVRHeS9Gc2xtWERUQWJra294WTNiV1RzelRJWWk0b0xXYVp6WUpQOVozSmlOVnJOOWxzN0FzdisvTy80aEt3Z2J5U3llT2FDWnR2YnBMUjJNK01YQWdXZGdQWlhYT2VTVE5pOHpicXdMc0cyTTlXWmlDVHdnYXlUNXA1d3BtSVRXejFBUWh6THpOYWpzV2k0c0VjemdDbVJyMVl3SmpHTTJ4SDAvaGtXVGFaeUtjMTJxeGsrSmNBRVJleEZYdmR1QVF6RlpkRjl3TmFBakJ4eWJNNGl6QnN4dmd6OUplME5FWVdvVURUV0JkbkF1K3llWWxNSis0R0F1R3l6azJHc0ZFNWxzMmNDWTBGU0JvMTdzSlhXMHl6LzErb2NDVTBUSTVTMHpMVVV6dHVvZ0ZBeThwanBBZ0d6NTRjcVNiZUpHQWtsOUxCdDNpZkE1em4zMHNyWm5hVjIvbk9uZ1RrU3MvQ29JaW5IdlFQQjFwTUN6MTJDWXEyUGJkKzQ0bnpiUkdRQnQ0ajZ3TTFhRkNPeERtaEFqY3JYd2RPdEhsV3pKWFJuNTN0MllNWG16WFBoalZsTFowQjFrYlRCWi9xelZsa0xERmtnaDBlc016czhSL0w0SkNOWEo4d0NnWVBPMkIzWjZvNjNPMjU0ZE5aOFVGenRNY1pGcy81cmNRZXBobGJWOHpWR1FEY0U1VjZjeDhpRTZnUDl6dE85RnhXL0lnZytpSndMcC9ySVIxcVVzWWRYZHZVS3k2a1FNdUM2bkMvVjJNYUI2bWJjejRqZE5MS0FYK1JlZVNwTnJPVnpsVnh2K2tLYWM4QXhkOHg0RTd1REl1ZWl5U05tUjl6d21yQzB0UlE5VnNhVHNreURSTWFqL2J6d3FObUk5ZXYySnNhOE94MlRVMm0rdFVVT0o0TEF3TGg3NWd6MnJXbmJOeHlQcTB4b2cxb0dpUGUvVWpDejZYTlBSS3JaRkdSWk91UnIwOGJkQ2lOWnZNbzUwT3V1SXJtVVhnMFJNYTRWUGphdEd0MHZiTnd6OG43YUF0U3RYL1RhNEloR2VtcFJsY0FmZ3U2dHNaS21mTm12WEJCR0R6UXFKazNUNXlPc3pDZ2FUaXRqdGdjY2hJaGJEYVpldlp3eFh0NWtOa0tqTjFkdjVpOWxZRDVsQzBZNHhmdmd3MUk5aFJOMnFVamw4TXB4OEI5elBiUEQyUHVvYWphNXh1NFRGYUVuaW1YVDFsY2pDZktaOERpdUFoSzVvTU5xcC8zNGFuRmNPbnJhZXpxdkVmK0J4dFFKRGlvcE04MWNJTjd2bnd6bkR0UDB6TmtNTWo4dVhmWHdqNHc4MkdneG5GUjIza0MwTXpRTSs4dU1SbFBjMzBsNnpFdHVKZGVXV1lhN2Y1WHFwNUpENWNDL3pZME9LclZVcE0wVUwwMml5SURnSG1iV29PeW5ybk5QeHFpazVwQTMvaXVGYmZ2Z0pZZVBEOGQ1M1dhUU91bWlZWTVJNTh5a3BEdUFieFpYc0ZrTlo0MldKdHlVb2Y2bVVKRy9uV2Vmd1RnSHFVazBCck40clJNU0NWalBlWlhhSFFCOGdoOXdtU2pOd3VUREs1MkpKTXh0aTd6QjAwZ2ZYT0RBdFVNQUNWUk1ySnN6SXZZM0FBMzBsNG43Z1JXR2hXM0wxUmlDSUFpR2VQV0xDQ2NKU205WHVLV2h0QXZiSjVKYTlxVXBYT2hnTDJjZzJ4UU56RzFVWlFId09yOE03RTUwSnNWc2dBa1VOQlNJRGJ0QkVWNFUwN0s5ek14d1FGQVVqUWp5MDkyY2ZKWGxCOEhTYk9OdWh0WGlHRUVDZ0lWTGJrSjVmZDJvZHZQZ2NPRWhRMkVLcEpOem0wSThYWS81VDlXVWc3QW14ZkVJZ0FRbkpOcVRNdDAwSEZZR1d0YThDN2V5MnZhK0NFeDFlUTlPMEtCNXdaZ2pTNzcxY1JzYmVYWDQ2WHBScm5qcUtZUjUzMFdCVFVRYmkyT1F3enorUEZYY21Pd3RWV2d3NHcrUmVjbStXaUprdlZ3TVozY2EyUkRReVU2Z1NhcFJrUDJCQXU0T3RwOWMzcnhsTkpPWTlWWksrVVVaQlNuT1l4MzBMakhYZCt4dktldDJYU0NKS1NBNkJQSFhFWllORHdxbW5rL21jNytQSGxwcXhpalBpbDRnOE9BamR1TzN6U1N0TFZWZDlBMDdYblMxdDNqZEh4K2I5b3BTd1BITnUvUHgvUFozWmJsZVVaUWRrNFFqV3hNVjdPUnB1Q09ZdVBOY0ZkRjBoSWpHeGE2MGZXdDI3dlpiRDRkVHlhWDkxZFh3VEZIVjFmM2w1UEplRHAvbk4zZGJ0VU56N0tNOUg0QW5QU2ZyMmFMVXdUM0NKYzVFd2pwT3k5YkZSZ1dnbUZJTy9YNjFndnFDRkw0RWtWdENYT1pyWXdMQ2dYeFJycnhiZ0FpdTVHWDduQ29QY1lyWUcyU2s1WHFielllV2ZXdmhnM2Vldm9rMFFtZ1lDQnF2bG9Va0tNUEgvNVpsbGhLc1pMM1A2ZWdiR2tzRk1WSjJIdzZtRDRqR3JLMFZBaDcvWU9hRFpJTFdzSW9xOXgrR3RTK3BweGtCSGRZNnNhcE1LeVpveFM4VWVzYktBN2VzRDBwR05CM2lxRWlHZEljS0tzL2h5TFlTai9CQ3l6N3REeXc2bU1IRkxSelpob1hGSFNtSFhLZzg3ZGdMaUI3RitkT1VuaFhNQmtBQnZ2SmhxUG50aHZaZXI0UFE5SlZxeG1Ha25nd0NBeGpnUngwREd0ZVlNNDNFNEFjMlpLWUY2anl5d2I5YjlhLzUrOTZaSXVRZkpnT2pOaHdjcEVmTHZoM3l1SW1neWJRczBwTXFqT0lCWGdrZzVYVGVwcUVhN2QzaGdMc3JwNlV0SkZZekNhS0dBenJtVzUvMU5YUTZma0pNNDRxTWRBSnV1Y3MrV0tTdTNHRkU4RmFVbXY1ZWltT0VGTXNnTzNldUIxckxMdUpySUFOQVBoa1FGVmNmajU4ZWJWR0NjdTduWnBKYSsxM29oT2tvakdkbUpDQW1vM3NlYmZqb01Idkk4OEdKSXlRWXlOSFVMNlpkN0xaa0FXT1o5MzlOQUZqZitlcUFQNDZIUFRGcFdYTW52aEY3K0hYL0ZKVGlzenk1VUxZWGg0YzI2b3VjY21LT21YTCsvMDhDWTV0L1N4a3dyWnM5Ri9YYnZtTnpZM0FGeEEzb09QYkgwdkk4QjRlTHNhYUMxTFBFUGhnQkVjZGw2SWpndFVsNjVDQ3FWR1dNWkYvWnozN0hWWmZlUkNrai9FaDFLSWVuSEJVSWxtWnBmeU1aRHhkek05eEFBWXlONmY0WUN6OGEzZzgrSzUvUS9KbENGc1h0OCt6K2ZpODdBcmhreWNyWHVIblJyU2lDaWNNZkhDN2VZVmhtcllXWlkxZjVzWlB6U1ZNYzRWTXdrZGxGcThzZnYvQU00RFhXR09OTmRaWVk0MDExbGhqalRVK0kvNFAwRWRCdW5vYktrVUFBQUFBU1VWT1JLNUNZSUk9J1wiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE1vZGVybiBTdGF0dXMgSW5kaWNhdG9yIENpcmNsZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWFic29sdXRlIC10dy1ib3R0b20tMC41IC10dy1yaWdodC0wLjUgdHctdy0zLjUgdHctaC0zLjUgdHctcm91bmRlZC1mdWxsIHR3LWJvcmRlci0yIHR3LWJvcmRlci13aGl0ZSB0dy1zaGFkb3ctc20gdHctdHJhbnNpdGlvbi1hbGwgdHctZHVyYXRpb24tMjAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0VXNlclN0YXR1c0NsYXNzKCl9fVwiIFtjaWRlRWxlVG9vbHRpcF09XCJnZXRVc2VyU3RhdHVzVGV4dCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQbGFjZW1lbnQ9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFB1bHNlIGFuaW1hdGlvbiBmb3IgYWN0aXZlIHN0YXR1cyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1hYnNvbHV0ZSB0dy1pbnNldC0wIHR3LXJvdW5kZWQtZnVsbCB0dy1hbmltYXRlLXB1bHNlIHR3LW9wYWNpdHktNTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0VXNlclN0YXR1c0NsYXNzKCl9fVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gRW5oYW5jZWQgVXNlciBkcm9wZG93biBtZW51IHdpdGggbW9kZXJuIHN0YXR1cyBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VXNlck1lbnVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVzZXItbWVudSB0dy1hYnNvbHV0ZSB0dy1sZWZ0LWZ1bGwgdHctYm90dG9tLTAgdHctbXQtMiB0dy1tbC0yIHR3LXctNzIgdHctcm91bmRlZC14bCB0dy1zaGFkb3ctMnhsIHR3LWJnLXdoaXRlIHR3LXJpbmctMSB0dy1yaW5nLWJsYWNrLzUgdHctZGl2aWRlLXkgdHctZGl2aWRlLWdyYXktMTAwIHR3LXotNTAgdHctYmFja2Ryb3AtYmx1ci1zbVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRW5oYW5jZWQgVXNlciBJbmZvIFNlY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1wLTUgdHctYmctZ3JhZGllbnQtdG8tYnIgdHctZnJvbS1ibHVlLTUwIHR3LXRvLWluZGlnby01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LWdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdy0xMiB0dy1oLTEyIHR3LXJvdW5kZWQteGwgdHctYmctZ3JhZGllbnQtdG8tYnIgdHctZnJvbS1ibHVlLTUwMCB0dy12aWEtcHVycGxlLTUwMCB0dy10by1pbmRpZ28tNjAwIHR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LWp1c3RpZnktY2VudGVyIHR3LXRleHQtd2hpdGUgdHctZm9udC1zZW1pYm9sZCB0dy10ZXh0LWxnIHR3LXNoYWRvdy1sZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRW5oYW5jZWQgc3RhdHVzIGluZGljYXRvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWFic29sdXRlIC10dy1ib3R0b20tMSAtdHctcmlnaHQtMSB0dy13LTQgdHctaC00IHR3LXJvdW5kZWQtZnVsbCB0dy1ib3JkZXItMiB0dy1ib3JkZXItd2hpdGUgdHctc2hhZG93LW1kIHR3LXRyYW5zaXRpb24tYWxsIHR3LWR1cmF0aW9uLTMwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0VXNlclN0YXR1c0NsYXNzKClcIiBbdGl0bGVdPVwiZ2V0VXNlclN0YXR1c1RleHQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWFic29sdXRlIHR3LWluc2V0LTAgdHctcm91bmRlZC1mdWxsIHR3LWFuaW1hdGUtcHVsc2UgdHctb3BhY2l0eS01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldFVzZXJTdGF0dXNDbGFzcygpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4LTEgdHctbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdGV4dC1iYXNlIHR3LWZvbnQtc2VtaWJvbGQgdHctdGV4dC1ncmF5LTkwMCB0dy10cnVuY2F0ZVwiPkpvaG4gRG9lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LXRleHQtZ3JheS02MDAgdHctdHJ1bmNhdGVcIj5qb2huLmRvZSYjNjQ7Y29tcGFueS5jb208L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTUwMCB0dy1tdC0xIHR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LWdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdy0xLjUgdHctaC0xLjUgdHctcm91bmRlZC1mdWxsIHR3LWJnLWdyZWVuLTUwMCB0dy1hbmltYXRlLXB1bHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFjdGl2ZSBub3c8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRW5oYW5jZWQgU3RhdHVzIFNlbGVjdGlvbiBTZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1iZXR3ZWVuIHR3LW1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LWZvbnQtc2VtaWJvbGQgdHctdGV4dC1ncmF5LTgwMCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1nYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXctNSB0dy1oLTUgdHctcm91bmRlZC1tZCB0dy1iZy1ibHVlLTEwMCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gdHlwZT1cIm5vbmVcIiBzaXplPVwiMnhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXRleHQtYmx1ZS02MDBcIj5yYWRpb19idXR0b25fY2hlY2tlZDwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdGV4dC14cyB0dy10ZXh0LWdyYXktNTAwIHR3LWJnLWdyYXktMTAwIHR3LXB4LTIgdHctcHktMSB0dy1yb3VuZGVkLWZ1bGxcIj5BdXRvLWF3YXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gNW1pbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctc3BhY2UteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0VXNlclN0YXR1cygnb25saW5lJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1cy1vcHRpb24gdHctdy1mdWxsIHR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LWdhcC0zIHR3LXB4LTMgdHctcHktMi41IHR3LXRleHQtc20gdHctcm91bmRlZC1sZyB0dy10cmFuc2l0aW9uLWFsbCB0dy1kdXJhdGlvbi0yMDAgaG92ZXI6dHctYmctZ3JlZW4tNTAgdHctZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudHctYmctZ3JlZW4tNTBdPVwidXNlclN0YXR1c1NlcnZpY2UudXNlclN0YXR1cygpLnN0YXR1cyA9PT0gJ29ubGluZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudHctcmluZy0yXT1cInVzZXJTdGF0dXNTZXJ2aWNlLnVzZXJTdGF0dXMoKS5zdGF0dXMgPT09ICdvbmxpbmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnR3LXJpbmctZ3JlZW4tMjAwXT1cInVzZXJTdGF0dXNTZXJ2aWNlLnVzZXJTdGF0dXMoKS5zdGF0dXMgPT09ICdvbmxpbmUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdy0zIHR3LWgtMyB0dy1yb3VuZGVkLWZ1bGwgdHctYmctZ3JlZW4tNTAwIHR3LXNoYWRvdy1zbSBncm91cC1ob3Zlcjp0dy1zY2FsZS0xMTAgdHctdHJhbnNpdGlvbi10cmFuc2Zvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctYWJzb2x1dGUgdHctaW5zZXQtMCB0dy1yb3VuZGVkLWZ1bGwgdHctYmctZ3JlZW4tNTAwIHR3LWFuaW1hdGUtcGluZyB0dy1vcGFjaXR5LTc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1c2VyU3RhdHVzU2VydmljZS51c2VyU3RhdHVzKCkuc3RhdHVzID09PSAnb25saW5lJ1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR3LXRleHQtZ3JheS03MDAgdHctZm9udC1tZWRpdW0gdHctZmxleC0xXCI+T25saW5lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiAqbmdJZj1cInVzZXJTdGF0dXNTZXJ2aWNlLnVzZXJTdGF0dXMoKS5zdGF0dXMgPT09ICdvbmxpbmUnXCIgdHlwZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCIgY2xhc3M9XCJ0dy10ZXh0LWdyZWVuLTYwMFwiPmNoZWNrPC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0VXNlclN0YXR1cygnYXdheScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMtb3B0aW9uIHR3LXctZnVsbCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1nYXAtMyB0dy1weC0zIHR3LXB5LTIuNSB0dy10ZXh0LXNtIHR3LXJvdW5kZWQtbGcgdHctdHJhbnNpdGlvbi1hbGwgdHctZHVyYXRpb24tMjAwIGhvdmVyOnR3LWJnLXllbGxvdy01MCB0dy1ncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50dy1iZy15ZWxsb3ctNTBdPVwidXNlclN0YXR1c1NlcnZpY2UudXNlclN0YXR1cygpLnN0YXR1cyA9PT0gJ2F3YXknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnR3LXJpbmctMl09XCJ1c2VyU3RhdHVzU2VydmljZS51c2VyU3RhdHVzKCkuc3RhdHVzID09PSAnYXdheSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudHctcmluZy15ZWxsb3ctMjAwXT1cInVzZXJTdGF0dXNTZXJ2aWNlLnVzZXJTdGF0dXMoKS5zdGF0dXMgPT09ICdhd2F5J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXctMyB0dy1oLTMgdHctcm91bmRlZC1mdWxsIHR3LWJnLXllbGxvdy01MDAgdHctc2hhZG93LXNtIGdyb3VwLWhvdmVyOnR3LXNjYWxlLTExMCB0dy10cmFuc2l0aW9uLXRyYW5zZm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LWdyYXktNzAwIHR3LWZvbnQtbWVkaXVtIHR3LWZsZXgtMVwiPkF3YXk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaWRlLWVsZS1pY29uICpuZ0lmPVwidXNlclN0YXR1c1NlcnZpY2UudXNlclN0YXR1cygpLnN0YXR1cyA9PT0gJ2F3YXknXCIgdHlwZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCIgY2xhc3M9XCJ0dy10ZXh0LXllbGxvdy02MDBcIj5jaGVjazwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldFVzZXJTdGF0dXMoJ2J1c3knKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzLW9wdGlvbiB0dy13LWZ1bGwgdHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctZ2FwLTMgdHctcHgtMyB0dy1weS0yLjUgdHctdGV4dC1zbSB0dy1yb3VuZGVkLWxnIHR3LXRyYW5zaXRpb24tYWxsIHR3LWR1cmF0aW9uLTIwMCBob3Zlcjp0dy1iZy1vcmFuZ2UtNTAgdHctZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudHctYmctb3JhbmdlLTUwXT1cInVzZXJTdGF0dXNTZXJ2aWNlLnVzZXJTdGF0dXMoKS5zdGF0dXMgPT09ICdidXN5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50dy1yaW5nLTJdPVwidXNlclN0YXR1c1NlcnZpY2UudXNlclN0YXR1cygpLnN0YXR1cyA9PT0gJ2J1c3knXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnR3LXJpbmctb3JhbmdlLTIwMF09XCJ1c2VyU3RhdHVzU2VydmljZS51c2VyU3RhdHVzKCkuc3RhdHVzID09PSAnYnVzeSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy13LTMgdHctaC0zIHR3LXJvdW5kZWQtZnVsbCB0dy1iZy1vcmFuZ2UtNTAwIHR3LXNoYWRvdy1zbSBncm91cC1ob3Zlcjp0dy1zY2FsZS0xMTAgdHctdHJhbnNpdGlvbi10cmFuc2Zvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctdGV4dC1ncmF5LTcwMCB0dy1mb250LW1lZGl1bSB0dy1mbGV4LTFcIj5CdXN5PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiAqbmdJZj1cInVzZXJTdGF0dXNTZXJ2aWNlLnVzZXJTdGF0dXMoKS5zdGF0dXMgPT09ICdidXN5J1wiIHR5cGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiIGNsYXNzPVwidHctdGV4dC1vcmFuZ2UtNjAwXCI+Y2hlY2s8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZXRVc2VyU3RhdHVzKCdkby1ub3QtZGlzdHVyYicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMtb3B0aW9uIHR3LXctZnVsbCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1nYXAtMyB0dy1weC0zIHR3LXB5LTIuNSB0dy10ZXh0LXNtIHR3LXJvdW5kZWQtbGcgdHctdHJhbnNpdGlvbi1hbGwgdHctZHVyYXRpb24tMjAwIGhvdmVyOnR3LWJnLXJlZC01MCB0dy1ncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50dy1iZy1yZWQtNTBdPVwidXNlclN0YXR1c1NlcnZpY2UudXNlclN0YXR1cygpLnN0YXR1cyA9PT0gJ2RvLW5vdC1kaXN0dXJiJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50dy1yaW5nLTJdPVwidXNlclN0YXR1c1NlcnZpY2UudXNlclN0YXR1cygpLnN0YXR1cyA9PT0gJ2RvLW5vdC1kaXN0dXJiJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50dy1yaW5nLXJlZC0yMDBdPVwidXNlclN0YXR1c1NlcnZpY2UudXNlclN0YXR1cygpLnN0YXR1cyA9PT0gJ2RvLW5vdC1kaXN0dXJiJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXctMyB0dy1oLTMgdHctcm91bmRlZC1mdWxsIHR3LWJnLXJlZC01MDAgdHctc2hhZG93LXNtIGdyb3VwLWhvdmVyOnR3LXNjYWxlLTExMCB0dy10cmFuc2l0aW9uLXRyYW5zZm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LWdyYXktNzAwIHR3LWZvbnQtbWVkaXVtIHR3LWZsZXgtMVwiPkRvIG5vdCBkaXN0dXJiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiAqbmdJZj1cInVzZXJTdGF0dXNTZXJ2aWNlLnVzZXJTdGF0dXMoKS5zdGF0dXMgPT09ICdkby1ub3QtZGlzdHVyYidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm5vbmVcIiBzaXplPVwieHNcIiBjbGFzcz1cInR3LXRleHQtcmVkLTYwMFwiPmNoZWNrPC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRW5oYW5jZWQgUXVpY2sgQWN0aW9ucyBTZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctcC00IHR3LWJnLWdyYXktNTAvNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdGV4dC1zbSB0dy1mb250LXNlbWlib2xkIHR3LXRleHQtZ3JheS04MDAgdHctbWItMyB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1nYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy13LTUgdHctaC01IHR3LXJvdW5kZWQtbWQgdHctYmctZ3JheS0xMDAgdHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gdHlwZT1cIm5vbmVcIiBzaXplPVwiMnhzXCIgY2xhc3M9XCJ0dy10ZXh0LWdyYXktNjAwXCI+Ym9sdDwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWljayBBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXNwYWNlLXktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJxdWljay1hY3Rpb24gdHctZ3JvdXAgdHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctcHgtMyB0dy1weS0yIHR3LXRleHQtc20gdHctdGV4dC1ncmF5LTcwMCB0dy1yb3VuZGVkLWxnIGhvdmVyOnR3LWJnLXdoaXRlIHR3LXRyYW5zaXRpb24tYWxsIHR3LWR1cmF0aW9uLTIwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXctOCB0dy1oLTggdHctcm91bmRlZC1sZyB0dy1iZy1ibHVlLTEwMCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1qdXN0aWZ5LWNlbnRlciB0dy1tci0zIGdyb3VwLWhvdmVyOnR3LWJnLWJsdWUtMjAwIHR3LXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiB0eXBlPVwibm9uZVwiIHNpemU9XCJ4c1wiIGNsYXNzPVwidHctdGV4dC1ibHVlLTYwMFwiPnBlcnNvbjwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctZmxleC0xXCI+VmlldyBQcm9maWxlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiB0eXBlPVwibm9uZVwiIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXRleHQtZ3JheS00MDAgZ3JvdXAtaG92ZXI6dHctdGV4dC1ncmF5LTYwMCB0dy10cmFuc2l0aW9uLWNvbG9yc1wiPmNoZXZyb25fcmlnaHQ8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJxdWljay1hY3Rpb24gdHctZ3JvdXAgdHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctcHgtMyB0dy1weS0yIHR3LXRleHQtc20gdHctdGV4dC1ncmF5LTcwMCB0dy1yb3VuZGVkLWxnIGhvdmVyOnR3LWJnLXdoaXRlIHR3LXRyYW5zaXRpb24tYWxsIHR3LWR1cmF0aW9uLTIwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXctOCB0dy1oLTggdHctcm91bmRlZC1sZyB0dy1iZy1ncmF5LTEwMCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1qdXN0aWZ5LWNlbnRlciB0dy1tci0zIGdyb3VwLWhvdmVyOnR3LWJnLWdyYXktMjAwIHR3LXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiB0eXBlPVwibm9uZVwiIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy10ZXh0LWdyYXktNjAwXCI+c2V0dGluZ3M8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR3LWZsZXgtMVwiPlByZWZlcmVuY2VzPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiB0eXBlPVwibm9uZVwiIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXRleHQtZ3JheS00MDAgZ3JvdXAtaG92ZXI6dHctdGV4dC1ncmF5LTYwMCB0dy10cmFuc2l0aW9uLWNvbG9yc1wiPmNoZXZyb25fcmlnaHQ8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRW5oYW5jZWQgU2lnbiBPdXQgU2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctZ3JvdXAgdHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctcHgtMyB0dy1weS0yLjUgdHctdGV4dC1zbSB0dy10ZXh0LXJlZC02MDAgdHctcm91bmRlZC1sZyBob3Zlcjp0dy1iZy1yZWQtNTAgdHctdHJhbnNpdGlvbi1hbGwgdHctZHVyYXRpb24tMjAwIHR3LWZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXctOCB0dy1oLTggdHctcm91bmRlZC1sZyB0dy1iZy1yZWQtMTAwIHR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LWp1c3RpZnktY2VudGVyIHR3LW1yLTMgZ3JvdXAtaG92ZXI6dHctYmctcmVkLTIwMCB0dy10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiB0eXBlPVwibm9uZVwiIHNpemU9XCJ4c1wiIGNsYXNzPVwidHctdGV4dC1yZWQtNjAwXCI+bG9nb3V0PC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctZmxleC0xXCI+U2lnbiBvdXQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiA8IS0tIFNlY29uZCB0aWVyIHNpZGViYXIgKEV4cGFuZGVkIHZpZXcpIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjaWRlLWx5dC1zaWRlYmFyLW1lbnUgdHctaC1mdWxsIHR3LW92ZXJmbG93LWhpZGRlbiB0dy1zaGFkb3ctc21cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZmxleC1jb2wgdHctaC1mdWxsXCI+XG4gICAgICAgICAgICA8IS0tIEhlYWRlciBzZWN0aW9uIHdpdGggc2VhcmNoIGFuZCBvcHRpb25zIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXItaGVhZGVyIHR3LXAtNCB0dy1ib3JkZXItYiB0dy1ib3JkZXItZ3JheS0xMDBcIj5cbiAgICAgICAgICAgICAgICA8IS0tIFRpdGxlIHdpdGggYmFjayBidXR0b24gLSBDbGVhbiBsYXlvdXQgd2l0aG91dCBvbmxpbmUgaW5kaWNhdG9yIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1nYXAtMyB0dy1tYi00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFjay1idXR0b24gdHctcC0xLjUgdHctcm91bmRlZC1sZyB0dy10ZXh0LWdyYXktNTAwIGhvdmVyOnR3LWJnLWdyYXktMTAwIGhvdmVyOnR3LXRleHQtZ3JheS03MDAgdHctdHJhbnNpdGlvbi1jb2xvcnMgdHctZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2lkZUVsZVRvb2x0aXBdPVwiJ0JhY2sgdG8gaG9tZSdcIiB0b29sdGlwUGxhY2VtZW50PVwiYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiB0eXBlPVwibm9uZVwiIHNpemU9XCJ4c1wiIGNsYXNzPVwidHctdHJhbnNpdGlvbi10cmFuc2Zvcm0gaG92ZXI6dHctc2NhbGUtMTEwXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRBY3RpdmVNb2R1bGVJY29uKCkgfX08L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleC0xIHR3LW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInR3LXRleHQtc20gdHctZm9udC1zZW1pYm9sZCB0dy10ZXh0LWdyYXktOTAwIHR3LXRydW5jYXRlIHR3LWxlYWRpbmctNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcFN0YXRlLmdldEFjdGl2ZU1vZHVsZVRpdGxlKCkgfHwgJ01lbnUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtZ3JheS01MDAgdHctdHJ1bmNhdGUgdHctbXQtMC41XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlIERhc2hib2FyZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGFuZCBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyIHR3LXJlbGF0aXZlIHR3LWZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWlucHV0IHR5cGU9XCJ0ZXh0XCIgbGVhZGluZ0ljb249XCJzZWFyY2hcIiBzaXplPVwieHNcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzZXR0aW5ncy4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFySW5wdXRdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIChpbnB1dCk9XCJvblNlYXJjaCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NpZGUtZWxlLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLXNob3J0Y3V0IHR3LWFic29sdXRlIHR3LXJpZ2h0LTMgdHctdG9wLTEvMiAtdHctdHJhbnNsYXRlLXktMS8yIHR3LWJnLWdyYXktMTAwIHR3LXRleHQtZ3JheS01MDAgdHctcm91bmRlZCB0dy1weC0xLjUgdHctcHktMC41IHR3LXRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDijJhLPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LW1sLTIgdHctcC0xLjUgdHctcm91bmRlZC1sZyB0dy10ZXh0LWdyYXktNTAwIGhvdmVyOnR3LWJnLWdyYXktMTAwIGhvdmVyOnR3LXRleHQtZ3JheS03MDAgdHctdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wdGlvbnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gdHlwZT1cIm5vbmVcIiBzaXplPVwieHNcIj5tb3JlX3ZlcnQ8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyBkcm9wZG93biBtZW51IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd09wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb25zLW1lbnUgdHctYWJzb2x1dGUgdHctcmlnaHQtNCB0dy10b3AtMTYgdHctbXQtMiB0dy13LTQ4IHR3LXJvdW5kZWQtbWQgdHctc2hhZG93LWxnIHR3LWJnLXdoaXRlIHR3LXJpbmctMSB0dy1yaW5nLWJsYWNrIHR3LXJpbmctb3BhY2l0eS01IHR3LWRpdmlkZS15IHR3LWRpdmlkZS1ncmF5LTEwMCB0dy16LTEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctcHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1ncm91cCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1weC00IHR3LXB5LTIgdHctdGV4dC1zbSB0dy10ZXh0LWdyYXktNzAwIGhvdmVyOnR3LWJnLWdyYXktMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaWRlLWVsZS1pY29uIGNsYXNzPVwidHctbXItMyB0dy10ZXh0LWdyYXktNTAwIHR3LWdyb3VwLWhvdmVyOnR3LXRleHQtZ3JheS02MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm5vbmVcIiBzaXplPVwieHNcIj5yZWZyZXNoPC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1ncm91cCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1weC00IHR3LXB5LTIgdHctdGV4dC1zbSB0dy10ZXh0LWdyYXktNzAwIGhvdmVyOnR3LWJnLWdyYXktMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaWRlLWVsZS1pY29uIGNsYXNzPVwidHctbXItMyB0dy10ZXh0LWdyYXktNTAwIHR3LWdyb3VwLWhvdmVyOnR3LXRleHQtZ3JheS02MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm5vbmVcIiBzaXplPVwieHNcIj5zeW5jPC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jIHNldHRpbmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctcHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1ncm91cCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1weC00IHR3LXB5LTIgdHctdGV4dC1zbSB0dy10ZXh0LWdyYXktNzAwIGhvdmVyOnR3LWJnLWdyYXktMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaWRlLWVsZS1pY29uIGNsYXNzPVwidHctbXItMyB0dy10ZXh0LWdyYXktNTAwIHR3LWdyb3VwLWhvdmVyOnR3LXRleHQtZ3JheS02MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm5vbmVcIiBzaXplPVwieHNcIj5oZWxwX291dGxpbmU8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlbHAgJiBzdXBwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gTWVudSBpdGVtcyB3aXRoIGNhdGVnb3JpZXMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1jb250ZW50IHR3LW92ZXJmbG93LXktYXV0byB0dy1mbGV4LTFcIiAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCByZXN1bHRzIGlmIHNlYXJjaGluZyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoVGV4dFwiIGNsYXNzPVwic2lkZWJhci1zZWN0aW9uIHR3LXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1iZXR3ZWVuIHR3LW1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInR3LXRleHQteHMgdHctZm9udC1zZW1pYm9sZCB0dy10ZXh0LWdyYXktNTAwXCI+U0VBUkNIIFJFU1VMVFM8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtZ3JheS01MDBcIj57e3NlYXJjaFJlc3VsdHMubGVuZ3RofX0gaXRlbXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDBcIiBjbGFzcz1cInR3LXNwYWNlLXktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VhcmNoUmVzdWx0c1wiIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbSB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1weC0zIHR3LXB5LTIgdHctcm91bmRlZC1tZCBob3Zlcjp0dy1iZy1ncmF5LTUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gY2xhc3M9XCJ0dy1tci0zIHR3LXRleHQtZ3JheS01MDBcIiB0eXBlPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiPnt7aXRlbS5pY29ufX08L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LXRleHQtZ3JheS03MDBcIj57e2l0ZW0udGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaFJlc3VsdHMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0dy1wLTQgdHctdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWp1c3RpZnktY2VudGVyIHR3LW1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiBjbGFzcz1cInR3LXRleHQtZ3JheS00MDBcIiB0eXBlPVwibm9uZVwiIHNpemU9XCJtZFwiPnNlYXJjaF9vZmY8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidHctdGV4dC1zbSB0dy10ZXh0LWdyYXktNTAwXCI+Tm8gcmVzdWx0cyBmb3IgXCJ7e3NlYXJjaFRleHR9fVwiPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtZ3JheS00MDAgdHctbXQtMVwiPlRyeSBhbm90aGVyIHNlYXJjaCB0ZXJtPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gT25seSBzaG93IHRoZXNlIHNlY3Rpb25zIGlmIG5vdCBzZWFyY2hpbmcgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWFyY2hUZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZyBzdGF0ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdNZW51c1wiIGNsYXNzPVwidHctcC00IHR3LXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1qdXN0aWZ5LWNlbnRlciB0dy1tYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLXNwaW5uZXIgdmFyaWFudD1cImNpcmNsZVwiIHNpemU9XCJ4c1wiPjwvY2lkZS1lbGUtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LXRleHQtZ3JheS01MDBcIj5Mb2FkaW5nIG1lbnVzLi4uPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIER5bmFtaWMgbWVudSB0cmVlIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmdNZW51cyAmJiBtZW51TG9hZENvbXBsZXRlXCIgY2xhc3M9XCJzaWRlYmFyLXNlY3Rpb24gdHctcC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hbmltYXRlLWluXT1cImFuaW1hdGVTZWN0aW9uc1swXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVjdXJzaXZlTWVudTsgY29udGV4dDogeyRpbXBsaWNpdDogc2VsZWN0ZWRNb2R1bGVNZW51cywgbGV2ZWw6IDB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gRW1wdHkgc3RhdGUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZ01lbnVzICYmIG1lbnVMb2FkQ29tcGxldGUgJiYgc2VsZWN0ZWRNb2R1bGVNZW51cy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1wLTQgdHctdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWp1c3RpZnktY2VudGVyIHR3LW1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiBjbGFzcz1cInR3LXRleHQtZ3JheS00MDBcIiB0eXBlPVwibm9uZVwiIHNpemU9XCJtZFwiPmZvbGRlcl9vcGVuPC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInR3LXRleHQtc20gdHctdGV4dC1ncmF5LTUwMFwiPk5vIG1lbnVzIGF2YWlsYWJsZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidHctdGV4dC14cyB0dy10ZXh0LWdyYXktNDAwIHR3LW10LTFcIj5TZWxlY3QgYSBtb2R1bGUgdG8gdmlldyBpdHMgbWVudXM8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBSZWN1cnNpdmUgbWVudSB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlY3Vyc2l2ZU1lbnUgbGV0LW1lbnVzIGxldC1sZXZlbD1cImxldmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLnR3LW1sLTBdPVwibGV2ZWwgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVzXCIgY2xhc3M9XCJ0dy1tYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUaXRsZSB0eXBlIGl0ZW1zIChzZWN0aW9uIGhlYWRlcnMpIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtZW51LnN5bWVfdHlwZSA9PT0gJ3RpdGxlJ1wiIGNsYXNzPVwidHctbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LWZvbnQtc2VtaWJvbGQgdHctdGV4dC1ncmF5LTUwMCB0dy11cHBlcmNhc2UgdHctbWItMlwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51LnN5bWVfdGl0bGUgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlbmRlciBjaGlsZHJlbiBvZiB0aXRsZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lbnUuY2hpbGRyZW4gJiYgbWVudS5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZWN1cnNpdmVNZW51OyBjb250ZXh0OiB7JGltcGxpY2l0OiBtZW51LmNoaWxkcmVuLCBsZXZlbDogbGV2ZWwgKyAxfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VjdGlvbiB0eXBlIGl0ZW1zIChjb2xsYXBzaWJsZSBzZWN0aW9ucykgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1lbnUuc3ltZV90eXBlID09PSAnc2VjdGlvbidcIiBjbGFzcz1cInR3LW1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWN0aW9uIGhlYWRlciAoY2xpY2thYmxlIHRvIGV4cGFuZC9jb2xsYXBzZSkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VjdGlvbihtZW51Ll9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidG9nZ2xlU2VjdGlvbihtZW51Ll9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlU2VjdGlvbihtZW51Ll9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWN0aW9uLWhlYWRlciB0dy13LWZ1bGwgdHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctcHgtMyB0dy1weS0yIHR3LXJvdW5kZWQtbWQgaG92ZXI6dHctYmctZ3JheS01MCB0dy1jdXJzb3ItcG9pbnRlciB0dy10cmFuc2l0aW9uLWNvbG9ycyB0dy10ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnR3LWJnLWJsdWUtNTBdPVwiaXNTZWN0aW9uRXhwYW5kZWQobWVudS5faWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc1NlY3Rpb25FeHBhbmRlZChtZW51Ll9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBtZW51LnN5bWVfdGl0bGUgKyAnIHNlY3Rpb24nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VjdGlvbiBJY29uIChsZWZ0IHNpZGUsIGxpa2Ugb3RoZXIgbWVudSBpdGVtcykgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LW1yLTMgdHctdGV4dC1ncmF5LTUwMFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwieHNcIj57eyBtZW51LnN5bWVfaWNvbiB8fCAnZm9sZGVyJyB9fTwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWN0aW9uIFRpdGxlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LWZvbnQtbWVkaXVtIHR3LXRleHQtZ3JheS04MDBcIj57eyBtZW51LnN5bWVfdGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmlnaHQgc2lkZSBpY29ucyBjb250YWluZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctbWwtYXV0byB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1zcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENoaWxkIENvdW50IEJhZGdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuY2hpbGRyZW4gJiYgbWVudS5jaGlsZHJlbi5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy1weC0yIHR3LXB5LTAuNSB0dy1iZy1ncmF5LTIwMCB0dy10ZXh0LWdyYXktNjAwIHR3LXJvdW5kZWQtZnVsbCB0dy10ZXh0LXhzIHR3LWZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbnUuY2hpbGRyZW4ubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXhwYW5kL0NvbGxhcHNlIEljb24gKHJpZ2h0IHNpZGUpIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaWRlLWVsZS1pY29uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXRleHQtZ3JheS00MDAgdHctdHJhbnNpdGlvbi10cmFuc2Zvcm0gdHctZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnR3LXJvdGF0ZS05MF09XCJpc1NlY3Rpb25FeHBhbmRlZChtZW51Ll9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibm9uZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCI+Y2hldnJvbl9yaWdodDwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlY3Rpb24gQ29udGVudCAoY29sbGFwc2libGUpIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc1NlY3Rpb25FeHBhbmRlZChtZW51Ll9pZCkgJiYgbWVudS5jaGlsZHJlbiAmJiBtZW51LmNoaWxkcmVuLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWN0aW9uLWNvbnRlbnQgdHctbXQtMiB0dy1tbC0yIHR3LWJvcmRlci1sIHR3LWJvcmRlci1ncmF5LTIwMCB0dy1wbC0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtAc2xpZGVJbk91dF09XCJpc1NlY3Rpb25FeHBhbmRlZChtZW51Ll9pZCkgPyAnaW4nIDogJ291dCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInJlY3Vyc2l2ZU1lbnU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG1lbnUuY2hpbGRyZW4sIGxldmVsOiBsZXZlbCArIDF9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNZW51IHR5cGUgaXRlbXMgKGNsaWNrYWJsZSBsaW5rcykgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJtZW51LnN5bWVfdHlwZSA9PT0gJ21lbnUnXCIgKGNsaWNrKT1cIm9uTWVudUNsaWNrKG1lbnUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25NZW51Q2xpY2sobWVudSlcIiAoa2V5ZG93bi5zcGFjZSk9XCJvbk1lbnVDbGljayhtZW51KVwiIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbSB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1weC0xIHR3LXB5LTEgdHctcm91bmRlZC1tZCBob3Zlcjp0dy1iZy1ncmF5LTUwIHR3LWN1cnNvci1wb2ludGVyIHR3LXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaWRlLWVsZS1pY29uICpuZ0lmPVwibWVudS5zeW1lX2ljb25cIiBjbGFzcz1cInR3LW1yLTMgdHctdGV4dC1ncmF5LTUwMFwiIHR5cGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiPnt7IG1lbnUuc3ltZV9pY29uIH19PC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR3LXRleHQtc20gdHctdGV4dC1ncmF5LTcwMFwiPnt7IG1lbnUuc3ltZV90aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gKm5nSWY9XCJtZW51LmNoaWxkcmVuICYmIG1lbnUuY2hpbGRyZW4ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LW1sLWF1dG8gdHctdGV4dC1ncmF5LTQwMFwiIHR5cGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIj5jaGV2cm9uX3JpZ2h0PC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVuZGVyIG5lc3RlZCBjaGlsZHJlbiBmb3IgbWVudSBpdGVtcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5zeW1lX3R5cGUgPT09ICdtZW51JyAmJiBtZW51LmNoaWxkcmVuICYmIG1lbnUuY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInJlY3Vyc2l2ZU1lbnU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG1lbnUuY2hpbGRyZW4sIGxldmVsOiBsZXZlbCArIDF9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE5vdGlmaWNhdGlvbiBwYW5lbCAob3ZlcmxheXMgY29udGVudCB3aGVuIHNob3duKSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93Tm90aWZpY2F0aW9uc1wiIGNsYXNzPVwibm90aWZpY2F0aW9uLXBhbmVsIHR3LWFic29sdXRlIHR3LWluc2V0LTAgdHctYmctd2hpdGUgdHctei0yMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1wLTQgdHctYm9yZGVyLWIgdHctYm9yZGVyLWdyYXktMTAwIHR3LWZsZXggdHctanVzdGlmeS1iZXR3ZWVuIHR3LWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LWZvbnQtbWVkaXVtXCI+Tm90aWZpY2F0aW9uczwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0dy1wLTEuNSB0dy1yb3VuZGVkLWxnIHR3LXRleHQtZ3JheS01MDAgaG92ZXI6dHctYmctZ3JheS0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU5vdGlmaWNhdGlvbnNQYW5lbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiB0eXBlPVwibm9uZVwiIHNpemU9XCJ4c1wiPmNsb3NlPC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1wLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctanVzdGlmeS1iZXR3ZWVuIHR3LWl0ZW1zLWNlbnRlciB0dy1tYi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdGV4dC14cyB0dy10ZXh0LWdyYXktNTAwXCI+VG9kYXk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtYmx1ZS01MDBcIj5NYXJrIGFsbCBhcyByZWFkPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1zcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi1pdGVtIHR3LXAtMyB0dy1iZy1ibHVlLTUwIHR3LXJvdW5kZWQtbGcgdHctYm9yZGVyLWwtNCB0dy1ib3JkZXItYmx1ZS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1nYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LXctOCB0dy1oLTggdHctcm91bmRlZC1mdWxsIHR3LWJnLWJsdWUtMTAwIHR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LWp1c3RpZnktY2VudGVyIHR3LXRleHQtYmx1ZS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaWRlLWVsZS1pY29uIHR5cGU9XCJub25lXCIgc2l6ZT1cInhzXCI+bm90aWZpY2F0aW9uczwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy10ZXh0LXNtIHR3LWZvbnQtbWVkaXVtIHR3LXRleHQtZ3JheS05MDBcIj5OZXcgZmVhdHVyZSBhdmFpbGFibGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtZ3JheS01MDAgdHctbXQtMVwiPlRyeSBvdXIgbmV3IGFuYWx5dGljcyBkYXNoYm9hcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGltcHJvdmVkIHZpc3VhbGl6YXRpb25zLjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXRleHQteHMgdHctdGV4dC1ncmF5LTQwMCB0dy1tdC0yXCI+SnVzdCBub3c8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvbi1pdGVtIHR3LXAtMyB0dy1yb3VuZGVkLWxnIHR3LWJvcmRlci1sLTQgdHctYm9yZGVyLXRyYW5zcGFyZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR3LWZsZXggdHctZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy13LTggdHctaC04IHR3LXJvdW5kZWQtZnVsbCB0dy1iZy1ncmF5LTEwMCB0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1qdXN0aWZ5LWNlbnRlciB0dy10ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lkZS1lbGUtaWNvbiB0eXBlPVwibm9uZVwiIHNpemU9XCJ4c1wiPnBlcnNvbl9hZGQ8L2NpZGUtZWxlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdGV4dC1zbSB0dy1mb250LW1lZGl1bSB0dy10ZXh0LWdyYXktOTAwXCI+TmV3IHRlYW0gbWVtYmVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdGV4dC14cyB0dy10ZXh0LWdyYXktNTAwIHR3LW10LTFcIj5KYW5lIFNtaXRoIGhhcyBqb2luZWQgeW91ciB0ZWFtLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdGV4dC14cyB0dy10ZXh0LWdyYXktNDAwIHR3LW10LTJcIj4yIGhvdXJzIGFnbzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFN0b3JhZ2UgaW5mbyBhdCBib3R0b20gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1mb290ZXIgdHctcC00IHR3LWJvcmRlci10IHR3LWJvcmRlci1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWl0ZW1zLWNlbnRlciB0dy1qdXN0aWZ5LWJldHdlZW4gdHctbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjaWRlLWVsZS1pY29uIGNsYXNzPVwidHctbXItMiB0dy10ZXh0LWdyYXktNTAwXCIgdHlwZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiPmNsb3VkX3VwbG9hZDwvY2lkZS1lbGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctdGV4dC1zbSB0dy10ZXh0LWdyYXktNzAwXCI+U3RvcmFnZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXBncmFkZS1idXR0b24gdHctdGV4dC14cyB0dy10ZXh0LWJsdWUtNTAwIHR3LWZvbnQtbWVkaXVtIHR3LXB4LTIgdHctcHktMSB0dy1yb3VuZGVkIGhvdmVyOnR3LWJnLWJsdWUtNTAgdHctdHJhbnNpdGlvbi1jb2xvcnNcIj5VcGdyYWRlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JhZ2UtYmFyIHR3LWJnLWdyYXktMjAwIHR3LXJvdW5kZWQtZnVsbCB0dy1oLTEuNVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RvcmFnZS1maWxsIHR3LWJnLWJsdWUtNTAwIHR3LWgtMS41IHR3LXJvdW5kZWQtZnVsbCB0dy10cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA3NSVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1pdGVtcy1jZW50ZXIgdHctanVzdGlmeS1iZXR3ZWVuIHR3LW10LTEuNVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctdGV4dC14cyB0dy10ZXh0LWdyYXktNTAwXCI+MTguMiBHQiBvZiAyMCBHQiB1c2VkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy10ZXh0LXhzIHR3LXRleHQtYmx1ZS01MDBcIj43NSU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gUGxhbiBmZWF0dXJlcyBxdWljayB2aWV3IC0tPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwbGFuLWZlYXR1cmVzIHR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LWp1c3RpZnktYmV0d2VlbiB0dy1tdC0zIHR3LXB0LTMgdHctYm9yZGVyLXQgdHctYm9yZGVyLWdyYXktMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1mbGV4IHR3LWZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInR3LXRleHQteHMgdHctZm9udC1tZWRpdW0gdHctdGV4dC1ncmF5LTcwMFwiPkZyZWUgUGxhbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHctdGV4dC14cyB0dy10ZXh0LWdyYXktNTAwXCI+QmFzaWMgZmVhdHVyZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctZmxleCB0dy1nYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHctdGV4dC14cyB0dy1iZy13aGl0ZSB0dy1ib3JkZXIgdHctYm9yZGVyLWdyYXktMjAwIHR3LXRleHQtZ3JheS03MDAgdHctcHktMSB0dy1weC0yIHR3LXJvdW5kZWQgaG92ZXI6dHctYmctZ3JheS01MCB0dy10cmFuc2l0aW9uLWNvbG9yc1wiPkNvbXBhcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGFuczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVzaXplciAtLT5cbiAgICA8ZGl2IHBhcmVudEVsZW1lbnRTZWxlY3Rvcj1cIiNjaWRlLWx5dC1zaWRlYmFyLXBhZ2UtaW5uZXItd3JhcHBlclwiXG4gICAgICAgIFttaW5QcmV2U2l6ZV09XCJzaWRlYmFyU2V0dXBEYXRhLmNpZGVfbHl0X3NpZGViYXJfd2lkdGhcIiBwcmV2RWxlbWVudFNlbGVjdG9yPVwiI2NpZGUtbHl0LXNpZGViYXItcGFnZVwiXG4gICAgICAgIG5leHRFbGVtZW50U2VsZWN0b3I9XCIjY2lkZS1seXQtcGFnZS13cmFwcGVyXCIgY2lkZUVsZVJlc2l6ZXIgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2lkZS1seXQtZGV2aWRlci10cmFjayB0dy13LWZ1bGwgdHctaC1mdWxsXCI+PC9kaXY+XG4gICAgPC9kaXY+XG48L25hdj4iXX0=