@seekora-ai/ui-sdk-react 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/dist/components/Breadcrumb.d.ts +43 -0
  2. package/dist/components/Breadcrumb.d.ts.map +1 -0
  3. package/dist/components/Breadcrumb.js +119 -0
  4. package/dist/components/ClearRefinements.d.ts +42 -0
  5. package/dist/components/ClearRefinements.d.ts.map +1 -0
  6. package/dist/components/ClearRefinements.js +80 -0
  7. package/dist/components/CurrentRefinements.d.ts +41 -0
  8. package/dist/components/CurrentRefinements.d.ts.map +1 -0
  9. package/dist/components/CurrentRefinements.js +83 -0
  10. package/dist/components/Facets.d.ts +53 -0
  11. package/dist/components/Facets.d.ts.map +1 -0
  12. package/dist/components/Facets.js +195 -0
  13. package/dist/components/FederatedDropdown.d.ts +92 -0
  14. package/dist/components/FederatedDropdown.d.ts.map +1 -0
  15. package/dist/components/FederatedDropdown.js +510 -0
  16. package/dist/components/HierarchicalMenu.d.ts +55 -0
  17. package/dist/components/HierarchicalMenu.d.ts.map +1 -0
  18. package/dist/components/HierarchicalMenu.js +168 -0
  19. package/dist/components/Highlight.d.ts +51 -0
  20. package/dist/components/Highlight.d.ts.map +1 -0
  21. package/dist/components/Highlight.js +155 -0
  22. package/dist/components/HitsPerPage.d.ts +41 -0
  23. package/dist/components/HitsPerPage.d.ts.map +1 -0
  24. package/dist/components/HitsPerPage.js +72 -0
  25. package/dist/components/InfiniteHits.d.ts +56 -0
  26. package/dist/components/InfiniteHits.d.ts.map +1 -0
  27. package/dist/components/InfiniteHits.js +181 -0
  28. package/dist/components/MobileFilters.d.ts +71 -0
  29. package/dist/components/MobileFilters.d.ts.map +1 -0
  30. package/dist/components/MobileFilters.js +242 -0
  31. package/dist/components/Pagination.d.ts +44 -0
  32. package/dist/components/Pagination.d.ts.map +1 -0
  33. package/dist/components/Pagination.js +142 -0
  34. package/dist/components/QuerySuggestions.d.ts +38 -0
  35. package/dist/components/QuerySuggestions.d.ts.map +1 -0
  36. package/dist/components/QuerySuggestions.js +86 -0
  37. package/dist/components/QuerySuggestionsDropdown.d.ts +86 -0
  38. package/dist/components/QuerySuggestionsDropdown.d.ts.map +1 -0
  39. package/dist/components/QuerySuggestionsDropdown.js +395 -0
  40. package/dist/components/RangeInput.d.ts +58 -0
  41. package/dist/components/RangeInput.d.ts.map +1 -0
  42. package/dist/components/RangeInput.js +203 -0
  43. package/dist/components/RangeSlider.d.ts +51 -0
  44. package/dist/components/RangeSlider.d.ts.map +1 -0
  45. package/dist/components/RangeSlider.js +193 -0
  46. package/dist/components/Recommendations.d.ts +90 -0
  47. package/dist/components/Recommendations.d.ts.map +1 -0
  48. package/dist/components/Recommendations.js +270 -0
  49. package/dist/components/RichQuerySuggestions.d.ts +77 -0
  50. package/dist/components/RichQuerySuggestions.d.ts.map +1 -0
  51. package/dist/components/RichQuerySuggestions.js +492 -0
  52. package/dist/components/SearchBar.d.ts +40 -0
  53. package/dist/components/SearchBar.d.ts.map +1 -0
  54. package/dist/components/SearchBar.js +217 -0
  55. package/dist/components/SearchBarWithSuggestions.d.ts +99 -0
  56. package/dist/components/SearchBarWithSuggestions.d.ts.map +1 -0
  57. package/dist/components/SearchBarWithSuggestions.js +275 -0
  58. package/dist/components/SearchLayout.d.ts +35 -0
  59. package/dist/components/SearchLayout.d.ts.map +1 -0
  60. package/dist/components/SearchLayout.js +56 -0
  61. package/dist/components/SearchProvider.d.ts +28 -0
  62. package/dist/components/SearchProvider.d.ts.map +1 -0
  63. package/dist/components/SearchProvider.js +43 -0
  64. package/dist/components/SearchResults.d.ts +51 -0
  65. package/dist/components/SearchResults.d.ts.map +1 -0
  66. package/dist/components/SearchResults.js +485 -0
  67. package/dist/components/SortBy.d.ts +44 -0
  68. package/dist/components/SortBy.d.ts.map +1 -0
  69. package/dist/components/SortBy.js +61 -0
  70. package/dist/components/Stats.d.ts +37 -0
  71. package/dist/components/Stats.d.ts.map +1 -0
  72. package/dist/components/Stats.js +52 -0
  73. package/dist/components/suggestions/AmazonDropdown.d.ts +30 -0
  74. package/dist/components/suggestions/AmazonDropdown.d.ts.map +1 -0
  75. package/dist/components/suggestions/AmazonDropdown.js +529 -0
  76. package/dist/components/suggestions/GoogleDropdown.d.ts +31 -0
  77. package/dist/components/suggestions/GoogleDropdown.d.ts.map +1 -0
  78. package/dist/components/suggestions/GoogleDropdown.js +370 -0
  79. package/dist/components/suggestions/MinimalDropdown.d.ts +24 -0
  80. package/dist/components/suggestions/MinimalDropdown.d.ts.map +1 -0
  81. package/dist/components/suggestions/MinimalDropdown.js +314 -0
  82. package/dist/components/suggestions/MobileSheetDropdown.d.ts +31 -0
  83. package/dist/components/suggestions/MobileSheetDropdown.d.ts.map +1 -0
  84. package/dist/components/suggestions/MobileSheetDropdown.js +485 -0
  85. package/dist/components/suggestions/PinterestDropdown.d.ts +29 -0
  86. package/dist/components/suggestions/PinterestDropdown.d.ts.map +1 -0
  87. package/dist/components/suggestions/PinterestDropdown.js +450 -0
  88. package/dist/components/suggestions/ShopifyDropdown.d.ts +27 -0
  89. package/dist/components/suggestions/ShopifyDropdown.d.ts.map +1 -0
  90. package/dist/components/suggestions/ShopifyDropdown.js +451 -0
  91. package/dist/components/suggestions/SpotlightDropdown.d.ts +33 -0
  92. package/dist/components/suggestions/SpotlightDropdown.d.ts.map +1 -0
  93. package/dist/components/suggestions/SpotlightDropdown.js +547 -0
  94. package/dist/components/suggestions/SuggestionSearchBar.d.ts +123 -0
  95. package/dist/components/suggestions/SuggestionSearchBar.d.ts.map +1 -0
  96. package/dist/components/suggestions/SuggestionSearchBar.js +652 -0
  97. package/dist/components/suggestions/index.d.ts +37 -0
  98. package/dist/components/suggestions/index.d.ts.map +1 -0
  99. package/dist/components/suggestions/index.js +59 -0
  100. package/dist/components/suggestions/styles/index.d.ts +11 -0
  101. package/dist/components/suggestions/styles/index.d.ts.map +1 -0
  102. package/dist/components/suggestions/styles/index.js +289 -0
  103. package/dist/components/suggestions/styles/responsive.d.ts +107 -0
  104. package/dist/components/suggestions/styles/responsive.d.ts.map +1 -0
  105. package/dist/components/suggestions/styles/responsive.js +237 -0
  106. package/dist/components/suggestions/types.d.ts +489 -0
  107. package/dist/components/suggestions/types.d.ts.map +1 -0
  108. package/dist/components/suggestions/types.js +6 -0
  109. package/dist/components/suggestions/utils.d.ts +213 -0
  110. package/dist/components/suggestions/utils.d.ts.map +1 -0
  111. package/dist/components/suggestions/utils.js +514 -0
  112. package/dist/hooks/useAnalytics.d.ts +20 -0
  113. package/dist/hooks/useAnalytics.d.ts.map +1 -0
  114. package/dist/hooks/useAnalytics.js +62 -0
  115. package/dist/hooks/useNaturalLanguageFilters.d.ts +48 -0
  116. package/dist/hooks/useNaturalLanguageFilters.d.ts.map +1 -0
  117. package/dist/hooks/useNaturalLanguageFilters.js +221 -0
  118. package/dist/hooks/useQuerySuggestions.d.ts +21 -0
  119. package/dist/hooks/useQuerySuggestions.d.ts.map +1 -0
  120. package/dist/hooks/useQuerySuggestions.js +68 -0
  121. package/dist/hooks/useQuerySuggestionsEnhanced.d.ts +114 -0
  122. package/dist/hooks/useQuerySuggestionsEnhanced.d.ts.map +1 -0
  123. package/dist/hooks/useQuerySuggestionsEnhanced.js +376 -0
  124. package/dist/hooks/useSearchState.d.ts +35 -0
  125. package/dist/hooks/useSearchState.d.ts.map +1 -0
  126. package/dist/hooks/useSearchState.js +68 -0
  127. package/dist/hooks/useSeekoraSearch.d.ts +20 -0
  128. package/dist/hooks/useSeekoraSearch.d.ts.map +1 -0
  129. package/dist/hooks/useSeekoraSearch.js +63 -0
  130. package/dist/hooks/useSmartSuggestions.d.ts +55 -0
  131. package/dist/hooks/useSmartSuggestions.d.ts.map +1 -0
  132. package/dist/hooks/useSmartSuggestions.js +236 -0
  133. package/dist/hooks/useSuggestionsAnalytics.d.ts +91 -0
  134. package/dist/hooks/useSuggestionsAnalytics.d.ts.map +1 -0
  135. package/dist/hooks/useSuggestionsAnalytics.js +226 -0
  136. package/dist/index.d.ts +80 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +86 -0
  139. package/dist/index.umd.js +1 -0
  140. package/dist/src/index.d.ts +2849 -0
  141. package/dist/src/index.esm.js +11679 -0
  142. package/dist/src/index.esm.js.map +1 -0
  143. package/dist/src/index.js +11761 -0
  144. package/dist/src/index.js.map +1 -0
  145. package/dist/themes/createTheme.d.ts +8 -0
  146. package/dist/themes/createTheme.d.ts.map +1 -0
  147. package/dist/themes/createTheme.js +10 -0
  148. package/dist/themes/dark.d.ts +6 -0
  149. package/dist/themes/dark.d.ts.map +1 -0
  150. package/dist/themes/dark.js +34 -0
  151. package/dist/themes/default.d.ts +6 -0
  152. package/dist/themes/default.d.ts.map +1 -0
  153. package/dist/themes/default.js +71 -0
  154. package/dist/themes/mergeThemes.d.ts +7 -0
  155. package/dist/themes/mergeThemes.d.ts.map +1 -0
  156. package/dist/themes/mergeThemes.js +6 -0
  157. package/dist/themes/minimal.d.ts +6 -0
  158. package/dist/themes/minimal.d.ts.map +1 -0
  159. package/dist/themes/minimal.js +34 -0
  160. package/dist/themes/suggestions.d.ts +216 -0
  161. package/dist/themes/suggestions.d.ts.map +1 -0
  162. package/dist/themes/suggestions.js +546 -0
  163. package/dist/themes/types.d.ts +7 -0
  164. package/dist/themes/types.d.ts.map +1 -0
  165. package/dist/themes/types.js +6 -0
  166. package/dist/types/index.d.ts +33 -0
  167. package/dist/types/index.d.ts.map +1 -0
  168. package/dist/types/index.js +4 -0
  169. package/package.json +65 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../core/dist/index.esm.js","../../src/themes/default.ts","../../src/themes/createTheme.ts","../../src/components/SearchProvider.tsx","../../src/hooks/useSearchState.ts","../../src/hooks/useQuerySuggestions.ts","../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../src/components/SearchBar.tsx","../../src/components/SearchResults.tsx","../../src/components/Stats.tsx","../../src/components/Pagination.tsx","../../src/components/SortBy.tsx","../../src/components/Facets.tsx","../../src/components/CurrentRefinements.tsx","../../src/components/ClearRefinements.tsx","../../src/components/SearchLayout.tsx","../../src/components/RangeInput.tsx","../../src/components/HitsPerPage.tsx","../../src/components/InfiniteHits.tsx","../../src/components/Highlight.tsx","../../src/components/HierarchicalMenu.tsx","../../src/components/RangeSlider.tsx","../../src/components/Breadcrumb.tsx","../../src/components/MobileFilters.tsx","../../src/components/Recommendations.tsx","../../src/components/QuerySuggestions.tsx","../../src/hooks/useQuerySuggestionsEnhanced.ts","../../src/components/QuerySuggestionsDropdown.tsx","../../src/components/RichQuerySuggestions.tsx","../../src/components/FederatedDropdown.tsx","../../src/hooks/useSuggestionsAnalytics.ts","../../src/components/SearchBarWithSuggestions.tsx","../../src/components/suggestions/utils.ts","../../src/components/suggestions/styles/responsive.ts","../../src/components/suggestions/styles/index.ts","../../src/components/suggestions/AmazonDropdown.tsx","../../src/components/suggestions/GoogleDropdown.tsx","../../src/components/suggestions/PinterestDropdown.tsx","../../src/components/suggestions/SpotlightDropdown.tsx","../../src/components/suggestions/ShopifyDropdown.tsx","../../src/components/suggestions/MobileSheetDropdown.tsx","../../src/components/suggestions/MinimalDropdown.tsx","../../src/components/suggestions/SuggestionSearchBar.tsx","../../src/components/suggestions/index.ts","../../src/hooks/useSeekoraSearch.ts","../../src/hooks/useAnalytics.ts","../../src/hooks/useSmartSuggestions.ts","../../src/hooks/useNaturalLanguageFilters.ts","../../src/themes/dark.ts","../../src/themes/minimal.ts","../../src/themes/suggestions.ts"],"sourcesContent":["/**\n * Field Mapping Utilities\n *\n * Shared utilities for extracting and mapping fields from API responses\n */\n/**\n * Get nested value from object using dot notation path\n */\nconst getNestedValue$1 = (obj, path) => {\n if (!path)\n return undefined;\n return path.split('.').reduce((current, key) => current?.[key], obj);\n};\n/**\n * Format price value with currency\n */\nconst formatPrice = (value, currency = '₹') => {\n if (value === undefined || value === null)\n return undefined;\n if (typeof value === 'number')\n return `${currency}${value}`;\n if (typeof value === 'string') {\n const num = parseFloat(value);\n if (!isNaN(num))\n return `${currency}${num}`;\n return value;\n }\n return String(value);\n};\n/**\n * Extract field value using dot notation path\n */\nconst extractField = (item, path) => {\n if (!path)\n return undefined;\n return getNestedValue$1(item, path);\n};\n\n/**\n * Theme Management Utilities\n *\n * Shared theme utilities for creating and merging themes\n */\n/**\n * Create a complete theme from a partial theme configuration\n */\nconst createTheme = (config, baseTheme) => {\n return {\n colors: {\n ...baseTheme.colors,\n ...config.colors,\n },\n typography: {\n ...baseTheme.typography,\n ...config.typography,\n fontSize: {\n ...baseTheme.typography.fontSize,\n ...config.typography?.fontSize,\n },\n },\n spacing: {\n ...baseTheme.spacing,\n ...config.spacing,\n },\n borderRadius: (config.borderRadius ?? baseTheme.borderRadius),\n shadows: {\n ...baseTheme.shadows,\n ...config.shadows,\n },\n transitions: {\n ...baseTheme.transitions,\n ...config.transitions,\n },\n breakpoints: {\n ...baseTheme.breakpoints,\n ...config.breakpoints,\n },\n zIndex: {\n ...baseTheme.zIndex,\n ...config.zIndex,\n },\n };\n};\n/**\n * Merge multiple themes together\n */\nconst mergeThemes = (baseTheme, ...themes) => {\n return themes.reduce((acc, theme) => {\n return {\n colors: { ...acc.colors, ...theme.colors },\n typography: {\n ...acc.typography,\n ...theme.typography,\n fontSize: {\n ...acc.typography?.fontSize,\n ...theme.typography?.fontSize,\n },\n },\n spacing: { ...acc.spacing, ...theme.spacing },\n borderRadius: (theme.borderRadius ?? acc.borderRadius),\n shadows: { ...acc.shadows, ...theme.shadows },\n transitions: { ...acc.transitions, ...theme.transitions },\n breakpoints: { ...acc.breakpoints, ...theme.breakpoints },\n zIndex: { ...acc.zIndex, ...theme.zIndex },\n };\n }, baseTheme);\n};\n\n/**\n * CSS Variables Theme System\n *\n * Generates CSS variables from theme configuration\n * Provides utilities for injecting and managing CSS themes\n */\n/**\n * Convert a theme object to CSS variables\n */\nfunction themeToCSSVariables(theme, config = {}) {\n const { scope = ':root', prefix = '--seekora' } = config;\n const variables = [];\n // Colors\n Object.entries(theme.colors).forEach(([key, value]) => {\n variables.push(`${prefix}-color-${key}: ${value};`);\n });\n // Typography\n variables.push(`${prefix}-font-family: ${theme.typography.fontFamily};`);\n Object.entries(theme.typography.fontSize).forEach(([key, value]) => {\n variables.push(`${prefix}-font-size-${key}: ${value};`);\n });\n if (theme.typography.fontWeight) {\n Object.entries(theme.typography.fontWeight).forEach(([key, value]) => {\n variables.push(`${prefix}-font-weight-${key}: ${value};`);\n });\n }\n if (theme.typography.lineHeight) {\n Object.entries(theme.typography.lineHeight).forEach(([key, value]) => {\n variables.push(`${prefix}-line-height-${key}: ${value};`);\n });\n }\n // Spacing\n Object.entries(theme.spacing).forEach(([key, value]) => {\n variables.push(`${prefix}-spacing-${key}: ${value};`);\n });\n // Border Radius\n if (typeof theme.borderRadius === 'string') {\n variables.push(`${prefix}-border-radius: ${theme.borderRadius};`);\n }\n else {\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n variables.push(`${prefix}-border-radius-${key}: ${value};`);\n });\n }\n // Shadows\n if (theme.shadows) {\n Object.entries(theme.shadows).forEach(([key, value]) => {\n variables.push(`${prefix}-shadow-${key}: ${value};`);\n });\n }\n // Transitions\n if (theme.transitions) {\n Object.entries(theme.transitions).forEach(([key, value]) => {\n variables.push(`${prefix}-transition-${key}: ${value};`);\n });\n }\n // Z-Index\n if (theme.zIndex) {\n Object.entries(theme.zIndex).forEach(([key, value]) => {\n variables.push(`${prefix}-z-index-${key}: ${value};`);\n });\n }\n return `${scope} {\\n ${variables.join('\\n ')}\\n}`;\n}\n/**\n * Generate complete CSS stylesheet with variables and optional component classes\n */\nfunction generateThemeStylesheet(theme, config = {}) {\n const { prefix = '--seekora', includeClasses = true } = config;\n const sections = [];\n // CSS Variables\n sections.push(themeToCSSVariables(theme, config));\n // Component classes (BEM naming convention)\n if (includeClasses) {\n sections.push(generateComponentClasses(prefix));\n }\n return sections.join('\\n\\n');\n}\n/**\n * Generate BEM-style component classes\n */\nfunction generateComponentClasses(prefix) {\n return `\n/* Seekora UI SDK Component Classes */\n\n/* Search Bar */\n.seekora-search-bar {\n position: relative;\n display: flex;\n align-items: center;\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-search-bar--focused {\n border-color: var(${prefix}-color-primary);\n box-shadow: 0 0 0 2px var(${prefix}-color-focus);\n}\n\n.seekora-search-bar__input {\n flex: 1;\n padding: var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n font-family: var(${prefix}-font-family);\n color: var(${prefix}-color-text);\n background: transparent;\n border: none;\n outline: none;\n}\n\n.seekora-search-bar__input::placeholder {\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-search-bar__button {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-search-bar__button:hover {\n background-color: var(${prefix}-color-hover);\n}\n\n/* Search Results */\n.seekora-results {\n background-color: var(${prefix}-color-background);\n}\n\n.seekora-results__list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.seekora-results__item {\n display: flex;\n gap: var(${prefix}-spacing-medium);\n padding: var(${prefix}-spacing-medium);\n border-bottom: 1px solid var(${prefix}-color-border);\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-results__item:hover {\n background-color: var(${prefix}-color-hover);\n}\n\n.seekora-results__item--active {\n background-color: var(${prefix}-color-hover);\n}\n\n.seekora-results__image {\n width: 80px;\n height: 80px;\n object-fit: cover;\n border-radius: var(${prefix}-border-radius-small, var(${prefix}-border-radius));\n}\n\n.seekora-results__content {\n flex: 1;\n}\n\n.seekora-results__title {\n margin: 0 0 var(${prefix}-spacing-small) 0;\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n.seekora-results__description {\n margin: 0;\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n line-height: var(${prefix}-line-height-normal, 1.5);\n}\n\n.seekora-results__price {\n margin-top: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-bold, 700);\n color: var(${prefix}-color-primary);\n}\n\n.seekora-results__empty {\n padding: var(${prefix}-spacing-large);\n text-align: center;\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-results__loading {\n padding: var(${prefix}-spacing-large);\n text-align: center;\n color: var(${prefix}-color-textSecondary);\n}\n\n/* Pagination */\n.seekora-pagination {\n display: flex;\n justify-content: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-medium) 0;\n}\n\n.seekora-pagination__item {\n min-width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-small, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-pagination__item:hover:not(.seekora-pagination__item--disabled) {\n background-color: var(${prefix}-color-hover);\n border-color: var(${prefix}-color-primary);\n}\n\n.seekora-pagination__item--active {\n background-color: var(${prefix}-color-primary);\n border-color: var(${prefix}-color-primary);\n color: #ffffff;\n}\n\n.seekora-pagination__item--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Facets */\n.seekora-facets {\n font-family: var(${prefix}-font-family);\n}\n\n.seekora-facets__facet {\n margin-bottom: var(${prefix}-spacing-large);\n}\n\n.seekora-facets__title {\n margin: 0 0 var(${prefix}-spacing-small) 0;\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n.seekora-facets__list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.seekora-facets__item {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-small) 0;\n cursor: pointer;\n}\n\n.seekora-facets__checkbox {\n width: 18px;\n height: 18px;\n accent-color: var(${prefix}-color-primary);\n}\n\n.seekora-facets__label {\n flex: 1;\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-text);\n}\n\n.seekora-facets__count {\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-facets__show-more {\n margin-top: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-primary);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: underline;\n}\n\n/* Stats */\n.seekora-stats {\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-stats__count {\n font-weight: var(${prefix}-font-weight-semibold, 600);\n color: var(${prefix}-color-text);\n}\n\n/* Sort By */\n.seekora-sort-by {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-sort-by__label {\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n}\n\n.seekora-sort-by__select {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n outline: none;\n}\n\n/* Current Refinements */\n.seekora-refinements {\n display: flex;\n flex-wrap: wrap;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-refinements__item {\n display: inline-flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-small);\n background-color: var(${prefix}-color-hover);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-full, 9999px);\n}\n\n.seekora-refinements__label {\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: var(${prefix}-color-text);\n}\n\n.seekora-refinements__value {\n color: var(${prefix}-color-text);\n}\n\n.seekora-refinements__clear {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n font-size: 14px;\n color: var(${prefix}-color-textSecondary);\n background: none;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-refinements__clear:hover {\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-border);\n}\n\n.seekora-refinements__clear-all {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-small);\n color: var(${prefix}-color-primary);\n background: none;\n border: none;\n cursor: pointer;\n text-decoration: underline;\n}\n\n/* Range Input */\n.seekora-range-input {\n font-family: var(${prefix}-font-family);\n}\n\n.seekora-range-input__label {\n display: block;\n margin-bottom: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: var(${prefix}-color-text);\n}\n\n.seekora-range-input__group {\n display: flex;\n align-items: center;\n gap: var(${prefix}-spacing-small);\n}\n\n.seekora-range-input__input {\n flex: 1;\n padding: var(${prefix}-spacing-small);\n font-size: var(${prefix}-font-size-medium);\n color: var(${prefix}-color-text);\n background-color: var(${prefix}-color-background);\n border: 1px solid var(${prefix}-color-border);\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n outline: none;\n}\n\n.seekora-range-input__separator {\n color: var(${prefix}-color-textSecondary);\n}\n\n.seekora-range-input__button {\n padding: var(${prefix}-spacing-small) var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n}\n\n/* Highlight */\n.seekora-highlight mark,\n.seekora-highlight__highlighted {\n background-color: var(${prefix}-color-warning, #fff59d);\n font-weight: var(${prefix}-font-weight-semibold, 600);\n padding: 0 2px;\n border-radius: 2px;\n}\n\n/* Infinite Hits */\n.seekora-infinite-hits__show-more {\n display: block;\n width: 100%;\n padding: var(${prefix}-spacing-medium);\n margin-top: var(${prefix}-spacing-medium);\n font-size: var(${prefix}-font-size-medium);\n font-weight: var(${prefix}-font-weight-medium, 500);\n color: #ffffff;\n background-color: var(${prefix}-color-primary);\n border: none;\n border-radius: var(${prefix}-border-radius-medium, var(${prefix}-border-radius));\n cursor: pointer;\n transition: var(${prefix}-transition-fast);\n}\n\n.seekora-infinite-hits__show-more:disabled {\n background-color: var(${prefix}-color-hover);\n color: var(${prefix}-color-textSecondary);\n cursor: not-allowed;\n}\n`;\n}\n/**\n * Theme presets\n */\nconst lightThemeVariables = `\n:root, [data-seekora-theme=\"light\"] {\n --seekora-color-primary: #0066cc;\n --seekora-color-secondary: #6c757d;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #f8f9fa;\n --seekora-color-text: #212529;\n --seekora-color-textSecondary: #6c757d;\n --seekora-color-border: #dee2e6;\n --seekora-color-hover: #f1f3f5;\n --seekora-color-focus: rgba(0, 102, 204, 0.25);\n --seekora-color-error: #dc3545;\n --seekora-color-success: #28a745;\n --seekora-color-warning: #ffc107;\n \n --seekora-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n --seekora-font-size-small: 0.875rem;\n --seekora-font-size-medium: 1rem;\n --seekora-font-size-large: 1.25rem;\n --seekora-font-weight-normal: 400;\n --seekora-font-weight-medium: 500;\n --seekora-font-weight-semibold: 600;\n --seekora-font-weight-bold: 700;\n --seekora-line-height-tight: 1.25;\n --seekora-line-height-normal: 1.5;\n --seekora-line-height-relaxed: 1.75;\n \n --seekora-spacing-small: 0.5rem;\n --seekora-spacing-medium: 1rem;\n --seekora-spacing-large: 1.5rem;\n \n --seekora-border-radius: 4px;\n --seekora-border-radius-none: 0;\n --seekora-border-radius-small: 2px;\n --seekora-border-radius-medium: 4px;\n --seekora-border-radius-large: 8px;\n --seekora-border-radius-full: 9999px;\n \n --seekora-shadow-small: 0 1px 2px rgba(0, 0, 0, 0.05);\n --seekora-shadow-medium: 0 4px 6px rgba(0, 0, 0, 0.1);\n --seekora-shadow-large: 0 10px 15px rgba(0, 0, 0, 0.1);\n \n --seekora-transition-fast: 150ms ease-in-out;\n --seekora-transition-normal: 300ms ease-in-out;\n --seekora-transition-slow: 500ms ease-in-out;\n \n --seekora-z-index-dropdown: 1000;\n --seekora-z-index-modal: 1050;\n --seekora-z-index-tooltip: 1100;\n}\n`;\nconst darkThemeVariables = `\n[data-seekora-theme=\"dark\"] {\n --seekora-color-primary: #4da6ff;\n --seekora-color-secondary: #adb5bd;\n --seekora-color-background: #1a1a1a;\n --seekora-color-surface: #2d2d2d;\n --seekora-color-text: #f8f9fa;\n --seekora-color-textSecondary: #adb5bd;\n --seekora-color-border: #495057;\n --seekora-color-hover: #343a40;\n --seekora-color-focus: rgba(77, 166, 255, 0.25);\n --seekora-color-error: #f87171;\n --seekora-color-success: #4ade80;\n --seekora-color-warning: #fbbf24;\n \n --seekora-shadow-small: 0 1px 2px rgba(0, 0, 0, 0.3);\n --seekora-shadow-medium: 0 4px 6px rgba(0, 0, 0, 0.4);\n --seekora-shadow-large: 0 10px 15px rgba(0, 0, 0, 0.5);\n}\n`;\nconst minimalThemeVariables = `\n[data-seekora-theme=\"minimal\"] {\n --seekora-color-primary: #000000;\n --seekora-color-secondary: #666666;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #fafafa;\n --seekora-color-text: #000000;\n --seekora-color-textSecondary: #666666;\n --seekora-color-border: #e5e5e5;\n --seekora-color-hover: #f5f5f5;\n --seekora-color-focus: rgba(0, 0, 0, 0.1);\n \n --seekora-border-radius: 0;\n --seekora-border-radius-none: 0;\n --seekora-border-radius-small: 0;\n --seekora-border-radius-medium: 0;\n --seekora-border-radius-large: 0;\n --seekora-border-radius-full: 0;\n \n --seekora-shadow-small: none;\n --seekora-shadow-medium: none;\n --seekora-shadow-large: none;\n}\n`;\nconst highContrastThemeVariables = `\n[data-seekora-theme=\"high-contrast\"] {\n --seekora-color-primary: #0000ff;\n --seekora-color-secondary: #000000;\n --seekora-color-background: #ffffff;\n --seekora-color-surface: #ffffff;\n --seekora-color-text: #000000;\n --seekora-color-textSecondary: #000000;\n --seekora-color-border: #000000;\n --seekora-color-hover: #ffff00;\n --seekora-color-focus: #0000ff;\n --seekora-color-error: #ff0000;\n --seekora-color-success: #008000;\n --seekora-color-warning: #ffff00;\n \n --seekora-font-weight-normal: 500;\n --seekora-font-weight-medium: 600;\n --seekora-font-weight-semibold: 700;\n --seekora-font-weight-bold: 900;\n}\n`;\n/**\n * Complete stylesheet with all presets and component classes\n */\nfunction generateCompleteStylesheet() {\n return `\n/* Seekora UI SDK Styles */\n/* Generated CSS Variables and Component Classes */\n\n${lightThemeVariables}\n\n${darkThemeVariables}\n\n${minimalThemeVariables}\n\n${highContrastThemeVariables}\n\n${generateComponentClasses('--seekora')}\n`;\n}\n/**\n * Inject styles into the document head\n */\nfunction injectStyles(css, id = 'seekora-theme') {\n if (typeof document === 'undefined')\n return;\n // Remove existing style if present\n const existing = document.getElementById(id);\n if (existing) {\n existing.remove();\n }\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n/**\n * Set the active theme\n */\nfunction setTheme(themeName) {\n if (typeof document === 'undefined')\n return;\n document.documentElement.setAttribute('data-seekora-theme', themeName);\n}\n/**\n * Get the current theme\n */\nfunction getTheme() {\n if (typeof document === 'undefined')\n return 'light';\n return document.documentElement.getAttribute('data-seekora-theme') || 'light';\n}\n\n/**\n * Logger utility for Seekora UI SDK\n *\n * Provides structured logging with different log levels:\n * - verbose: Detailed debugging information\n * - info: General informational messages\n * - warn: Warning messages for potential issues\n * - error: Error messages for failures\n */\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"VERBOSE\"] = 0] = \"VERBOSE\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"SILENT\"] = 4] = \"SILENT\";\n})(LogLevel || (LogLevel = {}));\nclass Logger {\n constructor(config = {}) {\n this.level = config.level ?? this.getDefaultLevel();\n this.prefix = config.prefix ?? '[Seekora UI SDK]';\n this.enableTimestamp = config.enableTimestamp ?? false;\n }\n getDefaultLevel() {\n // Check for environment variable or default to INFO\n if (({})) {\n const envLevel = undefined?.toUpperCase();\n switch (envLevel) {\n case 'VERBOSE':\n return LogLevel.VERBOSE;\n case 'INFO':\n return LogLevel.INFO;\n case 'WARN':\n return LogLevel.WARN;\n case 'ERROR':\n return LogLevel.ERROR;\n case 'SILENT':\n return LogLevel.SILENT;\n }\n }\n // Default to INFO in production, VERBOSE in development\n if (typeof window !== 'undefined' && window.__SEEKORA_DEBUG__) {\n return LogLevel.VERBOSE;\n }\n return LogLevel.INFO;\n }\n formatMessage(level, ...args) {\n const parts = [];\n if (this.enableTimestamp) {\n parts.push(`[${new Date().toISOString()}]`);\n }\n parts.push(this.prefix, `[${level}]`);\n return [...parts, ...args];\n }\n verbose(...args) {\n if (this.level <= LogLevel.VERBOSE) {\n console.log(...this.formatMessage('VERBOSE', ...args));\n }\n }\n info(...args) {\n if (this.level <= LogLevel.INFO) {\n console.info(...this.formatMessage('INFO', ...args));\n }\n }\n warn(...args) {\n if (this.level <= LogLevel.WARN) {\n console.warn(...this.formatMessage('WARN', ...args));\n }\n }\n error(...args) {\n if (this.level <= LogLevel.ERROR) {\n console.error(...this.formatMessage('ERROR', ...args));\n }\n }\n setLevel(level) {\n this.level = level;\n }\n getLevel() {\n return this.level;\n }\n setPrefix(prefix) {\n this.prefix = prefix;\n }\n setTimestamp(enabled) {\n this.enableTimestamp = enabled;\n }\n}\n// Create default logger instance\nlet defaultLogger = null;\nfunction createLogger(config = {}) {\n return new Logger(config);\n}\nfunction getLogger() {\n if (!defaultLogger) {\n defaultLogger = createLogger();\n }\n return defaultLogger;\n}\nfunction setDefaultLogger(logger) {\n defaultLogger = logger;\n}\nfunction setLogLevel(level) {\n getLogger().setLevel(level);\n}\nfunction setLogPrefix(prefix) {\n getLogger().setPrefix(prefix);\n}\nfunction setLogTimestamp(enabled) {\n getLogger().setTimestamp(enabled);\n}\n// Convenience functions that use the default logger\nconst log = {\n verbose: (...args) => getLogger().verbose(...args),\n info: (...args) => getLogger().info(...args),\n warn: (...args) => getLogger().warn(...args),\n error: (...args) => getLogger().error(...args),\n};\n// Export default logger instance\ngetLogger();\n\n/**\n * Highlight Utilities\n *\n * Core utilities for highlighting matching terms in search results\n * Framework-agnostic functions shared across all packages\n */\n/**\n * Get highlighted value from a hit\n * Looks for _highlightResult or highlight_result field\n */\nfunction getHighlightedValue(options) {\n const { attribute, hit, preTag = '<mark>', postTag = '</mark>', fallback, } = options;\n // Check for various highlight result formats\n const highlightResult = hit._highlightResult?.[attribute]?.value ||\n hit.highlight_result?.[attribute]?.value ||\n hit._highlight?.[attribute] ||\n hit.highlight?.[attribute];\n if (highlightResult) {\n // Replace highlight markers with custom tags\n return highlightResult\n .replace(/<em>/g, preTag)\n .replace(/<\\/em>/g, postTag)\n .replace(/<mark>/g, preTag)\n .replace(/<\\/mark>/g, postTag);\n }\n // Fall back to plain attribute value\n const plainValue = getNestedValue(hit, attribute);\n return plainValue !== undefined ? String(plainValue) : (fallback || '');\n}\n/**\n * Get snippet (truncated highlighted value) from a hit\n */\nfunction getSnippetedValue(options) {\n const { attribute, hit, preTag = '<mark>', postTag = '</mark>', fallback, maxLength = 100, ellipsis = '...', } = options;\n // Check for snippet result\n const snippetResult = hit._snippetResult?.[attribute]?.value ||\n hit.snippet_result?.[attribute]?.value ||\n hit._snippet?.[attribute] ||\n hit.snippet?.[attribute];\n let text = '';\n if (snippetResult) {\n text = snippetResult\n .replace(/<em>/g, preTag)\n .replace(/<\\/em>/g, postTag)\n .replace(/<mark>/g, preTag)\n .replace(/<\\/mark>/g, postTag);\n }\n else {\n // Fall back to highlighted or plain value\n text = getHighlightedValue(options);\n }\n // Truncate if needed\n if (text.length > maxLength) {\n // Try to truncate at word boundary\n const truncated = text.substring(0, maxLength);\n const lastSpace = truncated.lastIndexOf(' ');\n if (lastSpace > maxLength * 0.7) {\n return truncated.substring(0, lastSpace) + ellipsis;\n }\n return truncated + ellipsis;\n }\n return text;\n}\n/**\n * Parse highlighted value into parts for custom rendering\n */\nfunction parseHighlightedParts(highlightedValue, preTag = '<mark>', postTag = '</mark>') {\n const parts = [];\n let remaining = highlightedValue;\n while (remaining.length > 0) {\n const startIdx = remaining.indexOf(preTag);\n if (startIdx === -1) {\n // No more highlights, add remaining as non-highlighted\n if (remaining.length > 0) {\n parts.push({ value: remaining, isHighlighted: false });\n }\n break;\n }\n // Add text before highlight\n if (startIdx > 0) {\n parts.push({ value: remaining.substring(0, startIdx), isHighlighted: false });\n }\n // Find end of highlight\n const afterPreTag = remaining.substring(startIdx + preTag.length);\n const endIdx = afterPreTag.indexOf(postTag);\n if (endIdx === -1) {\n // Malformed, add rest as non-highlighted\n parts.push({ value: remaining.substring(startIdx), isHighlighted: false });\n break;\n }\n // Add highlighted part\n parts.push({ value: afterPreTag.substring(0, endIdx), isHighlighted: true });\n // Continue with rest\n remaining = afterPreTag.substring(endIdx + postTag.length);\n }\n return parts;\n}\n/**\n * Highlight a query in text (client-side highlighting)\n * Useful when server doesn't provide highlight data\n */\nfunction highlightQuery(text, query, options = {}) {\n const { preTag = '<mark>', postTag = '</mark>', caseSensitive = false } = options;\n if (!query || !text)\n return text;\n const flags = caseSensitive ? 'g' : 'gi';\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedQuery})`, flags);\n return text.replace(regex, `${preTag}$1${postTag}`);\n}\n/**\n * Parse query-highlighted text into parts\n */\nfunction parseQueryHighlightParts(text, query, caseSensitive = false) {\n if (!query || !text) {\n return [{ value: text, isHighlighted: false }];\n }\n const parts = [];\n const flags = caseSensitive ? 'g' : 'gi';\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(escapedQuery, flags);\n let lastIndex = 0;\n let match;\n while ((match = regex.exec(text)) !== null) {\n // Add text before match\n if (match.index > lastIndex) {\n parts.push({ value: text.substring(lastIndex, match.index), isHighlighted: false });\n }\n // Add highlighted match\n parts.push({ value: match[0], isHighlighted: true });\n lastIndex = regex.lastIndex;\n }\n // Add remaining text\n if (lastIndex < text.length) {\n parts.push({ value: text.substring(lastIndex), isHighlighted: false });\n }\n return parts.length > 0 ? parts : [{ value: text, isHighlighted: false }];\n}\n/**\n * Get nested value from object using dot notation\n */\nfunction getNestedValue(obj, path) {\n return path.split('.').reduce((current, key) => {\n return current && current[key] !== undefined ? current[key] : undefined;\n }, obj);\n}\n/**\n * Strip HTML tags from highlighted text\n */\nfunction stripHighlightTags(text) {\n return text\n .replace(/<mark>/g, '')\n .replace(/<\\/mark>/g, '')\n .replace(/<em>/g, '')\n .replace(/<\\/em>/g, '');\n}\n\n/**\n * Accessibility Utilities\n *\n * Shared accessibility helpers for keyboard navigation, focus management,\n * screen reader announcements, and ARIA attributes.\n */\n// ============================================================================\n// Screen Reader Announcements (Live Regions)\n// ============================================================================\nlet announcer = null;\n/**\n * Create or get the screen reader announcer element\n */\nfunction getAnnouncer() {\n if (announcer)\n return announcer;\n if (typeof document === 'undefined') {\n throw new Error('Cannot create announcer: document is undefined');\n }\n announcer = document.createElement('div');\n announcer.id = 'seekora-announcer';\n announcer.setAttribute('role', 'status');\n announcer.setAttribute('aria-live', 'polite');\n announcer.setAttribute('aria-atomic', 'true');\n announcer.style.cssText = `\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n `;\n document.body.appendChild(announcer);\n return announcer;\n}\n/**\n * Announce a message to screen readers\n */\nfunction announce(message, priority = 'polite') {\n if (typeof document === 'undefined')\n return;\n try {\n const el = getAnnouncer();\n el.setAttribute('aria-live', priority);\n // Clear and set message (needs a brief delay to trigger announcement)\n el.textContent = '';\n setTimeout(() => {\n el.textContent = message;\n }, 50);\n }\n catch (e) {\n // Ignore errors in SSR\n }\n}\n/**\n * Announce search results count\n */\nfunction announceResults(count, query) {\n let message = '';\n if (count === 0) {\n message = query\n ? `No results found for \"${query}\"`\n : 'No results found';\n }\n else if (count === 1) {\n message = query\n ? `1 result found for \"${query}\"`\n : '1 result found';\n }\n else {\n message = query\n ? `${count} results found for \"${query}\"`\n : `${count} results found`;\n }\n announce(message);\n}\n/**\n * Announce filter changes\n */\nfunction announceFilterChange(action, filterName, filterValue) {\n let message = '';\n switch (action) {\n case 'added':\n message = `Filter ${filterName}: ${filterValue} applied`;\n break;\n case 'removed':\n message = `Filter ${filterName}: ${filterValue} removed`;\n break;\n case 'cleared':\n message = 'All filters cleared';\n break;\n }\n announce(message);\n}\n/**\n * Handle keyboard navigation for a list of items\n */\nfunction handleKeyboardNavigation(event, options) {\n const { items, activeIndex, onActiveChange, onSelect, onCancel, wrap = true, orientation = 'vertical', } = options;\n const itemCount = items.length;\n if (itemCount === 0)\n return false;\n let handled = false;\n let newIndex = activeIndex;\n switch (event.key) {\n case 'ArrowDown':\n if (orientation === 'vertical' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex < itemCount - 1) {\n newIndex = activeIndex + 1;\n }\n else if (wrap) {\n newIndex = 0;\n }\n handled = true;\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex > 0) {\n newIndex = activeIndex - 1;\n }\n else if (wrap) {\n newIndex = itemCount - 1;\n }\n handled = true;\n }\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex < itemCount - 1) {\n newIndex = activeIndex + 1;\n }\n else if (wrap) {\n newIndex = 0;\n }\n handled = true;\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal' || orientation === 'both') {\n event.preventDefault();\n if (activeIndex > 0) {\n newIndex = activeIndex - 1;\n }\n else if (wrap) {\n newIndex = itemCount - 1;\n }\n handled = true;\n }\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n handled = true;\n break;\n case 'End':\n event.preventDefault();\n newIndex = itemCount - 1;\n handled = true;\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (activeIndex >= 0 && onSelect) {\n onSelect(activeIndex);\n }\n handled = true;\n break;\n case 'Escape':\n if (onCancel) {\n event.preventDefault();\n onCancel();\n handled = true;\n }\n break;\n }\n if (newIndex !== activeIndex && newIndex >= 0 && newIndex < itemCount) {\n onActiveChange(newIndex);\n // Focus the new item\n const item = items[newIndex];\n if (item) {\n item.focus();\n }\n }\n return handled;\n}\n/**\n * Create a roving tabindex manager for accessible list navigation\n */\nfunction createRovingTabIndex(container, selector) {\n const items = Array.from(container.querySelectorAll(selector));\n // Initialize: first item gets tabindex 0, others get -1\n items.forEach((item, index) => {\n item.setAttribute('tabindex', index === 0 ? '0' : '-1');\n });\n return {\n update: (activeIndex) => {\n items.forEach((item, index) => {\n item.setAttribute('tabindex', index === activeIndex ? '0' : '-1');\n });\n },\n destroy: () => {\n items.forEach(item => {\n item.removeAttribute('tabindex');\n });\n },\n };\n}\n// ============================================================================\n// Focus Management\n// ============================================================================\n/**\n * Get all focusable elements within a container\n */\nfunction getFocusableElements(container) {\n const selector = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n return Array.from(container.querySelectorAll(selector));\n}\n/**\n * Create a focus trap within a container (for modals/dialogs)\n */\nfunction createFocusTrap(container) {\n let previouslyFocused = null;\n let handleKeyDown = null;\n return {\n activate: () => {\n previouslyFocused = document.activeElement;\n const focusable = getFocusableElements(container);\n if (focusable.length === 0)\n return;\n const firstFocusable = focusable[0];\n const lastFocusable = focusable[focusable.length - 1];\n handleKeyDown = (e) => {\n if (e.key !== 'Tab')\n return;\n if (e.shiftKey) {\n if (document.activeElement === firstFocusable) {\n e.preventDefault();\n lastFocusable.focus();\n }\n }\n else {\n if (document.activeElement === lastFocusable) {\n e.preventDefault();\n firstFocusable.focus();\n }\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n firstFocusable.focus();\n },\n deactivate: () => {\n if (handleKeyDown) {\n document.removeEventListener('keydown', handleKeyDown);\n handleKeyDown = null;\n }\n if (previouslyFocused) {\n previouslyFocused.focus();\n previouslyFocused = null;\n }\n },\n };\n}\n/**\n * Focus first error or first input in a form\n */\nfunction focusFirstError(container) {\n const error = container.querySelector('[aria-invalid=\"true\"]');\n if (error) {\n error.focus();\n return true;\n }\n return false;\n}\n// ============================================================================\n// ARIA Helpers\n// ============================================================================\n/**\n * Generate a unique ID for ARIA relationships\n */\nlet idCounter = 0;\nfunction generateId(prefix = 'seekora') {\n return `${prefix}-${++idCounter}`;\n}\n/**\n * Set up ARIA describedby relationship\n */\nfunction setAriaDescribedBy(element, describer) {\n const id = describer.id || generateId('description');\n describer.id = id;\n const existing = element.getAttribute('aria-describedby');\n const newValue = existing ? `${existing} ${id}` : id;\n element.setAttribute('aria-describedby', newValue);\n return () => {\n const current = element.getAttribute('aria-describedby');\n if (current) {\n const ids = current.split(' ').filter(i => i !== id);\n if (ids.length > 0) {\n element.setAttribute('aria-describedby', ids.join(' '));\n }\n else {\n element.removeAttribute('aria-describedby');\n }\n }\n };\n}\n/**\n * Check if user prefers reduced motion\n */\nfunction prefersReducedMotion() {\n if (typeof window === 'undefined')\n return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n/**\n * Check if user prefers high contrast\n */\nfunction prefersHighContrast() {\n if (typeof window === 'undefined')\n return false;\n return window.matchMedia('(prefers-contrast: more)').matches;\n}\n/**\n * Create a keyboard shortcuts manager\n */\nfunction createKeyboardShortcuts(shortcuts) {\n const handleKeyDown = (e) => {\n for (const shortcut of shortcuts) {\n const keyMatches = e.key.toLowerCase() === shortcut.key.toLowerCase();\n const ctrlMatches = !shortcut.ctrl || e.ctrlKey;\n const altMatches = !shortcut.alt || e.altKey;\n const shiftMatches = !shortcut.shift || e.shiftKey;\n const metaMatches = !shortcut.meta || e.metaKey;\n if (keyMatches && ctrlMatches && altMatches && shiftMatches && metaMatches) {\n e.preventDefault();\n shortcut.handler(e);\n break;\n }\n }\n };\n return {\n attach: () => {\n document.addEventListener('keydown', handleKeyDown);\n },\n detach: () => {\n document.removeEventListener('keydown', handleKeyDown);\n },\n getShortcuts: () => [...shortcuts],\n };\n}\n\n/**\n * SearchStateManager\n *\n * Centralized state management for search operations\n * Framework-agnostic core logic shared across all packages\n * Handles query, refinements, pagination, sorting, and automatic search triggering\n * Similar to InstantSearch.js architecture\n */\nclass SearchStateManager {\n constructor(config) {\n this.listeners = [];\n this.debounceTimer = null;\n this.client = config.client;\n this.autoSearch = config.autoSearch !== false;\n this.debounceMs = config.debounceMs || 300;\n this.defaultSearchOptions = config.defaultSearchOptions || { widget_mode: true };\n this.state = {\n query: config.initialQuery || '',\n refinements: [],\n currentPage: 1,\n itemsPerPage: config.itemsPerPage || 10,\n sortBy: undefined,\n results: null,\n loading: false,\n error: null,\n };\n log.info('SearchStateManager: Initialized', {\n autoSearch: this.autoSearch,\n debounceMs: this.debounceMs,\n });\n }\n // State getters\n getState() {\n return { ...this.state };\n }\n getQuery() {\n return this.state.query;\n }\n getRefinements() {\n return [...this.state.refinements];\n }\n getCurrentPage() {\n return this.state.currentPage;\n }\n getResults() {\n return this.state.results;\n }\n getLoading() {\n return this.state.loading;\n }\n getError() {\n return this.state.error;\n }\n // State setters (automatically trigger search if autoSearch is enabled)\n setQuery(query, triggerSearch = true) {\n if (this.state.query === query) {\n log.verbose('SearchStateManager: Query unchanged, skipping update', { query });\n // Even if query is the same, trigger search if explicitly requested\n if (triggerSearch && this.autoSearch) {\n log.verbose('SearchStateManager: Query unchanged but triggerSearch=true, triggering search');\n this.debouncedSearch();\n }\n return;\n }\n this.state.query = query;\n this.state.currentPage = 1; // Reset to first page on new query\n log.verbose('SearchStateManager: Query updated', { query, triggerSearch, autoSearch: this.autoSearch });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n log.verbose('SearchStateManager: Triggering debounced search');\n this.debouncedSearch();\n }\n else {\n log.verbose('SearchStateManager: Search not triggered', { autoSearch: this.autoSearch, triggerSearch });\n }\n }\n addRefinement(field, value, triggerSearch = true) {\n // Check if refinement already exists\n const exists = this.state.refinements.some(r => r.field === field && r.value === value);\n if (exists)\n return;\n this.state.refinements.push({ field, value });\n this.state.currentPage = 1; // Reset to first page on filter change\n log.verbose('SearchStateManager: Refinement added', { field, value });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n removeRefinement(field, value, triggerSearch = true) {\n const index = this.state.refinements.findIndex(r => r.field === field && r.value === value);\n if (index === -1)\n return;\n this.state.refinements.splice(index, 1);\n this.state.currentPage = 1; // Reset to first page on filter change\n log.verbose('SearchStateManager: Refinement removed', { field, value });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n clearRefinements(triggerSearch = true) {\n if (this.state.refinements.length === 0)\n return;\n this.state.refinements = [];\n this.state.currentPage = 1;\n log.verbose('SearchStateManager: Refinements cleared');\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n setPage(page, triggerSearch = true) {\n if (this.state.currentPage === page)\n return;\n this.state.currentPage = page;\n log.verbose('SearchStateManager: Page updated', { page });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n setSortBy(sortBy, triggerSearch = true) {\n if (this.state.sortBy === sortBy)\n return;\n this.state.sortBy = sortBy;\n this.state.currentPage = 1; // Reset to first page on sort change\n log.verbose('SearchStateManager: Sort updated', { sortBy });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n setItemsPerPage(itemsPerPage, triggerSearch = true) {\n if (this.state.itemsPerPage === itemsPerPage)\n return;\n this.state.itemsPerPage = itemsPerPage;\n this.state.currentPage = 1; // Reset to first page when changing items per page\n log.verbose('SearchStateManager: Items per page updated', { itemsPerPage });\n this.notifyListeners();\n if (this.autoSearch && triggerSearch) {\n this.debouncedSearch();\n }\n }\n // Manual search trigger\n async search(additionalOptions) {\n // Clear debounce timer if exists\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n this.setState({ loading: true, error: null });\n try {\n const searchOptions = this.buildSearchOptions(additionalOptions);\n log.verbose('SearchStateManager: Performing search', {\n query: this.state.query,\n refinementsCount: this.state.refinements.length,\n currentPage: this.state.currentPage,\n sortBy: this.state.sortBy,\n filter_by: searchOptions.filter_by,\n });\n const response = await this.client.search(this.state.query, searchOptions);\n this.setState({\n results: response,\n loading: false,\n error: null,\n });\n log.info('SearchStateManager: Search completed', {\n query: this.state.query,\n resultsCount: response?.results?.length || 0,\n totalResults: response?.totalResults || 0,\n });\n return response;\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n this.setState({\n results: null,\n loading: false,\n error,\n });\n log.error('SearchStateManager: Search failed', {\n query: this.state.query,\n error: error.message,\n });\n return null;\n }\n }\n // Build search options from current state\n buildSearchOptions(additionalOptions) {\n const options = {\n ...this.defaultSearchOptions,\n page: this.state.currentPage,\n per_page: this.state.itemsPerPage,\n ...additionalOptions,\n };\n // Add sort_by if set and not \"relevance\" (relevance is the default, no sort field needed)\n if (this.state.sortBy && this.state.sortBy !== 'relevance') {\n options.sort_by = this.state.sortBy;\n }\n // Build filter_by from refinements\n if (this.state.refinements.length > 0) {\n const filtersByField = {};\n this.state.refinements.forEach((refinement) => {\n if (!filtersByField[refinement.field]) {\n filtersByField[refinement.field] = [];\n }\n filtersByField[refinement.field].push(refinement.value);\n });\n const filterParts = [];\n Object.entries(filtersByField).forEach(([field, values]) => {\n values.forEach((value) => {\n filterParts.push(`${field}:${value}`);\n });\n });\n if (filterParts.length > 0) {\n options.filter_by = filterParts.join(' && ');\n }\n }\n return options;\n }\n // Debounced search trigger\n debouncedSearch() {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n log.verbose('SearchStateManager: Scheduling debounced search', { debounceMs: this.debounceMs });\n this.debounceTimer = setTimeout(() => {\n log.verbose('SearchStateManager: Debounce timer fired, calling search()');\n this.search();\n }, this.debounceMs);\n }\n // Subscribe to state changes\n subscribe(listener) {\n this.listeners.push(listener);\n // Immediately call listener with current state\n listener(this.getState());\n // Return unsubscribe function\n return () => {\n this.listeners = this.listeners.filter(l => l !== listener);\n };\n }\n // Update state and notify listeners\n setState(updates) {\n this.state = { ...this.state, ...updates };\n this.notifyListeners();\n }\n // Notify all listeners of state changes\n notifyListeners() {\n const state = this.getState();\n this.listeners.forEach(listener => {\n try {\n listener(state);\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('SearchStateManager: Error in listener', {\n error: error.message,\n });\n }\n });\n }\n // Clear all state\n clear() {\n this.state = {\n query: '',\n refinements: [],\n currentPage: 1,\n itemsPerPage: this.state.itemsPerPage,\n sortBy: undefined,\n results: null,\n loading: false,\n error: null,\n };\n this.notifyListeners();\n }\n}\n\n/**\n * URL Router\n *\n * Syncs search state with browser URL for shareable links and back/forward navigation\n * Framework-agnostic core logic shared across all packages\n */\nclass URLRouter {\n constructor(config) {\n this.unsubscribe = null;\n this.debounceTimer = null;\n this.isUpdatingFromUrl = false;\n /**\n * Handle browser back/forward navigation\n */\n this.handlePopState = () => {\n if (this.readFromUrl) {\n // Clear current refinements first\n this.stateManager.clear();\n this.readStateFromUrl();\n }\n };\n this.stateManager = config.stateManager;\n this.writeToUrl = config.writeToUrl !== false;\n this.readFromUrl = config.readFromUrl !== false;\n this.historyMode = config.historyMode || 'push';\n this.debounceMs = config.debounceMs ?? 400;\n this.basePath = config.basePath || (typeof window !== 'undefined' ? window.location.pathname : '/');\n this.triggerSearchOnChange = config.triggerSearchOnChange !== false;\n this.mapping = {\n query: config.mapping?.query || 'q',\n page: config.mapping?.page || 'page',\n hitsPerPage: config.mapping?.hitsPerPage || 'hitsPerPage',\n sortBy: config.mapping?.sortBy || 'sortBy',\n refinementPrefix: config.mapping?.refinementPrefix || '',\n refinementSerializer: config.mapping?.refinementSerializer,\n refinementDeserializer: config.mapping?.refinementDeserializer,\n };\n // Initialize\n this.init();\n }\n init() {\n if (typeof window === 'undefined') {\n log.warn('URLRouter: Not in browser environment, skipping initialization');\n return;\n }\n // Read initial state from URL\n if (this.readFromUrl) {\n this.readStateFromUrl();\n }\n // Subscribe to state changes\n if (this.writeToUrl) {\n this.unsubscribe = this.stateManager.subscribe((state) => {\n if (!this.isUpdatingFromUrl) {\n this.debouncedWriteToUrl(state);\n }\n });\n }\n // Listen for popstate (back/forward navigation)\n window.addEventListener('popstate', this.handlePopState);\n log.info('URLRouter: Initialized', {\n writeToUrl: this.writeToUrl,\n readFromUrl: this.readFromUrl,\n historyMode: this.historyMode,\n });\n }\n /**\n * Read state from current URL and update StateManager\n */\n readStateFromUrl() {\n const params = new URLSearchParams(window.location.search);\n this.isUpdatingFromUrl = true;\n try {\n // Query\n const query = params.get(this.mapping.query);\n if (query !== null) {\n this.stateManager.setQuery(query, false);\n }\n // Page\n const page = params.get(this.mapping.page);\n if (page !== null) {\n const pageNum = parseInt(page, 10);\n if (!isNaN(pageNum) && pageNum > 0) {\n this.stateManager.setPage(pageNum, false);\n }\n }\n // Hits per page\n const hitsPerPage = params.get(this.mapping.hitsPerPage);\n if (hitsPerPage !== null) {\n const hpp = parseInt(hitsPerPage, 10);\n if (!isNaN(hpp) && hpp > 0) {\n this.stateManager.setItemsPerPage(hpp, false);\n }\n }\n // Sort by\n const sortBy = params.get(this.mapping.sortBy);\n if (sortBy !== null) {\n this.stateManager.setSortBy(sortBy, false);\n }\n // Refinements\n const refinements = this.deserializeRefinements(params);\n refinements.forEach(r => {\n this.stateManager.addRefinement(r.field, r.value, false);\n });\n // Trigger search if there's any state\n if (this.triggerSearchOnChange && (query || refinements.length > 0)) {\n this.stateManager.search();\n }\n log.verbose('URLRouter: Read state from URL', {\n query,\n page,\n refinements: refinements.length,\n });\n }\n finally {\n this.isUpdatingFromUrl = false;\n }\n }\n /**\n * Write state to URL\n */\n writeStateToUrl(state) {\n const params = new URLSearchParams();\n // Query\n if (state.query) {\n params.set(this.mapping.query, state.query);\n }\n // Page (only if not 1)\n if (state.currentPage > 1) {\n params.set(this.mapping.page, state.currentPage.toString());\n }\n // Hits per page (only if not default)\n if (state.itemsPerPage !== 10) {\n params.set(this.mapping.hitsPerPage, state.itemsPerPage.toString());\n }\n // Sort by\n if (state.sortBy && state.sortBy !== 'relevance') {\n params.set(this.mapping.sortBy, state.sortBy);\n }\n // Refinements\n this.serializeRefinements(state.refinements, params);\n // Build URL\n const queryString = params.toString();\n const url = queryString ? `${this.basePath}?${queryString}` : this.basePath;\n // Update URL\n if (this.historyMode === 'push') {\n window.history.pushState({}, '', url);\n }\n else {\n window.history.replaceState({}, '', url);\n }\n log.verbose('URLRouter: Wrote state to URL', { url });\n }\n /**\n * Debounced write to URL\n */\n debouncedWriteToUrl(state) {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.debounceTimer = setTimeout(() => {\n this.writeStateToUrl(state);\n }, this.debounceMs);\n }\n /**\n * Serialize refinements to URL params\n */\n serializeRefinements(refinements, params) {\n if (this.mapping.refinementSerializer) {\n const serialized = this.mapping.refinementSerializer(refinements);\n Object.entries(serialized).forEach(([key, value]) => {\n params.set(key, value);\n });\n return;\n }\n // Default serialization: field[]=value\n const byField = {};\n refinements.forEach(r => {\n const key = this.mapping.refinementPrefix + r.field;\n if (!byField[key]) {\n byField[key] = [];\n }\n byField[key].push(r.value);\n });\n Object.entries(byField).forEach(([field, values]) => {\n values.forEach(value => {\n params.append(field, value);\n });\n });\n }\n /**\n * Deserialize refinements from URL params\n */\n deserializeRefinements(params) {\n if (this.mapping.refinementDeserializer) {\n return this.mapping.refinementDeserializer(params);\n }\n // Default deserialization\n const refinements = [];\n const knownParams = [\n this.mapping.query,\n this.mapping.page,\n this.mapping.hitsPerPage,\n this.mapping.sortBy,\n ];\n params.forEach((value, key) => {\n // Skip known params\n if (knownParams.includes(key))\n return;\n // Remove prefix if present\n const field = this.mapping.refinementPrefix\n ? key.replace(new RegExp(`^${this.mapping.refinementPrefix}`), '')\n : key;\n refinements.push({ field, value });\n });\n return refinements;\n }\n /**\n * Manually update URL from current state\n */\n refresh() {\n if (this.writeToUrl) {\n this.writeStateToUrl(this.stateManager.getState());\n }\n }\n /**\n * Get current URL\n */\n getUrl() {\n if (typeof window === 'undefined')\n return '';\n return window.location.href;\n }\n /**\n * Generate shareable URL from state\n */\n createUrl(state) {\n const currentState = this.stateManager.getState();\n const mergedState = state ? { ...currentState, ...state } : currentState;\n const params = new URLSearchParams();\n if (mergedState.query) {\n params.set(this.mapping.query, mergedState.query);\n }\n if (mergedState.currentPage > 1) {\n params.set(this.mapping.page, mergedState.currentPage.toString());\n }\n if (mergedState.itemsPerPage !== 10) {\n params.set(this.mapping.hitsPerPage, mergedState.itemsPerPage.toString());\n }\n if (mergedState.sortBy && mergedState.sortBy !== 'relevance') {\n params.set(this.mapping.sortBy, mergedState.sortBy);\n }\n this.serializeRefinements(mergedState.refinements, params);\n const queryString = params.toString();\n const origin = typeof window !== 'undefined' ? window.location.origin : '';\n return queryString ? `${origin}${this.basePath}?${queryString}` : `${origin}${this.basePath}`;\n }\n /**\n * Destroy the router and cleanup\n */\n destroy() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', this.handlePopState);\n }\n log.info('URLRouter: Destroyed');\n }\n}\n/**\n * Create a URL router instance\n */\nfunction createURLRouter(config) {\n return new URLRouter(config);\n}\n\nexport { LogLevel, SearchStateManager, URLRouter, announce, announceFilterChange, announceResults, createFocusTrap, createKeyboardShortcuts, createLogger, createRovingTabIndex, createTheme, createURLRouter, darkThemeVariables, extractField, focusFirstError, formatPrice, generateCompleteStylesheet, generateId, generateThemeStylesheet, getFocusableElements, getHighlightedValue, getLogger, getNestedValue$1 as getNestedValue, getSnippetedValue, getTheme, handleKeyboardNavigation, highContrastThemeVariables, highlightQuery, injectStyles, lightThemeVariables, log, mergeThemes, minimalThemeVariables, parseHighlightedParts, parseQueryHighlightParts, prefersHighContrast, prefersReducedMotion, setAriaDescribedBy, setDefaultLogger, setLogLevel, setLogPrefix, setLogTimestamp, setTheme, stripHighlightTags, themeToCSSVariables };\n//# sourceMappingURL=index.esm.js.map\n","/**\n * Default Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const defaultTheme: Theme = {\n colors: {\n primary: '#007bff',\n secondary: '#6c757d',\n background: '#ffffff',\n surface: '#f8f9fa',\n text: '#212529',\n textSecondary: '#6c757d',\n border: '#dee2e6',\n hover: '#f8f9fa',\n focus: '#007bff',\n error: '#dc3545',\n success: '#28a745',\n warning: '#ffc107',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.25rem',\n },\n fontWeight: {\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n tight: 1.25,\n normal: 1.5,\n relaxed: 1.75,\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '1rem',\n large: '1.5rem',\n },\n borderRadius: {\n none: '0',\n small: '0.25rem',\n medium: '0.375rem',\n large: '0.5rem',\n full: '9999px',\n },\n shadows: {\n small: '0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23)',\n large: '0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)',\n },\n transitions: {\n fast: '150ms ease-in-out',\n normal: '250ms ease-in-out',\n slow: '350ms ease-in-out',\n },\n breakpoints: {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n },\n zIndex: {\n dropdown: 1000,\n modal: 2000,\n tooltip: 3000,\n },\n};\n\n\n","/**\n * createTheme utility\n * \n * Re-exports from core package for React-specific usage\n */\n\nimport { createTheme as createThemeCore } from '@seekora-ai/ui-sdk-core';\nimport { defaultTheme } from './default';\nimport type { ThemeConfig } from '@seekora-ai/ui-sdk-types';\n\nexport const createTheme = (config: ThemeConfig) => {\n return createThemeCore(config, defaultTheme);\n};\n\n\n","/**\n * SearchProvider Component\n * \n * Provides Seekora client and context to child components\n */\n\nimport React, { createContext, useContext, ReactNode, useMemo } from 'react';\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\nimport { log, SearchStateManager, type SearchStateManagerConfig } from '@seekora-ai/ui-sdk-core';\nimport type { Theme, ThemeConfig } from '../themes/types';\nimport { defaultTheme } from '../themes/default';\nimport { createTheme } from '../themes/createTheme';\n\ninterface SearchContextValue {\n client: SeekoraClient;\n theme: Theme;\n enableAnalytics: boolean;\n autoTrackSearch: boolean;\n stateManager: SearchStateManager;\n}\n\nconst SearchContext = createContext<SearchContextValue | null>(null);\n\nexport interface SearchProviderProps {\n client: SeekoraClient;\n theme?: ThemeConfig;\n enableAnalytics?: boolean;\n autoTrackSearch?: boolean;\n stateManager?: SearchStateManagerConfig;\n children: ReactNode;\n}\n\nexport const SearchProvider: React.FC<SearchProviderProps> = ({\n client,\n theme: themeConfig,\n enableAnalytics = true,\n autoTrackSearch = true,\n stateManager: stateManagerConfig,\n children,\n}) => {\n const theme = useMemo(() => {\n return themeConfig ? createTheme(themeConfig) : defaultTheme;\n }, [themeConfig]);\n\n // Create state manager instance (memoized to avoid recreating on every render)\n const stateManager = useMemo(() => {\n return new SearchStateManager({\n client,\n autoSearch: true,\n debounceMs: 300,\n itemsPerPage: 10,\n defaultSearchOptions: { widget_mode: true },\n ...stateManagerConfig,\n });\n }, [client, stateManagerConfig]);\n\n const value: SearchContextValue = useMemo(() => ({\n client,\n theme,\n enableAnalytics,\n autoTrackSearch,\n stateManager,\n }), [client, theme, enableAnalytics, autoTrackSearch, stateManager]);\n\n return (\n <SearchContext.Provider value={value}>\n {children}\n </SearchContext.Provider>\n );\n};\n\nexport const useSearchContext = (): SearchContextValue => {\n const context = useContext(SearchContext);\n if (!context) {\n const error = new Error('useSearchContext must be used within a SearchProvider');\n log.error('SearchProvider: Context not available', { error: error.message });\n throw error;\n }\n return context;\n};\n\n\n","/**\n * useSearchState Hook\n * \n * React hook for accessing and managing search state via SearchStateManager\n * Provides reactive state and methods to update search parameters\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport { SearchStateManager, type SearchState } from '@seekora-ai/ui-sdk-core';\nimport { useSearchContext } from '../components/SearchProvider';\n\nexport interface UseSearchStateReturn {\n // State\n query: string;\n refinements: Array<{ field: string; value: string }>;\n currentPage: number;\n itemsPerPage: number;\n sortBy?: string;\n results: SearchState['results'];\n loading: boolean;\n error: Error | null;\n \n // Actions\n setQuery: (query: string, triggerSearch?: boolean) => void;\n addRefinement: (field: string, value: string, triggerSearch?: boolean) => void;\n removeRefinement: (field: string, value: string, triggerSearch?: boolean) => void;\n clearRefinements: (triggerSearch?: boolean) => void;\n setPage: (page: number, triggerSearch?: boolean) => void;\n setSortBy: (sortBy: string, triggerSearch?: boolean) => void;\n search: (additionalOptions?: Parameters<SearchStateManager['search']>[0]) => Promise<SearchResponse | null>;\n clear: () => void;\n}\n\n/**\n * Hook to access and manage search state\n * Automatically subscribes to state changes and re-renders when state updates\n */\nexport const useSearchState = (): UseSearchStateReturn => {\n const { stateManager } = useSearchContext();\n const [state, setState] = useState<SearchState>(stateManager.getState());\n\n // Subscribe to state changes\n useEffect(() => {\n const unsubscribe = stateManager.subscribe((newState) => {\n setState(newState);\n });\n return unsubscribe;\n }, [stateManager]);\n\n // Memoized action methods\n const setQuery = useCallback((query: string, triggerSearch: boolean = true) => {\n stateManager.setQuery(query, triggerSearch);\n }, [stateManager]);\n\n const addRefinement = useCallback((field: string, value: string, triggerSearch: boolean = true) => {\n stateManager.addRefinement(field, value, triggerSearch);\n }, [stateManager]);\n\n const removeRefinement = useCallback((field: string, value: string, triggerSearch: boolean = true) => {\n stateManager.removeRefinement(field, value, triggerSearch);\n }, [stateManager]);\n\n const clearRefinements = useCallback((triggerSearch: boolean = true) => {\n stateManager.clearRefinements(triggerSearch);\n }, [stateManager]);\n\n const setPage = useCallback((page: number, triggerSearch: boolean = true) => {\n stateManager.setPage(page, triggerSearch);\n }, [stateManager]);\n\n const setSortBy = useCallback((sortBy: string, triggerSearch: boolean = true) => {\n stateManager.setSortBy(sortBy, triggerSearch);\n }, [stateManager]);\n\n const search = useCallback((additionalOptions?: Parameters<SearchStateManager['search']>[0]) => {\n return stateManager.search(additionalOptions);\n }, [stateManager]);\n\n const clear = useCallback(() => {\n stateManager.clear();\n }, [stateManager]);\n\n return {\n // State\n query: state.query,\n refinements: state.refinements,\n currentPage: state.currentPage,\n itemsPerPage: state.itemsPerPage,\n sortBy: state.sortBy,\n results: state.results,\n loading: state.loading,\n error: state.error,\n \n // Actions\n setQuery,\n addRefinement,\n removeRefinement,\n clearRefinements,\n setPage,\n setSortBy,\n search,\n clear,\n };\n};\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * useQuerySuggestions Hook\n * \n * Hook for fetching query suggestions with debouncing\n */\n\nimport { useState, useEffect, useRef } from 'react';\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type { SuggestionItem } from '../types';\n\nexport interface UseQuerySuggestionsOptions {\n client: SeekoraClient;\n query: string;\n enabled?: boolean;\n debounceMs?: number;\n maxSuggestions?: number;\n}\n\nexport interface UseQuerySuggestionsReturn {\n suggestions: SuggestionItem[];\n loading: boolean;\n error: Error | null;\n}\n\nexport const useQuerySuggestions = ({\n client,\n query,\n enabled = true,\n debounceMs = 300,\n maxSuggestions = 10,\n}: UseQuerySuggestionsOptions): UseQuerySuggestionsReturn => {\n const [suggestions, setSuggestions] = useState<SuggestionItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (!enabled || !query.trim()) {\n setSuggestions([]);\n setLoading(false);\n setError(null);\n return;\n }\n\n setLoading(true);\n setError(null);\n\n debounceTimerRef.current = setTimeout(async () => {\n try {\n const response = await client.getSuggestions?.(query, maxSuggestions);\n\n // Transform suggestions to SuggestionItem format\n // getSuggestions returns an array of suggestion objects with structure:\n // { query: string, popularity: number, objectID: string, ... }\n const rawSuggestions = Array.isArray(response) ? response : [];\n \n const suggestionItems: SuggestionItem[] = rawSuggestions.map((suggestion: any) => {\n // Extract query - it should be in suggestion.query\n const suggestionQuery = suggestion.query || suggestion.text || suggestion;\n // Extract count/popularity\n const count = suggestion.popularity !== undefined ? suggestion.popularity : (suggestion.count !== undefined ? suggestion.count : undefined);\n \n const item: SuggestionItem = {\n query: typeof suggestionQuery === 'string' ? suggestionQuery : String(suggestionQuery),\n count: typeof count === 'number' ? count : undefined,\n metadata: suggestion,\n };\n \n return item;\n });\n\n setSuggestions(suggestionItems);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('Error in useQuerySuggestions:', error);\n setError(error);\n setSuggestions([]);\n } finally {\n setLoading(false);\n }\n }, debounceMs);\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [client, query, enabled, debounceMs, maxSuggestions]);\n\n return {\n suggestions,\n loading,\n error,\n };\n};\n\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * SearchBar Component\n * \n * Interactive search input component with query suggestions support\n */\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { useQuerySuggestions } from '../hooks/useQuerySuggestions';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { clsx } from 'clsx';\nimport type { SearchOptions } from '@seekora-ai/search-sdk';\n\nexport interface SearchBarTheme {\n container?: string;\n input?: string;\n inputFocused?: string;\n suggestionsContainer?: string;\n suggestionItem?: string;\n suggestionItemHover?: string;\n suggestionItemActive?: string;\n loadingIndicator?: string;\n}\n\nexport interface SearchBarProps {\n placeholder?: string;\n showSuggestions?: boolean;\n debounceMs?: number;\n minQueryLength?: number;\n maxSuggestions?: number;\n onSearch?: (query: string, results: any) => void;\n onQueryChange?: (query: string) => void;\n onSuggestionSelect?: (suggestion: string) => void;\n onSearchStateChange?: (state: { results: any; loading: boolean; error: Error | null }) => void;\n searchOptions?: Omit<SearchOptions, 'q'>;\n className?: string;\n style?: React.CSSProperties;\n theme?: SearchBarTheme;\n renderSuggestion?: (suggestion: string, index: number) => React.ReactNode;\n renderLoading?: () => React.ReactNode;\n}\n\nexport const SearchBar: React.FC<SearchBarProps> = ({\n placeholder = 'Search...',\n showSuggestions = true,\n debounceMs = 300,\n minQueryLength = 2,\n maxSuggestions = 10,\n onSearch,\n onQueryChange,\n onSuggestionSelect,\n onSearchStateChange,\n searchOptions,\n className,\n style,\n theme: customTheme,\n renderSuggestion,\n renderLoading,\n}) => {\n const { client, theme, enableAnalytics, autoTrackSearch } = useSearchContext();\n const { query, setQuery, search: triggerSearch, results, loading: searchLoading, error: searchError } = useSearchState();\n const [isFocused, setIsFocused] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(-1);\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const isSearchingRef = useRef(false); // Flag to prevent blur handler from interfering\n\n const { suggestions, loading: suggestionsLoading } = useQuerySuggestions({\n client,\n query,\n enabled: showSuggestions && query.length >= minQueryLength,\n debounceMs,\n maxSuggestions,\n });\n\n const displayedSuggestions = suggestions.slice(0, maxSuggestions);\n\n // Expose search state to parent\n useEffect(() => {\n if (onSearchStateChange) {\n onSearchStateChange({\n results,\n loading: searchLoading,\n error: searchError,\n });\n }\n }, [results, searchLoading, searchError, onSearchStateChange]);\n\n useEffect(() => {\n if (results && onSearch) {\n onSearch(query, results);\n }\n }, [results, query, onSearch]);\n\n useEffect(() => {\n if (onQueryChange) {\n onQueryChange(query);\n }\n }, [query, onQueryChange]);\n\n const handleSearch = useCallback(async (searchQuery: string) => {\n // Allow empty queries - use empty string for search\n const query = searchQuery.trim();\n \n log.info('SearchBar: Triggering search', { query, originalQuery: searchQuery, isEmpty: !query });\n \n // Set flag to prevent blur handler from interfering\n isSearchingRef.current = true;\n \n // Close suggestions first\n setIsFocused(false);\n setSelectedIndex(-1);\n \n // Update query in state manager (don't trigger search yet - we'll do it explicitly)\n setQuery(query, false);\n \n // Explicitly trigger search immediately (bypass debounce for Enter key)\n log.info('SearchBar: Calling search() directly');\n await triggerSearch();\n \n // Blur after a small delay to ensure search is triggered\n setTimeout(() => {\n inputRef.current?.blur();\n // Reset flag after blur\n setTimeout(() => {\n isSearchingRef.current = false;\n }, 50);\n }, 100);\n }, [setQuery, triggerSearch]);\n\n const handleSuggestionSelect = useCallback((suggestion: string) => {\n log.verbose('SearchBar: Suggestion selected', { suggestion });\n setSelectedIndex(-1);\n setIsFocused(false);\n inputRef.current?.blur();\n \n if (onSuggestionSelect) {\n onSuggestionSelect(suggestion);\n }\n \n // Update query and trigger search\n setQuery(suggestion);\n }, [onSuggestionSelect, setQuery]);\n\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n // Update query in state manager but don't trigger search immediately\n // Search will be triggered on Enter or suggestion select\n setQuery(value, false); // false = don't trigger search immediately\n setSelectedIndex(-1);\n }, [setQuery]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case 'ArrowDown':\n if (showSuggestions && displayedSuggestions.length > 0) {\n e.preventDefault();\n setSelectedIndex((prev) => \n prev < displayedSuggestions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n case 'ArrowUp':\n if (showSuggestions && displayedSuggestions.length > 0) {\n e.preventDefault();\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : -1));\n }\n break;\n case 'Enter':\n e.preventDefault();\n e.stopPropagation();\n // Only select suggestion if one is explicitly selected (selectedIndex >= 0)\n // Otherwise, search whatever is in the text box\n if (showSuggestions && displayedSuggestions.length > 0 && selectedIndex >= 0 && selectedIndex < displayedSuggestions.length) {\n // Select suggestion if one is highlighted\n handleSuggestionSelect(displayedSuggestions[selectedIndex].query);\n } else {\n // Search whatever is in the text box (even if suggestions are shown)\n // Allow empty search - will use \"*\" for wildcard\n const currentValue = inputRef.current?.value || query;\n handleSearch(currentValue);\n }\n break;\n case 'Escape':\n setIsFocused(false);\n inputRef.current?.blur();\n break;\n }\n }, [displayedSuggestions, selectedIndex, query, showSuggestions, handleSearch, handleSuggestionSelect]);\n\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n }, []);\n\n const handleBlur = useCallback((e: React.FocusEvent) => {\n // Don't interfere if we're explicitly triggering a search\n if (isSearchingRef.current) {\n return;\n }\n \n // Delay to allow click events on suggestions to fire\n setTimeout(() => {\n if (!containerRef.current?.contains(document.activeElement)) {\n setIsFocused(false);\n setSelectedIndex(-1);\n }\n }, 200);\n }, []);\n\n const defaultRenderSuggestion = (suggestion: string, index: number) => (\n <div key={index}>\n {suggestion}\n </div>\n );\n\n const defaultRenderLoading = () => (\n <div style={{ padding: theme.spacing.medium, textAlign: 'center' }}>\n Loading suggestions...\n </div>\n );\n\n const searchBarTheme = customTheme || {};\n const isLoading = suggestionsLoading || searchLoading;\n // Only show suggestions list if:\n // 1. Input is focused\n // 2. Suggestions are enabled\n // 3. Query is long enough\n // 4. AND (we have suggestions to show OR we're currently loading suggestions)\n const hasSuggestions = displayedSuggestions.length > 0;\n const showSuggestionsList = isFocused && showSuggestions && query.length >= minQueryLength && (hasSuggestions || isLoading);\n\n // Get processing time from results\n const res = results as import('@seekora-ai/search-sdk').SearchResponse | null | undefined;\n const processingTime = (res as any)?.processingTimeMS \n || (res as any)?.data?.processingTimeMS \n || (res as any)?.data?.data?.processingTimeMS;\n\n return (\n <div\n ref={containerRef}\n className={clsx(searchBarTheme.container, className)}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n ...style,\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n className={clsx(\n searchBarTheme.input,\n isFocused && searchBarTheme.inputFocused\n )}\n style={{\n flex: 1,\n padding: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n fontFamily: theme.typography.fontFamily,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: isFocused ? theme.colors.focus : theme.colors.border,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n outline: 'none',\n ...(isFocused && {\n boxShadow: theme.shadows.small,\n }),\n }}\n />\n {processingTime !== undefined && (\n <span\n style={{\n marginLeft: theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.text,\n opacity: 0.7,\n whiteSpace: 'nowrap',\n }}\n >\n {processingTime}ms\n </span>\n )}\n \n {showSuggestionsList && (\n <div\n className={searchBarTheme.suggestionsContainer}\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: theme.spacing.small,\n backgroundColor: theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n boxShadow: theme.shadows.medium,\n maxHeight: '400px',\n overflowY: 'auto',\n zIndex: 1000,\n }}\n >\n {isLoading && (renderLoading ? renderLoading() : defaultRenderLoading())}\n \n {!isLoading && displayedSuggestions.length > 0 && (\n <>\n {displayedSuggestions.map((suggestion, index) => {\n const isSelected = index === selectedIndex;\n const renderFn = renderSuggestion || defaultRenderSuggestion;\n \n return (\n <div\n key={index}\n className={clsx(\n searchBarTheme.suggestionItem,\n isSelected && searchBarTheme.suggestionItemActive\n )}\n onClick={() => handleSuggestionSelect(suggestion.query)}\n onMouseEnter={() => setSelectedIndex(index)}\n style={{\n padding: theme.spacing.medium,\n cursor: 'pointer',\n backgroundColor: isSelected \n ? theme.colors.hover \n : 'transparent',\n color: theme.colors.text,\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n >\n {renderFn(suggestion.query, index)}\n </div>\n );\n })}\n </>\n )}\n \n {!isLoading && displayedSuggestions.length === 0 && query.length >= minQueryLength && (\n <div style={{ padding: theme.spacing.medium, textAlign: 'center', color: theme.colors.textSecondary }}>\n No suggestions found\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\n","/**\n * SearchResults Component\n * \n * Displays search results with customizable rendering\n * Includes keyboard navigation support (arrow keys, Enter to select)\n */\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { clsx } from 'clsx';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\nimport type { ResultItem, FieldMapping, ViewMode } from '@seekora-ai/ui-sdk-types';\n\nexport interface SearchResultsTheme {\n container?: string;\n header?: string;\n resultsList?: string;\n resultItem?: string;\n resultItemHover?: string;\n resultTitle?: string;\n resultDescription?: string;\n resultImage?: string;\n resultPrice?: string;\n emptyState?: string;\n loadingState?: string;\n errorState?: string;\n pagination?: string;\n}\n\nexport interface SearchResultsProps {\n results?: SearchResponse | null;\n loading?: boolean;\n error?: Error | null;\n onResultClick?: (result: ResultItem, index: number) => void;\n renderResult?: (result: ResultItem, index: number, isActive?: boolean) => React.ReactNode;\n renderEmpty?: () => React.ReactNode;\n renderLoading?: () => React.ReactNode;\n renderError?: (error: Error) => React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n theme?: SearchResultsTheme;\n itemsPerPage?: number;\n showPagination?: boolean;\n /** Display mode: 'list' (default), 'card', or 'grid' */\n viewMode?: ViewMode;\n /** Field mapping configuration for extracting data from results */\n fieldMapping?: FieldMapping;\n /** Function to extract results array from the response (if custom structure) */\n extractResults?: (response: any) => any[];\n /** Enable keyboard navigation (arrow keys, Enter to select) */\n enableKeyboardNavigation?: boolean;\n /** Auto-focus the results container */\n autoFocus?: boolean;\n}\n\n// Helper function to get nested value from object using dot notation\nconst getNestedValue = (obj: any, path: string): any => {\n if (!path) return undefined;\n return path.split('.').reduce((current, key) => current?.[key], obj);\n};\n\n// Helper function to format price\nconst formatPrice = (value: any, currency: string = '₹'): string | undefined => {\n if (value === undefined || value === null) return undefined;\n if (typeof value === 'number') return `${currency}${value}`;\n if (typeof value === 'string') {\n const num = parseFloat(value);\n if (!isNaN(num)) return `${currency}${num}`;\n return value;\n }\n return String(value);\n};\n\nexport const SearchResults: React.FC<SearchResultsProps> = ({\n results: resultsProp,\n loading: loadingProp,\n error: errorProp,\n onResultClick,\n renderResult,\n renderEmpty,\n renderLoading,\n renderError,\n className,\n style,\n theme: customTheme,\n itemsPerPage = 20,\n showPagination = false,\n viewMode = 'list',\n fieldMapping,\n extractResults,\n enableKeyboardNavigation = true,\n autoFocus = false,\n}) => {\n const { theme, client, enableAnalytics } = useSearchContext();\n const { results: stateResults, loading: stateLoading, error: stateError, currentPage, itemsPerPage: stateItemsPerPage } = useSearchState();\n const searchResultsTheme = customTheme || {};\n \n // Keyboard navigation state\n const [activeIndex, setActiveIndex] = useState(-1);\n const containerRef = useRef<HTMLDivElement>(null);\n \n // Use props if provided, otherwise use state from state manager\n const results = resultsProp !== undefined ? resultsProp : stateResults;\n const loading = loadingProp !== undefined ? loadingProp : stateLoading;\n const error = errorProp !== undefined ? errorProp : stateError;\n\n // Reset active index when results change\n useEffect(() => {\n setActiveIndex(-1);\n }, [results]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current && enableKeyboardNavigation) {\n const activeEl = containerRef.current.querySelector(`[data-result-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n activeEl.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n }, [activeIndex, enableKeyboardNavigation]);\n\n // Keyboard navigation handler\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!enableKeyboardNavigation) return;\n\n // We need to get the result count dynamically\n const resultElements = containerRef.current?.querySelectorAll('[data-result-index]');\n const maxIndex = resultElements ? resultElements.length - 1 : -1;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setActiveIndex(prev => Math.min(prev + 1, maxIndex));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setActiveIndex(prev => Math.max(prev - 1, -1));\n break;\n case 'Enter':\n e.preventDefault();\n if (activeIndex >= 0) {\n // Trigger click on active item\n const activeEl = containerRef.current?.querySelector(`[data-result-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n activeEl.click();\n }\n }\n break;\n case 'Escape':\n setActiveIndex(-1);\n containerRef.current?.blur();\n break;\n case 'Home':\n e.preventDefault();\n setActiveIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setActiveIndex(maxIndex);\n break;\n }\n }, [enableKeyboardNavigation, activeIndex]);\n\n const defaultRenderResultList = (result: ResultItem, index: number, isActive: boolean = false) => {\n const handleClick = async () => {\n // Track analytics event if enabled\n if (enableAnalytics && result.id) {\n try {\n const results = resultsProp || stateResults;\n const state = { currentPage, itemsPerPage: stateItemsPerPage };\n \n // Calculate absolute position (1-based) accounting for pagination\n const absolutePosition = (state.currentPage - 1) * state.itemsPerPage + index + 1;\n \n // Build search context from current state and response\n const searchContext = results?.context || (results ? {\n query: '', // Will be filled from state if needed\n page: state.currentPage,\n } : undefined);\n \n console.log('🔵 SearchResults: Tracking analytics event', {\n resultId: result.id,\n resultIndex: index,\n absolutePosition,\n currentPage: state.currentPage,\n itemsPerPage: state.itemsPerPage,\n hasContext: !!searchContext,\n });\n \n await client.trackEvent?.({\n event_name: 'product_click',\n clicked_item_id: result.id,\n metadata: {\n result: result,\n position: absolutePosition,\n },\n }, searchContext as any);\n \n console.log('🟢 SearchResults: Analytics event tracked successfully', {\n resultId: result.id,\n position: absolutePosition,\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n console.error('SearchResults: Error tracking analytics event', {\n resultId: result.id,\n error: error.message,\n });\n }\n }\n \n // Call user-provided callback\n if (onResultClick) {\n onResultClick(result, index);\n }\n };\n\n return (\n <div\n key={result.id || index}\n data-result-index={index}\n className={clsx(searchResultsTheme.resultItem, isActive && searchResultsTheme.resultItemHover)}\n onClick={handleClick}\n onMouseEnter={() => enableKeyboardNavigation && setActiveIndex(index)}\n style={{\n padding: theme.spacing.medium,\n border: `1px solid ${theme.colors.border}`,\n borderBottom: `1px solid ${theme.colors.border}`,\n borderRadius: 0,\n marginBottom: 0,\n cursor: onResultClick ? 'pointer' : 'default',\n transition: theme.transitions?.normal || '250ms ease-in-out',\n backgroundColor: isActive ? theme.colors.hover : theme.colors.background,\n display: 'flex',\n alignItems: 'flex-start',\n gap: theme.spacing.medium,\n outline: isActive ? `2px solid ${theme.colors.primary}` : 'none',\n outlineOffset: '-2px',\n }}\n >\n {result.image && (\n <img\n src={result.image}\n alt={result.title}\n className={searchResultsTheme.resultImage}\n style={{\n width: '100px',\n height: '100px',\n objectFit: 'cover',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n flexShrink: 0,\n }}\n />\n )}\n \n <div style={{ flex: 1, minWidth: 0 }}>\n <h3\n className={searchResultsTheme.resultTitle}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n margin: 0,\n marginBottom: theme.spacing.small,\n color: theme.colors.text,\n }}\n >\n {result.title}\n </h3>\n \n {result.description && (\n <p\n className={searchResultsTheme.resultDescription}\n style={{\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n margin: 0,\n marginBottom: theme.spacing.small,\n opacity: 0.8,\n }}\n >\n {result.description}\n </p>\n )}\n \n {result.price && (\n <div\n className={searchResultsTheme.resultPrice}\n style={{\n fontSize: theme.typography.fontSize.medium,\n fontWeight: 'bold',\n color: theme.colors.primary,\n }}\n >\n {result.price}\n </div>\n )}\n </div>\n </div>\n );\n };\n\n const defaultRenderResultCard = (result: ResultItem, index: number, isActive: boolean = false) => {\n const handleClick = async () => {\n // Track analytics event if enabled\n if (enableAnalytics && result.id) {\n try {\n const results = resultsProp || stateResults;\n const state = { currentPage, itemsPerPage: stateItemsPerPage };\n \n // Calculate absolute position (1-based) accounting for pagination\n const absolutePosition = (state.currentPage - 1) * state.itemsPerPage + index + 1;\n \n // Build search context from current state and response\n const searchContext = results?.context || (results ? {\n query: '', // Will be filled from state if needed\n page: state.currentPage,\n } : undefined);\n \n console.log('🔵 SearchResults: Tracking analytics event', {\n resultId: result.id,\n resultIndex: index,\n absolutePosition,\n currentPage: state.currentPage,\n itemsPerPage: state.itemsPerPage,\n hasContext: !!searchContext,\n });\n \n await client.trackEvent?.({\n event_name: 'product_click',\n clicked_item_id: result.id,\n metadata: {\n result: result,\n position: absolutePosition,\n },\n }, searchContext as any);\n \n console.log('🟢 SearchResults: Analytics event tracked successfully', {\n resultId: result.id,\n position: absolutePosition,\n });\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n console.error('SearchResults: Error tracking analytics event', {\n resultId: result.id,\n error: error.message,\n });\n }\n }\n \n // Call user-provided callback\n if (onResultClick) {\n onResultClick(result, index);\n }\n };\n\n // Use widget view fields if available, otherwise fall back to regular fields\n const primaryText = (result as any).primaryText || result.title;\n const secondaryText = (result as any).secondaryText || result.description;\n const tertiaryText = (result as any).tertiaryText || result.price;\n const imageUrl = (result as any).imageUrl || result.image;\n\n return (\n <div\n key={result.id || index}\n data-result-index={index}\n className={clsx(searchResultsTheme.resultItem, isActive && searchResultsTheme.resultItemHover)}\n onClick={handleClick}\n onMouseEnter={() => enableKeyboardNavigation && setActiveIndex(index)}\n style={{\n border: `1px solid ${isActive ? theme.colors.primary : theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n overflow: 'hidden',\n cursor: onResultClick ? 'pointer' : 'default',\n transition: theme.transitions?.normal || '250ms ease-in-out',\n backgroundColor: isActive ? theme.colors.hover : theme.colors.background,\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing.medium,\n boxShadow: isActive ? theme.shadows.medium : theme.shadows.small,\n outline: isActive ? `2px solid ${theme.colors.primary}` : 'none',\n outlineOffset: '-2px',\n }}\n >\n {imageUrl && (\n <div\n style={{\n width: '100%',\n aspectRatio: '16/9',\n overflow: 'hidden',\n backgroundColor: theme.colors.hover,\n }}\n >\n <img\n src={imageUrl}\n alt={primaryText}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n />\n </div>\n )}\n \n <div style={{ padding: theme.spacing.medium }}>\n {primaryText && (\n <h3\n className={searchResultsTheme.resultTitle}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n margin: 0,\n marginBottom: theme.spacing.small,\n color: theme.colors.text,\n }}\n >\n {primaryText}\n </h3>\n )}\n \n {secondaryText && (\n <p\n className={searchResultsTheme.resultDescription}\n style={{\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n margin: 0,\n marginBottom: theme.spacing.small,\n opacity: 0.8,\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {secondaryText}\n </p>\n )}\n \n {tertiaryText && (\n <div\n className={searchResultsTheme.resultPrice}\n style={{\n fontSize: theme.typography.fontSize.medium,\n fontWeight: 'bold',\n color: theme.colors.primary,\n marginTop: 'auto',\n }}\n >\n {tertiaryText}\n </div>\n )}\n </div>\n </div>\n );\n };\n\n const defaultRenderResult = viewMode === 'card' || viewMode === 'grid' \n ? defaultRenderResultCard \n : defaultRenderResultList;\n\n const defaultRenderEmpty = () => (\n <div\n className={searchResultsTheme.emptyState}\n style={{\n padding: theme.spacing.large,\n textAlign: 'center',\n color: theme.colors.text,\n }}\n >\n No results found\n </div>\n );\n\n const defaultRenderLoading = () => (\n <div\n className={searchResultsTheme.loadingState}\n style={{\n padding: theme.spacing.large,\n textAlign: 'center',\n color: theme.colors.text,\n }}\n >\n Loading results...\n </div>\n );\n\n const defaultRenderError = (err: Error) => (\n <div\n className={searchResultsTheme.errorState}\n style={{\n padding: theme.spacing.large,\n textAlign: 'center',\n color: theme.colors.error,\n }}\n >\n Error: {err.message}\n </div>\n );\n\n // Extract results array from response\n let rawResults: any[] = [];\n \n if (extractResults) {\n // Use custom extraction function if provided\n rawResults = extractResults(results) || [];\n } else if (results) {\n const res = results as any;\n if (Array.isArray(res.results) && res.results.length > 0) {\n rawResults = res.results;\n } else if (res.data && Array.isArray(res.data.results) && res.data.results.length > 0) {\n rawResults = res.data.results;\n } else if (res.data?.data && Array.isArray(res.data.data.results) && res.data.data.results.length > 0) {\n rawResults = res.data.data.results;\n } else if (Array.isArray(results)) {\n rawResults = results;\n } else if (Array.isArray(res.results)) {\n rawResults = res.results;\n }\n }\n \n // Default field mapping (can be overridden via props)\n const defaultFieldMapping: FieldMapping = {\n title: 'document.productName',\n description: 'document.brandDesc',\n image: 'document.image',\n price: 'document.mrp',\n url: 'document.url',\n id: 'id',\n ...fieldMapping,\n };\n \n // Extract field value using dot notation path\n const extractField = (item: any, path: string | undefined): any => {\n if (!path) return undefined;\n return getNestedValue(item, path);\n };\n \n const resultItems: ResultItem[] = rawResults.map((item: any, index: number) => {\n try {\n // Widget view fields (when widget_mode is enabled) - check these first\n const primaryText = extractField(item, defaultFieldMapping.primaryText);\n const secondaryText = extractField(item, defaultFieldMapping.secondaryText);\n const tertiaryText = extractField(item, defaultFieldMapping.tertiaryText);\n const imageUrl = extractField(item, defaultFieldMapping.imageUrl);\n \n // Use primaryText as fallback for title if title is not found\n const title = extractField(item, defaultFieldMapping.title) || primaryText || 'Untitled';\n const description = extractField(item, defaultFieldMapping.description) || secondaryText;\n const image = extractField(item, defaultFieldMapping.image) || imageUrl;\n const priceValue = extractField(item, defaultFieldMapping.price) || tertiaryText;\n const url = extractField(item, defaultFieldMapping.url);\n const id = extractField(item, defaultFieldMapping.id) || String(index);\n \n // Format price if it's a number\n const price = priceValue !== undefined ? formatPrice(priceValue) : undefined;\n \n // Extract custom fields if configured\n const customFields: Record<string, any> = {};\n if (defaultFieldMapping.custom) {\n Object.entries(defaultFieldMapping.custom).forEach(([key, path]) => {\n customFields[key] = extractField(item, path);\n });\n }\n \n const resultItem: ResultItem = {\n id,\n title,\n description,\n url,\n image,\n price,\n metadata: item,\n ...customFields,\n // Widget view fields\n ...(primaryText && { primaryText }),\n ...(secondaryText && { secondaryText }),\n ...(tertiaryText && { tertiaryText }),\n ...(imageUrl && { imageUrl }),\n // Include original item for full access\n _raw: item,\n };\n \n return resultItem;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.warn('SearchResults: Error extracting result item', {\n index,\n error: error.message,\n item: item?.id || 'unknown',\n });\n // Return a fallback result item\n return {\n id: String(index),\n title: 'Error loading result',\n metadata: item,\n };\n }\n });\n\n // Determine container style based on view mode\n const containerStyle: React.CSSProperties = {\n ...style,\n };\n\n // Determine results list style based on view mode\n const resultsListStyle: React.CSSProperties = {\n ...(viewMode === 'grid' && {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: theme.spacing.medium,\n }),\n ...(viewMode === 'card' && {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: theme.spacing.medium,\n }),\n };\n\n // Log results extraction\n log.verbose('SearchResults: Extracted results', {\n rawResultsCount: rawResults.length,\n resultItemsCount: resultItems.length,\n viewMode,\n hasError: !!error,\n isLoading: loading,\n });\n\n if (loading) {\n log.verbose('SearchResults: Rendering loading state');\n return (\n <div className={clsx(searchResultsTheme.container, className)} style={style}>\n {renderLoading ? renderLoading() : defaultRenderLoading()}\n </div>\n );\n }\n\n if (error) {\n log.error('SearchResults: Rendering error state', {\n error: error.message,\n stack: error.stack,\n });\n return (\n <div className={clsx(searchResultsTheme.container, className)} style={style}>\n {renderError ? renderError(error) : defaultRenderError(error)}\n </div>\n );\n }\n\n if (!results || resultItems.length === 0) {\n log.verbose('SearchResults: No results to display');\n return (\n <div className={clsx(searchResultsTheme.container, className)} style={style}>\n {renderEmpty ? renderEmpty() : defaultRenderEmpty()}\n </div>\n );\n }\n\n const renderFn = renderResult || defaultRenderResult;\n\n return (\n <div\n ref={containerRef}\n className={clsx(searchResultsTheme.container, className)}\n style={containerStyle}\n tabIndex={enableKeyboardNavigation ? 0 : undefined}\n onKeyDown={handleKeyDown}\n role=\"listbox\"\n aria-label=\"Search results\"\n aria-activedescendant={activeIndex >= 0 ? `result-${activeIndex}` : undefined}\n >\n {(results?.totalResults !== undefined || results?.data?.total_results !== undefined) && resultItems.length > 0 && (\n <div\n className={searchResultsTheme.header}\n style={{\n marginBottom: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n }}\n >\n Found {results?.totalResults || results?.data?.total_results || 0} result{(results?.totalResults || results?.data?.total_results || 0) !== 1 ? 's' : ''}\n </div>\n )}\n \n {/* Keyboard navigation hint */}\n {enableKeyboardNavigation && resultItems.length > 0 && (\n <div\n style={{\n fontSize: '12px',\n color: theme.colors.text,\n opacity: 0.6,\n marginBottom: theme.spacing.small,\n display: 'flex',\n gap: '8px',\n alignItems: 'center',\n }}\n >\n <span style={{ \n display: 'inline-flex', \n gap: '4px',\n padding: '2px 6px',\n backgroundColor: theme.colors.hover,\n borderRadius: '4px',\n fontSize: '11px',\n }}>\n ↑↓ navigate\n </span>\n <span style={{ \n display: 'inline-flex', \n gap: '4px',\n padding: '2px 6px',\n backgroundColor: theme.colors.hover,\n borderRadius: '4px',\n fontSize: '11px',\n }}>\n ↵ select\n </span>\n </div>\n )}\n \n <div \n className={searchResultsTheme.resultsList}\n style={resultsListStyle}\n >\n {resultItems.map((result, index) => renderFn(result, index, index === activeIndex))}\n </div>\n </div>\n );\n};\n\n","/**\n * Stats Component\n * \n * Displays search statistics (total results, processing time, etc.)\n */\n\nimport React from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { clsx } from 'clsx';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\n\nexport interface StatsTheme {\n container?: string;\n text?: string;\n highlight?: string;\n separator?: string;\n}\n\nexport interface StatsProps {\n /** Search results response */\n results?: SearchResponse | null;\n /** Custom render function */\n renderStats?: (stats: {\n totalResults: number;\n processingTime?: number;\n query?: string;\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: StatsTheme;\n /** Show processing time */\n showProcessingTime?: boolean;\n /** Show query */\n showQuery?: boolean;\n /** Custom separator between stats */\n separator?: string;\n}\n\nexport const Stats: React.FC<StatsProps> = ({\n results,\n renderStats,\n className,\n style,\n theme: customTheme,\n showProcessingTime = false,\n showQuery = false,\n separator = ' • ',\n}) => {\n const { theme } = useSearchContext();\n const statsTheme = customTheme || {};\n\n // Extract stats from results\n const res = results as import('@seekora-ai/search-sdk').SearchResponse | null | undefined;\n const totalResults = (res as any)?.totalResults \n || (res as any)?.data?.total_results \n || (res as any)?.data?.data?.total_results \n || 0;\n\n const processingTime = (res as any)?.processingTimeMS \n || (res as any)?.data?.processingTimeMS \n || (res as any)?.data?.data?.processingTimeMS;\n\n const query = ((res as any)?.query ?? '') as string;\n\n const defaultRenderStats = () => {\n const parts: string[] = [];\n\n if (totalResults > 0) {\n parts.push(`${totalResults.toLocaleString()} result${totalResults !== 1 ? 's' : ''}`);\n } else {\n parts.push('No results');\n }\n\n if (showProcessingTime && processingTime !== undefined) {\n parts.push(`${processingTime}ms`);\n }\n\n if (showQuery && query) {\n parts.push(`for \"${query}\"`);\n }\n\n return (\n <div\n className={clsx(statsTheme.container, className)}\n style={{\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n ...style,\n }}\n >\n {parts.map((part, index) => (\n <span key={index}>\n {index > 0 && <span className={statsTheme.separator} style={{ margin: `0 ${theme.spacing.small}` }}>{separator}</span>}\n <span className={statsTheme.text}>{part}</span>\n </span>\n ))}\n </div>\n );\n };\n\n if (renderStats) {\n return (\n <div className={clsx(statsTheme.container, className)} style={style}>\n {renderStats({\n totalResults,\n processingTime,\n query,\n })}\n </div>\n );\n }\n\n return defaultRenderStats();\n};\n\n\n\n\n\n\n\n\n\n\n\n","/**\n * Pagination Component\n * \n * Displays pagination controls for search results\n */\n\nimport React from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\n\nexport interface PaginationTheme {\n container?: string;\n list?: string;\n item?: string;\n itemActive?: string;\n itemDisabled?: string;\n link?: string;\n ellipsis?: string;\n}\n\nexport interface PaginationProps {\n /** Search results response */\n results?: SearchResponse | null;\n /** Current page number (1-indexed) */\n currentPage?: number;\n /** Items per page */\n itemsPerPage?: number;\n /** Total number of pages */\n totalPages?: number;\n /** Callback when page changes */\n onPageChange?: (page: number) => void;\n /** Maximum number of page buttons to show */\n maxPages?: number;\n /** Show first/last page buttons */\n showFirstLast?: boolean;\n /** Show previous/next buttons */\n showPrevNext?: boolean;\n /** Custom render function for page button */\n renderPageButton?: (page: number, isActive: boolean, isDisabled: boolean) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: PaginationTheme;\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n results: resultsProp,\n currentPage: currentPageProp,\n itemsPerPage: itemsPerPageProp,\n totalPages: totalPagesProp,\n onPageChange,\n maxPages = 7,\n showFirstLast = true,\n showPrevNext = true,\n renderPageButton,\n className,\n style,\n theme: customTheme,\n}) => {\n const { theme } = useSearchContext();\n const { results: stateResults, currentPage: stateCurrentPage, setPage } = useSearchState();\n const paginationTheme = customTheme || {};\n\n // Use results from prop if provided, otherwise from state manager\n const results = resultsProp || stateResults;\n \n // Use currentPage from prop if provided, otherwise from state manager\n const currentPage = currentPageProp || stateCurrentPage;\n\n const res = results as SearchResponse | null | undefined;\n const itemsPerPage = itemsPerPageProp\n || (res as any)?.perPage\n || (res as any)?.data?.per_page\n || (res as any)?.data?.data?.per_page\n || 20;\n\n const totalResults = (res as any)?.totalResults \n || (res as any)?.data?.total_results \n || (res as any)?.data?.data?.total_results \n || 0;\n\n const totalPages = totalPagesProp \n || (res as any)?.totalPages\n || (res as any)?.data?.total_pages\n || (res as any)?.data?.data?.total_pages\n || Math.ceil(totalResults / itemsPerPage);\n\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || page === currentPage) return;\n \n // Update state manager (automatically triggers search)\n setPage(page);\n \n // Call callback for backwards compatibility\n if (onPageChange) {\n onPageChange(page);\n }\n };\n\n const defaultRenderPageButton = (page: number, isActive: boolean, isDisabled: boolean) => (\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={() => !isDisabled && handlePageChange(page)}\n className={clsx(\n paginationTheme.item,\n isActive && paginationTheme.itemActive,\n isDisabled && paginationTheme.itemDisabled\n )}\n style={{\n padding: theme.spacing.small,\n margin: `0 ${theme.spacing.small}`,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n backgroundColor: isActive ? theme.colors.primary : theme.colors.background,\n color: isActive ? '#fff' : theme.colors.text,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n fontSize: theme.typography.fontSize.medium,\n minWidth: '40px',\n ...(isActive && {\n fontWeight: 'bold',\n }),\n }}\n >\n {page}\n </button>\n );\n\n if (totalPages <= 1) {\n return null;\n }\n\n // Calculate page range to display\n const getPageNumbers = (): (number | 'ellipsis')[] => {\n const pages: (number | 'ellipsis')[] = [];\n const halfRange = Math.floor(maxPages / 2);\n\n let startPage = Math.max(1, currentPage - halfRange);\n let endPage = Math.min(totalPages, currentPage + halfRange);\n\n // Adjust if we're near the beginning or end\n if (currentPage <= halfRange) {\n endPage = Math.min(maxPages, totalPages);\n }\n if (currentPage >= totalPages - halfRange) {\n startPage = Math.max(1, totalPages - maxPages + 1);\n }\n\n if (showFirstLast && startPage > 1) {\n pages.push(1);\n if (startPage > 2) {\n pages.push('ellipsis');\n }\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n\n if (showFirstLast && endPage < totalPages) {\n if (endPage < totalPages - 1) {\n pages.push('ellipsis');\n }\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const pageNumbers = getPageNumbers();\n\n return (\n <nav\n className={clsx(paginationTheme.container, className)}\n style={style}\n aria-label=\"Pagination\"\n >\n <ul\n className={paginationTheme.list}\n style={{\n listStyle: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n margin: 0,\n flexWrap: 'wrap',\n }}\n >\n {showPrevNext && (\n <li>\n <button\n type=\"button\"\n disabled={currentPage === 1}\n onClick={() => handlePageChange(currentPage - 1)}\n className={clsx(\n paginationTheme.item,\n currentPage === 1 && paginationTheme.itemDisabled\n )}\n style={{\n padding: theme.spacing.small,\n margin: `0 ${theme.spacing.small}`,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n cursor: currentPage === 1 ? 'not-allowed' : 'pointer',\n opacity: currentPage === 1 ? 0.5 : 1,\n fontSize: theme.typography.fontSize.medium,\n }}\n aria-label=\"Previous page\"\n >\n Previous\n </button>\n </li>\n )}\n\n {pageNumbers.map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <li key={`ellipsis-${index}`}>\n <span\n className={paginationTheme.ellipsis}\n style={{\n padding: theme.spacing.small,\n margin: `0 ${theme.spacing.small}`,\n color: theme.colors.text,\n fontSize: theme.typography.fontSize.medium,\n }}\n >\n ...\n </span>\n </li>\n );\n }\n\n const isActive = page === currentPage;\n const isDisabled = false;\n\n return (\n <li key={page}>\n {renderPageButton\n ? renderPageButton(page, isActive, isDisabled)\n : defaultRenderPageButton(page, isActive, isDisabled)}\n </li>\n );\n })}\n\n {showPrevNext && (\n <li>\n <button\n type=\"button\"\n disabled={currentPage === totalPages}\n onClick={() => handlePageChange(currentPage + 1)}\n className={clsx(\n paginationTheme.item,\n currentPage === totalPages && paginationTheme.itemDisabled\n )}\n style={{\n padding: theme.spacing.small,\n margin: `0 ${theme.spacing.small}`,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n cursor: currentPage === totalPages ? 'not-allowed' : 'pointer',\n opacity: currentPage === totalPages ? 0.5 : 1,\n fontSize: theme.typography.fontSize.medium,\n }}\n aria-label=\"Next page\"\n >\n Next\n </button>\n </li>\n )}\n </ul>\n </nav>\n );\n};\n\n","/**\n * SortBy Component\n * \n * Displays sort options for search results\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport React, { useEffect } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface SortOption {\n value: string;\n label: string;\n}\n\nexport interface SortByTheme {\n container?: string;\n select?: string;\n option?: string;\n}\n\nexport interface SortByProps {\n /** Available sort options */\n options: SortOption[];\n /** Current sort value (controlled mode - overrides StateManager) */\n value?: string;\n /** Default sort value */\n defaultValue?: string;\n /** Callback when sort changes */\n onSortChange?: (value: string) => void;\n /** Custom render function for select */\n renderSelect?: (props: {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n options: SortOption[];\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: SortByTheme;\n /** Placeholder text */\n placeholder?: string;\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n}\n\nexport const SortBy: React.FC<SortByProps> = ({\n options,\n value: valueProp,\n defaultValue,\n onSortChange,\n renderSelect,\n className,\n style,\n theme: customTheme,\n placeholder = 'Sort by...',\n syncWithState = true,\n}) => {\n const { theme } = useSearchContext();\n const { sortBy: stateManagerSortBy, setSortBy } = useSearchState();\n const sortByTheme = customTheme || {};\n \n // Initialize with defaultValue or first option\n const [internalValue, setInternalValue] = React.useState(\n defaultValue || options[0]?.value || ''\n );\n\n // Sync with StateManager on mount if defaultValue is set\n useEffect(() => {\n if (syncWithState && defaultValue && !stateManagerSortBy) {\n setSortBy(defaultValue, false); // Don't trigger search on initial sync\n }\n }, []);\n\n // Determine the current value: controlled prop > StateManager > internal\n const value = valueProp !== undefined \n ? valueProp \n : (syncWithState && stateManagerSortBy) \n ? stateManagerSortBy \n : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newValue = e.target.value;\n setInternalValue(newValue);\n \n // Update StateManager (automatically triggers search)\n if (syncWithState) {\n setSortBy(newValue);\n }\n \n // Call callback for backwards compatibility\n if (onSortChange) {\n onSortChange(newValue);\n }\n };\n\n const defaultRenderSelect = () => (\n <select\n value={value}\n onChange={handleChange}\n className={clsx(sortByTheme.select, className)}\n style={{\n padding: theme.spacing.small,\n paddingRight: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n cursor: 'pointer',\n outline: 'none',\n ...style,\n }}\n aria-label=\"Sort results\"\n >\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n className={sortByTheme.option}\n >\n {option.label}\n </option>\n ))}\n </select>\n );\n\n if (renderSelect) {\n return (\n <div className={clsx(sortByTheme.container, className)} style={style}>\n {renderSelect({\n value,\n onChange: handleChange,\n options,\n })}\n </div>\n );\n }\n\n return defaultRenderSelect();\n};\n\n","/**\n * Facets Component\n * \n * Displays facet filters for search results\n */\n\nimport React, { useState } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { clsx } from 'clsx';\nimport type { SearchResponse } from '@seekora-ai/search-sdk';\n\nexport interface FacetItem {\n value: string;\n count: number;\n selected?: boolean;\n}\n\nexport interface Facet {\n field: string;\n label?: string;\n items: FacetItem[];\n}\n\nexport interface FacetsTheme {\n container?: string;\n facet?: string;\n facetHeader?: string;\n facetTitle?: string;\n facetList?: string;\n facetItem?: string;\n facetItemActive?: string;\n facetItemCount?: string;\n facetItemLabel?: string;\n checkbox?: string;\n}\n\nexport interface FacetsProps {\n /** Search results response */\n results?: SearchResponse | null;\n /** Custom facets data */\n facets?: Facet[];\n /** Callback when facet is selected/deselected */\n onFacetChange?: (field: string, value: string, selected: boolean) => void;\n /** Custom render function for facet */\n renderFacet?: (facet: Facet, index: number) => React.ReactNode;\n /** Custom render function for facet item */\n renderFacetItem?: (item: FacetItem, facet: Facet, index: number) => React.ReactNode;\n /** Maximum number of items to show per facet */\n maxItems?: number;\n /** Show \"Show more\" button */\n showMore?: boolean;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: FacetsTheme;\n}\n\nexport const Facets: React.FC<FacetsProps> = ({\n results: resultsProp,\n facets: facetsProp,\n onFacetChange,\n renderFacet,\n renderFacetItem,\n maxItems = 10,\n showMore = true,\n className,\n style,\n theme: customTheme,\n}) => {\n const { theme } = useSearchContext();\n const { results: stateResults, refinements, addRefinement, removeRefinement } = useSearchState();\n const facetsTheme = customTheme || {};\n const [expandedFacets, setExpandedFacets] = useState<Record<string, boolean>>({});\n \n // Use results from prop if provided, otherwise from state manager\n const results = resultsProp || stateResults;\n\n // Extract facets from results\n const extractFacets = (): Facet[] => {\n if (facetsProp) return facetsProp;\n\n // Try to get facets from various locations in the response\n // Primary location: data.facets (widget_mode response structure)\n const rawFacets = results?.data?.facets \n || results?.facets \n || results?.data?.data?.facets\n || null;\n\n log.verbose('Facets: Extracting facets', {\n hasResults: !!results,\n hasData: !!results?.data,\n rawFacets: rawFacets ? (Array.isArray(rawFacets) ? rawFacets.length : 'not array') : null,\n resultsKeys: results ? Object.keys(results) : [],\n dataKeys: results?.data ? Object.keys(results.data) : [],\n sampleFacet: rawFacets && Array.isArray(rawFacets) && rawFacets.length > 0 ? rawFacets[0] : null,\n });\n\n // Ensure rawFacets is an array before mapping\n if (!rawFacets || !Array.isArray(rawFacets)) {\n log.verbose('Facets: No facets found in response', {\n rawFacetsType: rawFacets ? typeof rawFacets : 'null',\n isArray: Array.isArray(rawFacets),\n resultsStructure: results ? JSON.stringify(Object.keys(results)) : 'null',\n dataStructure: results?.data ? JSON.stringify(Object.keys(results.data)) : 'null',\n });\n return [];\n }\n\n const extracted = rawFacets.map((facet: any) => {\n const fieldName = facet.field_name || facet.field;\n return {\n field: fieldName,\n label: facet.label || fieldName,\n items: Array.isArray(facet.counts) ? facet.counts.map((count: any) => ({\n value: count.value,\n count: count.count,\n selected: refinements.some(r => r.field === fieldName && r.value === count.value),\n })) : [],\n };\n });\n\n log.verbose('Facets: Extracted facets', {\n count: extracted.length,\n facets: extracted.map(f => ({ field: f.field, itemsCount: f.items.length })),\n });\n\n return extracted;\n };\n\n const facets = extractFacets();\n\n const handleFacetToggle = (field: string, value: string, selected: boolean) => {\n const newSelected = !selected;\n log.verbose('Facets: Facet toggled', { field, value, selected: newSelected });\n \n // Update state manager (automatically triggers search)\n if (newSelected) {\n addRefinement(field, value);\n } else {\n removeRefinement(field, value);\n }\n \n // Call callback for backwards compatibility\n if (onFacetChange) {\n try {\n onFacetChange(field, value, newSelected);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('Facets: Error in onFacetChange callback', {\n field,\n value,\n selected: newSelected,\n error: error.message,\n });\n }\n }\n };\n\n const toggleFacetExpansion = (field: string) => {\n setExpandedFacets((prev) => ({\n ...prev,\n [field]: !prev[field],\n }));\n };\n\n const defaultRenderFacetItem = (item: FacetItem, facet: Facet, index: number) => {\n const isExpanded = expandedFacets[facet.field] || index < maxItems;\n\n if (!isExpanded && index >= maxItems) {\n return null;\n }\n\n return (\n <div\n key={`${facet.field}-${item.value}`}\n className={clsx(\n facetsTheme.facetItem,\n (refinements.some(r => r.field === facet.field && r.value === item.value) || item.selected) && facetsTheme.facetItemActive\n )}\n onClick={() => handleFacetToggle(facet.field, item.value, item.selected || false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing.small,\n cursor: 'pointer',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n marginBottom: theme.spacing.small,\n backgroundColor: (refinements.some(r => r.field === facet.field && r.value === item.value) || item.selected) ? theme.colors.hover : 'transparent',\n transition: 'background-color 0.2s ease',\n }}\n >\n <input\n type=\"checkbox\"\n checked={refinements.some(r => r.field === facet.field && r.value === item.value) || item.selected || false}\n onChange={() => handleFacetToggle(facet.field, item.value, item.selected || false)}\n className={facetsTheme.checkbox}\n style={{\n marginRight: theme.spacing.small,\n cursor: 'pointer',\n }}\n aria-label={`Filter by ${item.value}`}\n />\n <span\n className={facetsTheme.facetItemLabel}\n style={{\n flex: 1,\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n }}\n >\n {item.value}\n </span>\n <span\n className={facetsTheme.facetItemCount}\n style={{\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.textSecondary || theme.colors.text,\n opacity: 0.7,\n marginLeft: theme.spacing.small,\n }}\n >\n ({item.count})\n </span>\n </div>\n );\n };\n\n const defaultRenderFacet = (facet: Facet, index: number) => {\n const isExpanded = expandedFacets[facet.field] || false;\n const visibleItems = isExpanded ? facet.items : facet.items.slice(0, maxItems);\n const hasMore = facet.items.length > maxItems;\n\n return (\n <div\n key={facet.field}\n className={facetsTheme.facet}\n style={{\n marginBottom: theme.spacing.large,\n padding: theme.spacing.medium,\n backgroundColor: theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n }}\n >\n <h3\n className={facetsTheme.facetTitle}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n margin: 0,\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {facet.label || facet.field}\n </h3>\n <div className={facetsTheme.facetList}>\n {visibleItems.map((item, itemIndex) => {\n const actualIndex = isExpanded ? itemIndex : itemIndex;\n return renderFacetItem\n ? renderFacetItem(item, facet, actualIndex)\n : defaultRenderFacetItem(item, facet, actualIndex);\n })}\n </div>\n {showMore && hasMore && !isExpanded && (\n <button\n type=\"button\"\n onClick={() => toggleFacetExpansion(facet.field)}\n style={{\n marginTop: theme.spacing.small,\n padding: theme.spacing.small,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.primary,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Show more ({facet.items.length - maxItems} more)\n </button>\n )}\n {isExpanded && hasMore && (\n <button\n type=\"button\"\n onClick={() => toggleFacetExpansion(facet.field)}\n style={{\n marginTop: theme.spacing.small,\n padding: theme.spacing.small,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.primary,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Show less\n </button>\n )}\n </div>\n );\n };\n\n if (facets.length === 0) {\n log.verbose('Facets: No facets to display', {\n hasResults: !!results,\n resultsType: results ? typeof results : 'null',\n });\n // Return a placeholder instead of null for debugging\n if (process.env.NODE_ENV === 'development') {\n return (\n <div style={{ padding: theme.spacing.small, color: theme.colors.textSecondary, fontSize: theme.typography.fontSize.small }}>\n No facets available\n </div>\n );\n }\n return null;\n }\n\n return (\n <div\n className={clsx(facetsTheme.container, className)}\n style={style}\n >\n {facets.map((facet, index) => {\n return renderFacet\n ? renderFacet(facet, index)\n : defaultRenderFacet(facet, index);\n })}\n </div>\n );\n};\n\n","/**\n * CurrentRefinements Component\n * \n * Displays currently active filters/refinements with ability to clear them\n */\n\nimport React from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { clsx } from 'clsx';\n\nexport interface Refinement {\n field: string;\n label?: string;\n value: string;\n displayValue?: string;\n}\n\nexport interface CurrentRefinementsTheme {\n container?: string;\n list?: string;\n item?: string;\n label?: string;\n value?: string;\n clearButton?: string;\n clearAllButton?: string;\n}\n\nexport interface CurrentRefinementsProps {\n /** Current refinements */\n refinements?: Refinement[];\n /** Callback when a refinement is cleared */\n onRefinementClear?: (field: string, value: string) => void;\n /** Callback when all refinements are cleared */\n onClearAll?: () => void;\n /** Custom render function for refinement */\n renderRefinement?: (refinement: Refinement, index: number) => React.ReactNode;\n /** Show \"Clear all\" button */\n showClearAll?: boolean;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: CurrentRefinementsTheme;\n}\n\nexport const CurrentRefinements: React.FC<CurrentRefinementsProps> = ({\n refinements = [],\n onRefinementClear,\n onClearAll,\n renderRefinement,\n showClearAll = true,\n className,\n style,\n theme: customTheme,\n}) => {\n const { theme } = useSearchContext();\n const refinementsTheme = customTheme || {};\n\n const handleClear = (field: string, value: string) => {\n if (onRefinementClear) {\n onRefinementClear(field, value);\n }\n };\n\n const handleClearAll = () => {\n if (onClearAll) {\n onClearAll();\n }\n };\n\n const defaultRenderRefinement = (refinement: Refinement, index: number) => (\n <div\n key={`${refinement.field}-${refinement.value}-${index}`}\n className={refinementsTheme.item}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n margin: `0 ${theme.spacing.small} ${theme.spacing.small} 0`,\n backgroundColor: theme.colors.hover,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n fontSize: theme.typography.fontSize.small,\n }}\n >\n <span\n className={refinementsTheme.label}\n style={{\n marginRight: theme.spacing.small,\n color: theme.colors.text,\n fontWeight: '500',\n }}\n >\n {refinement.label || refinement.field}:\n </span>\n <span\n className={refinementsTheme.value}\n style={{\n marginRight: theme.spacing.small,\n color: theme.colors.text,\n }}\n >\n {refinement.displayValue || refinement.value}\n </span>\n <button\n type=\"button\"\n onClick={() => handleClear(refinement.field, refinement.value)}\n className={refinementsTheme.clearButton}\n style={{\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.text,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.medium,\n padding: 0,\n marginLeft: theme.spacing.small,\n width: '20px',\n height: '20px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '50%',\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n aria-label={`Clear ${refinement.label || refinement.field}: ${refinement.value}`}\n >\n ×\n </button>\n </div>\n );\n\n if (refinements.length === 0) {\n return null;\n }\n\n return (\n <div\n className={clsx(refinementsTheme.container, className)}\n style={style}\n >\n <div\n className={refinementsTheme.list}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n marginBottom: showClearAll ? theme.spacing.medium : 0,\n }}\n >\n {refinements.map((refinement, index) => {\n return renderRefinement\n ? renderRefinement(refinement, index)\n : defaultRenderRefinement(refinement, index);\n })}\n </div>\n {showClearAll && refinements.length > 1 && (\n <button\n type=\"button\"\n onClick={handleClearAll}\n className={refinementsTheme.clearAllButton}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n textDecoration: 'underline',\n }}\n >\n Clear all filters\n </button>\n )}\n </div>\n );\n};\n\n","/**\n * ClearRefinements Component\n * \n * A standalone button to clear all active refinements/filters\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport React, { useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface ClearRefinementsTheme {\n root?: string;\n button?: string;\n buttonDisabled?: string;\n}\n\nexport interface ClearRefinementsProps {\n /** Button text when there are refinements to clear */\n clearsQuery?: boolean;\n /** Whether clicking should also clear the search query */\n resetLabel?: string;\n /** Button text shown when there are no refinements */\n disabledLabel?: string;\n /** Fields to include (if not specified, all fields are included) */\n includedFields?: string[];\n /** Fields to exclude from clearing */\n excludedFields?: string[];\n /** Callback when refinements are cleared */\n onClear?: () => void;\n /** Custom render function */\n renderButton?: (props: {\n canClear: boolean;\n onClick: () => void;\n disabled: boolean;\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: ClearRefinementsTheme;\n /** Whether to hide when there are no refinements */\n hideWhenEmpty?: boolean;\n}\n\nexport const ClearRefinements: React.FC<ClearRefinementsProps> = ({\n clearsQuery = false,\n resetLabel = 'Clear all filters',\n disabledLabel = 'No filters applied',\n includedFields,\n excludedFields = [],\n onClear,\n renderButton,\n className,\n style,\n theme: customTheme,\n hideWhenEmpty = false,\n}) => {\n const { theme } = useSearchContext();\n const { query, refinements, clearRefinements, setQuery, removeRefinement } = useSearchState();\n const clearTheme = customTheme || {};\n\n // Filter refinements based on included/excluded fields\n const relevantRefinements = useMemo(() => {\n return refinements.filter(r => {\n if (excludedFields.includes(r.field)) return false;\n if (includedFields && !includedFields.includes(r.field)) return false;\n return true;\n });\n }, [refinements, includedFields, excludedFields]);\n\n const canClear = relevantRefinements.length > 0 || (clearsQuery && query.length > 0);\n\n const handleClick = () => {\n if (!canClear) return;\n\n // Clear relevant refinements\n if (includedFields || excludedFields.length > 0) {\n // Clear only specific refinements\n relevantRefinements.forEach(r => {\n removeRefinement(r.field, r.value, false);\n });\n // Trigger search after all removals\n if (relevantRefinements.length > 0) {\n clearRefinements(false); // This will trigger the search\n }\n } else {\n // Clear all refinements\n clearRefinements(!clearsQuery); // Trigger search if not also clearing query\n }\n\n // Clear query if requested\n if (clearsQuery && query.length > 0) {\n setQuery('', true);\n }\n\n // Call the callback\n if (onClear) {\n onClear();\n }\n };\n\n // Hide when empty if requested\n if (hideWhenEmpty && !canClear) {\n return null;\n }\n\n // Custom render function\n if (renderButton) {\n return (\n <div className={clsx(clearTheme.root, className)} style={style}>\n {renderButton({\n canClear,\n onClick: handleClick,\n disabled: !canClear,\n })}\n </div>\n );\n }\n\n return (\n <div className={clsx(clearTheme.root, className)} style={style}>\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={!canClear}\n className={clsx(\n clearTheme.button,\n !canClear && clearTheme.buttonDisabled\n )}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n backgroundColor: canClear ? theme.colors.primary : theme.colors.hover,\n color: canClear ? '#ffffff' : theme.colors.textSecondary,\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string' \n ? theme.borderRadius \n : theme.borderRadius.medium,\n cursor: canClear ? 'pointer' : 'not-allowed',\n opacity: canClear ? 1 : 0.6,\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n aria-label={canClear ? resetLabel : disabledLabel}\n >\n {canClear ? resetLabel : disabledLabel}\n </button>\n </div>\n );\n};\n","/**\n * SearchLayout Component\n * \n * Provides a layout structure for search interfaces with sidebar and main content\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { clsx } from 'clsx';\n\nexport interface SearchLayoutTheme {\n container?: string;\n sidebar?: string;\n main?: string;\n header?: string;\n footer?: string;\n}\n\nexport interface SearchLayoutProps {\n /** Content to render in the sidebar (filters, facets, etc.) */\n sidebar?: React.ReactNode;\n /** Content to render in the main area (results, etc.) */\n children: React.ReactNode;\n /** Header content */\n header?: React.ReactNode;\n /** Footer content */\n footer?: React.ReactNode;\n /** Sidebar width */\n sidebarWidth?: string;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: SearchLayoutTheme;\n /** Show sidebar on mobile */\n showSidebarOnMobile?: boolean;\n}\n\nexport const SearchLayout: React.FC<SearchLayoutProps> = ({\n sidebar,\n children,\n header,\n footer,\n sidebarWidth = '300px',\n className,\n style,\n theme: customTheme,\n showSidebarOnMobile = false,\n}) => {\n const { theme } = useSearchContext();\n const layoutTheme = customTheme || {};\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n \n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n return (\n <div\n className={clsx(layoutTheme.container, className)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n backgroundColor: theme.colors.background,\n ...style,\n }}\n >\n {header && (\n <header\n className={layoutTheme.header}\n style={{\n padding: theme.spacing.medium,\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n }}\n >\n {header}\n </header>\n )}\n\n <div\n style={{\n display: 'flex',\n flex: 1,\n gap: theme.spacing.large,\n padding: theme.spacing.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n }}\n >\n {sidebar && (!isMobile || showSidebarOnMobile) && (\n <aside\n className={layoutTheme.sidebar}\n style={{\n width: sidebarWidth,\n minWidth: sidebarWidth,\n }}\n >\n {sidebar}\n </aside>\n )}\n\n <main\n className={layoutTheme.main}\n style={{\n flex: 1,\n minWidth: 0, // Prevents flex item from overflowing\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n }}\n >\n {children}\n </main>\n </div>\n\n {footer && (\n <footer\n className={layoutTheme.footer}\n style={{\n padding: theme.spacing.medium,\n borderTop: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n }}\n >\n {footer}\n </footer>\n )}\n </div>\n );\n};\n\n\n\n","/**\n * RangeInput Component\n * \n * Displays a range input for filtering numeric values (e.g., price range)\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport React, { useState, useCallback, useEffect, useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface RangeInputTheme {\n container?: string;\n label?: string;\n inputGroup?: string;\n input?: string;\n separator?: string;\n button?: string;\n}\n\nexport interface RangeInputProps {\n /** Field name for the range filter */\n field: string;\n /** Label for the range input */\n label?: string;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Current minimum value (controlled mode) */\n currentMin?: number;\n /** Current maximum value (controlled mode) */\n currentMax?: number;\n /** Step value for inputs */\n step?: number;\n /** Callback when range changes */\n onRangeChange?: (min: number | undefined, max: number | undefined) => void;\n /** Custom render function */\n renderRangeInput?: (props: {\n min: number | undefined;\n max: number | undefined;\n onMinChange: (value: number | undefined) => void;\n onMaxChange: (value: number | undefined) => void;\n onApply: () => void;\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: RangeInputTheme;\n /** Show apply button */\n showApplyButton?: boolean;\n /** Placeholder text for inputs */\n placeholder?: {\n min?: string;\n max?: string;\n };\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n}\n\n/**\n * Helper to parse range values from refinements\n */\nconst parseRangeFromRefinements = (\n refinements: Array<{ field: string; value: string }>,\n field: string\n): { min?: number; max?: number } => {\n let min: number | undefined;\n let max: number | undefined;\n \n refinements.forEach(r => {\n if (r.field === field) {\n // Parse >=X format\n const minMatch = r.value.match(/^>=(\\d+(?:\\.\\d+)?)$/);\n if (minMatch) {\n min = parseFloat(minMatch[1]);\n }\n // Parse <=X format\n const maxMatch = r.value.match(/^<=(\\d+(?:\\.\\d+)?)$/);\n if (maxMatch) {\n max = parseFloat(maxMatch[1]);\n }\n }\n });\n \n return { min, max };\n};\n\nexport const RangeInput: React.FC<RangeInputProps> = ({\n field,\n label,\n min,\n max,\n currentMin: currentMinProp,\n currentMax: currentMaxProp,\n step = 1,\n onRangeChange,\n renderRangeInput,\n className,\n style,\n theme: customTheme,\n showApplyButton = true,\n placeholder = { min: 'Min', max: 'Max' },\n syncWithState = true,\n}) => {\n const { theme } = useSearchContext();\n const { refinements, addRefinement, removeRefinement } = useSearchState();\n const rangeInputTheme = customTheme || {};\n \n // Parse current range from StateManager\n const stateRange = useMemo(() => {\n if (!syncWithState) return { min: undefined, max: undefined };\n return parseRangeFromRefinements(refinements, field);\n }, [syncWithState, refinements, field]);\n \n const [internalMin, setInternalMin] = useState<number | undefined>(currentMinProp ?? stateRange.min);\n const [internalMax, setInternalMax] = useState<number | undefined>(currentMaxProp ?? stateRange.max);\n const [appliedMin, setAppliedMin] = useState<number | undefined>(currentMinProp ?? stateRange.min);\n const [appliedMax, setAppliedMax] = useState<number | undefined>(currentMaxProp ?? stateRange.max);\n\n // Sync internal state when StateManager refinements change\n useEffect(() => {\n if (syncWithState) {\n if (stateRange.min !== appliedMin || stateRange.max !== appliedMax) {\n setInternalMin(stateRange.min);\n setInternalMax(stateRange.max);\n setAppliedMin(stateRange.min);\n setAppliedMax(stateRange.max);\n }\n }\n }, [syncWithState, stateRange.min, stateRange.max]);\n\n const currentMin = currentMinProp !== undefined ? currentMinProp : internalMin;\n const currentMax = currentMaxProp !== undefined ? currentMaxProp : internalMax;\n\n // Helper to update StateManager with range refinements\n const updateStateManager = useCallback((minVal: number | undefined, maxVal: number | undefined) => {\n if (!syncWithState) return;\n \n // Remove existing range refinements for this field\n refinements.forEach(r => {\n if (r.field === field) {\n removeRefinement(field, r.value, false); // Don't trigger search yet\n }\n });\n \n // Add new range refinements\n if (minVal !== undefined) {\n addRefinement(field, `>=${minVal}`, false); // Don't trigger search yet\n }\n if (maxVal !== undefined) {\n addRefinement(field, `<=${maxVal}`, true); // Trigger search on the last update\n } else if (minVal !== undefined) {\n // If only min is set, trigger search now\n addRefinement(field, `>=${minVal}`, true);\n }\n }, [syncWithState, field, refinements, addRefinement, removeRefinement]);\n\n const handleMinChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value === '' ? undefined : parseFloat(e.target.value);\n setInternalMin(value);\n if (!showApplyButton) {\n updateStateManager(value, currentMax);\n if (onRangeChange) {\n onRangeChange(value, currentMax);\n }\n }\n }, [currentMax, showApplyButton, onRangeChange, updateStateManager]);\n\n const handleMaxChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value === '' ? undefined : parseFloat(e.target.value);\n setInternalMax(value);\n if (!showApplyButton) {\n updateStateManager(currentMin, value);\n if (onRangeChange) {\n onRangeChange(currentMin, value);\n }\n }\n }, [currentMin, showApplyButton, onRangeChange, updateStateManager]);\n\n const handleApply = useCallback(() => {\n setAppliedMin(internalMin);\n setAppliedMax(internalMax);\n updateStateManager(internalMin, internalMax);\n if (onRangeChange) {\n onRangeChange(internalMin, internalMax);\n }\n }, [internalMin, internalMax, onRangeChange, updateStateManager]);\n\n const handleReset = useCallback(() => {\n setInternalMin(undefined);\n setInternalMax(undefined);\n setAppliedMin(undefined);\n setAppliedMax(undefined);\n \n // Clear refinements for this field from StateManager\n if (syncWithState) {\n refinements.forEach(r => {\n if (r.field === field) {\n removeRefinement(field, r.value, true);\n }\n });\n }\n \n if (onRangeChange) {\n onRangeChange(undefined, undefined);\n }\n }, [syncWithState, field, refinements, removeRefinement, onRangeChange]);\n\n const defaultRenderRangeInput = () => (\n <div\n className={clsx(rangeInputTheme.container, className)}\n style={style}\n >\n {label && (\n <label\n className={rangeInputTheme.label}\n style={{\n display: 'block',\n fontSize: theme.typography.fontSize.medium,\n fontWeight: 'bold',\n marginBottom: theme.spacing.small,\n color: theme.colors.text,\n }}\n >\n {label}\n </label>\n )}\n <div\n className={rangeInputTheme.inputGroup}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n }}\n >\n <input\n type=\"number\"\n min={min}\n max={max}\n step={step}\n value={currentMin !== undefined ? currentMin : ''}\n onChange={handleMinChange}\n placeholder={placeholder.min}\n className={clsx(rangeInputTheme.input)}\n style={{\n flex: 1,\n padding: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n outline: 'none',\n }}\n />\n <span\n className={rangeInputTheme.separator}\n style={{\n color: theme.colors.text,\n opacity: 0.7,\n }}\n >\n to\n </span>\n <input\n type=\"number\"\n min={min}\n max={max}\n step={step}\n value={currentMax !== undefined ? currentMax : ''}\n onChange={handleMaxChange}\n placeholder={placeholder.max}\n className={clsx(rangeInputTheme.input)}\n style={{\n flex: 1,\n padding: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n outline: 'none',\n }}\n />\n {showApplyButton && (\n <button\n type=\"button\"\n onClick={handleApply}\n className={rangeInputTheme.button}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n backgroundColor: theme.colors.primary,\n color: '#fff',\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n fontWeight: '500',\n }}\n >\n Apply\n </button>\n )}\n {(appliedMin !== undefined || appliedMax !== undefined || currentMin !== undefined || currentMax !== undefined) && (\n <button\n type=\"button\"\n onClick={handleReset}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n backgroundColor: 'transparent',\n color: theme.colors.text,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n }}\n >\n Reset\n </button>\n )}\n </div>\n </div>\n );\n\n if (renderRangeInput) {\n return (\n <div className={clsx(rangeInputTheme.container, className)} style={style}>\n {renderRangeInput({\n min: currentMin,\n max: currentMax,\n onMinChange: (value) => {\n setInternalMin(value);\n if (!showApplyButton && onRangeChange) {\n onRangeChange(value, currentMax);\n }\n },\n onMaxChange: (value) => {\n setInternalMax(value);\n if (!showApplyButton && onRangeChange) {\n onRangeChange(currentMin, value);\n }\n },\n onApply: handleApply,\n })}\n </div>\n );\n }\n\n return defaultRenderRangeInput();\n};\n\n\n\n","/**\n * HitsPerPage Component\n * \n * A dropdown to let users change the number of displayed hits per page\n * Integrates with SearchStateManager for automatic state sync\n */\n\nimport React, { useEffect } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface HitsPerPageItem {\n value: number;\n label: string;\n default?: boolean;\n}\n\nexport interface HitsPerPageTheme {\n root?: string;\n select?: string;\n option?: string;\n}\n\nexport interface HitsPerPageProps {\n /** Available items per page options */\n items: HitsPerPageItem[];\n /** Callback when hits per page changes */\n onHitsPerPageChange?: (value: number) => void;\n /** Custom render function for select */\n renderSelect?: (props: {\n value: number;\n onChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n items: HitsPerPageItem[];\n }) => React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: HitsPerPageTheme;\n /** Label text before the select */\n label?: string;\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n}\n\nexport const HitsPerPage: React.FC<HitsPerPageProps> = ({\n items,\n onHitsPerPageChange,\n renderSelect,\n className,\n style,\n theme: customTheme,\n label = 'Show',\n syncWithState = true,\n}) => {\n const { theme } = useSearchContext();\n const { itemsPerPage, setPage } = useSearchState();\n const { stateManager } = useSearchContext();\n const hitsPerPageTheme = customTheme || {};\n\n // Find the default item or first item\n const defaultItem = items.find(i => i.default) || items[0];\n const [internalValue, setInternalValue] = React.useState(defaultItem?.value || 10);\n\n // Initialize StateManager on mount if default is set\n useEffect(() => {\n if (syncWithState && defaultItem && itemsPerPage !== defaultItem.value) {\n stateManager.setItemsPerPage(defaultItem.value, false);\n }\n }, []);\n\n // Determine the current value from StateManager or internal\n const value = syncWithState ? itemsPerPage : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newValue = parseInt(e.target.value, 10);\n setInternalValue(newValue);\n\n // Update StateManager\n if (syncWithState) {\n stateManager.setItemsPerPage(newValue, false);\n // Reset to page 1 when changing items per page\n setPage(1, true);\n }\n\n // Call callback\n if (onHitsPerPageChange) {\n onHitsPerPageChange(newValue);\n }\n };\n\n // Custom render function\n if (renderSelect) {\n return (\n <div className={clsx(hitsPerPageTheme.root, className)} style={style}>\n {renderSelect({\n value,\n onChange: handleChange,\n items,\n })}\n </div>\n );\n }\n\n return (\n <div\n className={clsx(hitsPerPageTheme.root, className)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n ...style,\n }}\n >\n {label && (\n <label\n style={{\n fontSize: theme.typography.fontSize.medium,\n color: theme.colors.text,\n }}\n >\n {label}\n </label>\n )}\n <select\n value={value}\n onChange={handleChange}\n className={hitsPerPageTheme.select}\n style={{\n padding: theme.spacing.small,\n paddingRight: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n cursor: 'pointer',\n outline: 'none',\n }}\n aria-label=\"Results per page\"\n >\n {items.map((item) => (\n <option\n key={item.value}\n value={item.value}\n className={hitsPerPageTheme.option}\n >\n {item.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n","/**\n * InfiniteHits Component\n * \n * Displays search results with infinite scroll or \"Show More\" button\n * Accumulates results as user loads more pages\n */\n\nimport React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\nimport type { ResultItem, FieldMapping } from '@seekora-ai/ui-sdk-types';\n\nexport interface InfiniteHitsTheme {\n root?: string;\n list?: string;\n item?: string;\n loadMore?: string;\n loadMoreDisabled?: string;\n loading?: string;\n empty?: string;\n sentinel?: string;\n}\n\nexport interface InfiniteHitsProps {\n /** Custom render function for each hit */\n renderHit?: (hit: ResultItem, index: number) => React.ReactNode;\n /** Custom render for empty state */\n renderEmpty?: () => React.ReactNode;\n /** Custom render for loading state */\n renderLoading?: () => React.ReactNode;\n /** Custom render for \"Show More\" button */\n renderShowMore?: (props: {\n isLoading: boolean;\n isLastPage: boolean;\n onClick: () => void;\n }) => React.ReactNode;\n /** Whether to show the \"Show More\" button (default: true) */\n showMoreButton?: boolean;\n /** Whether to use infinite scroll with IntersectionObserver (default: false) */\n useInfiniteScroll?: boolean;\n /** Threshold for IntersectionObserver (default: 0.1) */\n scrollThreshold?: number;\n /** Field mapping for extracting data from hits */\n fieldMapping?: FieldMapping;\n /** Text for \"Show More\" button */\n showMoreLabel?: string;\n /** Text for loading state */\n loadingLabel?: string;\n /** Callback when a hit is clicked */\n onHitClick?: (hit: ResultItem, index: number) => void;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: InfiniteHitsTheme;\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n}\n\nexport const InfiniteHits: React.FC<InfiniteHitsProps> = ({\n renderHit,\n renderEmpty,\n renderLoading,\n renderShowMore,\n showMoreButton = true,\n useInfiniteScroll = false,\n scrollThreshold = 0.1,\n fieldMapping,\n showMoreLabel = 'Show more',\n loadingLabel = 'Loading...',\n onHitClick,\n className,\n style,\n theme: customTheme,\n syncWithState = true,\n}) => {\n const { theme, stateManager } = useSearchContext();\n const { results, loading, currentPage, setPage } = useSearchState();\n const infiniteHitsTheme = customTheme || {};\n \n // Accumulated hits across pages\n const [accumulatedHits, setAccumulatedHits] = useState<ResultItem[]>([]);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n const sentinelRef = useRef<HTMLDivElement>(null);\n const prevPageRef = useRef(currentPage);\n\n // Extract hits from results\n const extractHits = useCallback((response: any): ResultItem[] => {\n if (!response) return [];\n if (response.results) return response.results;\n if (response.hits) return response.hits;\n if (Array.isArray(response)) return response;\n return [];\n }, []);\n\n // Get current hits\n const currentHits = useMemo(() => extractHits(results), [results, extractHits]);\n\n // Calculate if we're on the last page\n const totalResults: number = results?.totalResults || (results as any)?.found || 0;\n const itemsPerPage: number = stateManager.getState().itemsPerPage || 10;\n const totalPages = Math.ceil(totalResults / itemsPerPage);\n const isLastPage = currentPage >= totalPages;\n\n // Accumulate hits when results change\n useEffect(() => {\n if (!currentHits.length) return;\n\n if (currentPage === 1) {\n // Reset accumulated hits on new search\n setAccumulatedHits(currentHits);\n } else if (currentPage > prevPageRef.current) {\n // Append new hits\n setAccumulatedHits(prev => [...prev, ...currentHits]);\n }\n \n prevPageRef.current = currentPage;\n setIsLoadingMore(false);\n }, [currentHits, currentPage]);\n\n // Reset when query changes\n useEffect(() => {\n if (currentPage === 1) {\n setAccumulatedHits(currentHits);\n prevPageRef.current = 1;\n }\n }, [results]);\n\n // Handle \"Show More\" click\n const handleShowMore = useCallback(() => {\n if (isLastPage || loading || isLoadingMore) return;\n \n setIsLoadingMore(true);\n if (syncWithState) {\n setPage(currentPage + 1);\n }\n }, [isLastPage, loading, isLoadingMore, syncWithState, setPage, currentPage]);\n\n // Infinite scroll with IntersectionObserver\n useEffect(() => {\n if (!useInfiniteScroll || !sentinelRef.current) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting && !isLastPage && !loading && !isLoadingMore) {\n handleShowMore();\n }\n },\n { threshold: scrollThreshold }\n );\n\n observer.observe(sentinelRef.current);\n\n return () => observer.disconnect();\n }, [useInfiniteScroll, scrollThreshold, isLastPage, loading, isLoadingMore, handleShowMore]);\n\n // Extract field from hit\n const extractField = (hit: ResultItem, field: keyof FieldMapping): string => {\n if (!fieldMapping || !fieldMapping[field]) {\n return (hit as any)[field] || '';\n }\n const mappedField = fieldMapping[field] as string;\n return (hit as any)[mappedField] || '';\n };\n\n // Default hit renderer\n const defaultRenderHit = (hit: ResultItem, index: number) => {\n const title = extractField(hit, 'title') || hit.title || '';\n const description = extractField(hit, 'description') || hit.description || '';\n const image = extractField(hit, 'image') || hit.image || (hit as any).imageUrl || '';\n const price = extractField(hit, 'price') || hit.price;\n\n return (\n <div\n key={hit.id || index}\n className={infiniteHitsTheme.item}\n style={{\n display: 'flex',\n gap: theme.spacing.medium,\n padding: theme.spacing.medium,\n borderBottom: `1px solid ${theme.colors.border}`,\n cursor: onHitClick ? 'pointer' : 'default',\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n onClick={() => onHitClick?.(hit, index)}\n role={onHitClick ? 'button' : undefined}\n tabIndex={onHitClick ? 0 : undefined}\n >\n {image && (\n <img\n src={image}\n alt={title}\n style={{\n width: '80px',\n height: '80px',\n objectFit: 'cover',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.small,\n }}\n />\n )}\n <div style={{ flex: 1 }}>\n <h3\n style={{\n margin: 0,\n marginBottom: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n color: theme.colors.text,\n }}\n >\n {title}\n </h3>\n {description && (\n <p\n style={{\n margin: 0,\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.textSecondary,\n lineHeight: theme.typography.lineHeight?.normal || 1.5,\n }}\n >\n {description}\n </p>\n )}\n {price && (\n <span\n style={{\n display: 'inline-block',\n marginTop: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: theme.colors.primary,\n }}\n >\n ${typeof price === 'number' ? (price as number).toFixed(2) : price}\n </span>\n )}\n </div>\n </div>\n );\n };\n\n // Default empty state\n const defaultRenderEmpty = () => (\n <div\n className={infiniteHitsTheme.empty}\n style={{\n padding: theme.spacing.large,\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n No results found\n </div>\n );\n\n // Default loading state\n const defaultRenderLoading = () => (\n <div\n className={infiniteHitsTheme.loading}\n style={{\n padding: theme.spacing.medium,\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n {loadingLabel}\n </div>\n );\n\n // Default \"Show More\" button\n const defaultRenderShowMore = () => (\n <button\n type=\"button\"\n onClick={handleShowMore}\n disabled={isLastPage || isLoadingMore}\n className={clsx(\n infiniteHitsTheme.loadMore,\n (isLastPage || isLoadingMore) && infiniteHitsTheme.loadMoreDisabled\n )}\n style={{\n display: 'block',\n width: '100%',\n padding: theme.spacing.medium,\n marginTop: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n backgroundColor: isLastPage || isLoadingMore ? theme.colors.hover : theme.colors.primary,\n color: isLastPage || isLoadingMore ? theme.colors.textSecondary : '#ffffff',\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: isLastPage || isLoadingMore ? 'not-allowed' : 'pointer',\n transition: theme.transitions?.fast || '150ms ease-in-out',\n }}\n >\n {isLoadingMore ? loadingLabel : isLastPage ? 'No more results' : showMoreLabel}\n </button>\n );\n\n // Initial loading state\n if (loading && accumulatedHits.length === 0) {\n return (\n <div className={clsx(infiniteHitsTheme.root, className)} style={style}>\n {renderLoading ? renderLoading() : defaultRenderLoading()}\n </div>\n );\n }\n\n // Empty state\n if (!loading && accumulatedHits.length === 0) {\n return (\n <div className={clsx(infiniteHitsTheme.root, className)} style={style}>\n {renderEmpty ? renderEmpty() : defaultRenderEmpty()}\n </div>\n );\n }\n\n return (\n <div className={clsx(infiniteHitsTheme.root, className)} style={style}>\n <div className={infiniteHitsTheme.list}>\n {accumulatedHits.map((hit, index) =>\n renderHit ? renderHit(hit, index) : defaultRenderHit(hit, index)\n )}\n </div>\n\n {/* Show More button */}\n {showMoreButton && !useInfiniteScroll && !isLastPage && (\n renderShowMore\n ? renderShowMore({ isLoading: isLoadingMore, isLastPage, onClick: handleShowMore })\n : defaultRenderShowMore()\n )}\n\n {/* Loading indicator when loading more */}\n {isLoadingMore && (renderLoading ? renderLoading() : defaultRenderLoading())}\n\n {/* Sentinel for infinite scroll */}\n {useInfiniteScroll && !isLastPage && (\n <div\n ref={sentinelRef}\n className={infiniteHitsTheme.sentinel}\n style={{ height: '1px', visibility: 'hidden' }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n};\n","/**\n * Highlight Component\n * \n * Renders highlighted search result text with matching terms emphasized\n */\n\nimport React, { useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport {\n getHighlightedValue,\n parseHighlightedParts,\n parseQueryHighlightParts,\n HighlightPart,\n} from '@seekora-ai/ui-sdk-core';\n\nexport interface HighlightTheme {\n root?: string;\n highlighted?: string;\n nonHighlighted?: string;\n}\n\nexport interface HighlightProps {\n /** The search hit containing highlight data */\n hit: Record<string, any>;\n /** The attribute to highlight */\n attribute: string;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: HighlightTheme;\n /** Tag name for root element (default: 'span') */\n tagName?: keyof JSX.IntrinsicElements;\n /** Custom render for highlighted parts */\n renderHighlighted?: (part: HighlightPart, index: number) => React.ReactNode;\n /** Custom render for non-highlighted parts */\n renderNonHighlighted?: (part: HighlightPart, index: number) => React.ReactNode;\n /** Fallback query for client-side highlighting (when server highlight not available) */\n query?: string;\n}\n\nexport const Highlight: React.FC<HighlightProps> = ({\n hit,\n attribute,\n className,\n style,\n theme: customTheme,\n tagName: Tag = 'span',\n renderHighlighted,\n renderNonHighlighted,\n query,\n}) => {\n const { theme } = useSearchContext();\n const highlightTheme = customTheme || {};\n\n // Get highlighted value from hit\n const highlightedValue = useMemo(() => {\n return getHighlightedValue({\n hit,\n attribute,\n preTag: '<mark>',\n postTag: '</mark>',\n });\n }, [hit, attribute]);\n\n // Parse into parts\n const parts = useMemo((): HighlightPart[] => {\n // First try server-provided highlights\n const serverParts = parseHighlightedParts(highlightedValue, '<mark>', '</mark>');\n \n // If no highlights found and we have a query, do client-side highlighting\n if (serverParts.every((p: HighlightPart) => !p.isHighlighted) && query) {\n const plainValue = hit[attribute] || highlightedValue;\n return parseQueryHighlightParts(String(plainValue), query);\n }\n \n return serverParts;\n }, [highlightedValue, query, hit, attribute]);\n\n // Default highlight style\n const defaultHighlightStyle: React.CSSProperties = {\n backgroundColor: theme.colors.warning || '#fff59d',\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n padding: '0 2px',\n borderRadius: '2px',\n };\n\n // Render parts\n const renderedParts = parts.map((part: HighlightPart, index: number) => {\n if (part.isHighlighted) {\n if (renderHighlighted) {\n return <React.Fragment key={index}>{renderHighlighted(part, index)}</React.Fragment>;\n }\n return (\n <mark\n key={index}\n className={highlightTheme.highlighted}\n style={defaultHighlightStyle}\n >\n {part.value}\n </mark>\n );\n }\n\n if (renderNonHighlighted) {\n return <React.Fragment key={index}>{renderNonHighlighted(part, index)}</React.Fragment>;\n }\n return (\n <span key={index} className={highlightTheme.nonHighlighted}>\n {part.value}\n </span>\n );\n });\n\n return (\n <Tag className={className || highlightTheme.root} style={style}>\n {renderedParts}\n </Tag>\n );\n};\n\n/**\n * Snippet Component\n * \n * Renders a truncated, highlighted excerpt from search results\n */\n\nexport interface SnippetTheme extends HighlightTheme {\n ellipsis?: string;\n}\n\nexport interface SnippetProps extends Omit<HighlightProps, 'theme'> {\n /** Maximum length of snippet (default: 100) */\n maxLength?: number;\n /** Ellipsis to use when truncating (default: '...') */\n ellipsis?: string;\n /** Custom theme */\n theme?: SnippetTheme;\n}\n\nexport const Snippet: React.FC<SnippetProps> = ({\n hit,\n attribute,\n maxLength = 100,\n ellipsis = '...',\n className,\n style,\n theme: customTheme,\n tagName: Tag = 'span',\n renderHighlighted,\n renderNonHighlighted,\n query,\n}) => {\n const { theme } = useSearchContext();\n const snippetTheme = customTheme || {};\n\n // Get snippet or truncated highlighted value\n const snippetValue = useMemo(() => {\n // Check for server-provided snippet\n const snippetResult =\n hit._snippetResult?.[attribute]?.value ||\n hit.snippet_result?.[attribute]?.value ||\n hit._snippet?.[attribute] ||\n hit.snippet?.[attribute];\n\n if (snippetResult) {\n return snippetResult\n .replace(/<em>/g, '<mark>')\n .replace(/<\\/em>/g, '</mark>');\n }\n\n // Fall back to highlighted value, truncated\n let text = getHighlightedValue({\n hit,\n attribute,\n preTag: '<mark>',\n postTag: '</mark>',\n });\n\n // Remove tags for length calculation\n const plainText = text.replace(/<\\/?mark>/g, '');\n \n if (plainText.length > maxLength) {\n // Need to truncate while preserving tags\n const truncated = truncateWithTags(text, maxLength);\n return truncated + ellipsis;\n }\n\n return text;\n }, [hit, attribute, maxLength, ellipsis]);\n\n // Parse into parts\n const parts = useMemo((): HighlightPart[] => {\n const serverParts = parseHighlightedParts(snippetValue, '<mark>', '</mark>');\n \n if (serverParts.every((p: HighlightPart) => !p.isHighlighted) && query) {\n const plainValue = hit[attribute] || snippetValue;\n let text = String(plainValue);\n if (text.length > maxLength) {\n text = text.substring(0, maxLength) + ellipsis;\n }\n return parseQueryHighlightParts(text, query);\n }\n \n return serverParts;\n }, [snippetValue, query, hit, attribute, maxLength, ellipsis]);\n\n // Default highlight style\n const defaultHighlightStyle: React.CSSProperties = {\n backgroundColor: theme.colors.warning || '#fff59d',\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n padding: '0 2px',\n borderRadius: '2px',\n };\n\n // Render parts\n const renderedParts = parts.map((part: HighlightPart, index: number) => {\n if (part.isHighlighted) {\n if (renderHighlighted) {\n return <React.Fragment key={index}>{renderHighlighted(part, index)}</React.Fragment>;\n }\n return (\n <mark\n key={index}\n className={snippetTheme.highlighted}\n style={defaultHighlightStyle}\n >\n {part.value}\n </mark>\n );\n }\n\n if (renderNonHighlighted) {\n return <React.Fragment key={index}>{renderNonHighlighted(part, index)}</React.Fragment>;\n }\n return (\n <span key={index} className={snippetTheme.nonHighlighted}>\n {part.value}\n </span>\n );\n });\n\n return (\n <Tag className={className || snippetTheme.root} style={style}>\n {renderedParts}\n </Tag>\n );\n};\n\n/**\n * Truncate text while preserving HTML tags\n */\nfunction truncateWithTags(text: string, maxLength: number): string {\n let visibleLength = 0;\n let result = '';\n let inTag = false;\n \n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n \n if (char === '<') {\n inTag = true;\n result += char;\n } else if (char === '>') {\n inTag = false;\n result += char;\n } else if (inTag) {\n result += char;\n } else {\n if (visibleLength >= maxLength) {\n break;\n }\n result += char;\n visibleLength++;\n }\n }\n \n // Close any unclosed tags\n const openTags = result.match(/<mark>/g)?.length || 0;\n const closeTags = result.match(/<\\/mark>/g)?.length || 0;\n \n for (let i = 0; i < openTags - closeTags; i++) {\n result += '</mark>';\n }\n \n return result;\n}\n","/**\n * HierarchicalMenu Component\n * \n * Displays a hierarchical menu for nested category navigation\n * Example: Electronics > Phones > iPhone\n */\n\nimport React, { useState, useMemo, useCallback } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface HierarchicalMenuItem {\n label: string;\n value: string;\n count?: number;\n isRefined?: boolean;\n data?: HierarchicalMenuItem[];\n}\n\nexport interface HierarchicalMenuTheme {\n root?: string;\n list?: string;\n item?: string;\n itemSelected?: string;\n itemParent?: string;\n link?: string;\n label?: string;\n count?: string;\n showMore?: string;\n}\n\nexport interface HierarchicalMenuProps {\n /** Attributes for each level of hierarchy (e.g., ['category.lvl0', 'category.lvl1', 'category.lvl2']) */\n attributes: string[];\n /** Separator used in the hierarchical values (default: ' > ') */\n separator?: string;\n /** Maximum number of items to show per level (default: 10) */\n limit?: number;\n /** Show \"Show more\" button (default: true) */\n showMore?: boolean;\n /** Maximum items when \"Show more\" is clicked (default: 20) */\n showMoreLimit?: number;\n /** Custom render function for items */\n renderItem?: (item: HierarchicalMenuItem, level: number) => React.ReactNode;\n /** Callback when an item is selected */\n onSelect?: (value: string, level: number) => void;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: HierarchicalMenuTheme;\n /** Root path (for pre-selecting a category) */\n rootPath?: string | null;\n /** Sort by (default: 'name') */\n sortBy?: 'name' | 'count' | 'isRefined';\n /** Custom facet data (if not using StateManager) */\n items?: HierarchicalMenuItem[];\n}\n\nexport const HierarchicalMenu: React.FC<HierarchicalMenuProps> = ({\n attributes,\n separator = ' > ',\n limit = 10,\n showMore = true,\n showMoreLimit = 20,\n renderItem,\n onSelect,\n className,\n style,\n theme: customTheme,\n rootPath = null,\n sortBy = 'name',\n items: itemsProp,\n}) => {\n const { theme, stateManager } = useSearchContext();\n const { results, refinements, addRefinement, removeRefinement } = useSearchState();\n const hierarchicalTheme = customTheme || {};\n\n const [expanded, setExpanded] = useState<Record<number, boolean>>({});\n\n // Get hierarchical facet data from results\n const getHierarchicalData = useCallback((): HierarchicalMenuItem[] => {\n if (itemsProp) return itemsProp;\n if (!results) return [];\n\n // Try to find hierarchical facet data in various response formats\n const facets: Record<string, Record<string, number>> = (results as any).facets || (results as any).facet_counts || {};\n \n // Build hierarchy from flat facet data\n const rootAttribute = attributes[0];\n const rootFacet: Record<string, number> = facets[rootAttribute] || {};\n \n const items: HierarchicalMenuItem[] = [];\n \n Object.entries(rootFacet).forEach(([value, count]) => {\n const isRefined = refinements.some(\n r => r.field === rootAttribute && r.value === value\n );\n \n items.push({\n label: value,\n value,\n count: count as number,\n isRefined,\n data: getChildItems(value, 1),\n });\n });\n\n return items;\n }, [results, attributes, refinements, itemsProp]);\n\n // Get child items for a parent value\n const getChildItems = useCallback((parentValue: string, level: number): HierarchicalMenuItem[] => {\n if (level >= attributes.length) return [];\n if (!results) return [];\n\n const facets: Record<string, Record<string, number>> = (results as any).facets || (results as any).facet_counts || {};\n const attribute = attributes[level];\n const facet: Record<string, number> = facets[attribute] || {};\n\n const items: HierarchicalMenuItem[] = [];\n \n Object.entries(facet).forEach(([value, count]) => {\n // Check if this item belongs to the parent\n if (value.startsWith(parentValue + separator)) {\n const label = value.replace(parentValue + separator, '').split(separator)[0];\n const isRefined = refinements.some(\n r => r.field === attribute && r.value === value\n );\n \n // Only add direct children\n const remainingPath = value.replace(parentValue + separator, '');\n if (!remainingPath.includes(separator)) {\n items.push({\n label,\n value,\n count: count as number,\n isRefined,\n data: getChildItems(value, level + 1),\n });\n }\n }\n });\n\n return items;\n }, [results, attributes, separator, refinements]);\n\n // Get sorted and limited items\n const processedItems = useMemo(() => {\n let items = getHierarchicalData();\n\n // Sort\n items = [...items].sort((a, b) => {\n if (sortBy === 'count') {\n return (b.count || 0) - (a.count || 0);\n }\n if (sortBy === 'isRefined') {\n if (a.isRefined && !b.isRefined) return -1;\n if (!a.isRefined && b.isRefined) return 1;\n }\n return a.label.localeCompare(b.label);\n });\n\n return items;\n }, [getHierarchicalData, sortBy]);\n\n // Handle item click\n const handleItemClick = useCallback((item: HierarchicalMenuItem, level: number) => {\n const attribute = attributes[level] || attributes[0];\n \n if (item.isRefined) {\n // Remove this and all child refinements\n attributes.slice(level).forEach((attr) => {\n refinements\n .filter(r => r.field === attr && r.value.startsWith(item.value))\n .forEach(r => removeRefinement(r.field, r.value, false));\n });\n stateManager.search();\n } else {\n // Clear sibling refinements at this level\n refinements\n .filter(r => r.field === attribute && r.value !== item.value)\n .forEach(r => removeRefinement(r.field, r.value, false));\n \n // Add this refinement\n addRefinement(attribute, item.value, true);\n }\n\n if (onSelect) {\n onSelect(item.value, level);\n }\n }, [attributes, refinements, addRefinement, removeRefinement, stateManager, onSelect]);\n\n // Toggle show more\n const toggleShowMore = (level: number) => {\n setExpanded(prev => ({ ...prev, [level]: !prev[level] }));\n };\n\n // Render a level of the hierarchy\n const renderLevel = (items: HierarchicalMenuItem[], level: number) => {\n if (!items || items.length === 0) return null;\n\n const isExpanded = expanded[level] || false;\n const displayLimit = isExpanded ? showMoreLimit : limit;\n const displayItems = items.slice(0, displayLimit);\n const hasMore = items.length > displayLimit;\n\n return (\n <ul\n className={hierarchicalTheme.list}\n style={{\n listStyle: 'none',\n margin: 0,\n padding: level > 0 ? `0 0 0 ${theme.spacing.medium}` : 0,\n }}\n >\n {displayItems.map((item, index) => (\n <li\n key={item.value}\n className={clsx(\n hierarchicalTheme.item,\n item.isRefined && hierarchicalTheme.itemSelected,\n item.data && item.data.length > 0 && hierarchicalTheme.itemParent\n )}\n style={{\n padding: `${theme.spacing.small} 0`,\n }}\n >\n {renderItem ? (\n renderItem(item, level)\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => handleItemClick(item, level)}\n className={hierarchicalTheme.link}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n width: '100%',\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n textAlign: 'left',\n fontFamily: 'inherit',\n fontSize: theme.typography.fontSize.small,\n color: item.isRefined ? theme.colors.primary : theme.colors.text,\n fontWeight: item.isRefined ? 600 : 400,\n }}\n >\n <span className={hierarchicalTheme.label} style={{ flex: 1 }}>\n {item.label}\n </span>\n {item.count !== undefined && (\n <span\n className={hierarchicalTheme.count}\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.typography.fontSize.small,\n }}\n >\n {item.count}\n </span>\n )}\n </button>\n {item.isRefined && item.data && item.data.length > 0 && (\n renderLevel(item.data, level + 1)\n )}\n </>\n )}\n </li>\n ))}\n {showMore && hasMore && (\n <li>\n <button\n type=\"button\"\n onClick={() => toggleShowMore(level)}\n className={hierarchicalTheme.showMore}\n style={{\n padding: `${theme.spacing.small} 0`,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.primary,\n textDecoration: 'underline',\n }}\n >\n {isExpanded ? 'Show less' : `Show ${items.length - displayLimit} more`}\n </button>\n </li>\n )}\n </ul>\n );\n };\n\n if (processedItems.length === 0) {\n return null;\n }\n\n return (\n <div\n className={clsx(hierarchicalTheme.root, className)}\n style={style}\n >\n {renderLevel(processedItems, 0)}\n </div>\n );\n};\n","/**\n * RangeSlider Component\n * \n * Visual slider for numeric range filtering\n * Alternative to RangeInput for a more interactive UX\n */\n\nimport React, { useState, useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface RangeSliderTheme {\n root?: string;\n label?: string;\n slider?: string;\n track?: string;\n trackFilled?: string;\n thumb?: string;\n values?: string;\n value?: string;\n}\n\nexport interface RangeSliderProps {\n /** Field name for the range filter */\n field: string;\n /** Label for the slider */\n label?: string;\n /** Minimum value */\n min: number;\n /** Maximum value */\n max: number;\n /** Step value (default: 1) */\n step?: number;\n /** Current minimum value */\n currentMin?: number;\n /** Current maximum value */\n currentMax?: number;\n /** Callback when range changes */\n onRangeChange?: (min: number, max: number) => void;\n /** Format value for display (default: (v) => v.toString()) */\n formatValue?: (value: number) => string;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: RangeSliderTheme;\n /** Show current values (default: true) */\n showValues?: boolean;\n /** Whether to sync with SearchStateManager (default: true) */\n syncWithState?: boolean;\n /** Debounce delay for updates (default: 300ms) */\n debounceMs?: number;\n}\n\nexport const RangeSlider: React.FC<RangeSliderProps> = ({\n field,\n label,\n min,\n max,\n step = 1,\n currentMin: currentMinProp,\n currentMax: currentMaxProp,\n onRangeChange,\n formatValue = (v) => v.toString(),\n className,\n style,\n theme: customTheme,\n showValues = true,\n syncWithState = true,\n debounceMs = 300,\n}) => {\n const { theme } = useSearchContext();\n const { refinements, addRefinement, removeRefinement } = useSearchState();\n const rangeSliderTheme = customTheme || {};\n \n // Parse current range from StateManager\n const stateRange = useMemo(() => {\n if (!syncWithState) return { min: undefined, max: undefined };\n let minVal: number | undefined;\n let maxVal: number | undefined;\n \n refinements.forEach(r => {\n if (r.field === field) {\n const minMatch = r.value.match(/^>=(\\d+(?:\\.\\d+)?)$/);\n if (minMatch) minVal = parseFloat(minMatch[1]);\n const maxMatch = r.value.match(/^<=(\\d+(?:\\.\\d+)?)$/);\n if (maxMatch) maxVal = parseFloat(maxMatch[1]);\n }\n });\n \n return { min: minVal, max: maxVal };\n }, [syncWithState, refinements, field]);\n\n const [internalMin, setInternalMin] = useState(currentMinProp ?? stateRange.min ?? min);\n const [internalMax, setInternalMax] = useState(currentMaxProp ?? stateRange.max ?? max);\n const [isDragging, setIsDragging] = useState(false);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Sync with StateManager changes\n useEffect(() => {\n if (syncWithState && !isDragging) {\n if (stateRange.min !== undefined) setInternalMin(stateRange.min);\n else setInternalMin(min);\n if (stateRange.max !== undefined) setInternalMax(stateRange.max);\n else setInternalMax(max);\n }\n }, [syncWithState, stateRange.min, stateRange.max, isDragging, min, max]);\n\n // Update StateManager with range refinements\n const updateStateManager = useCallback((minVal: number, maxVal: number) => {\n if (!syncWithState) return;\n \n // Remove existing range refinements for this field\n refinements.forEach(r => {\n if (r.field === field) {\n removeRefinement(field, r.value, false);\n }\n });\n \n // Add new range refinements\n if (minVal > min) {\n addRefinement(field, `>=${minVal}`, false);\n }\n if (maxVal < max) {\n addRefinement(field, `<=${maxVal}`, minVal <= min); // Trigger search if only max is set\n }\n if (minVal > min && maxVal >= max) {\n // Trigger search after setting min\n addRefinement(field, `>=${minVal}`, true);\n } else if (minVal > min || maxVal < max) {\n // If both are set, we need to trigger search\n // already triggered above\n }\n }, [syncWithState, field, refinements, addRefinement, removeRefinement, min, max]);\n\n // Debounced update\n const debouncedUpdate = useCallback((minVal: number, maxVal: number) => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n \n debounceRef.current = setTimeout(() => {\n updateStateManager(minVal, maxVal);\n if (onRangeChange) {\n onRangeChange(minVal, maxVal);\n }\n }, debounceMs);\n }, [updateStateManager, onRangeChange, debounceMs]);\n\n // Handle min slider change\n const handleMinChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = Math.min(Number(e.target.value), internalMax - step);\n setInternalMin(value);\n setIsDragging(true);\n debouncedUpdate(value, internalMax);\n };\n\n // Handle max slider change\n const handleMaxChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = Math.max(Number(e.target.value), internalMin + step);\n setInternalMax(value);\n setIsDragging(true);\n debouncedUpdate(internalMin, value);\n };\n\n // Handle drag end\n const handleDragEnd = () => {\n setIsDragging(false);\n };\n\n // Calculate filled track position\n const minPercent = ((internalMin - min) / (max - min)) * 100;\n const maxPercent = ((internalMax - min) / (max - min)) * 100;\n\n return (\n <div\n className={clsx(rangeSliderTheme.root, className)}\n style={{\n fontFamily: 'inherit',\n ...style,\n }}\n >\n {label && (\n <label\n className={rangeSliderTheme.label}\n style={{\n display: 'block',\n marginBottom: theme.spacing.small,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: theme.colors.text,\n }}\n >\n {label}\n </label>\n )}\n\n <div\n className={rangeSliderTheme.slider}\n style={{\n position: 'relative',\n height: '40px',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {/* Track background */}\n <div\n className={rangeSliderTheme.track}\n style={{\n position: 'absolute',\n width: '100%',\n height: '4px',\n backgroundColor: theme.colors.border,\n borderRadius: '2px',\n }}\n />\n\n {/* Filled track */}\n <div\n className={rangeSliderTheme.trackFilled}\n style={{\n position: 'absolute',\n left: `${minPercent}%`,\n width: `${maxPercent - minPercent}%`,\n height: '4px',\n backgroundColor: theme.colors.primary,\n borderRadius: '2px',\n }}\n />\n\n {/* Min slider */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={internalMin}\n onChange={handleMinChange}\n onMouseUp={handleDragEnd}\n onTouchEnd={handleDragEnd}\n className={rangeSliderTheme.thumb}\n style={{\n position: 'absolute',\n width: '100%',\n height: '4px',\n background: 'transparent',\n WebkitAppearance: 'none',\n appearance: 'none',\n cursor: 'pointer',\n pointerEvents: 'none',\n }}\n aria-label={`Minimum ${label || field}`}\n />\n\n {/* Max slider */}\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={internalMax}\n onChange={handleMaxChange}\n onMouseUp={handleDragEnd}\n onTouchEnd={handleDragEnd}\n className={rangeSliderTheme.thumb}\n style={{\n position: 'absolute',\n width: '100%',\n height: '4px',\n background: 'transparent',\n WebkitAppearance: 'none',\n appearance: 'none',\n cursor: 'pointer',\n pointerEvents: 'none',\n }}\n aria-label={`Maximum ${label || field}`}\n />\n </div>\n\n {showValues && (\n <div\n className={rangeSliderTheme.values}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginTop: theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.textSecondary,\n }}\n >\n <span className={rangeSliderTheme.value}>{formatValue(internalMin)}</span>\n <span className={rangeSliderTheme.value}>{formatValue(internalMax)}</span>\n </div>\n )}\n\n {/* Custom styles for range thumbs */}\n <style>{`\n .${rangeSliderTheme.thumb || 'seekora-range-slider__thumb'}::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 20px;\n height: 20px;\n background: ${theme.colors.primary};\n border-radius: 50%;\n cursor: pointer;\n pointer-events: all;\n box-shadow: 0 2px 4px rgba(0,0,0,0.2);\n }\n .${rangeSliderTheme.thumb || 'seekora-range-slider__thumb'}::-moz-range-thumb {\n width: 20px;\n height: 20px;\n background: ${theme.colors.primary};\n border-radius: 50%;\n cursor: pointer;\n pointer-events: all;\n border: none;\n box-shadow: 0 2px 4px rgba(0,0,0,0.2);\n }\n `}</style>\n </div>\n );\n};\n","/**\n * Breadcrumb Component\n * \n * Displays the current hierarchical navigation path\n * Allows users to navigate back to parent categories\n */\n\nimport React, { useMemo, useCallback } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface BreadcrumbItem {\n label: string;\n value: string;\n}\n\nexport interface BreadcrumbTheme {\n root?: string;\n list?: string;\n item?: string;\n link?: string;\n separator?: string;\n current?: string;\n}\n\nexport interface BreadcrumbProps {\n /** Attributes for each level of hierarchy */\n attributes: string[];\n /** Separator between items (default: ' > ') */\n separator?: string;\n /** Root label (default: 'Home') */\n rootLabel?: string;\n /** Custom render function for items */\n renderItem?: (item: BreadcrumbItem, index: number, isLast: boolean) => React.ReactNode;\n /** Custom render for separator */\n renderSeparator?: () => React.ReactNode;\n /** Callback when an item is clicked */\n onNavigate?: (item: BreadcrumbItem | null, index: number) => void;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: BreadcrumbTheme;\n /** Custom breadcrumb items (overrides automatic detection) */\n items?: BreadcrumbItem[];\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n attributes,\n separator = ' > ',\n rootLabel = 'Home',\n renderItem,\n renderSeparator,\n onNavigate,\n className,\n style,\n theme: customTheme,\n items: itemsProp,\n}) => {\n const { theme, stateManager } = useSearchContext();\n const { refinements, removeRefinement, clearRefinements } = useSearchState();\n const breadcrumbTheme = customTheme || {};\n\n // Build breadcrumb items from refinements\n const items = useMemo((): BreadcrumbItem[] => {\n if (itemsProp) return itemsProp;\n\n const breadcrumbItems: BreadcrumbItem[] = [];\n\n // Find hierarchical refinements\n attributes.forEach((attr, level) => {\n const refinement = refinements.find(r => r.field === attr);\n if (refinement) {\n // Parse the hierarchical value\n const parts = refinement.value.split(separator);\n parts.forEach((part, partIndex) => {\n const fullPath = parts.slice(0, partIndex + 1).join(separator);\n // Only add if not already in the list\n if (!breadcrumbItems.some(item => item.value === fullPath)) {\n breadcrumbItems.push({\n label: part,\n value: fullPath,\n });\n }\n });\n }\n });\n\n return breadcrumbItems;\n }, [attributes, refinements, separator, itemsProp]);\n\n // Handle click on breadcrumb item\n const handleClick = useCallback((item: BreadcrumbItem | null, index: number) => {\n if (item === null) {\n // Clicked on root - clear all hierarchical refinements\n attributes.forEach(attr => {\n refinements\n .filter(r => r.field === attr)\n .forEach(r => removeRefinement(r.field, r.value, false));\n });\n stateManager.search();\n } else {\n // Navigate to this level - remove refinements below this level\n const currentLevel = items.findIndex(i => i.value === item.value);\n \n attributes.forEach((attr, attrLevel) => {\n refinements\n .filter(r => r.field === attr)\n .forEach(r => {\n // Remove if this is below the clicked level\n if (attrLevel > currentLevel || \n (attrLevel === currentLevel && r.value !== item.value)) {\n removeRefinement(r.field, r.value, false);\n }\n });\n });\n stateManager.search();\n }\n\n if (onNavigate) {\n onNavigate(item, index);\n }\n }, [attributes, refinements, removeRefinement, stateManager, items, onNavigate]);\n\n // Default separator renderer\n const defaultRenderSeparator = () => (\n <span\n className={breadcrumbTheme.separator}\n style={{\n margin: `0 ${theme.spacing.small}`,\n color: theme.colors.textSecondary,\n }}\n aria-hidden=\"true\"\n >\n ›\n </span>\n );\n\n // Don't render if no items\n if (items.length === 0) {\n return null;\n }\n\n return (\n <nav\n className={clsx(breadcrumbTheme.root, className)}\n style={style}\n aria-label=\"Breadcrumb\"\n >\n <ol\n className={breadcrumbTheme.list}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n fontSize: theme.typography.fontSize.small,\n }}\n >\n {/* Root item */}\n <li className={breadcrumbTheme.item}>\n <button\n type=\"button\"\n onClick={() => handleClick(null, -1)}\n className={breadcrumbTheme.link}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: theme.colors.primary,\n fontFamily: 'inherit',\n fontSize: 'inherit',\n textDecoration: 'none',\n }}\n >\n {rootLabel}\n </button>\n </li>\n\n {/* Breadcrumb items */}\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <React.Fragment key={item.value}>\n {renderSeparator ? renderSeparator() : defaultRenderSeparator()}\n <li\n className={clsx(\n breadcrumbTheme.item,\n isLast && breadcrumbTheme.current\n )}\n >\n {renderItem ? (\n renderItem(item, index, isLast)\n ) : isLast ? (\n <span\n style={{\n color: theme.colors.text,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n }}\n aria-current=\"page\"\n >\n {item.label}\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={() => handleClick(item, index)}\n className={breadcrumbTheme.link}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: theme.colors.primary,\n fontFamily: 'inherit',\n fontSize: 'inherit',\n textDecoration: 'none',\n }}\n >\n {item.label}\n </button>\n )}\n </li>\n </React.Fragment>\n );\n })}\n </ol>\n </nav>\n );\n};\n","/**\n * MobileFilters Component\n * \n * A full-screen filter drawer optimized for mobile devices\n * Slides in from the side or bottom to display facets and filters\n */\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useSearchState } from '../hooks/useSearchState';\nimport { clsx } from 'clsx';\n\nexport interface MobileFiltersTheme {\n overlay?: string;\n drawer?: string;\n header?: string;\n title?: string;\n closeButton?: string;\n content?: string;\n footer?: string;\n applyButton?: string;\n clearButton?: string;\n filterCount?: string;\n}\n\nexport interface MobileFiltersProps {\n /** Whether the drawer is open */\n isOpen: boolean;\n /** Callback when drawer should close */\n onClose: () => void;\n /** Callback when filters are applied */\n onApply?: () => void;\n /** Title text */\n title?: string;\n /** Apply button text */\n applyButtonText?: string;\n /** Clear button text */\n clearButtonText?: string;\n /** Position of the drawer */\n position?: 'left' | 'right' | 'bottom';\n /** Children (filter components) */\n children: React.ReactNode;\n /** Custom className */\n className?: string;\n /** Custom theme */\n theme?: MobileFiltersTheme;\n /** Show header */\n showHeader?: boolean;\n /** Show footer with apply/clear buttons */\n showFooter?: boolean;\n /** Show filter count badge */\n showFilterCount?: boolean;\n /** Close on backdrop click */\n closeOnBackdropClick?: boolean;\n /** Close on escape key */\n closeOnEscape?: boolean;\n}\n\nexport const MobileFilters: React.FC<MobileFiltersProps> = ({\n isOpen,\n onClose,\n onApply,\n title = 'Filters',\n applyButtonText = 'Apply',\n clearButtonText = 'Clear all',\n position = 'right',\n children,\n className,\n theme: customTheme,\n showHeader = true,\n showFooter = true,\n showFilterCount = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n}) => {\n const { theme } = useSearchContext();\n const { refinements, clearRefinements } = useSearchState();\n const mobileFiltersTheme = customTheme || {};\n const drawerRef = useRef<HTMLDivElement>(null);\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n // Handle escape key\n useEffect(() => {\n if (!closeOnEscape) return;\n \n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, onClose, closeOnEscape]);\n\n // Focus trap\n useEffect(() => {\n if (isOpen && drawerRef.current) {\n const focusableElements = drawerRef.current.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n const handleTab = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n\n if (e.shiftKey) {\n if (document.activeElement === firstElement) {\n e.preventDefault();\n lastElement?.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n e.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleTab);\n firstElement?.focus();\n \n return () => document.removeEventListener('keydown', handleTab);\n }\n }, [isOpen]);\n\n const handleBackdropClick = useCallback(() => {\n if (closeOnBackdropClick) {\n onClose();\n }\n }, [closeOnBackdropClick, onClose]);\n\n const handleApply = useCallback(() => {\n if (onApply) {\n onApply();\n }\n onClose();\n }, [onApply, onClose]);\n\n const handleClear = useCallback(() => {\n clearRefinements(true);\n }, [clearRefinements]);\n\n // Get drawer transform based on position\n const getTransform = (isVisible: boolean) => {\n if (isVisible) return 'translate(0, 0)';\n switch (position) {\n case 'left':\n return 'translateX(-100%)';\n case 'right':\n return 'translateX(100%)';\n case 'bottom':\n return 'translateY(100%)';\n default:\n return 'translateX(100%)';\n }\n };\n\n // Get drawer styles based on position\n const getDrawerPositionStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: 'fixed',\n backgroundColor: theme.colors.background,\n display: 'flex',\n flexDirection: 'column',\n transition: 'transform 300ms ease-in-out',\n transform: getTransform(isOpen),\n zIndex: (theme.zIndex?.modal || 1050) + 1,\n };\n\n switch (position) {\n case 'left':\n return { ...base, top: 0, left: 0, bottom: 0, width: '80%', maxWidth: '320px' };\n case 'right':\n return { ...base, top: 0, right: 0, bottom: 0, width: '80%', maxWidth: '320px' };\n case 'bottom':\n return { ...base, left: 0, right: 0, bottom: 0, maxHeight: '80vh', borderTopLeftRadius: '16px', borderTopRightRadius: '16px' };\n default:\n return base;\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n className={mobileFiltersTheme.overlay}\n onClick={handleBackdropClick}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: theme.zIndex?.modal || 1050,\n opacity: isOpen ? 1 : 0,\n transition: 'opacity 300ms ease-in-out',\n }}\n aria-hidden=\"true\"\n />\n\n {/* Drawer */}\n <div\n ref={drawerRef}\n className={clsx(mobileFiltersTheme.drawer, className)}\n style={getDrawerPositionStyles()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n >\n {/* Header */}\n {showHeader && (\n <div\n className={mobileFiltersTheme.header}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing.medium,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: theme.spacing.small }}>\n <h2\n className={mobileFiltersTheme.title}\n style={{\n margin: 0,\n fontSize: theme.typography.fontSize.large,\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n color: theme.colors.text,\n }}\n >\n {title}\n </h2>\n {showFilterCount && refinements.length > 0 && (\n <span\n className={mobileFiltersTheme.filterCount}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '24px',\n height: '24px',\n padding: '0 6px',\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: '#ffffff',\n backgroundColor: theme.colors.primary,\n borderRadius: '12px',\n }}\n >\n {refinements.length}\n </span>\n )}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className={mobileFiltersTheme.closeButton}\n style={{\n padding: theme.spacing.small,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: '1.5rem',\n color: theme.colors.text,\n }}\n aria-label=\"Close filters\"\n >\n ×\n </button>\n </div>\n )}\n\n {/* Content */}\n <div\n className={mobileFiltersTheme.content}\n style={{\n flex: 1,\n overflow: 'auto',\n padding: theme.spacing.medium,\n }}\n >\n {children}\n </div>\n\n {/* Footer */}\n {showFooter && (\n <div\n className={mobileFiltersTheme.footer}\n style={{\n display: 'flex',\n gap: theme.spacing.small,\n padding: theme.spacing.medium,\n borderTop: `1px solid ${theme.colors.border}`,\n }}\n >\n <button\n type=\"button\"\n onClick={handleClear}\n className={mobileFiltersTheme.clearButton}\n style={{\n flex: 1,\n padding: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: theme.colors.text,\n backgroundColor: 'transparent',\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: 'pointer',\n }}\n >\n {clearButtonText}\n </button>\n <button\n type=\"button\"\n onClick={handleApply}\n className={mobileFiltersTheme.applyButton}\n style={{\n flex: 2,\n padding: theme.spacing.medium,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: '#ffffff',\n backgroundColor: theme.colors.primary,\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: 'pointer',\n }}\n >\n {applyButtonText}\n {showFilterCount && refinements.length > 0 && ` (${refinements.length})`}\n </button>\n </div>\n )}\n </div>\n </>\n );\n};\n\n/**\n * MobileFiltersButton Component\n * \n * A button to toggle the MobileFilters drawer\n */\n\nexport interface MobileFiltersButtonProps {\n /** Callback when clicked */\n onClick: () => void;\n /** Button text */\n text?: string;\n /** Show filter count */\n showCount?: boolean;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n}\n\nexport const MobileFiltersButton: React.FC<MobileFiltersButtonProps> = ({\n onClick,\n text = 'Filters',\n showCount = true,\n className,\n style,\n}) => {\n const { theme } = useSearchContext();\n const { refinements } = useSearchState();\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing.small,\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: theme.colors.text,\n backgroundColor: theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: 'pointer',\n ...style,\n }}\n >\n <span>☰</span>\n <span>{text}</span>\n {showCount && refinements.length > 0 && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '20px',\n height: '20px',\n padding: '0 4px',\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: '#ffffff',\n backgroundColor: theme.colors.primary,\n borderRadius: '10px',\n }}\n >\n {refinements.length}\n </span>\n )}\n </button>\n );\n};\n","/**\n * Recommendation Components\n * \n * Components for displaying product recommendations:\n * - RelatedProducts: Show related items based on a product\n * - TrendingItems: Display trending/popular products\n * - FrequentlyBoughtTogether: Bundle recommendations\n * - RecentlyViewed: User's recently viewed items\n */\n\nimport React, { useEffect, useState, useMemo } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { clsx } from 'clsx';\nimport type { ResultItem } from '@seekora-ai/ui-sdk-types';\n\n// Common types\nexport interface RecommendationItem extends ResultItem {\n [key: string]: any;\n}\n\nexport interface RecommendationTheme {\n root?: string;\n title?: string;\n list?: string;\n item?: string;\n image?: string;\n content?: string;\n name?: string;\n price?: string;\n loading?: string;\n empty?: string;\n}\n\ninterface BaseRecommendationProps {\n /** Title for the section */\n title?: string;\n /** Maximum items to show */\n maxItems?: number;\n /** Custom render function for items */\n renderItem?: (item: RecommendationItem, index: number) => React.ReactNode;\n /** Callback when item is clicked */\n onItemClick?: (item: RecommendationItem, index: number) => void;\n /** Custom className */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom theme */\n theme?: RecommendationTheme;\n /** Layout mode */\n layout?: 'horizontal' | 'grid' | 'list';\n /** Currency symbol for prices */\n currencySymbol?: string;\n}\n\n// ============================================================================\n// RelatedProducts Component\n// ============================================================================\n\nexport interface RelatedProductsProps extends BaseRecommendationProps {\n /** Product ID to get related products for */\n productId: string;\n /** Custom items (if not using API) */\n items?: RecommendationItem[];\n /** Loading state */\n loading?: boolean;\n}\n\nexport const RelatedProducts: React.FC<RelatedProductsProps> = ({\n productId,\n items: itemsProp,\n loading: loadingProp = false,\n title = 'Related Products',\n maxItems = 6,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n}) => {\n const { theme } = useSearchContext();\n const recommendationTheme = customTheme || {};\n\n // If items are provided, use them directly\n const items = itemsProp?.slice(0, maxItems) || [];\n const loading = loadingProp;\n\n if (loading) {\n return (\n <div className={clsx(recommendationTheme.root, className)} style={style}>\n <div className={recommendationTheme.loading} style={getLoadingStyle(theme)}>\n Loading related products...\n </div>\n </div>\n );\n }\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <RecommendationSection\n title={title}\n items={items}\n renderItem={renderItem}\n onItemClick={onItemClick}\n className={className}\n style={style}\n theme={customTheme}\n layout={layout}\n currencySymbol={currencySymbol}\n />\n );\n};\n\n// ============================================================================\n// TrendingItems Component\n// ============================================================================\n\nexport interface TrendingItemsProps extends BaseRecommendationProps {\n /** Custom items (if not using API) */\n items?: RecommendationItem[];\n /** Loading state */\n loading?: boolean;\n /** Facet name for trending (if using facet data) */\n facetName?: string;\n}\n\nexport const TrendingItems: React.FC<TrendingItemsProps> = ({\n items: itemsProp,\n loading: loadingProp = false,\n title = 'Trending Now',\n maxItems = 8,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n}) => {\n const { theme } = useSearchContext();\n const recommendationTheme = customTheme || {};\n\n const items = itemsProp?.slice(0, maxItems) || [];\n const loading = loadingProp;\n\n if (loading) {\n return (\n <div className={clsx(recommendationTheme.root, className)} style={style}>\n <div className={recommendationTheme.loading} style={getLoadingStyle(theme)}>\n Loading trending items...\n </div>\n </div>\n );\n }\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <RecommendationSection\n title={title}\n items={items}\n renderItem={renderItem}\n onItemClick={onItemClick}\n className={className}\n style={style}\n theme={customTheme}\n layout={layout}\n currencySymbol={currencySymbol}\n />\n );\n};\n\n// ============================================================================\n// FrequentlyBoughtTogether Component\n// ============================================================================\n\nexport interface FrequentlyBoughtTogetherProps extends BaseRecommendationProps {\n /** Product ID to get frequently bought together items for */\n productId: string;\n /** Custom items (if not using API) */\n items?: RecommendationItem[];\n /** Loading state */\n loading?: boolean;\n /** Show \"Add all to cart\" button */\n showAddAllButton?: boolean;\n /** Callback when \"Add all\" is clicked */\n onAddAll?: (items: RecommendationItem[]) => void;\n}\n\nexport const FrequentlyBoughtTogether: React.FC<FrequentlyBoughtTogetherProps> = ({\n productId,\n items: itemsProp,\n loading: loadingProp = false,\n title = 'Frequently Bought Together',\n maxItems = 4,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n showAddAllButton = true,\n onAddAll,\n}) => {\n const { theme } = useSearchContext();\n const recommendationTheme = customTheme || {};\n\n const items = itemsProp?.slice(0, maxItems) || [];\n const loading = loadingProp;\n\n // Calculate total price\n const totalPrice = useMemo(() => {\n return items.reduce((sum, item) => {\n const itemPrice = item.price;\n const price = typeof itemPrice === 'number' ? itemPrice : parseFloat(String(itemPrice)) || 0;\n return sum + price;\n }, 0);\n }, [items]);\n\n if (loading) {\n return (\n <div className={clsx(recommendationTheme.root, className)} style={style}>\n <div className={recommendationTheme.loading} style={getLoadingStyle(theme)}>\n Loading recommendations...\n </div>\n </div>\n );\n }\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <div className={clsx(recommendationTheme.root, className)} style={style}>\n {title && (\n <h3\n className={recommendationTheme.title}\n style={{\n margin: `0 0 ${theme.spacing.medium} 0`,\n fontSize: theme.typography.fontSize.large,\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n color: theme.colors.text,\n }}\n >\n {title}\n </h3>\n )}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing.medium,\n flexWrap: 'wrap',\n }}\n >\n {items.map((item, index) => (\n <React.Fragment key={item.id || index}>\n {index > 0 && (\n <span style={{ fontSize: '1.5rem', color: theme.colors.textSecondary }}>+</span>\n )}\n <div\n onClick={() => onItemClick?.(item, index)}\n style={{\n cursor: onItemClick ? 'pointer' : 'default',\n textAlign: 'center',\n }}\n >\n {renderItem ? (\n renderItem(item, index)\n ) : (\n <>\n <img\n src={item.image || item.imageUrl || ''}\n alt={item.title || item.name || ''}\n style={{\n width: '80px',\n height: '80px',\n objectFit: 'cover',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.small,\n border: `1px solid ${theme.colors.border}`,\n }}\n />\n <div\n style={{\n marginTop: theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n color: theme.colors.text,\n }}\n >\n {currencySymbol}{typeof item.price === 'number' ? (item.price as number).toFixed(2) : item.price}\n </div>\n </>\n )}\n </div>\n </React.Fragment>\n ))}\n\n {showAddAllButton && items.length > 0 && (\n <div\n style={{\n marginLeft: 'auto',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: theme.colors.text,\n marginBottom: theme.spacing.small,\n }}\n >\n Total: {currencySymbol}{totalPrice.toFixed(2)}\n </div>\n <button\n type=\"button\"\n onClick={() => onAddAll?.(items)}\n style={{\n padding: `${theme.spacing.small} ${theme.spacing.medium}`,\n fontSize: theme.typography.fontSize.medium,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: '#ffffff',\n backgroundColor: theme.colors.primary,\n border: 'none',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.medium,\n cursor: 'pointer',\n }}\n >\n Add all to cart\n </button>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n// ============================================================================\n// RecentlyViewed Component\n// ============================================================================\n\nexport interface RecentlyViewedProps extends BaseRecommendationProps {\n /** Storage key for localStorage */\n storageKey?: string;\n /** Custom items (overrides localStorage) */\n items?: RecommendationItem[];\n}\n\nexport const RecentlyViewed: React.FC<RecentlyViewedProps> = ({\n storageKey = 'seekora_recently_viewed',\n items: itemsProp,\n title = 'Recently Viewed',\n maxItems = 6,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n}) => {\n const [storedItems, setStoredItems] = useState<RecommendationItem[]>([]);\n\n useEffect(() => {\n if (itemsProp) return;\n \n try {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n setStoredItems(JSON.parse(stored));\n }\n } catch (e) {\n // Ignore localStorage errors\n }\n }, [storageKey, itemsProp]);\n\n const items = (itemsProp || storedItems).slice(0, maxItems);\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <RecommendationSection\n title={title}\n items={items}\n renderItem={renderItem}\n onItemClick={onItemClick}\n className={className}\n style={style}\n theme={customTheme}\n layout={layout}\n currencySymbol={currencySymbol}\n />\n );\n};\n\n/**\n * Add item to recently viewed (utility function)\n */\nexport function addToRecentlyViewed(\n item: RecommendationItem,\n storageKey: string = 'seekora_recently_viewed',\n maxItems: number = 20\n): void {\n if (typeof localStorage === 'undefined') return;\n\n try {\n const stored = localStorage.getItem(storageKey);\n let items: RecommendationItem[] = stored ? JSON.parse(stored) : [];\n \n // Remove if already exists\n items = items.filter(i => i.id !== item.id);\n \n // Add to beginning\n items.unshift(item);\n \n // Limit\n items = items.slice(0, maxItems);\n \n localStorage.setItem(storageKey, JSON.stringify(items));\n } catch (e) {\n // Ignore localStorage errors\n }\n}\n\n// ============================================================================\n// Shared Recommendation Section Component\n// ============================================================================\n\ninterface RecommendationSectionProps extends BaseRecommendationProps {\n items: RecommendationItem[];\n}\n\nconst RecommendationSection: React.FC<RecommendationSectionProps> = ({\n title,\n items,\n renderItem,\n onItemClick,\n className,\n style,\n theme: customTheme,\n layout = 'horizontal',\n currencySymbol = '$',\n}) => {\n const { theme } = useSearchContext();\n const recommendationTheme = customTheme || {};\n\n const getListStyle = (): React.CSSProperties => {\n switch (layout) {\n case 'horizontal':\n return {\n display: 'flex',\n gap: theme.spacing.medium,\n overflowX: 'auto',\n scrollSnapType: 'x mandatory',\n paddingBottom: theme.spacing.small,\n };\n case 'grid':\n return {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(150px, 1fr))',\n gap: theme.spacing.medium,\n };\n case 'list':\n return {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing.small,\n };\n default:\n return {};\n }\n };\n\n const getItemStyle = (): React.CSSProperties => {\n switch (layout) {\n case 'horizontal':\n return {\n flexShrink: 0,\n width: '150px',\n scrollSnapAlign: 'start',\n };\n case 'grid':\n return {};\n case 'list':\n return {\n display: 'flex',\n gap: theme.spacing.medium,\n padding: theme.spacing.small,\n borderBottom: `1px solid ${theme.colors.border}`,\n };\n default:\n return {};\n }\n };\n\n return (\n <div className={clsx(recommendationTheme.root, className)} style={style}>\n {title && (\n <h3\n className={recommendationTheme.title}\n style={{\n margin: `0 0 ${theme.spacing.medium} 0`,\n fontSize: theme.typography.fontSize.large,\n fontWeight: theme.typography.fontWeight?.semibold || 600,\n color: theme.colors.text,\n }}\n >\n {title}\n </h3>\n )}\n\n <div className={recommendationTheme.list} style={getListStyle()}>\n {items.map((item, index) => (\n <div\n key={item.id || index}\n className={recommendationTheme.item}\n onClick={() => onItemClick?.(item, index)}\n style={{\n ...getItemStyle(),\n cursor: onItemClick ? 'pointer' : 'default',\n }}\n >\n {renderItem ? (\n renderItem(item, index)\n ) : (\n <DefaultRecommendationItem\n item={item}\n theme={recommendationTheme}\n currencySymbol={currencySymbol}\n layout={layout}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\n// Default item render\ninterface DefaultRecommendationItemProps {\n item: RecommendationItem;\n theme: RecommendationTheme;\n currencySymbol: string;\n layout: 'horizontal' | 'grid' | 'list';\n}\n\nconst DefaultRecommendationItem: React.FC<DefaultRecommendationItemProps> = ({\n item,\n theme: recommendationTheme,\n currencySymbol,\n layout,\n}) => {\n const { theme } = useSearchContext();\n const image = item.image || item.imageUrl || '';\n const title = item.title || item.name || '';\n const price = item.price;\n\n const imageSize = layout === 'list' ? '60px' : '100%';\n\n return (\n <>\n {image && (\n <img\n src={image}\n alt={title}\n className={recommendationTheme.image}\n style={{\n width: imageSize,\n height: layout === 'list' ? '60px' : '120px',\n objectFit: 'cover',\n borderRadius: typeof theme.borderRadius === 'string'\n ? theme.borderRadius\n : theme.borderRadius.small,\n }}\n />\n )}\n <div className={recommendationTheme.content} style={{ flex: layout === 'list' ? 1 : undefined }}>\n <div\n className={recommendationTheme.name}\n style={{\n marginTop: layout === 'list' ? 0 : theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.medium || 500,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {title}\n </div>\n {price !== undefined && (\n <div\n className={recommendationTheme.price}\n style={{\n marginTop: theme.spacing.small,\n fontSize: theme.typography.fontSize.small,\n fontWeight: theme.typography.fontWeight?.bold || 700,\n color: theme.colors.primary,\n }}\n >\n {currencySymbol}{typeof price === 'number' ? (price as number).toFixed(2) : price}\n </div>\n )}\n </div>\n </>\n );\n};\n\n// Helper function\nfunction getLoadingStyle(theme: any): React.CSSProperties {\n return {\n padding: theme.spacing.large,\n textAlign: 'center',\n color: theme.colors.textSecondary,\n };\n}\n","/**\n * QuerySuggestions Component\n * \n * Standalone component for displaying query suggestions\n */\n\nimport React, { useState } from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useQuerySuggestions } from '../hooks/useQuerySuggestions';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport { clsx } from 'clsx';\n\nexport interface SuggestionItem {\n query: string;\n count?: number;\n metadata?: Record<string, any>;\n}\n\nexport interface QuerySuggestionsTheme {\n container?: string;\n title?: string;\n suggestionsList?: string;\n suggestionItem?: string;\n suggestionItemHover?: string;\n suggestionItemActive?: string;\n loadingState?: string;\n emptyState?: string;\n}\n\nexport interface QuerySuggestionsProps {\n query?: string;\n maxSuggestions?: number;\n debounceMs?: number;\n minQueryLength?: number;\n onSuggestionClick?: (suggestion: string) => void;\n renderSuggestion?: (suggestion: SuggestionItem, index: number) => React.ReactNode;\n renderLoading?: () => React.ReactNode;\n renderEmpty?: () => React.ReactNode;\n showTitle?: boolean;\n title?: string;\n className?: string;\n style?: React.CSSProperties;\n theme?: QuerySuggestionsTheme;\n}\n\nexport const QuerySuggestions: React.FC<QuerySuggestionsProps> = ({\n query = '',\n maxSuggestions = 10,\n debounceMs = 300,\n minQueryLength = 2,\n onSuggestionClick,\n renderSuggestion,\n renderLoading,\n renderEmpty,\n showTitle = false,\n title = 'Suggestions',\n className,\n style,\n theme: customTheme,\n}) => {\n const { client, theme } = useSearchContext();\n const [selectedIndex, setSelectedIndex] = useState(-1);\n\n const { suggestions, loading, error } = useQuerySuggestions({\n client,\n query,\n enabled: query.length >= minQueryLength,\n debounceMs,\n maxSuggestions,\n });\n\n const displayedSuggestions = suggestions.slice(0, maxSuggestions);\n const suggestionsTheme = customTheme || {};\n\n const defaultRenderSuggestion = (suggestion: SuggestionItem, index: number) => (\n <div key={index}>\n <span>{suggestion.query}</span>\n {suggestion.count !== undefined && (\n <span style={{ opacity: 0.6, marginLeft: theme.spacing.small }}>\n ({suggestion.count})\n </span>\n )}\n </div>\n );\n\n const defaultRenderLoading = () => (\n <div\n style={{\n padding: theme.spacing.medium,\n textAlign: 'center',\n color: theme.colors.text,\n }}\n >\n Loading suggestions...\n </div>\n );\n\n const defaultRenderEmpty = () => (\n <div\n style={{\n padding: theme.spacing.medium,\n textAlign: 'center',\n color: theme.colors.text,\n opacity: 0.6,\n }}\n >\n No suggestions available\n </div>\n );\n\n const handleSuggestionClick = (suggestion: SuggestionItem) => {\n if (onSuggestionClick) {\n onSuggestionClick(suggestion.query);\n }\n };\n\n if (query.length < minQueryLength) {\n return null;\n }\n\n if (loading) {\n return (\n <div className={clsx(suggestionsTheme.container, className)} style={style}>\n {showTitle && (\n <div\n className={suggestionsTheme.title}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </div>\n )}\n {renderLoading ? renderLoading() : defaultRenderLoading()}\n </div>\n );\n }\n\n if (error || displayedSuggestions.length === 0) {\n return (\n <div className={clsx(suggestionsTheme.container, className)} style={style}>\n {showTitle && (\n <div\n className={suggestionsTheme.title}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </div>\n )}\n {renderEmpty ? renderEmpty() : defaultRenderEmpty()}\n </div>\n );\n }\n\n const renderFn = renderSuggestion || defaultRenderSuggestion;\n\n return (\n <div\n className={clsx(suggestionsTheme.container, className)}\n style={style}\n >\n {showTitle && (\n <div\n className={suggestionsTheme.title}\n style={{\n fontSize: theme.typography.fontSize.large,\n fontWeight: 'bold',\n marginBottom: theme.spacing.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </div>\n )}\n \n <div className={suggestionsTheme.suggestionsList}>\n {displayedSuggestions.map((suggestion, index) => {\n const isSelected = index === selectedIndex;\n \n return (\n <div\n key={index}\n className={clsx(\n suggestionsTheme.suggestionItem,\n isSelected && suggestionsTheme.suggestionItemActive\n )}\n onClick={() => handleSuggestionClick(suggestion)}\n onMouseEnter={() => setSelectedIndex(index)}\n onMouseLeave={() => setSelectedIndex(-1)}\n style={{\n padding: theme.spacing.medium,\n cursor: 'pointer',\n borderRadius: typeof theme.borderRadius === 'string' ? theme.borderRadius : theme.borderRadius.medium,\n transition: 'background-color 0.2s ease',\n backgroundColor: isSelected ? theme.colors.hover : 'transparent',\n marginBottom: index < displayedSuggestions.length - 1 ? theme.spacing.small : 0,\n }}\n >\n {renderFn(suggestion, index)}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\n","/**\n * Enhanced Query Suggestions Hook\n * \n * Provides full support for query suggestions API including:\n * - Basic suggestions\n * - Dropdown recommendations (trending, top searches, related)\n * - Filtered tabs with products\n * - Recent searches (local storage)\n * - Analytics tracking\n */\n\nimport { useState, useEffect, useRef, useCallback, useMemo } from 'react';\nimport type { SeekoraClient, QuerySuggestionsFullResponse } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type {\n SuggestionItem,\n ProductItem,\n FilteredTab,\n DropdownRecommendations,\n RecentSearch,\n QuerySuggestionsResponse,\n TrendingSearch,\n TopSearch,\n RelatedSearch,\n PopularBrand,\n SuggestionCategory,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseQuerySuggestionsEnhancedOptions {\n /** Seekora client instance */\n client: SeekoraClient;\n /** Current search query */\n query: string;\n /** Enable/disable the hook */\n enabled?: boolean;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Max suggestions to fetch */\n maxSuggestions?: number;\n /** Minimum query length to trigger search */\n minQueryLength?: number;\n /** Include dropdown recommendations (trending, products, etc.) */\n includeDropdownRecommendations?: boolean;\n /** Include categories in suggestions */\n includeCategories?: boolean;\n /** Include facets in suggestions */\n includeFacets?: boolean;\n /** Max categories per suggestion */\n maxCategories?: number;\n /** Max facets per suggestion */\n maxFacets?: number;\n /** Filtered tabs configuration */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Minimum popularity threshold */\n minPopularity?: number;\n /** Time range for analytics data */\n timeRange?: '7d' | '30d' | '90d';\n /** Disable typo tolerance */\n disableTypoTolerance?: boolean;\n /** Analytics tags */\n analyticsTags?: string[];\n /** Enable recent searches from localStorage */\n enableRecentSearches?: boolean;\n /** Max recent searches to store */\n maxRecentSearches?: number;\n /** Local storage key for recent searches */\n recentSearchesKey?: string;\n /** Callback when suggestions are loaded */\n onSuggestionsLoaded?: (response: QuerySuggestionsResponse) => void;\n /** Callback on error */\n onError?: (error: Error) => void;\n}\n\nexport interface UseQuerySuggestionsEnhancedReturn {\n /** Basic suggestion items */\n suggestions: SuggestionItem[];\n /** Loading state */\n loading: boolean;\n /** Error state */\n error: Error | null;\n /** Dropdown recommendations */\n dropdownRecommendations: DropdownRecommendations | null;\n /** Trending searches */\n trendingSearches: TrendingSearch[];\n /** Top searches */\n topSearches: TopSearch[];\n /** Related searches */\n relatedSearches: RelatedSearch[];\n /** Popular brands */\n popularBrands: PopularBrand[];\n /** Filtered tabs with products */\n filteredTabs: FilteredTab[];\n /** Trending products */\n trendingProducts: ProductItem[];\n /** Recent searches (from localStorage) */\n recentSearches: RecentSearch[];\n /** Processing time in ms */\n processingTimeMs: number | null;\n /** Total hits count */\n totalHits: number;\n /** Current page */\n currentPage: number;\n /** Total pages */\n totalPages: number;\n /** Original query */\n originalQuery: string;\n /** Add a search to recent searches */\n addRecentSearch: (query: string, resultsCount?: number) => void;\n /** Remove a search from recent searches */\n removeRecentSearch: (query: string) => void;\n /** Clear all recent searches */\n clearRecentSearches: () => void;\n /** Manually refetch suggestions */\n refetch: () => Promise<void>;\n /** Check if dropdown has any content to show */\n hasContent: boolean;\n /** Get all items for keyboard navigation (flattened) */\n getAllNavigableItems: () => NavigableItem[];\n}\n\nexport interface NavigableItem {\n type: 'suggestion' | 'recent' | 'trending' | 'product' | 'category' | 'brand' | 'tab';\n index: number;\n data: SuggestionItem | RecentSearch | TrendingSearch | ProductItem | SuggestionCategory | PopularBrand | FilteredTab;\n}\n\n// ============================================================================\n// Local Storage Helpers\n// ============================================================================\n\nconst RECENT_SEARCHES_DEFAULT_KEY = 'seekora_recent_searches';\nconst MAX_RECENT_SEARCHES_DEFAULT = 10;\n\nfunction getRecentSearchesFromStorage(key: string): RecentSearch[] {\n if (typeof window === 'undefined') return [];\n try {\n const stored = localStorage.getItem(key);\n if (!stored) return [];\n return JSON.parse(stored) as RecentSearch[];\n } catch {\n return [];\n }\n}\n\nfunction saveRecentSearchesToStorage(key: string, searches: RecentSearch[]): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(key, JSON.stringify(searches));\n } catch (error) {\n log.warn('Failed to save recent searches to localStorage', { error });\n }\n}\n\n// ============================================================================\n// Transform API Response\n// ============================================================================\n\nfunction transformSuggestion(raw: any): SuggestionItem {\n const query = raw.query || raw.text || String(raw);\n const highlighted = raw._highlightResult?.query?.value;\n \n return {\n query,\n popularity: raw.popularity,\n count: raw.instant_search?.exact_nb_hits ?? raw.popularity ?? raw.count,\n objectID: raw.objectID,\n highlightedQuery: highlighted ? parseHighlight(highlighted) : undefined,\n categories: raw.categories?.map((c: any) => ({\n value: c.value || c.name,\n count: c.count,\n path: c.path,\n })),\n facets: raw.instant_search?.facets || raw.facets,\n metadata: raw,\n };\n}\n\nfunction parseHighlight(highlighted: string): string {\n // Convert __ais-highlight__ markers to HTML\n return highlighted\n .replace(/__ais-highlight__/g, '<mark>')\n .replace(/__\\/ais-highlight__/g, '</mark>');\n}\n\nfunction transformProduct(raw: any): ProductItem {\n return {\n id: raw.id || raw.objectID,\n objectID: raw.objectID || raw.id,\n title: raw.title || raw.name || raw.productName,\n name: raw.name || raw.title,\n image: raw.image || raw.imageUrl || raw.metadata?.image,\n price: raw.price || raw.sellPrice || raw.metadata?.sellPrice,\n currency: raw.currency || raw.metadata?.currency || '',\n url: raw.url || raw.productId || raw.metadata?.url,\n clicks: raw.clicks,\n conversions: raw.conversions,\n revenue: raw.revenue,\n trend_score: raw.trend_score,\n metadata: raw.metadata || raw,\n };\n}\n\nfunction transformFilteredTab(raw: any): FilteredTab {\n return {\n id: raw.id,\n label: raw.label,\n filter: raw.filter,\n products: raw.products?.map(transformProduct) || [],\n nb_hits: raw.nb_hits,\n processing_time_ms: raw.processing_time_ms,\n };\n}\n\n// ============================================================================\n// Main Hook\n// ============================================================================\n\nexport function useQuerySuggestionsEnhanced(\n options: UseQuerySuggestionsEnhancedOptions\n): UseQuerySuggestionsEnhancedReturn {\n const {\n client,\n query,\n enabled = true,\n debounceMs = 200,\n maxSuggestions = 10,\n minQueryLength = 1,\n includeDropdownRecommendations = false,\n includeCategories = false,\n includeFacets = false,\n maxCategories = 3,\n maxFacets = 5,\n filteredTabs,\n minPopularity,\n timeRange,\n disableTypoTolerance,\n analyticsTags,\n enableRecentSearches = true,\n maxRecentSearches = MAX_RECENT_SEARCHES_DEFAULT,\n recentSearchesKey = RECENT_SEARCHES_DEFAULT_KEY,\n onSuggestionsLoaded,\n onError,\n } = options;\n\n // State\n const [suggestions, setSuggestions] = useState<SuggestionItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [dropdownRecommendations, setDropdownRecommendations] = useState<DropdownRecommendations | null>(null);\n const [recentSearches, setRecentSearches] = useState<RecentSearch[]>([]);\n const [processingTimeMs, setProcessingTimeMs] = useState<number | null>(null);\n const [totalHits, setTotalHits] = useState(0);\n const [currentPage, setCurrentPage] = useState(0);\n const [totalPages, setTotalPages] = useState(0);\n const [originalQuery, setOriginalQuery] = useState('');\n\n // Refs\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null);\n const abortControllerRef = useRef<AbortController | null>(null);\n const mountedRef = useRef(true);\n\n // Load recent searches on mount\n useEffect(() => {\n if (enableRecentSearches) {\n const stored = getRecentSearchesFromStorage(recentSearchesKey);\n setRecentSearches(stored.slice(0, maxRecentSearches));\n }\n return () => {\n mountedRef.current = false;\n };\n }, [enableRecentSearches, recentSearchesKey, maxRecentSearches]);\n\n // Fetch suggestions\n const fetchSuggestions = useCallback(async (searchQuery: string) => {\n if (!client || !searchQuery.trim()) {\n setSuggestions([]);\n setDropdownRecommendations(null);\n return;\n }\n\n // Cancel previous request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n setError(null);\n\n try {\n const response = await client.getSuggestions?.(searchQuery, {\n hitsPerPage: maxSuggestions,\n include_dropdown_recommendations: includeDropdownRecommendations || (filteredTabs && filteredTabs.length > 0),\n include_categories: includeCategories,\n include_facets: includeFacets,\n max_categories: maxCategories,\n max_facets: maxFacets,\n filtered_tabs: filteredTabs,\n min_popularity: minPopularity,\n time_range: timeRange,\n disable_typo_tolerance: disableTypoTolerance,\n analytics_tags: analyticsTags,\n returnFullResponse: true,\n }) as QuerySuggestionsFullResponse;\n\n if (!mountedRef.current) return;\n\n // Transform suggestions\n const rawSuggestions = response.suggestions || [];\n const transformedSuggestions = rawSuggestions.map(transformSuggestion);\n setSuggestions(transformedSuggestions);\n\n // Extract dropdown recommendations from extensions\n const extensions = (response.extensions || {}) as Record<string, unknown>;\n const recommendations: DropdownRecommendations = {\n trending_searches: Array.isArray(extensions.trending_searches) ? extensions.trending_searches as TrendingSearch[] : [],\n top_searches: Array.isArray(extensions.top_searches) ? extensions.top_searches as TopSearch[] : [],\n related_searches: Array.isArray(extensions.related_searches) ? extensions.related_searches as RelatedSearch[] : [],\n trending_products: Array.isArray(extensions.trending_products) ? (extensions.trending_products as unknown[]).map(transformProduct) : [],\n item_recommendations: Array.isArray(extensions.item_recommendations) ? (extensions.item_recommendations as unknown[]).map(transformProduct) : [],\n popular_brands: Array.isArray(extensions.popular_brands) ? extensions.popular_brands as PopularBrand[] : [],\n filtered_tabs: Array.isArray(extensions.filtered_tabs) ? (extensions.filtered_tabs as unknown[]).map(transformFilteredTab) : [],\n processing_time_ms: typeof extensions.processing_time_ms === 'number' ? extensions.processing_time_ms : undefined,\n cached_at: typeof extensions.cached_at === 'string' ? extensions.cached_at : undefined,\n };\n setDropdownRecommendations(recommendations);\n\n // Extract metadata from raw response\n const raw = response.raw as Record<string, unknown> | undefined;\n const rawResultsArr = raw?.results as unknown[] | undefined;\n const rawResult = (rawResultsArr?.[0] ?? raw ?? {}) as Record<string, unknown>;\n const num = (v: unknown): number => (typeof v === 'number' && !Number.isNaN(v) ? v : 0);\n const str = (v: unknown): string => (typeof v === 'string' ? v : '');\n setProcessingTimeMs(typeof rawResult.processingTimeMS === 'number' ? rawResult.processingTimeMS : null);\n setTotalHits(num(rawResult.nbHits) || transformedSuggestions.length);\n setCurrentPage(num(rawResult.page) || 0);\n setTotalPages(num(rawResult.nbPages) || 1);\n setOriginalQuery(str(rawResult.query) || searchQuery);\n\n // Callback\n if (onSuggestionsLoaded) {\n onSuggestionsLoaded({\n suggestions: transformedSuggestions,\n nbHits: num(rawResult.nbHits) || transformedSuggestions.length,\n page: num(rawResult.page) || 0,\n nbPages: num(rawResult.nbPages) || 1,\n hitsPerPage: num(rawResult.hitsPerPage) || maxSuggestions,\n processingTimeMS: typeof rawResult.processingTimeMS === 'number' ? rawResult.processingTimeMS : undefined,\n query: str(rawResult.query) || searchQuery,\n dropdownRecommendations: recommendations,\n results: Array.isArray(response.results) ? response.results : undefined,\n extensions,\n });\n }\n\n log.verbose('Query suggestions loaded', {\n query: searchQuery,\n suggestionsCount: transformedSuggestions.length,\n hasRecommendations: Object.keys(recommendations).some(\n k => Array.isArray((recommendations as any)[k]) && (recommendations as any)[k].length > 0\n ),\n });\n } catch (err) {\n if (!mountedRef.current) return;\n \n const error = err instanceof Error ? err : new Error(String(err));\n if (error.name === 'AbortError') return;\n \n log.error('Failed to fetch query suggestions', { query: searchQuery, error: error.message });\n setError(error);\n setSuggestions([]);\n setDropdownRecommendations(null);\n \n if (onError) {\n onError(error);\n }\n } finally {\n if (mountedRef.current) {\n setLoading(false);\n }\n }\n }, [\n client,\n maxSuggestions,\n includeDropdownRecommendations,\n includeCategories,\n includeFacets,\n maxCategories,\n maxFacets,\n filteredTabs,\n minPopularity,\n timeRange,\n disableTypoTolerance,\n analyticsTags,\n onSuggestionsLoaded,\n onError,\n ]);\n\n // Debounced fetch effect\n useEffect(() => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n if (!enabled || query.length < minQueryLength) {\n setSuggestions([]);\n setLoading(false);\n setError(null);\n return;\n }\n\n setLoading(true);\n\n debounceTimerRef.current = setTimeout(() => {\n fetchSuggestions(query);\n }, debounceMs);\n\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, [query, enabled, minQueryLength, debounceMs, fetchSuggestions]);\n\n // Recent search management\n const addRecentSearch = useCallback((searchQuery: string, resultsCount?: number) => {\n if (!enableRecentSearches || !searchQuery.trim()) return;\n\n setRecentSearches(prev => {\n // Remove existing entry for same query\n const filtered = prev.filter(s => s.query.toLowerCase() !== searchQuery.toLowerCase());\n // Add new entry at the beginning\n const newSearch: RecentSearch = {\n query: searchQuery.trim(),\n timestamp: Date.now(),\n resultsCount,\n };\n const updated = [newSearch, ...filtered].slice(0, maxRecentSearches);\n saveRecentSearchesToStorage(recentSearchesKey, updated);\n return updated;\n });\n }, [enableRecentSearches, maxRecentSearches, recentSearchesKey]);\n\n const removeRecentSearch = useCallback((searchQuery: string) => {\n setRecentSearches(prev => {\n const updated = prev.filter(s => s.query !== searchQuery);\n saveRecentSearchesToStorage(recentSearchesKey, updated);\n return updated;\n });\n }, [recentSearchesKey]);\n\n const clearRecentSearches = useCallback(() => {\n setRecentSearches([]);\n saveRecentSearchesToStorage(recentSearchesKey, []);\n }, [recentSearchesKey]);\n\n // Manual refetch\n const refetch = useCallback(async () => {\n if (query.length >= minQueryLength) {\n await fetchSuggestions(query);\n }\n }, [query, minQueryLength, fetchSuggestions]);\n\n // Derived values\n const trendingSearches = dropdownRecommendations?.trending_searches || [];\n const topSearches = dropdownRecommendations?.top_searches || [];\n const relatedSearches = dropdownRecommendations?.related_searches || [];\n const popularBrands = dropdownRecommendations?.popular_brands || [];\n const filteredTabsResult = dropdownRecommendations?.filtered_tabs || [];\n const trendingProducts = dropdownRecommendations?.trending_products || [];\n\n const hasContent = useMemo(() => {\n return (\n suggestions.length > 0 ||\n recentSearches.length > 0 ||\n trendingSearches.length > 0 ||\n topSearches.length > 0 ||\n relatedSearches.length > 0 ||\n popularBrands.length > 0 ||\n filteredTabsResult.length > 0 ||\n trendingProducts.length > 0\n );\n }, [\n suggestions,\n recentSearches,\n trendingSearches,\n topSearches,\n relatedSearches,\n popularBrands,\n filteredTabsResult,\n trendingProducts,\n ]);\n\n // Get all navigable items for keyboard navigation\n const getAllNavigableItems = useCallback((): NavigableItem[] => {\n const items: NavigableItem[] = [];\n let index = 0;\n\n // Recent searches first (when query is empty)\n if (query.length === 0 && recentSearches.length > 0) {\n recentSearches.forEach(search => {\n items.push({ type: 'recent', index: index++, data: search });\n });\n }\n\n // Suggestions\n suggestions.forEach(suggestion => {\n items.push({ type: 'suggestion', index: index++, data: suggestion });\n });\n\n // Trending searches\n trendingSearches.forEach(trending => {\n items.push({ type: 'trending', index: index++, data: trending as TrendingSearch });\n });\n\n // Products\n trendingProducts.forEach(product => {\n items.push({ type: 'product', index: index++, data: product });\n });\n\n // Brands\n popularBrands.forEach(brand => {\n items.push({ type: 'brand', index: index++, data: brand as PopularBrand });\n });\n\n return items;\n }, [query, recentSearches, suggestions, trendingSearches, trendingProducts, popularBrands]);\n\n return {\n suggestions,\n loading,\n error,\n dropdownRecommendations,\n trendingSearches,\n topSearches,\n relatedSearches,\n popularBrands,\n filteredTabs: filteredTabsResult,\n trendingProducts,\n recentSearches,\n processingTimeMs,\n totalHits,\n currentPage,\n totalPages,\n originalQuery,\n addRecentSearch,\n removeRecentSearch,\n clearRecentSearches,\n refetch,\n hasContent,\n getAllNavigableItems,\n };\n}\n\nexport default useQuerySuggestionsEnhanced;\n","/**\n * QuerySuggestionsDropdown Component\n * \n * Classic dropdown variant with:\n * - Highlighted matches\n * - Keyboard navigation\n * - Recent searches\n * - Customizable styling\n * - Analytics tracking\n * - Accessibility support\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useQuerySuggestionsEnhanced } from '../hooks/useQuerySuggestionsEnhanced';\nimport { clsx } from 'clsx';\nimport type {\n SuggestionItem,\n RecentSearch,\n QuerySuggestionsClassNames,\n HighlightConfig,\n KeyboardNavConfig,\n AnimationConfig,\n QuerySuggestionsEventHandlers,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface QuerySuggestionsDropdownProps extends QuerySuggestionsEventHandlers {\n /** Current query string */\n query: string;\n /** Whether the dropdown is visible */\n isOpen?: boolean;\n /** Maximum suggestions to display */\n maxSuggestions?: number;\n /** Minimum query length to trigger suggestions */\n minQueryLength?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Show recent searches section */\n showRecentSearches?: boolean;\n /** Maximum recent searches to display */\n maxRecentSearches?: number;\n /** Show suggestion counts */\n showCounts?: boolean;\n /** Show loading state */\n showLoading?: boolean;\n /** Show empty state when no results */\n showEmptyState?: boolean;\n /** Highlight configuration */\n highlight?: HighlightConfig;\n /** Keyboard navigation configuration */\n keyboardNav?: KeyboardNavConfig;\n /** Animation configuration */\n animation?: AnimationConfig;\n /** Custom class names */\n classNames?: QuerySuggestionsClassNames;\n /** Custom CSS styles */\n style?: React.CSSProperties;\n /** Custom render for suggestion item */\n renderSuggestion?: (\n suggestion: SuggestionItem,\n index: number,\n isActive: boolean,\n highlight: (text: string) => React.ReactNode\n ) => React.ReactNode;\n /** Custom render for recent search item */\n renderRecentSearch?: (\n search: RecentSearch,\n index: number,\n isActive: boolean\n ) => React.ReactNode;\n /** Custom render for loading state */\n renderLoading?: () => React.ReactNode;\n /** Custom render for empty state */\n renderEmpty?: () => React.ReactNode;\n /** Custom footer content */\n footer?: React.ReactNode;\n /** Position of dropdown */\n position?: 'absolute' | 'fixed';\n /** Dropdown width */\n width?: string | number;\n /** Z-index for dropdown */\n zIndex?: number;\n /** Input element ref for positioning */\n inputRef?: React.RefObject<HTMLInputElement>;\n /** Close on click outside */\n closeOnClickOutside?: boolean;\n /** Close on escape key */\n closeOnEscape?: boolean;\n /** ARIA label */\n ariaLabel?: string;\n}\n\nexport interface QuerySuggestionsDropdownRef {\n /** Select the currently active item */\n selectActive: () => void;\n /** Navigate to next item */\n navigateNext: () => void;\n /** Navigate to previous item */\n navigatePrevious: () => void;\n /** Reset selection */\n resetSelection: () => void;\n /** Get active index */\n getActiveIndex: () => number;\n /** Get total items count */\n getTotalItems: () => number;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst defaultStyles = {\n container: {\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: 'var(--seekora-border-radius, 8px)',\n boxShadow: 'var(--seekora-shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05))',\n maxHeight: '400px',\n overflowY: 'auto' as const,\n overflowX: 'hidden' as const,\n },\n section: {\n padding: '8px 0',\n },\n sectionTitle: {\n fontSize: '12px',\n fontWeight: 600,\n color: 'var(--seekora-text-secondary, #6b7280)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n padding: '8px 16px 4px',\n margin: 0,\n },\n suggestionItem: {\n display: 'flex',\n alignItems: 'center',\n padding: '10px 16px',\n cursor: 'pointer',\n transition: 'background-color 150ms ease',\n fontSize: '14px',\n color: 'var(--seekora-text-primary, #111827)',\n gap: '12px',\n },\n suggestionItemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f3f4f6)',\n },\n suggestionQuery: {\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n suggestionCount: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n marginLeft: 'auto',\n flexShrink: 0,\n },\n highlight: {\n fontWeight: 600,\n color: 'var(--seekora-text-primary, #111827)',\n backgroundColor: 'var(--seekora-highlight-bg, #fef3c7)',\n padding: '0 2px',\n borderRadius: '2px',\n },\n recentIcon: {\n width: '16px',\n height: '16px',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n flexShrink: 0,\n },\n removeButton: {\n padding: '4px',\n borderRadius: '4px',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n opacity: 0,\n transition: 'opacity 150ms ease, color 150ms ease',\n },\n removeButtonVisible: {\n opacity: 1,\n },\n loadingState: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px 16px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n fontSize: '14px',\n gap: '8px',\n },\n emptyState: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px 16px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n fontSize: '14px',\n textAlign: 'center' as const,\n },\n divider: {\n height: '1px',\n backgroundColor: 'var(--seekora-border-color, #e5e7eb)',\n margin: '4px 0',\n },\n footer: {\n borderTop: '1px solid var(--seekora-border-color, #e5e7eb)',\n padding: '8px 16px',\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n keyboardHint: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n fontSize: '11px',\n },\n keyboardKey: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '20px',\n height: '18px',\n padding: '0 4px',\n borderRadius: '3px',\n backgroundColor: 'var(--seekora-bg-secondary, #f3f4f6)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n fontSize: '10px',\n fontWeight: 500,\n },\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon: React.FC<{ className?: string; style?: React.CSSProperties }> = ({ className, style }) => (\n <svg className={className} style={style} viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ClockIcon: React.FC<{ className?: string; style?: React.CSSProperties }> = ({ className, style }) => (\n <svg className={className} style={style} viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst CloseIcon: React.FC<{ className?: string; style?: React.CSSProperties }> = ({ className, style }) => (\n <svg className={className} style={style} viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst LoadingSpinner: React.FC<{ style?: React.CSSProperties }> = ({ style }) => (\n <svg style={{ animation: 'spin 1s linear infinite', ...style }} viewBox=\"0 0 24 24\" width=\"20\" height=\"20\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"3\" fill=\"none\" opacity=\"0.25\" />\n <path fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const QuerySuggestionsDropdown = forwardRef<\n QuerySuggestionsDropdownRef,\n QuerySuggestionsDropdownProps\n>(function QuerySuggestionsDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n maxSuggestions = 8,\n minQueryLength = 1,\n debounceMs = 200,\n showRecentSearches = true,\n maxRecentSearches = 5,\n showCounts = true,\n showLoading = true,\n showEmptyState = true,\n highlight = { enabled: true, preTag: '<mark>', postTag: '</mark>' },\n keyboardNav = { enabled: true },\n animation = { enabled: true, duration: 150, entrance: 'fade' },\n classNames = {},\n style,\n renderSuggestion,\n renderRecentSearch,\n renderLoading,\n renderEmpty,\n footer,\n position = 'absolute',\n width = '100%',\n zIndex = 1000,\n closeOnClickOutside = true,\n closeOnEscape = true,\n ariaLabel = 'Search suggestions',\n onSuggestionSelect,\n onRecentSearchClick,\n onRecentSearchRemove,\n onOpen,\n onClose,\n onNavigate,\n } = props;\n\n const { client, theme } = useSearchContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [isVisible, setIsVisible] = useState(false);\n\n // Use enhanced hook\n const {\n suggestions,\n loading,\n error,\n recentSearches,\n addRecentSearch,\n removeRecentSearch,\n hasContent,\n } = useQuerySuggestionsEnhanced({\n client,\n query,\n enabled: isOpen && query.length >= minQueryLength,\n debounceMs,\n maxSuggestions,\n minQueryLength,\n enableRecentSearches: showRecentSearches,\n maxRecentSearches,\n });\n\n // Calculate all navigable items\n const allItems = useMemo(() => {\n const items: Array<{ type: 'recent' | 'suggestion'; data: RecentSearch | SuggestionItem }> = [];\n \n // Add recent searches if query is empty or short\n if (showRecentSearches && query.length === 0 && recentSearches.length > 0) {\n recentSearches.slice(0, maxRecentSearches).forEach(search => {\n items.push({ type: 'recent', data: search });\n });\n }\n \n // Add suggestions\n suggestions.forEach(suggestion => {\n items.push({ type: 'suggestion', data: suggestion });\n });\n \n return items;\n }, [suggestions, recentSearches, query, showRecentSearches, maxRecentSearches]);\n\n // Handle visibility animation\n useEffect(() => {\n if (isOpen && (hasContent || loading)) {\n setIsVisible(true);\n onOpen?.();\n } else {\n if (animation.enabled) {\n const timer = setTimeout(() => setIsVisible(false), animation.duration);\n return () => clearTimeout(timer);\n } else {\n setIsVisible(false);\n }\n onClose?.();\n }\n }, [isOpen, hasContent, loading, animation.enabled, animation.duration, onOpen, onClose]);\n\n // Reset active index when items change\n useEffect(() => {\n setActiveIndex(-1);\n }, [allItems.length]);\n\n // Keyboard navigation\n const navigateNext = useCallback(() => {\n if (!keyboardNav.enabled) return;\n setActiveIndex(prev => {\n const next = prev < allItems.length - 1 ? prev + 1 : 0;\n onNavigate?.('down', next);\n return next;\n });\n }, [keyboardNav.enabled, allItems.length, onNavigate]);\n\n const navigatePrevious = useCallback(() => {\n if (!keyboardNav.enabled) return;\n setActiveIndex(prev => {\n const next = prev > 0 ? prev - 1 : allItems.length - 1;\n onNavigate?.('up', next);\n return next;\n });\n }, [keyboardNav.enabled, allItems.length, onNavigate]);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) return;\n \n const item = allItems[activeIndex];\n if (item.type === 'recent') {\n const search = item.data as RecentSearch;\n onRecentSearchClick?.(search);\n } else {\n const suggestion = item.data as SuggestionItem;\n onSuggestionSelect?.(suggestion);\n addRecentSearch(suggestion.query, suggestion.count);\n }\n }, [activeIndex, allItems, onRecentSearchClick, onSuggestionSelect, addRecentSearch]);\n\n const resetSelection = useCallback(() => {\n setActiveIndex(-1);\n }, []);\n\n // Expose methods via ref\n useImperativeHandle(ref, () => ({\n selectActive,\n navigateNext,\n navigatePrevious,\n resetSelection,\n getActiveIndex: () => activeIndex,\n getTotalItems: () => allItems.length,\n }), [selectActive, navigateNext, navigatePrevious, resetSelection, activeIndex, allItems.length]);\n\n // Click outside handler\n useEffect(() => {\n if (!closeOnClickOutside || !isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n onClose?.();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [closeOnClickOutside, isOpen, onClose]);\n\n // Highlight text helper\n const highlightText = useCallback((text: string, searchQuery?: string): React.ReactNode => {\n if (!highlight.enabled || !searchQuery) {\n return text;\n }\n\n const parts = text.split(new RegExp(`(${searchQuery})`, 'gi'));\n return parts.map((part, i) => \n part.toLowerCase() === searchQuery.toLowerCase() ? (\n <mark\n key={i}\n className={classNames.suggestionItemHighlight}\n style={defaultStyles.highlight}\n >\n {part}\n </mark>\n ) : part\n );\n }, [highlight.enabled, classNames.suggestionItemHighlight]);\n\n // Parse highlighted query from API\n const parseHighlightedQuery = useCallback((suggestion: SuggestionItem): React.ReactNode => {\n if (suggestion.highlightedQuery && highlight.enabled) {\n // Parse the highlighted HTML\n return (\n <span\n dangerouslySetInnerHTML={{ __html: suggestion.highlightedQuery }}\n style={{ display: 'inline' }}\n />\n );\n }\n return highlightText(suggestion.query, query);\n }, [highlight.enabled, highlightText, query]);\n\n // Render helpers\n const renderSuggestionItem = (suggestion: SuggestionItem, index: number, isActive: boolean) => {\n if (renderSuggestion) {\n return renderSuggestion(suggestion, index, isActive, (text) => highlightText(text, query));\n }\n\n return (\n <div\n style={{\n ...defaultStyles.suggestionItem,\n ...(isActive ? defaultStyles.suggestionItemActive : {}),\n }}\n >\n <SearchIcon style={defaultStyles.recentIcon} />\n <span style={defaultStyles.suggestionQuery}>\n {parseHighlightedQuery(suggestion)}\n </span>\n {showCounts && suggestion.count !== undefined && (\n <span style={defaultStyles.suggestionCount}>\n {suggestion.count.toLocaleString()}\n </span>\n )}\n </div>\n );\n };\n\n const renderRecentSearchItem = (search: RecentSearch, index: number, isActive: boolean) => {\n if (renderRecentSearch) {\n return renderRecentSearch(search, index, isActive);\n }\n\n return (\n <div\n style={{\n ...defaultStyles.suggestionItem,\n ...(isActive ? defaultStyles.suggestionItemActive : {}),\n }}\n >\n <ClockIcon style={defaultStyles.recentIcon} />\n <span style={defaultStyles.suggestionQuery}>{search.query}</span>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n removeRecentSearch(search.query);\n onRecentSearchRemove?.(search);\n }}\n style={{\n ...defaultStyles.removeButton,\n ...(isActive ? defaultStyles.removeButtonVisible : {}),\n }}\n aria-label={`Remove ${search.query} from recent searches`}\n >\n <CloseIcon />\n </button>\n </div>\n );\n };\n\n // Don't render if not visible\n if (!isVisible && !isOpen) {\n return null;\n }\n\n // Determine what to show\n const showRecent = showRecentSearches && query.length === 0 && recentSearches.length > 0;\n const showSuggestions = suggestions.length > 0;\n const showEmpty = showEmptyState && !loading && !showRecent && !showSuggestions && query.length >= minQueryLength;\n\n // Animation styles\n const animationStyle: React.CSSProperties = animation.enabled\n ? {\n opacity: isOpen ? 1 : 0,\n transform: isOpen ? 'translateY(0)' : 'translateY(-8px)',\n transition: `opacity ${animation.duration}ms ease, transform ${animation.duration}ms ease`,\n }\n : {};\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n className={clsx('seekora-suggestions-dropdown', classNames.root, classNames.container)}\n style={{\n position,\n width,\n zIndex,\n ...defaultStyles.container,\n ...animationStyle,\n ...style,\n }}\n >\n {/* Loading State */}\n {loading && showLoading && (\n <div className={classNames.loadingState} style={defaultStyles.loadingState}>\n {renderLoading ? renderLoading() : (\n <>\n <LoadingSpinner />\n <span>Searching...</span>\n </>\n )}\n </div>\n )}\n\n {/* Recent Searches Section */}\n {!loading && showRecent && (\n <div className={clsx('seekora-suggestions-section', classNames.section, classNames.recentSearches)}>\n <div className={classNames.sectionTitle} style={defaultStyles.sectionTitle}>\n Recent Searches\n </div>\n {recentSearches.slice(0, maxRecentSearches).map((search, index) => {\n const isActive = activeIndex === index;\n return (\n <div\n key={`recent-${search.query}-${index}`}\n role=\"option\"\n aria-selected={isActive}\n className={clsx(\n classNames.recentItem,\n isActive && classNames.suggestionItemActive\n )}\n onClick={() => {\n onRecentSearchClick?.(search);\n }}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {renderRecentSearchItem(search, index, isActive)}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Divider */}\n {!loading && showRecent && showSuggestions && (\n <div style={defaultStyles.divider} />\n )}\n\n {/* Suggestions Section */}\n {!loading && showSuggestions && (\n <div className={clsx('seekora-suggestions-section', classNames.section, classNames.suggestionsList)}>\n {query.length > 0 && (\n <div className={classNames.sectionTitle} style={defaultStyles.sectionTitle}>\n Suggestions\n </div>\n )}\n {suggestions.map((suggestion, index) => {\n const itemIndex = showRecent ? recentSearches.length + index : index;\n const isActive = activeIndex === itemIndex;\n return (\n <div\n key={suggestion.objectID || `suggestion-${index}`}\n role=\"option\"\n aria-selected={isActive}\n className={clsx(\n classNames.suggestionItem,\n isActive && classNames.suggestionItemActive\n )}\n onClick={() => {\n onSuggestionSelect?.(suggestion);\n addRecentSearch(suggestion.query, suggestion.count);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n >\n {renderSuggestionItem(suggestion, index, isActive)}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Empty State */}\n {showEmpty && (\n <div className={classNames.emptyState} style={defaultStyles.emptyState}>\n {renderEmpty ? renderEmpty() : (\n <>\n <SearchIcon style={{ width: 24, height: 24, marginBottom: 8, opacity: 0.5 }} />\n <span>No suggestions found for \"{query}\"</span>\n </>\n )}\n </div>\n )}\n\n {/* Footer */}\n {footer || (keyboardNav.enabled && allItems.length > 0) ? (\n <div className={classNames.footer} style={defaultStyles.footer}>\n {footer || (\n <div style={defaultStyles.keyboardHint}>\n <span style={defaultStyles.keyboardKey}>↑</span>\n <span style={defaultStyles.keyboardKey}>↓</span>\n <span>to navigate</span>\n <span style={defaultStyles.keyboardKey}>↵</span>\n <span>to select</span>\n <span style={defaultStyles.keyboardKey}>esc</span>\n <span>to close</span>\n </div>\n )}\n </div>\n ) : null}\n\n {/* Animation keyframes */}\n <style>{`\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n .seekora-suggestions-dropdown mark {\n background-color: var(--seekora-highlight-bg, #fef3c7);\n font-weight: 600;\n padding: 0 2px;\n border-radius: 2px;\n }\n .seekora-suggestions-dropdown [role=\"option\"]:hover button {\n opacity: 1;\n }\n `}</style>\n </div>\n );\n});\n\nexport default QuerySuggestionsDropdown;\n","/**\n * RichQuerySuggestions Component\n * \n * Advanced multi-section dropdown with:\n * - Suggestions with categories\n * - Trending searches\n * - Recent searches\n * - Top searches (popular)\n * - Related searches\n * - Configurable sections\n * - Rich styling options\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useQuerySuggestionsEnhanced } from '../hooks/useQuerySuggestionsEnhanced';\nimport { clsx } from 'clsx';\nimport type {\n SuggestionItem,\n RecentSearch,\n TrendingSearch,\n TopSearch,\n RelatedSearch,\n SuggestionCategory,\n QuerySuggestionsClassNames,\n QuerySuggestionsEventHandlers,\n DropdownSection,\n DropdownSectionConfig,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface RichQuerySuggestionsProps extends QuerySuggestionsEventHandlers {\n /** Current query string */\n query: string;\n /** Whether the dropdown is visible */\n isOpen?: boolean;\n /** Section configuration */\n sections?: DropdownSectionConfig[];\n /** Maximum suggestions per section */\n maxSuggestionsPerSection?: number;\n /** Minimum query length */\n minQueryLength?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Include dropdown recommendations from API */\n includeDropdownRecommendations?: boolean;\n /** Include categories in suggestions */\n includeCategories?: boolean;\n /** Max categories per suggestion */\n maxCategories?: number;\n /** Show suggestion counts */\n showCounts?: boolean;\n /** Show category counts */\n showCategoryCounts?: boolean;\n /** Show section headers */\n showSectionHeaders?: boolean;\n /** Custom class names */\n classNames?: QuerySuggestionsClassNames;\n /** Custom CSS styles */\n style?: React.CSSProperties;\n /** Custom render for suggestion */\n renderSuggestion?: (suggestion: SuggestionItem, isActive: boolean) => React.ReactNode;\n /** Custom render for category pill */\n renderCategory?: (category: SuggestionCategory) => React.ReactNode;\n /** Custom render for trending item */\n renderTrendingItem?: (item: TrendingSearch, index: number) => React.ReactNode;\n /** Custom render for recent item */\n renderRecentItem?: (item: RecentSearch) => React.ReactNode;\n /** Custom header content */\n header?: React.ReactNode;\n /** Custom footer content */\n footer?: React.ReactNode;\n /** Dropdown width */\n width?: string | number;\n /** Dropdown max height */\n maxHeight?: string | number;\n /** Z-index */\n zIndex?: number;\n /** ARIA label */\n ariaLabel?: string;\n /** Analytics tags */\n analyticsTags?: string[];\n}\n\nexport interface RichQuerySuggestionsRef {\n getActiveIndex: () => number;\n setActiveIndex: (index: number) => void;\n selectActive: () => void;\n navigateNext: () => void;\n navigatePrevious: () => void;\n getTotalItems: () => number;\n}\n\n// Default section order\nconst DEFAULT_SECTIONS: DropdownSectionConfig[] = [\n { id: 'recent', title: 'Recent Searches', maxItems: 5, enabled: true, order: 1 },\n { id: 'suggestions', title: 'Suggestions', maxItems: 8, enabled: true, order: 2 },\n { id: 'trending', title: 'Trending', maxItems: 5, enabled: true, order: 3 },\n { id: 'categories', title: 'Categories', maxItems: 6, enabled: false, order: 4 },\n];\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: 'var(--seekora-border-radius-lg, 12px)',\n boxShadow: 'var(--seekora-shadow-xl, 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04))',\n overflow: 'hidden',\n },\n header: {\n padding: '12px 16px',\n borderBottom: '1px solid var(--seekora-border-color, #e5e7eb)',\n backgroundColor: 'var(--seekora-bg-secondary, #f9fafb)',\n },\n content: {\n overflowY: 'auto' as const,\n overflowX: 'hidden' as const,\n },\n section: {\n padding: '8px 0',\n },\n sectionHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 16px 4px',\n },\n sectionTitle: {\n fontSize: '11px',\n fontWeight: 600,\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n margin: 0,\n },\n sectionAction: {\n fontSize: '12px',\n color: 'var(--seekora-primary, #3b82f6)',\n cursor: 'pointer',\n textDecoration: 'none',\n fontWeight: 500,\n },\n item: {\n display: 'flex',\n alignItems: 'flex-start',\n padding: '10px 16px',\n cursor: 'pointer',\n transition: 'background-color 100ms ease',\n gap: '12px',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f3f4f6)',\n },\n itemIcon: {\n width: '18px',\n height: '18px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n flexShrink: 0,\n marginTop: '2px',\n },\n itemContent: {\n flex: 1,\n minWidth: 0,\n },\n itemQuery: {\n fontSize: '14px',\n color: 'var(--seekora-text-primary, #111827)',\n fontWeight: 500,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n itemMeta: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n marginTop: '2px',\n },\n itemCount: {\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n flexShrink: 0,\n },\n categoriesContainer: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: '6px',\n marginTop: '6px',\n },\n categoryPill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '3px 8px',\n fontSize: '11px',\n fontWeight: 500,\n color: 'var(--seekora-text-secondary, #6b7280)',\n backgroundColor: 'var(--seekora-bg-tertiary, #f3f4f6)',\n borderRadius: '12px',\n cursor: 'pointer',\n transition: 'all 100ms ease',\n },\n categoryPillHover: {\n backgroundColor: 'var(--seekora-primary-light, #dbeafe)',\n color: 'var(--seekora-primary, #3b82f6)',\n },\n categoryCount: {\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n },\n trendingList: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: '8px',\n padding: '8px 16px',\n },\n trendingChip: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #374151)',\n backgroundColor: 'var(--seekora-bg-secondary, #f3f4f6)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: '20px',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n },\n trendingChipHover: {\n borderColor: 'var(--seekora-primary, #3b82f6)',\n backgroundColor: 'var(--seekora-primary-light, #eff6ff)',\n },\n trendingIcon: {\n width: '14px',\n height: '14px',\n color: 'var(--seekora-success, #10b981)',\n },\n trendingRank: {\n width: '18px',\n height: '18px',\n borderRadius: '50%',\n backgroundColor: 'var(--seekora-primary, #3b82f6)',\n color: 'white',\n fontSize: '10px',\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n removeButton: {\n padding: '4px',\n marginLeft: 'auto',\n borderRadius: '4px',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n opacity: 0,\n transition: 'opacity 100ms ease',\n },\n divider: {\n height: '1px',\n backgroundColor: 'var(--seekora-border-color, #e5e7eb)',\n margin: '4px 16px',\n },\n footer: {\n padding: '12px 16px',\n borderTop: '1px solid var(--seekora-border-color, #e5e7eb)',\n backgroundColor: 'var(--seekora-bg-secondary, #f9fafb)',\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n },\n loadingOverlay: {\n position: 'absolute' as const,\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.8)',\n },\n emptyState: {\n padding: '32px 16px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #6b7280)',\n },\n highlight: {\n backgroundColor: 'var(--seekora-highlight-bg, #fef9c3)',\n fontWeight: 600,\n borderRadius: '2px',\n padding: '0 1px',\n },\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={styles.itemIcon}>\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={styles.itemIcon}>\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={styles.trendingIcon}>\n <path fillRule=\"evenodd\" d=\"M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ArrowIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: 16, height: 16 }}>\n <path fillRule=\"evenodd\" d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst CloseIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: 14, height: 14 }}>\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const RichQuerySuggestions = forwardRef<RichQuerySuggestionsRef, RichQuerySuggestionsProps>(\n function RichQuerySuggestions(props, ref) {\n const {\n query,\n isOpen = true,\n sections = DEFAULT_SECTIONS,\n maxSuggestionsPerSection = 8,\n minQueryLength = 0,\n debounceMs = 200,\n includeDropdownRecommendations = true,\n includeCategories = true,\n maxCategories = 3,\n showCounts = true,\n showCategoryCounts = true,\n showSectionHeaders = true,\n classNames = {},\n style,\n renderSuggestion,\n renderCategory,\n renderTrendingItem,\n renderRecentItem,\n header,\n footer,\n width = '100%',\n maxHeight = '480px',\n zIndex = 1000,\n ariaLabel = 'Search suggestions',\n analyticsTags,\n onSuggestionSelect,\n onCategoryClick,\n onRecentSearchClick,\n onRecentSearchRemove,\n onViewAllClick,\n onOpen,\n onClose,\n } = props;\n\n const { client } = useSearchContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredCategory, setHoveredCategory] = useState<string | null>(null);\n\n // Use enhanced hook\n const {\n suggestions,\n loading,\n trendingSearches,\n topSearches,\n recentSearches,\n addRecentSearch,\n removeRecentSearch,\n hasContent,\n } = useQuerySuggestionsEnhanced({\n client,\n query,\n enabled: isOpen,\n debounceMs,\n maxSuggestions: maxSuggestionsPerSection,\n minQueryLength,\n includeDropdownRecommendations,\n includeCategories,\n maxCategories,\n analyticsTags,\n enableRecentSearches: true,\n });\n\n // Sort and filter sections\n const enabledSections = useMemo(() => {\n return sections\n .filter(s => s.enabled !== false)\n .sort((a, b) => (a.order || 0) - (b.order || 0));\n }, [sections]);\n\n // Get section config\n const getSectionConfig = (id: DropdownSection): DropdownSectionConfig | undefined => {\n return enabledSections.find(s => s.id === id);\n };\n\n // Build flat list of all navigable items\n const allItems = useMemo(() => {\n const items: Array<{\n type: 'recent' | 'suggestion' | 'trending' | 'category';\n data: any;\n sectionIndex: number;\n }> = [];\n\n enabledSections.forEach((section, sectionIndex) => {\n switch (section.id) {\n case 'recent':\n if (query.length === 0) {\n recentSearches.slice(0, section.maxItems || 5).forEach(search => {\n items.push({ type: 'recent', data: search, sectionIndex });\n });\n }\n break;\n case 'suggestions':\n suggestions.slice(0, section.maxItems || maxSuggestionsPerSection).forEach(suggestion => {\n items.push({ type: 'suggestion', data: suggestion, sectionIndex });\n });\n break;\n case 'trending':\n if (query.length === 0) {\n (trendingSearches.length > 0 ? trendingSearches : topSearches)\n .slice(0, section.maxItems || 5)\n .forEach(trending => {\n items.push({ type: 'trending', data: trending, sectionIndex });\n });\n }\n break;\n }\n });\n\n return items;\n }, [enabledSections, query, recentSearches, suggestions, trendingSearches, topSearches, maxSuggestionsPerSection]);\n\n // Navigation functions\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => (prev < allItems.length - 1 ? prev + 1 : 0));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => (prev > 0 ? prev - 1 : allItems.length - 1));\n }, [allItems.length]);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) return;\n\n const item = allItems[activeIndex];\n switch (item.type) {\n case 'recent':\n onRecentSearchClick?.(item.data);\n break;\n case 'suggestion':\n onSuggestionSelect?.(item.data);\n addRecentSearch(item.data.query, item.data.count);\n break;\n case 'trending':\n onSuggestionSelect?.({ query: item.data.query, count: item.data.count } as SuggestionItem);\n addRecentSearch(item.data.query);\n break;\n }\n }, [activeIndex, allItems, onRecentSearchClick, onSuggestionSelect, addRecentSearch]);\n\n // Expose ref methods\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n getTotalItems: () => allItems.length,\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, allItems.length]);\n\n // Highlight query in text\n const highlightQuery = (text: string): React.ReactNode => {\n if (!query) return text;\n const parts = text.split(new RegExp(`(${query})`, 'gi'));\n return parts.map((part, i) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <span key={i} style={styles.highlight}>{part}</span>\n ) : part\n );\n };\n\n // Get item index offset for a section\n const getItemIndex = (sectionId: DropdownSection, itemIndex: number): number => {\n let offset = 0;\n for (const item of allItems) {\n const sectionConfig = enabledSections[item.sectionIndex];\n if (sectionConfig.id === sectionId) {\n return offset + itemIndex;\n }\n if (item.sectionIndex < enabledSections.findIndex(s => s.id === sectionId)) {\n offset++;\n }\n }\n return offset + itemIndex;\n };\n\n // Render recent searches section\n const renderRecentSection = () => {\n const config = getSectionConfig('recent');\n if (!config || query.length > 0 || recentSearches.length === 0) return null;\n\n return (\n <div className={clsx('seekora-section', 'seekora-section-recent', classNames.section)}>\n {showSectionHeaders && (\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>{config.title || 'Recent Searches'}</h3>\n {recentSearches.length > (config.maxItems || 5) && (\n <button\n style={styles.sectionAction}\n onClick={() => onViewAllClick?.('recent')}\n >\n View all\n </button>\n )}\n </div>\n )}\n {recentSearches.slice(0, config.maxItems || 5).map((search, index) => {\n const itemIndex = getItemIndex('recent', index);\n const isActive = activeIndex === itemIndex;\n\n return (\n <div\n key={`recent-${search.query}`}\n role=\"option\"\n aria-selected={isActive}\n style={{ ...styles.item, ...(isActive ? styles.itemActive : {}) }}\n onClick={() => {\n onRecentSearchClick?.(search);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n className={clsx(classNames.recentItem, isActive && classNames.suggestionItemActive)}\n >\n {renderRecentItem ? renderRecentItem(search) : (\n <>\n <ClockIcon />\n <div style={styles.itemContent}>\n <p style={styles.itemQuery}>{search.query}</p>\n </div>\n <button\n style={styles.removeButton}\n onClick={(e) => {\n e.stopPropagation();\n removeRecentSearch(search.query);\n onRecentSearchRemove?.(search);\n }}\n aria-label=\"Remove\"\n >\n <CloseIcon />\n </button>\n </>\n )}\n </div>\n );\n })}\n </div>\n );\n };\n\n // Render suggestions section\n const renderSuggestionsSection = () => {\n const config = getSectionConfig('suggestions');\n if (!config || suggestions.length === 0) return null;\n\n return (\n <div className={clsx('seekora-section', 'seekora-section-suggestions', classNames.section)}>\n {showSectionHeaders && query.length > 0 && (\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>{config.title || 'Suggestions'}</h3>\n </div>\n )}\n {suggestions.slice(0, config.maxItems || maxSuggestionsPerSection).map((suggestion, index) => {\n const itemIndex = allItems.findIndex(\n (item, idx) => item.type === 'suggestion' && \n allItems.slice(0, idx).filter(i => i.type === 'suggestion').length === index\n );\n const isActive = activeIndex === itemIndex;\n\n return (\n <div\n key={suggestion.objectID || `suggestion-${index}`}\n role=\"option\"\n aria-selected={isActive}\n style={{ ...styles.item, ...(isActive ? styles.itemActive : {}) }}\n onClick={() => {\n onSuggestionSelect?.(suggestion);\n addRecentSearch(suggestion.query, suggestion.count);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n className={clsx(classNames.suggestionItem, isActive && classNames.suggestionItemActive)}\n >\n {renderSuggestion ? renderSuggestion(suggestion, isActive) : (\n <>\n <SearchIcon />\n <div style={styles.itemContent}>\n <p style={styles.itemQuery}>{highlightQuery(suggestion.query)}</p>\n {includeCategories && suggestion.categories && suggestion.categories.length > 0 && (\n <div style={styles.categoriesContainer}>\n {suggestion.categories.slice(0, maxCategories).map((category, catIndex) => (\n renderCategory ? renderCategory(category) : (\n <span\n key={`cat-${catIndex}`}\n style={{\n ...styles.categoryPill,\n ...(hoveredCategory === category.value ? styles.categoryPillHover : {}),\n }}\n onClick={(e) => {\n e.stopPropagation();\n onCategoryClick?.(category);\n }}\n onMouseEnter={() => setHoveredCategory(category.value)}\n onMouseLeave={() => setHoveredCategory(null)}\n >\n {category.value}\n {showCategoryCounts && category.count !== undefined && (\n <span style={styles.categoryCount}>({category.count})</span>\n )}\n </span>\n )\n ))}\n </div>\n )}\n </div>\n {showCounts && suggestion.count !== undefined && (\n <span style={styles.itemCount}>{suggestion.count.toLocaleString()}</span>\n )}\n </>\n )}\n </div>\n );\n })}\n </div>\n );\n };\n\n // Render trending section\n const renderTrendingSection = () => {\n const config = getSectionConfig('trending');\n const trending = trendingSearches.length > 0 ? trendingSearches : topSearches;\n if (!config || query.length > 0 || trending.length === 0) return null;\n\n return (\n <div className={clsx('seekora-section', 'seekora-section-trending', classNames.section)}>\n {showSectionHeaders && (\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>{config.title || 'Trending'}</h3>\n </div>\n )}\n <div style={styles.trendingList}>\n {trending.slice(0, config.maxItems || 5).map((item, index) => {\n const itemIndex = allItems.findIndex(\n (navItem, idx) => navItem.type === 'trending' && \n allItems.slice(0, idx).filter(i => i.type === 'trending').length === index\n );\n const isActive = activeIndex === itemIndex;\n\n return renderTrendingItem ? renderTrendingItem(item, index) : (\n <button\n key={`trending-${item.query}`}\n style={{\n ...styles.trendingChip,\n ...(isActive ? styles.trendingChipHover : {}),\n }}\n onClick={() => {\n onSuggestionSelect?.({\n query: item.query,\n count: item.count,\n } as SuggestionItem);\n addRecentSearch(item.query);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n className={clsx(classNames.trendingItem, isActive && classNames.suggestionItemActive)}\n >\n <span style={styles.trendingRank}>{index + 1}</span>\n <span>{item.query}</span>\n <TrendingIcon />\n </button>\n );\n })}\n </div>\n </div>\n );\n };\n\n // Don't render if closed or no content\n if (!isOpen) return null;\n\n const showContent = hasContent || loading || query.length === 0;\n if (!showContent) return null;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label={ariaLabel}\n className={clsx('seekora-rich-suggestions', classNames.root, classNames.container)}\n style={{\n position: 'absolute',\n width,\n zIndex,\n ...styles.container,\n ...style,\n }}\n >\n {/* Header */}\n {header && <div style={styles.header}>{header}</div>}\n\n {/* Content */}\n <div style={{ ...styles.content, maxHeight }}>\n {/* Loading overlay */}\n {loading && (\n <div style={styles.loadingOverlay}>\n <span>Loading...</span>\n </div>\n )}\n\n {/* Sections */}\n {enabledSections.map((section, index) => {\n let content: React.ReactNode = null;\n\n switch (section.id) {\n case 'recent':\n content = renderRecentSection();\n break;\n case 'suggestions':\n content = renderSuggestionsSection();\n break;\n case 'trending':\n content = renderTrendingSection();\n break;\n }\n\n if (!content) return null;\n\n return (\n <React.Fragment key={section.id}>\n {index > 0 && <div style={styles.divider} />}\n {content}\n </React.Fragment>\n );\n })}\n\n {/* Empty state when query but no suggestions */}\n {!loading && query.length > 0 && suggestions.length === 0 && (\n <div style={styles.emptyState}>\n <p>No suggestions found for \"{query}\"</p>\n </div>\n )}\n </div>\n\n {/* Footer */}\n {footer && <div style={styles.footer}>{footer}</div>}\n\n {/* Styles */}\n <style>{`\n .seekora-rich-suggestions [role=\"option\"]:hover button {\n opacity: 1;\n }\n .seekora-rich-suggestions mark {\n background-color: var(--seekora-highlight-bg, #fef9c3);\n font-weight: 600;\n border-radius: 2px;\n padding: 0 1px;\n }\n `}</style>\n </div>\n );\n }\n);\n\nexport default RichQuerySuggestions;\n","/**\n * FederatedDropdown Component\n * \n * Full-featured federated search dropdown with:\n * - Multi-column layout (suggestions + products)\n * - Filtered tabs with product results\n * - Popular brands\n * - Trending products\n * - Category navigation\n * - Responsive design\n * - Rich product cards\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { useQuerySuggestionsEnhanced } from '../hooks/useQuerySuggestionsEnhanced';\nimport { clsx } from 'clsx';\nimport type {\n SuggestionItem,\n ProductItem,\n FilteredTab,\n PopularBrand,\n RecentSearch,\n QuerySuggestionsClassNames,\n QuerySuggestionsEventHandlers,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface FederatedDropdownProps extends QuerySuggestionsEventHandlers {\n /** Current query string */\n query: string;\n /** Whether the dropdown is visible */\n isOpen?: boolean;\n /** Maximum suggestions to show */\n maxSuggestions?: number;\n /** Maximum products to show per section */\n maxProducts?: number;\n /** Maximum brands to show */\n maxBrands?: number;\n /** Minimum query length */\n minQueryLength?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Filtered tabs configuration */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Show products section */\n showProducts?: boolean;\n /** Show brands section */\n showBrands?: boolean;\n /** Show filtered tabs */\n showFilteredTabs?: boolean;\n /** Show recent searches */\n showRecentSearches?: boolean;\n /** Layout mode */\n layout?: 'side-by-side' | 'stacked' | 'full-width';\n /** Products column width (for side-by-side) */\n productsColumnWidth?: string;\n /** Suggestions column width (for side-by-side) */\n suggestionsColumnWidth?: string;\n /** Show product prices */\n showPrices?: boolean;\n /** Currency symbol */\n currencySymbol?: string;\n /** Custom class names */\n classNames?: QuerySuggestionsClassNames;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Custom product card renderer */\n renderProduct?: (product: ProductItem, index: number) => React.ReactNode;\n /** Custom suggestion renderer */\n renderSuggestion?: (suggestion: SuggestionItem, index: number, isActive: boolean) => React.ReactNode;\n /** Custom brand renderer */\n renderBrand?: (brand: PopularBrand, index: number) => React.ReactNode;\n /** Custom tab renderer */\n renderTab?: (tab: FilteredTab, isActive: boolean) => React.ReactNode;\n /** Header content */\n header?: React.ReactNode;\n /** Footer content */\n footer?: React.ReactNode;\n /** View all products link */\n viewAllProductsLink?: string;\n /** Width */\n width?: string | number;\n /** Max height */\n maxHeight?: string | number;\n /** Z-index */\n zIndex?: number;\n /** Analytics tags */\n analyticsTags?: string[];\n}\n\nexport interface FederatedDropdownRef {\n getActiveIndex: () => number;\n setActiveIndex: (index: number) => void;\n selectActive: () => void;\n navigateNext: () => void;\n navigatePrevious: () => void;\n getActiveTab: () => string | null;\n setActiveTab: (tabId: string) => void;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: 'var(--seekora-border-radius-lg, 12px)',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n overflow: 'hidden',\n },\n header: {\n padding: '12px 20px',\n borderBottom: '1px solid var(--seekora-border-color, #e5e7eb)',\n backgroundColor: 'var(--seekora-bg-secondary, #f9fafb)',\n },\n content: {\n display: 'flex',\n overflowY: 'auto' as const,\n },\n contentStacked: {\n flexDirection: 'column' as const,\n },\n suggestionsColumn: {\n borderRight: '1px solid var(--seekora-border-color, #e5e7eb)',\n overflowY: 'auto' as const,\n },\n productsColumn: {\n flex: 1,\n overflowY: 'auto' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #fafafa)',\n },\n section: {\n padding: '12px 0',\n },\n sectionHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 20px 8px',\n },\n sectionTitle: {\n fontSize: '11px',\n fontWeight: 700,\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.08em',\n margin: 0,\n },\n viewAllLink: {\n fontSize: '12px',\n color: 'var(--seekora-primary, #3b82f6)',\n textDecoration: 'none',\n fontWeight: 600,\n cursor: 'pointer',\n },\n suggestionItem: {\n display: 'flex',\n alignItems: 'center',\n padding: '10px 20px',\n cursor: 'pointer',\n transition: 'background-color 100ms ease',\n gap: '12px',\n },\n suggestionItemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f3f4f6)',\n },\n suggestionIcon: {\n width: '16px',\n height: '16px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n flexShrink: 0,\n },\n suggestionText: {\n flex: 1,\n fontSize: '14px',\n color: 'var(--seekora-text-primary, #111827)',\n fontWeight: 500,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n },\n suggestionArrow: {\n width: '16px',\n height: '16px',\n color: 'var(--seekora-text-tertiary, #d1d5db)',\n opacity: 0,\n transition: 'opacity 100ms ease',\n },\n suggestionArrowVisible: {\n opacity: 1,\n },\n suggestionCount: {\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n },\n tabsContainer: {\n display: 'flex',\n gap: '4px',\n padding: '12px 20px',\n borderBottom: '1px solid var(--seekora-border-color, #e5e7eb)',\n overflowX: 'auto' as const,\n },\n tab: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 16px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-secondary, #6b7280)',\n backgroundColor: 'transparent',\n border: '1px solid transparent',\n borderRadius: '20px',\n cursor: 'pointer',\n whiteSpace: 'nowrap' as const,\n transition: 'all 150ms ease',\n },\n tabActive: {\n color: 'var(--seekora-primary, #3b82f6)',\n backgroundColor: 'var(--seekora-primary-light, #eff6ff)',\n borderColor: 'var(--seekora-primary, #3b82f6)',\n },\n tabCount: {\n fontSize: '11px',\n fontWeight: 600,\n padding: '2px 6px',\n borderRadius: '10px',\n backgroundColor: 'var(--seekora-bg-tertiary, #e5e7eb)',\n },\n tabCountActive: {\n backgroundColor: 'var(--seekora-primary, #3b82f6)',\n color: 'white',\n },\n productsGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(140px, 1fr))',\n gap: '16px',\n padding: '16px 20px',\n },\n productCard: {\n display: 'flex',\n flexDirection: 'column' as const,\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n borderRadius: '8px',\n overflow: 'hidden',\n cursor: 'pointer',\n transition: 'transform 150ms ease, box-shadow 150ms ease',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n },\n productCardHover: {\n transform: 'translateY(-2px)',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.1)',\n },\n productImage: {\n width: '100%',\n aspectRatio: '1',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f3f4f6)',\n },\n productInfo: {\n padding: '10px',\n },\n productTitle: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #111827)',\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n lineHeight: 1.3,\n },\n productPrice: {\n fontSize: '14px',\n fontWeight: 700,\n color: 'var(--seekora-primary, #3b82f6)',\n marginTop: '4px',\n },\n brandsGrid: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: '8px',\n padding: '8px 20px 16px',\n },\n brandChip: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 14px',\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #374151)',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: '8px',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n },\n brandChipHover: {\n borderColor: 'var(--seekora-primary, #3b82f6)',\n backgroundColor: 'var(--seekora-primary-light, #eff6ff)',\n },\n brandLogo: {\n width: '20px',\n height: '20px',\n borderRadius: '4px',\n objectFit: 'contain' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f3f4f6)',\n },\n footer: {\n padding: '12px 20px',\n borderTop: '1px solid var(--seekora-border-color, #e5e7eb)',\n backgroundColor: 'var(--seekora-bg-secondary, #f9fafb)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n },\n emptyState: {\n padding: '48px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #6b7280)',\n },\n highlight: {\n backgroundColor: 'var(--seekora-highlight-bg, #fef9c3)',\n fontWeight: 600,\n padding: '0 2px',\n borderRadius: '2px',\n },\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ ...styles.suggestionIcon, ...style }}>\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ClockIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ ...styles.suggestionIcon, ...style }}>\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ArrowRightIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ ...styles.suggestionArrow, ...style }}>\n <path fillRule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst TrendingIcon = ({ style }: { style?: React.CSSProperties }) => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: 14, height: 14, color: '#10b981', ...style }}>\n <path fillRule=\"evenodd\" d=\"M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ImagePlaceholder = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" style={{ width: '40%', height: '40%', color: '#d1d5db' }}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" strokeWidth=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" strokeWidth=\"2\" />\n <polyline points=\"21 15 16 10 5 21\" strokeWidth=\"2\" />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const FederatedDropdown = forwardRef<FederatedDropdownRef, FederatedDropdownProps>(\n function FederatedDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n maxSuggestions = 8,\n maxProducts = 8,\n maxBrands = 8,\n minQueryLength = 0,\n debounceMs = 200,\n filteredTabs: tabsConfig,\n showProducts = true,\n showBrands = true,\n showFilteredTabs = true,\n showRecentSearches = true,\n layout = 'side-by-side',\n productsColumnWidth = '60%',\n suggestionsColumnWidth = '40%',\n showPrices = true,\n currencySymbol = '$',\n classNames = {},\n style,\n renderProduct,\n renderSuggestion,\n renderBrand,\n renderTab,\n header,\n footer,\n viewAllProductsLink,\n width = '800px',\n maxHeight = '600px',\n zIndex = 1000,\n analyticsTags,\n onSuggestionSelect,\n onProductClick,\n onBrandClick,\n onTabSelect,\n onRecentSearchClick,\n onRecentSearchRemove,\n onViewAllClick,\n onOpen,\n onClose,\n } = props;\n\n const { client } = useSearchContext();\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [activeTab, setActiveTab] = useState<string>('all');\n const [hoveredProduct, setHoveredProduct] = useState<string | null>(null);\n const [hoveredBrand, setHoveredBrand] = useState<string | null>(null);\n\n // Use enhanced hook\n const {\n suggestions,\n loading,\n filteredTabs,\n trendingProducts,\n popularBrands,\n recentSearches,\n addRecentSearch,\n removeRecentSearch,\n hasContent,\n } = useQuerySuggestionsEnhanced({\n client,\n query,\n enabled: isOpen,\n debounceMs,\n maxSuggestions,\n minQueryLength,\n includeDropdownRecommendations: true,\n filteredTabs: tabsConfig,\n analyticsTags,\n enableRecentSearches: showRecentSearches,\n });\n\n // Get products for current tab\n const currentTabProducts = useMemo(() => {\n if (activeTab === 'all') {\n // Combine trending products with first tab products\n const allProducts = [...trendingProducts];\n filteredTabs.forEach(tab => {\n if (tab.products) {\n tab.products.forEach(product => {\n if (!allProducts.find(p => p.id === product.id)) {\n allProducts.push(product);\n }\n });\n }\n });\n return allProducts.slice(0, maxProducts);\n }\n const tab = filteredTabs.find(t => t.id === activeTab);\n return tab?.products?.slice(0, maxProducts) || [];\n }, [activeTab, filteredTabs, trendingProducts, maxProducts]);\n\n // All navigable items\n const allItems = useMemo(() => {\n const items: Array<{ type: string; data: any }> = [];\n\n // Recent searches (when no query)\n if (query.length === 0 && showRecentSearches) {\n recentSearches.slice(0, 5).forEach(search => {\n items.push({ type: 'recent', data: search });\n });\n }\n\n // Suggestions\n suggestions.forEach(suggestion => {\n items.push({ type: 'suggestion', data: suggestion });\n });\n\n return items;\n }, [query, showRecentSearches, recentSearches, suggestions]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => (prev < allItems.length - 1 ? prev + 1 : 0));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => (prev > 0 ? prev - 1 : allItems.length - 1));\n }, [allItems.length]);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) return;\n const item = allItems[activeIndex];\n if (item.type === 'recent') {\n onRecentSearchClick?.(item.data);\n } else if (item.type === 'suggestion') {\n onSuggestionSelect?.(item.data);\n addRecentSearch(item.data.query);\n }\n }, [activeIndex, allItems, onRecentSearchClick, onSuggestionSelect, addRecentSearch]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n getActiveTab: () => activeTab,\n setActiveTab,\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, activeTab]);\n\n // Highlight query in text\n const highlightQuery = (text: string): React.ReactNode => {\n if (!query) return text;\n const parts = text.split(new RegExp(`(${query})`, 'gi'));\n return parts.map((part, i) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <span key={i} style={styles.highlight}>{part}</span>\n ) : part\n );\n };\n\n // Format price\n const formatPrice = (price?: number, currency?: string): string => {\n if (price === undefined) return '';\n const symbol = currency || currencySymbol;\n return `${symbol}${price.toLocaleString()}`;\n };\n\n // Handle tab change\n const handleTabChange = (tabId: string) => {\n setActiveTab(tabId);\n const tab = filteredTabs.find(t => t.id === tabId);\n if (tab) {\n onTabSelect?.(tab);\n }\n };\n\n if (!isOpen) return null;\n\n const showTabs = showFilteredTabs && (filteredTabs.length > 0 || trendingProducts.length > 0);\n const showProductsSection = showProducts && currentTabProducts.length > 0;\n const showBrandsSection = showBrands && popularBrands.length > 0;\n const showRecent = showRecentSearches && query.length === 0 && recentSearches.length > 0;\n const showSuggestions = suggestions.length > 0;\n\n const isStackedLayout = layout === 'stacked' || layout === 'full-width';\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions and products\"\n className={clsx('seekora-federated-dropdown', classNames.root, classNames.container)}\n style={{\n position: 'absolute',\n width,\n zIndex,\n ...styles.container,\n ...style,\n }}\n >\n {/* Header */}\n {header && <div style={styles.header}>{header}</div>}\n\n {/* Tabs */}\n {showTabs && (\n <div style={styles.tabsContainer} className={classNames.tabsList}>\n <button\n style={{\n ...styles.tab,\n ...(activeTab === 'all' ? styles.tabActive : {}),\n }}\n onClick={() => handleTabChange('all')}\n className={clsx(classNames.tabItem, activeTab === 'all' && classNames.tabActive)}\n >\n All Results\n {trendingProducts.length > 0 && (\n <span style={{\n ...styles.tabCount,\n ...(activeTab === 'all' ? styles.tabCountActive : {}),\n }}>\n {trendingProducts.length}+\n </span>\n )}\n </button>\n {filteredTabs.map((tab) => (\n renderTab ? renderTab(tab, activeTab === tab.id) : (\n <button\n key={tab.id}\n style={{\n ...styles.tab,\n ...(activeTab === tab.id ? styles.tabActive : {}),\n }}\n onClick={() => handleTabChange(tab.id)}\n className={clsx(classNames.tabItem, activeTab === tab.id && classNames.tabActive)}\n >\n {tab.label}\n {tab.nb_hits !== undefined && (\n <span style={{\n ...styles.tabCount,\n ...(activeTab === tab.id ? styles.tabCountActive : {}),\n }}>\n {tab.nb_hits}\n </span>\n )}\n </button>\n )\n ))}\n </div>\n )}\n\n {/* Main Content */}\n <div\n style={{\n ...styles.content,\n ...(isStackedLayout ? styles.contentStacked : {}),\n maxHeight,\n }}\n >\n {/* Suggestions Column */}\n <div\n style={{\n ...styles.suggestionsColumn,\n width: isStackedLayout ? '100%' : suggestionsColumnWidth,\n minWidth: isStackedLayout ? undefined : '280px',\n borderRight: isStackedLayout ? 'none' : styles.suggestionsColumn.borderRight,\n }}\n >\n {/* Recent Searches */}\n {showRecent && (\n <div style={styles.section} className={classNames.recentSearches}>\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>Recent Searches</h3>\n </div>\n {recentSearches.slice(0, 5).map((search, index) => {\n const isActive = activeIndex === index;\n return (\n <div\n key={`recent-${search.query}`}\n role=\"option\"\n aria-selected={isActive}\n style={{\n ...styles.suggestionItem,\n ...(isActive ? styles.suggestionItemActive : {}),\n }}\n onClick={() => onRecentSearchClick?.(search)}\n onMouseEnter={() => setActiveIndex(index)}\n className={clsx(classNames.recentItem, isActive && classNames.suggestionItemActive)}\n >\n <ClockIcon />\n <span style={styles.suggestionText}>{search.query}</span>\n <ArrowRightIcon style={isActive ? styles.suggestionArrowVisible : {}} />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Suggestions */}\n {showSuggestions && (\n <div style={styles.section} className={classNames.suggestionsList}>\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>\n {query ? 'Suggestions' : 'Popular Searches'}\n </h3>\n </div>\n {suggestions.slice(0, maxSuggestions).map((suggestion, index) => {\n const itemIndex = showRecent ? recentSearches.length + index : index;\n const isActive = activeIndex === itemIndex;\n \n return renderSuggestion ? renderSuggestion(suggestion, index, isActive) : (\n <div\n key={suggestion.objectID || `suggestion-${index}`}\n role=\"option\"\n aria-selected={isActive}\n style={{\n ...styles.suggestionItem,\n ...(isActive ? styles.suggestionItemActive : {}),\n }}\n onClick={() => {\n onSuggestionSelect?.(suggestion);\n addRecentSearch(suggestion.query);\n }}\n onMouseEnter={() => setActiveIndex(itemIndex)}\n className={clsx(classNames.suggestionItem, isActive && classNames.suggestionItemActive)}\n >\n <SearchIcon />\n <span style={styles.suggestionText}>{highlightQuery(suggestion.query)}</span>\n {suggestion.count !== undefined && (\n <span style={styles.suggestionCount}>{suggestion.count.toLocaleString()}</span>\n )}\n <ArrowRightIcon style={isActive ? styles.suggestionArrowVisible : {}} />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Brands */}\n {showBrandsSection && (\n <div style={styles.section} className={classNames.brandsList}>\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>Popular Brands</h3>\n </div>\n <div style={styles.brandsGrid}>\n {popularBrands.slice(0, maxBrands).map((brand, index) => (\n renderBrand ? renderBrand(brand, index) : (\n <button\n key={`brand-${brand.name}`}\n style={{\n ...styles.brandChip,\n ...(hoveredBrand === brand.name ? styles.brandChipHover : {}),\n }}\n onClick={() => onBrandClick?.(brand)}\n onMouseEnter={() => setHoveredBrand(brand.name)}\n onMouseLeave={() => setHoveredBrand(null)}\n className={classNames.brandItem}\n >\n {brand.logo && (\n <img\n src={brand.logo}\n alt={brand.name}\n style={styles.brandLogo}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n }}\n />\n )}\n <span>{brand.name}</span>\n </button>\n )\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Products Column */}\n {showProductsSection && !isStackedLayout && (\n <div\n style={{\n ...styles.productsColumn,\n width: productsColumnWidth,\n }}\n >\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <h3 style={styles.sectionTitle}>\n {activeTab === 'all' ? 'Trending Products' : `Products in ${filteredTabs.find(t => t.id === activeTab)?.label || activeTab}`}\n </h3>\n {viewAllProductsLink && (\n <a\n href={viewAllProductsLink}\n style={styles.viewAllLink}\n onClick={(e) => {\n e.preventDefault();\n onViewAllClick?.('products');\n }}\n >\n View all\n </a>\n )}\n </div>\n <div style={styles.productsGrid} className={classNames.productsList}>\n {currentTabProducts.map((product, index) => (\n renderProduct ? renderProduct(product, index) : (\n <div\n key={product.id || product.objectID}\n style={{\n ...styles.productCard,\n ...(hoveredProduct === product.id ? styles.productCardHover : {}),\n }}\n onClick={() => onProductClick?.(product)}\n onMouseEnter={() => setHoveredProduct(product.id)}\n onMouseLeave={() => setHoveredProduct(null)}\n className={classNames.productItem}\n >\n {product.image ? (\n <img\n src={product.image}\n alt={product.title || product.name || ''}\n style={styles.productImage}\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n }}\n />\n ) : (\n <div\n style={{\n ...styles.productImage,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <ImagePlaceholder />\n </div>\n )}\n <div style={styles.productInfo}>\n <h4 style={styles.productTitle}>\n {product.title || product.name}\n </h4>\n {showPrices && product.price !== undefined && (\n <p style={styles.productPrice}>\n {formatPrice(product.price, product.currency)}\n </p>\n )}\n </div>\n </div>\n )\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Footer */}\n {footer ? (\n <div style={styles.footer}>{footer}</div>\n ) : (\n <div style={styles.footer}>\n <span>Press ↵ to search, ↑↓ to navigate</span>\n {query && (\n <button\n style={{ ...styles.viewAllLink, background: 'none', border: 'none' }}\n onClick={() => onViewAllClick?.('suggestions')}\n >\n See all results for \"{query}\"\n </button>\n )}\n </div>\n )}\n\n {/* Styles */}\n <style>{`\n .seekora-federated-dropdown mark {\n background-color: var(--seekora-highlight-bg, #fef9c3);\n font-weight: 600;\n border-radius: 2px;\n padding: 0 2px;\n }\n .seekora-federated-dropdown [role=\"option\"]:hover svg:last-child {\n opacity: 1;\n }\n `}</style>\n </div>\n );\n }\n);\n\nexport default FederatedDropdown;\n","/**\n * Suggestions Analytics Hook\n * \n * Provides analytics tracking for query suggestions components:\n * - Suggestion clicks/selections\n * - Suggestion impressions\n * - Product clicks from dropdown\n * - Category/brand clicks\n * - Search submissions from suggestions\n */\n\nimport { useCallback, useRef, useEffect } from 'react';\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\nimport type {\n SuggestionItem,\n ProductItem,\n SuggestionCategory,\n PopularBrand,\n FilteredTab,\n RecentSearch,\n TrendingSearch,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseSuggestionsAnalyticsOptions {\n /** Seekora client instance */\n client: SeekoraClient;\n /** Enable analytics tracking */\n enabled?: boolean;\n /** Analytics tags to include with all events */\n analyticsTags?: string[];\n /** Debounce impression events (ms) */\n impressionDebounce?: number;\n /** Track suggestion impressions automatically */\n trackImpressions?: boolean;\n /** Track clicks automatically */\n trackClicks?: boolean;\n}\n\nexport interface SuggestionClickEventData {\n /** The clicked suggestion */\n suggestion: SuggestionItem;\n /** Position in the list (0-indexed) */\n position: number;\n /** Section where the suggestion appeared */\n section?: 'suggestions' | 'trending' | 'recent' | 'related';\n /** Original query that triggered suggestions */\n query?: string;\n /** Total suggestions shown */\n totalSuggestions?: number;\n}\n\nexport interface ProductClickEventData {\n /** The clicked product */\n product: ProductItem;\n /** Position in the list (0-indexed) */\n position: number;\n /** Section where the product appeared */\n section?: 'products' | 'trending' | 'recommendations' | 'filtered_tab';\n /** Tab ID if from filtered tab */\n tabId?: string;\n /** Original query */\n query?: string;\n}\n\nexport interface SuggestionImpressionEventData {\n /** Suggestions that were shown */\n suggestions: SuggestionItem[];\n /** Products that were shown */\n products?: ProductItem[];\n /** Categories that were shown */\n categories?: SuggestionCategory[];\n /** Brands that were shown */\n brands?: PopularBrand[];\n /** Original query */\n query: string;\n /** Timestamp when impressions occurred */\n timestamp: number;\n}\n\nexport interface UseSuggestionsAnalyticsReturn {\n /** Track a suggestion click */\n trackSuggestionClick: (data: SuggestionClickEventData) => void;\n /** Track a product click from suggestions dropdown */\n trackProductClick: (data: ProductClickEventData) => void;\n /** Track a category click */\n trackCategoryClick: (category: SuggestionCategory, query?: string) => void;\n /** Track a brand click */\n trackBrandClick: (brand: PopularBrand, query?: string) => void;\n /** Track a tab selection */\n trackTabSelect: (tab: FilteredTab, query?: string) => void;\n /** Track recent search click */\n trackRecentSearchClick: (search: RecentSearch) => void;\n /** Track trending search click */\n trackTrendingClick: (trending: TrendingSearch, position: number) => void;\n /** Track suggestions impression */\n trackImpression: (data: SuggestionImpressionEventData) => void;\n /** Track search submission from suggestion */\n trackSearchSubmit: (query: string, fromSuggestion: boolean, suggestion?: SuggestionItem) => void;\n /** Track dropdown open */\n trackDropdownOpen: (query: string) => void;\n /** Track dropdown close */\n trackDropdownClose: (query: string, selectedSuggestion?: string) => void;\n}\n\n// ============================================================================\n// Event Names\n// ============================================================================\n\nconst EVENTS = {\n SUGGESTION_CLICK: 'suggestions.click',\n SUGGESTION_IMPRESSION: 'suggestions.impression',\n PRODUCT_CLICK: 'suggestions.product_click',\n CATEGORY_CLICK: 'suggestions.category_click',\n BRAND_CLICK: 'suggestions.brand_click',\n TAB_SELECT: 'suggestions.tab_select',\n RECENT_CLICK: 'suggestions.recent_click',\n TRENDING_CLICK: 'suggestions.trending_click',\n SEARCH_SUBMIT: 'suggestions.search_submit',\n DROPDOWN_OPEN: 'suggestions.dropdown_open',\n DROPDOWN_CLOSE: 'suggestions.dropdown_close',\n};\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\nexport function useSuggestionsAnalytics(\n options: UseSuggestionsAnalyticsOptions\n): UseSuggestionsAnalyticsReturn {\n const {\n client,\n enabled = true,\n analyticsTags = [],\n impressionDebounce = 500,\n trackImpressions = true,\n trackClicks = true,\n } = options;\n\n // Refs for debouncing and tracking\n const impressionTimerRef = useRef<NodeJS.Timeout | null>(null);\n const lastImpressionRef = useRef<string | null>(null);\n const dropdownOpenTimeRef = useRef<number | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (impressionTimerRef.current) {\n clearTimeout(impressionTimerRef.current);\n }\n };\n }, []);\n\n // Helper to send event\n const sendEvent = useCallback(\n async (eventName: string, metadata: Record<string, any>) => {\n if (!enabled || !client) return;\n\n try {\n await client.trackEvent?.({\n event_name: eventName,\n analytics_tags: analyticsTags,\n metadata: {\n ...metadata,\n timestamp: Date.now(),\n source: 'suggestions_dropdown',\n },\n });\n log.verbose(`Analytics: ${eventName}`, metadata);\n } catch (error) {\n log.warn(`Failed to track ${eventName}`, { error });\n }\n },\n [client, enabled, analyticsTags]\n );\n\n // Track suggestion click\n const trackSuggestionClick = useCallback(\n (data: SuggestionClickEventData) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.SUGGESTION_CLICK, {\n suggestion_query: data.suggestion.query,\n suggestion_id: data.suggestion.objectID,\n suggestion_popularity: data.suggestion.popularity,\n position: data.position,\n section: data.section || 'suggestions',\n original_query: data.query,\n total_suggestions: data.totalSuggestions,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track product click\n const trackProductClick = useCallback(\n (data: ProductClickEventData) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.PRODUCT_CLICK, {\n product_id: data.product.id || data.product.objectID,\n product_title: data.product.title || data.product.name,\n product_price: data.product.price,\n position: data.position,\n section: data.section || 'products',\n tab_id: data.tabId,\n original_query: data.query,\n });\n\n // Also track as a general product click for analytics\n if (client) {\n Promise.resolve(client.trackClick?.(data.product.id || data.product.objectID || '', data.position + 1)).catch(() => {});\n }\n },\n [client, sendEvent, trackClicks]\n );\n\n // Track category click\n const trackCategoryClick = useCallback(\n (category: SuggestionCategory, query?: string) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.CATEGORY_CLICK, {\n category_value: category.value,\n category_count: category.count,\n category_path: category.path,\n original_query: query,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track brand click\n const trackBrandClick = useCallback(\n (brand: PopularBrand, query?: string) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.BRAND_CLICK, {\n brand_name: brand.name,\n brand_count: brand.count,\n original_query: query,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track tab selection\n const trackTabSelect = useCallback(\n (tab: FilteredTab, query?: string) => {\n sendEvent(EVENTS.TAB_SELECT, {\n tab_id: tab.id,\n tab_label: tab.label,\n tab_filter: tab.filter,\n products_count: tab.products?.length || 0,\n nb_hits: tab.nb_hits,\n original_query: query,\n });\n },\n [sendEvent]\n );\n\n // Track recent search click\n const trackRecentSearchClick = useCallback(\n (search: RecentSearch) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.RECENT_CLICK, {\n query: search.query,\n original_timestamp: search.timestamp,\n results_count: search.resultsCount,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track trending click\n const trackTrendingClick = useCallback(\n (trending: TrendingSearch, position: number) => {\n if (!trackClicks) return;\n\n sendEvent(EVENTS.TRENDING_CLICK, {\n query: trending.query,\n count: trending.count,\n trend_score: trending.trend_score,\n position,\n });\n },\n [sendEvent, trackClicks]\n );\n\n // Track impression (debounced)\n const trackImpression = useCallback(\n (data: SuggestionImpressionEventData) => {\n if (!trackImpressions) return;\n\n // Create a hash of the impression to avoid duplicates\n const impressionHash = `${data.query}:${data.suggestions.length}:${data.products?.length || 0}`;\n if (impressionHash === lastImpressionRef.current) return;\n\n // Clear existing timer\n if (impressionTimerRef.current) {\n clearTimeout(impressionTimerRef.current);\n }\n\n // Debounce the impression\n impressionTimerRef.current = setTimeout(() => {\n lastImpressionRef.current = impressionHash;\n\n sendEvent(EVENTS.SUGGESTION_IMPRESSION, {\n query: data.query,\n suggestions_count: data.suggestions.length,\n suggestions: data.suggestions.slice(0, 10).map((s, i) => ({\n query: s.query,\n position: i,\n popularity: s.popularity,\n })),\n products_count: data.products?.length || 0,\n categories_count: data.categories?.length || 0,\n brands_count: data.brands?.length || 0,\n impression_timestamp: data.timestamp,\n });\n }, impressionDebounce);\n },\n [sendEvent, trackImpressions, impressionDebounce]\n );\n\n // Track search submit\n const trackSearchSubmit = useCallback(\n (query: string, fromSuggestion: boolean, suggestion?: SuggestionItem) => {\n sendEvent(EVENTS.SEARCH_SUBMIT, {\n query,\n from_suggestion: fromSuggestion,\n suggestion_query: suggestion?.query,\n suggestion_id: suggestion?.objectID,\n suggestion_popularity: suggestion?.popularity,\n });\n },\n [sendEvent]\n );\n\n // Track dropdown open\n const trackDropdownOpen = useCallback(\n (query: string) => {\n dropdownOpenTimeRef.current = Date.now();\n sendEvent(EVENTS.DROPDOWN_OPEN, {\n query,\n has_query: query.length > 0,\n });\n },\n [sendEvent]\n );\n\n // Track dropdown close\n const trackDropdownClose = useCallback(\n (query: string, selectedSuggestion?: string) => {\n const duration = dropdownOpenTimeRef.current\n ? Date.now() - dropdownOpenTimeRef.current\n : null;\n\n sendEvent(EVENTS.DROPDOWN_CLOSE, {\n query,\n selected_suggestion: selectedSuggestion,\n had_selection: !!selectedSuggestion,\n duration_ms: duration,\n });\n\n dropdownOpenTimeRef.current = null;\n },\n [sendEvent]\n );\n\n return {\n trackSuggestionClick,\n trackProductClick,\n trackCategoryClick,\n trackBrandClick,\n trackTabSelect,\n trackRecentSearchClick,\n trackTrendingClick,\n trackImpression,\n trackSearchSubmit,\n trackDropdownOpen,\n trackDropdownClose,\n };\n}\n\nexport default useSuggestionsAnalytics;\n","/**\n * SearchBarWithSuggestions Component\n * \n * Integrated search bar with query suggestions dropdown.\n * Combines SearchBar with any of the suggestion dropdown variants.\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n useEffect,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { useSearchContext } from './SearchProvider';\nimport { QuerySuggestionsDropdown, QuerySuggestionsDropdownRef } from './QuerySuggestionsDropdown';\nimport { RichQuerySuggestions, RichQuerySuggestionsRef } from './RichQuerySuggestions';\nimport { FederatedDropdown, FederatedDropdownRef } from './FederatedDropdown';\nimport { useSuggestionsAnalytics } from '../hooks/useSuggestionsAnalytics';\nimport { clsx } from 'clsx';\nimport type {\n SuggestionItem,\n ProductItem,\n QuerySuggestionsVariant,\n RecentSearch,\n QuerySuggestionsClassNames,\n} from '@seekora-ai/ui-sdk-types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SearchBarWithSuggestionsProps {\n /** Dropdown variant to use */\n variant?: QuerySuggestionsVariant;\n /** Placeholder text */\n placeholder?: string;\n /** Initial query value */\n initialQuery?: string;\n /** Controlled query value */\n value?: string;\n /** Callback when query changes */\n onQueryChange?: (query: string) => void;\n /** Callback when search is submitted */\n onSearch?: (query: string) => void;\n /** Callback when suggestion is selected */\n onSuggestionSelect?: (suggestion: SuggestionItem) => void;\n /** Callback when product is clicked */\n onProductClick?: (product: ProductItem) => void;\n /** Show search button */\n showSearchButton?: boolean;\n /** Search button text */\n searchButtonText?: string;\n /** Show clear button */\n showClearButton?: boolean;\n /** Auto focus on mount */\n autoFocus?: boolean;\n /** Min query length for suggestions */\n minQueryLength?: number;\n /** Max suggestions to show */\n maxSuggestions?: number;\n /** Debounce delay (ms) */\n debounceMs?: number;\n /** Show recent searches */\n showRecentSearches?: boolean;\n /** Show trending when empty */\n showTrendingOnEmpty?: boolean;\n /** Include dropdown recommendations */\n includeDropdownRecommendations?: boolean;\n /** Filtered tabs config */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Enable analytics tracking */\n enableAnalytics?: boolean;\n /** Analytics tags */\n analyticsTags?: string[];\n /** Dropdown width */\n dropdownWidth?: string | number;\n /** Dropdown max height */\n dropdownMaxHeight?: string | number;\n /** Custom class names */\n classNames?: {\n wrapper?: string;\n input?: string;\n button?: string;\n clearButton?: string;\n dropdown?: string;\n } & QuerySuggestionsClassNames;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Input style */\n inputStyle?: React.CSSProperties;\n /** ARIA label */\n ariaLabel?: string;\n}\n\nexport interface SearchBarWithSuggestionsRef {\n /** Focus the input */\n focus: () => void;\n /** Blur the input */\n blur: () => void;\n /** Clear the input */\n clear: () => void;\n /** Get current query */\n getQuery: () => string;\n /** Set query value */\n setQuery: (query: string) => void;\n /** Open dropdown */\n openDropdown: () => void;\n /** Close dropdown */\n closeDropdown: () => void;\n /** Navigate to next suggestion */\n navigateNext: () => void;\n /** Navigate to previous suggestion */\n navigatePrevious: () => void;\n /** Select current suggestion */\n selectCurrent: () => void;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n wrapper: {\n position: 'relative' as const,\n width: '100%',\n },\n inputWrapper: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #e5e7eb)',\n borderRadius: 'var(--seekora-border-radius-lg, 8px)',\n overflow: 'hidden',\n transition: 'border-color 150ms ease, box-shadow 150ms ease',\n },\n inputWrapperFocused: {\n borderColor: 'var(--seekora-primary, #3b82f6)',\n boxShadow: '0 0 0 3px var(--seekora-primary-light, rgba(59, 130, 246, 0.1))',\n },\n input: {\n flex: 1,\n padding: '12px 16px',\n fontSize: '16px',\n border: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n color: 'var(--seekora-text-primary, #111827)',\n fontFamily: 'inherit',\n },\n searchIcon: {\n width: '20px',\n height: '20px',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n marginLeft: '12px',\n flexShrink: 0,\n },\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n marginRight: '4px',\n padding: 0,\n border: 'none',\n backgroundColor: 'transparent',\n color: 'var(--seekora-text-secondary, #9ca3af)',\n borderRadius: '50%',\n cursor: 'pointer',\n transition: 'background-color 150ms ease, color 150ms ease',\n },\n searchButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '12px 20px',\n margin: '4px',\n border: 'none',\n backgroundColor: 'var(--seekora-primary, #3b82f6)',\n color: 'white',\n borderRadius: 'var(--seekora-border-radius, 6px)',\n fontSize: '14px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background-color 150ms ease',\n },\n};\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={styles.searchIcon}>\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst ClearIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" style={{ width: 16, height: 16 }}>\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\" />\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const SearchBarWithSuggestions = forwardRef<SearchBarWithSuggestionsRef, SearchBarWithSuggestionsProps>(\n function SearchBarWithSuggestions(props, ref) {\n const {\n variant = 'classic',\n placeholder = 'Search...',\n initialQuery = '',\n value,\n onQueryChange,\n onSearch,\n onSuggestionSelect,\n onProductClick,\n showSearchButton = false,\n searchButtonText = 'Search',\n showClearButton = true,\n autoFocus = false,\n minQueryLength = 1,\n maxSuggestions = 8,\n debounceMs = 200,\n showRecentSearches = true,\n showTrendingOnEmpty = true,\n includeDropdownRecommendations = false,\n filteredTabs,\n enableAnalytics = true,\n analyticsTags,\n dropdownWidth,\n dropdownMaxHeight,\n classNames = {},\n style,\n inputStyle,\n ariaLabel = 'Search',\n } = props;\n\n const { client } = useSearchContext();\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<QuerySuggestionsDropdownRef | RichQuerySuggestionsRef | FederatedDropdownRef>(null);\n \n const [query, setQuery] = useState(value ?? initialQuery);\n const [isFocused, setIsFocused] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n // Analytics\n const analytics = useSuggestionsAnalytics({\n client,\n enabled: enableAnalytics,\n analyticsTags,\n });\n\n // Sync controlled value\n useEffect(() => {\n if (value !== undefined && value !== query) {\n setQuery(value);\n }\n }, [value]);\n\n // Handle query change\n const handleQueryChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newQuery = e.target.value;\n setQuery(newQuery);\n onQueryChange?.(newQuery);\n \n // Open dropdown when typing\n if (newQuery.length >= minQueryLength || (showTrendingOnEmpty && newQuery.length === 0)) {\n setIsDropdownOpen(true);\n }\n }, [onQueryChange, minQueryLength, showTrendingOnEmpty]);\n\n // Handle search submit\n const handleSubmit = useCallback((e?: React.FormEvent) => {\n e?.preventDefault();\n if (query.trim()) {\n onSearch?.(query.trim());\n analytics.trackSearchSubmit(query.trim(), false);\n setIsDropdownOpen(false);\n }\n }, [query, onSearch, analytics]);\n\n // Handle suggestion select\n const handleSuggestionSelect = useCallback((suggestion: SuggestionItem) => {\n setQuery(suggestion.query);\n onQueryChange?.(suggestion.query);\n onSuggestionSelect?.(suggestion);\n analytics.trackSuggestionClick({\n suggestion,\n position: 0, // Would need to track actual position\n query,\n });\n setIsDropdownOpen(false);\n \n // Optionally trigger search\n onSearch?.(suggestion.query);\n }, [query, onQueryChange, onSuggestionSelect, onSearch, analytics]);\n\n // Handle product click\n const handleProductClick = useCallback((product: ProductItem) => {\n onProductClick?.(product);\n analytics.trackProductClick({\n product,\n position: 0,\n query,\n });\n setIsDropdownOpen(false);\n }, [query, onProductClick, analytics]);\n\n // Handle recent search click\n const handleRecentSearchClick = useCallback((search: RecentSearch) => {\n setQuery(search.query);\n onQueryChange?.(search.query);\n analytics.trackRecentSearchClick(search);\n setIsDropdownOpen(false);\n onSearch?.(search.query);\n }, [onQueryChange, onSearch, analytics]);\n\n // Handle focus\n const handleFocus = useCallback(() => {\n setIsFocused(true);\n setIsDropdownOpen(true);\n analytics.trackDropdownOpen(query);\n }, [query, analytics]);\n\n // Handle blur\n const handleBlur = useCallback(() => {\n setIsFocused(false);\n // Delay closing to allow click events on dropdown\n setTimeout(() => {\n setIsDropdownOpen(false);\n analytics.trackDropdownClose(query);\n }, 200);\n }, [query, analytics]);\n\n // Handle clear\n const handleClear = useCallback(() => {\n setQuery('');\n onQueryChange?.('');\n inputRef.current?.focus();\n }, [onQueryChange]);\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!isDropdownOpen) {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n setIsDropdownOpen(true);\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n dropdownRef.current?.navigateNext?.();\n break;\n case 'ArrowUp':\n e.preventDefault();\n dropdownRef.current?.navigatePrevious?.();\n break;\n case 'Enter':\n e.preventDefault();\n if ((dropdownRef.current?.getActiveIndex?.() ?? -1) >= 0) {\n dropdownRef.current?.selectActive?.();\n } else {\n handleSubmit();\n }\n break;\n case 'Escape':\n e.preventDefault();\n setIsDropdownOpen(false);\n inputRef.current?.blur();\n break;\n }\n }, [isDropdownOpen, handleSubmit]);\n\n // Expose ref methods\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus(),\n blur: () => inputRef.current?.blur(),\n clear: handleClear,\n getQuery: () => query,\n setQuery: (newQuery: string) => {\n setQuery(newQuery);\n onQueryChange?.(newQuery);\n },\n openDropdown: () => setIsDropdownOpen(true),\n closeDropdown: () => setIsDropdownOpen(false),\n navigateNext: () => dropdownRef.current?.navigateNext?.(),\n navigatePrevious: () => dropdownRef.current?.navigatePrevious?.(),\n selectCurrent: () => dropdownRef.current?.selectActive?.(),\n }), [query, handleClear, onQueryChange]);\n\n // Render dropdown based on variant\n const renderDropdown = () => {\n const commonProps = {\n query,\n isOpen: isDropdownOpen,\n maxSuggestions,\n minQueryLength,\n debounceMs,\n showRecentSearches,\n classNames,\n onSuggestionSelect: handleSuggestionSelect,\n onRecentSearchClick: handleRecentSearchClick,\n onClose: () => setIsDropdownOpen(false),\n analyticsTags,\n };\n\n switch (variant) {\n case 'rich':\n return (\n <RichQuerySuggestions\n ref={dropdownRef as React.Ref<RichQuerySuggestionsRef>}\n {...commonProps}\n includeDropdownRecommendations={includeDropdownRecommendations}\n includeCategories\n width={dropdownWidth || '100%'}\n maxHeight={dropdownMaxHeight || '480px'}\n />\n );\n\n case 'federated':\n return (\n <FederatedDropdown\n ref={dropdownRef as React.Ref<FederatedDropdownRef>}\n {...commonProps}\n filteredTabs={filteredTabs}\n showProducts\n showBrands\n showFilteredTabs={!!filteredTabs}\n onProductClick={handleProductClick}\n width={dropdownWidth || '800px'}\n maxHeight={dropdownMaxHeight || '600px'}\n />\n );\n\n case 'compact':\n return (\n <QuerySuggestionsDropdown\n ref={dropdownRef as React.Ref<QuerySuggestionsDropdownRef>}\n {...commonProps}\n maxSuggestions={5}\n showCounts={false}\n width={dropdownWidth || '100%'}\n />\n );\n\n case 'classic':\n default:\n return (\n <QuerySuggestionsDropdown\n ref={dropdownRef as React.Ref<QuerySuggestionsDropdownRef>}\n {...commonProps}\n width={dropdownWidth || '100%'}\n />\n );\n }\n };\n\n return (\n <div\n className={clsx('seekora-search-bar-with-suggestions', classNames.wrapper)}\n style={{ ...styles.wrapper, ...style }}\n >\n <form onSubmit={handleSubmit}>\n <div\n style={{\n ...styles.inputWrapper,\n ...(isFocused ? styles.inputWrapperFocused : {}),\n }}\n >\n <SearchIcon />\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={handleQueryChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n autoFocus={autoFocus}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label={ariaLabel}\n aria-expanded={isDropdownOpen}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n className={classNames.input}\n style={{ ...styles.input, ...inputStyle }}\n />\n {showClearButton && query && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={classNames.clearButton}\n style={styles.clearButton}\n aria-label=\"Clear search\"\n >\n <ClearIcon />\n </button>\n )}\n {showSearchButton && (\n <button\n type=\"submit\"\n className={classNames.button}\n style={styles.searchButton}\n >\n {searchButtonText}\n </button>\n )}\n </div>\n </form>\n\n {/* Dropdown */}\n <div className={classNames.dropdown}>\n {renderDropdown()}\n </div>\n </div>\n );\n }\n);\n\nexport default SearchBarWithSuggestions;\n","/**\n * Utility functions for Query Suggestions components\n */\n\nimport type { CSSProperties, ReactNode } from 'react';\nimport type {\n SuggestionFieldMapping,\n ProductFieldMapping,\n CategoryFieldMapping,\n BrandFieldMapping,\n DropdownThemeConfig,\n ProductDisplayConfig,\n} from './types';\n\n// ============================================================================\n// Field Extraction\n// ============================================================================\n\n/**\n * Get nested value from object using dot notation\n * @example getNestedValue({ a: { b: 'value' } }, 'a.b') => 'value'\n */\nexport const getNestedValue = (obj: any, path: string): any => {\n if (!obj || !path) return undefined;\n return path.split('.').reduce((current, key) => {\n if (current === null || current === undefined) return undefined;\n return current[key];\n }, obj);\n};\n\n/**\n * Extract suggestion fields from raw data\n */\nexport const extractSuggestion = (\n item: any,\n mapping: SuggestionFieldMapping = { query: 'query' }\n) => {\n return {\n query: getNestedValue(item, mapping.query) ?? '',\n count: mapping.count ? getNestedValue(item, mapping.count) : undefined,\n id: mapping.id ? getNestedValue(item, mapping.id) : item?.objectID || item?.id,\n categories: mapping.categories ? getNestedValue(item, mapping.categories) : undefined,\n highlighted: mapping.highlighted ? getNestedValue(item, mapping.highlighted) : undefined,\n _raw: item,\n };\n};\n\n/**\n * Extract product fields from raw data\n */\nexport const extractProduct = (\n item: any,\n mapping: ProductFieldMapping = { id: 'id', title: 'title' }\n) => {\n return {\n id: getNestedValue(item, mapping.id) ?? item?.objectID ?? item?.id,\n title: getNestedValue(item, mapping.title) ?? '',\n image: mapping.image ? getNestedValue(item, mapping.image) : undefined,\n price: mapping.price ? getNestedValue(item, mapping.price) : undefined,\n comparePrice: mapping.comparePrice ? getNestedValue(item, mapping.comparePrice) : undefined,\n url: mapping.url ? getNestedValue(item, mapping.url) : undefined,\n brand: mapping.brand ? getNestedValue(item, mapping.brand) : undefined,\n category: mapping.category ? getNestedValue(item, mapping.category) : undefined,\n rating: mapping.rating ? getNestedValue(item, mapping.rating) : undefined,\n reviewCount: mapping.reviewCount ? getNestedValue(item, mapping.reviewCount) : undefined,\n discount: mapping.discount ? getNestedValue(item, mapping.discount) : undefined,\n inStock: mapping.inStock ? getNestedValue(item, mapping.inStock) : undefined,\n currency: mapping.currency ? getNestedValue(item, mapping.currency) : undefined,\n _raw: item,\n };\n};\n\n/**\n * Extract category fields from raw data\n */\nexport const extractCategory = (\n item: any,\n mapping: CategoryFieldMapping = { id: 'id', label: 'label' }\n) => {\n return {\n id: getNestedValue(item, mapping.id) ?? item?.id,\n label: getNestedValue(item, mapping.label) ?? '',\n count: mapping.count ? getNestedValue(item, mapping.count) : undefined,\n icon: mapping.icon ? getNestedValue(item, mapping.icon) : undefined,\n image: mapping.image ? getNestedValue(item, mapping.image) : undefined,\n _raw: item,\n };\n};\n\n/**\n * Extract brand fields from raw data\n */\nexport const extractBrand = (\n item: any,\n mapping: BrandFieldMapping = { name: 'name' }\n) => {\n return {\n id: mapping.id ? getNestedValue(item, mapping.id) : item?.id,\n name: getNestedValue(item, mapping.name) ?? '',\n logo: mapping.logo ? getNestedValue(item, mapping.logo) : undefined,\n count: mapping.count ? getNestedValue(item, mapping.count) : undefined,\n _raw: item,\n };\n};\n\n// ============================================================================\n// Formatting\n// ============================================================================\n\n/**\n * Format price with currency\n */\nexport const formatPrice = (\n value: number | string | undefined,\n config: Pick<ProductDisplayConfig, 'currency' | 'currencyPosition' | 'priceDecimals'> = {}\n): string => {\n if (value === undefined || value === null) return '';\n \n const { \n currency = '$', \n currencyPosition = 'before', \n priceDecimals = 2 \n } = config;\n \n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return String(value);\n \n const formatted = num.toLocaleString(undefined, {\n minimumFractionDigits: priceDecimals,\n maximumFractionDigits: priceDecimals,\n });\n \n return currencyPosition === 'before' \n ? `${currency}${formatted}` \n : `${formatted}${currency}`;\n};\n\n/**\n * Format count with abbreviation (1.2K, 3.4M, etc.)\n */\nexport const formatCount = (count: number | undefined): string => {\n if (count === undefined || count === null) return '';\n if (count < 1000) return count.toString();\n if (count < 1000000) return `${(count / 1000).toFixed(1)}K`;\n return `${(count / 1000000).toFixed(1)}M`;\n};\n\n/**\n * Calculate discount percentage\n */\nexport const calculateDiscount = (\n price: number | undefined,\n comparePrice: number | undefined\n): number | undefined => {\n if (!price || !comparePrice || comparePrice <= price) return undefined;\n return Math.round(((comparePrice - price) / comparePrice) * 100);\n};\n\n// ============================================================================\n// Text Processing\n// ============================================================================\n\n/**\n * Escape HTML special characters\n */\nexport const escapeHtml = (text: string): string => {\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n };\n return text.replace(/[&<>\"']/g, (char) => map[char]);\n};\n\n/**\n * Highlight matching text in a string\n */\nexport const highlightText = (\n text: string,\n query: string,\n options: {\n tag?: string;\n className?: string;\n style?: CSSProperties;\n } = {}\n): string => {\n if (!query || !text) return escapeHtml(text);\n \n const { tag = 'mark', className = '', style } = options;\n const escapedQuery = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedQuery})`, 'gi');\n \n const styleAttr = style \n ? ` style=\"${Object.entries(style).map(([k, v]) => `${k.replace(/([A-Z])/g, '-$1').toLowerCase()}:${v}`).join(';')}\"` \n : '';\n const classAttr = className ? ` class=\"${className}\"` : '';\n \n return escapeHtml(text).replace(\n new RegExp(`(${escapeHtml(escapedQuery)})`, 'gi'),\n `<${tag}${classAttr}${styleAttr}>$1</${tag}>`\n );\n};\n\n/**\n * Truncate text to specified length\n */\nexport const truncateText = (\n text: string,\n maxLength: number,\n ellipsis: string = '...'\n): string => {\n if (!text || text.length <= maxLength) return text;\n return text.slice(0, maxLength - ellipsis.length) + ellipsis;\n};\n\n// ============================================================================\n// Theme & Styling\n// ============================================================================\n\n/**\n * Generate CSS variables from theme config\n */\nexport const generateCSSVariables = (\n theme: DropdownThemeConfig,\n prefix: string = 'seekora'\n): Record<string, string> => {\n const vars: Record<string, string> = {};\n \n if (theme.primaryColor) vars[`--${prefix}-primary`] = theme.primaryColor;\n if (theme.backgroundColor) vars[`--${prefix}-bg-surface`] = theme.backgroundColor;\n if (theme.surfaceColor) vars[`--${prefix}-bg-secondary`] = theme.surfaceColor;\n if (theme.textColor) vars[`--${prefix}-text-primary`] = theme.textColor;\n if (theme.textSecondaryColor) vars[`--${prefix}-text-secondary`] = theme.textSecondaryColor;\n if (theme.borderColor) vars[`--${prefix}-border-color`] = theme.borderColor;\n if (theme.hoverColor) vars[`--${prefix}-bg-hover`] = theme.hoverColor;\n if (theme.highlightColor) vars[`--${prefix}-highlight-bg`] = theme.highlightColor;\n if (theme.successColor) vars[`--${prefix}-success`] = theme.successColor;\n if (theme.errorColor) vars[`--${prefix}-error`] = theme.errorColor;\n if (theme.fontFamily) vars[`--${prefix}-font-family`] = theme.fontFamily;\n if (theme.fontSize) vars[`--${prefix}-font-size`] = typeof theme.fontSize === 'number' ? `${theme.fontSize}px` : theme.fontSize;\n if (theme.borderRadius) vars[`--${prefix}-border-radius`] = typeof theme.borderRadius === 'number' ? `${theme.borderRadius}px` : theme.borderRadius;\n if (theme.boxShadow) vars[`--${prefix}-box-shadow`] = theme.boxShadow;\n \n // Merge custom CSS variables\n if (theme.cssVariables) {\n Object.entries(theme.cssVariables).forEach(([key, value]) => {\n vars[key.startsWith('--') ? key : `--${key}`] = value;\n });\n }\n \n return vars;\n};\n\n/**\n * Merge class names, filtering out falsy values\n */\nexport const cx = (...classes: (string | undefined | null | false)[]): string => {\n return classes.filter(Boolean).join(' ');\n};\n\n/**\n * Merge styles, filtering out undefined values\n */\nexport const mergeStyles = (...styles: (CSSProperties | undefined)[]): CSSProperties => {\n return Object.assign({}, ...styles.filter(Boolean));\n};\n\n// ============================================================================\n// Animation\n// ============================================================================\n\ninterface AnimationState {\n opacity: number;\n transform?: string;\n}\n\ninterface AnimationConfig {\n initial: AnimationState;\n animate: AnimationState;\n exit: AnimationState;\n}\n\nexport const animations: Record<'fade' | 'slide' | 'scale' | 'spring', AnimationConfig> = {\n fade: {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: { opacity: 0 },\n },\n slide: {\n initial: { opacity: 0, transform: 'translateY(-10px)' },\n animate: { opacity: 1, transform: 'translateY(0)' },\n exit: { opacity: 0, transform: 'translateY(-10px)' },\n },\n scale: {\n initial: { opacity: 0, transform: 'scale(0.95)' },\n animate: { opacity: 1, transform: 'scale(1)' },\n exit: { opacity: 0, transform: 'scale(0.95)' },\n },\n spring: {\n initial: { opacity: 0, transform: 'translateY(-20px) scale(0.9)' },\n animate: { opacity: 1, transform: 'translateY(0) scale(1)' },\n exit: { opacity: 0, transform: 'translateY(-10px) scale(0.95)' },\n },\n};\n\n/**\n * Get animation keyframes CSS\n */\nexport const getAnimationCSS = (\n type: 'fade' | 'slide' | 'scale' | 'spring' | 'none',\n duration: number = 200\n): string => {\n if (type === 'none') return '';\n \n const anim = animations[type];\n return `\n @keyframes seekoraDropdownEnter {\n from {\n opacity: ${anim.initial.opacity};\n transform: ${anim.initial.transform || 'none'};\n }\n to {\n opacity: ${anim.animate.opacity};\n transform: ${anim.animate.transform || 'none'};\n }\n }\n @keyframes seekoraDropdownExit {\n from {\n opacity: ${anim.animate.opacity};\n transform: ${anim.animate.transform || 'none'};\n }\n to {\n opacity: ${anim.exit.opacity};\n transform: ${anim.exit.transform || 'none'};\n }\n }\n `;\n};\n\n// ============================================================================\n// Keyboard Navigation\n// ============================================================================\n\n/**\n * Create keyboard handler for dropdown navigation\n */\nexport const createKeyboardHandler = (handlers: {\n onUp?: () => void;\n onDown?: () => void;\n onLeft?: () => void;\n onRight?: () => void;\n onEnter?: () => void;\n onEscape?: () => void;\n onTab?: (shift: boolean) => void;\n}) => {\n return (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n handlers.onUp?.();\n break;\n case 'ArrowDown':\n event.preventDefault();\n handlers.onDown?.();\n break;\n case 'ArrowLeft':\n handlers.onLeft?.();\n break;\n case 'ArrowRight':\n handlers.onRight?.();\n break;\n case 'Enter':\n event.preventDefault();\n handlers.onEnter?.();\n break;\n case 'Escape':\n event.preventDefault();\n handlers.onEscape?.();\n break;\n case 'Tab':\n handlers.onTab?.(event.shiftKey);\n break;\n }\n };\n};\n\n// ============================================================================\n// Local Storage (Recent Searches)\n// ============================================================================\n\nconst RECENT_SEARCHES_KEY = 'seekora_recent_searches';\nconst MAX_RECENT_SEARCHES = 10;\n\nexport const getRecentSearches = (storeId?: string): string[] => {\n try {\n const key = storeId ? `${RECENT_SEARCHES_KEY}_${storeId}` : RECENT_SEARCHES_KEY;\n const stored = localStorage.getItem(key);\n return stored ? JSON.parse(stored) : [];\n } catch {\n return [];\n }\n};\n\nexport const addRecentSearch = (query: string, storeId?: string): string[] => {\n try {\n const key = storeId ? `${RECENT_SEARCHES_KEY}_${storeId}` : RECENT_SEARCHES_KEY;\n let searches = getRecentSearches(storeId);\n searches = searches.filter(s => s !== query);\n searches.unshift(query);\n searches = searches.slice(0, MAX_RECENT_SEARCHES);\n localStorage.setItem(key, JSON.stringify(searches));\n return searches;\n } catch {\n return [];\n }\n};\n\nexport const removeRecentSearch = (query: string, storeId?: string): string[] => {\n try {\n const key = storeId ? `${RECENT_SEARCHES_KEY}_${storeId}` : RECENT_SEARCHES_KEY;\n let searches = getRecentSearches(storeId);\n searches = searches.filter(s => s !== query);\n localStorage.setItem(key, JSON.stringify(searches));\n return searches;\n } catch {\n return [];\n }\n};\n\nexport const clearRecentSearches = (storeId?: string): void => {\n try {\n const key = storeId ? `${RECENT_SEARCHES_KEY}_${storeId}` : RECENT_SEARCHES_KEY;\n localStorage.removeItem(key);\n } catch {\n // Silent fail\n }\n};\n\n// ============================================================================\n// Misc Utilities\n// ============================================================================\n\n/**\n * Debounce function\n */\nexport const debounce = <T extends (...args: any[]) => any>(\n fn: T,\n delay: number\n): ((...args: Parameters<T>) => void) & { cancel: () => void } => {\n let timeoutId: NodeJS.Timeout | null = null;\n \n const debounced = (...args: Parameters<T>) => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n \n debounced.cancel = () => {\n if (timeoutId) clearTimeout(timeoutId);\n };\n \n return debounced;\n};\n\n/**\n * Generate unique ID\n */\nexport const generateId = (prefix: string = 'seekora'): string => {\n return `${prefix}-${Math.random().toString(36).substring(2, 9)}`;\n};\n\n/**\n * Check if element is in viewport\n */\nexport const isInViewport = (element: HTMLElement): boolean => {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n};\n\n/**\n * Scroll element into view if needed\n */\nexport const scrollIntoViewIfNeeded = (element: HTMLElement, container: HTMLElement): void => {\n const elementRect = element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n \n if (elementRect.top < containerRect.top) {\n element.scrollIntoView({ block: 'start', behavior: 'smooth' });\n } else if (elementRect.bottom > containerRect.bottom) {\n element.scrollIntoView({ block: 'end', behavior: 'smooth' });\n }\n};\n\n// ============================================================================\n// Caching Utilities\n// ============================================================================\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n ttl: number;\n}\n\n/**\n * Simple in-memory cache with TTL support for suggestions\n * Reduces API calls by caching results for quick repeated queries\n */\nclass SuggestionsCache {\n private cache = new Map<string, CacheEntry<any>>();\n private maxSize: number;\n private defaultTtl: number;\n\n constructor(options: { maxSize?: number; defaultTtlMs?: number } = {}) {\n this.maxSize = options.maxSize ?? 100;\n this.defaultTtl = options.defaultTtlMs ?? 30000; // 30 seconds default\n }\n\n /**\n * Generate a cache key from query and options\n */\n generateKey(query: string, options?: Record<string, any>): string {\n const normalizedQuery = query.toLowerCase().trim();\n if (!options) return normalizedQuery;\n \n // Create a stable key from options\n const optionsKey = Object.keys(options)\n .sort()\n .filter(k => options[k] !== undefined && options[k] !== null)\n .map(k => `${k}:${JSON.stringify(options[k])}`)\n .join('|');\n \n return optionsKey ? `${normalizedQuery}::${optionsKey}` : normalizedQuery;\n }\n\n /**\n * Get cached data if valid (not expired)\n */\n get<T>(key: string): T | null {\n const entry = this.cache.get(key);\n if (!entry) return null;\n\n const now = Date.now();\n if (now - entry.timestamp > entry.ttl) {\n // Expired - remove and return null\n this.cache.delete(key);\n return null;\n }\n\n return entry.data as T;\n }\n\n /**\n * Store data in cache\n */\n set<T>(key: string, data: T, ttlMs?: number): void {\n // Evict oldest entries if at max size\n if (this.cache.size >= this.maxSize) {\n const oldestKey = this.cache.keys().next().value;\n if (oldestKey) this.cache.delete(oldestKey);\n }\n\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n ttl: ttlMs ?? this.defaultTtl,\n });\n }\n\n /**\n * Check if key exists and is valid\n */\n has(key: string): boolean {\n return this.get(key) !== null;\n }\n\n /**\n * Clear all cached entries\n */\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Clear expired entries\n */\n cleanup(): void {\n const now = Date.now();\n for (const [key, entry] of this.cache.entries()) {\n if (now - entry.timestamp > entry.ttl) {\n this.cache.delete(key);\n }\n }\n }\n\n /**\n * Get cache statistics\n */\n getStats(): { size: number; maxSize: number } {\n return {\n size: this.cache.size,\n maxSize: this.maxSize,\n };\n }\n}\n\n// Global cache instance for suggestions (shared across components)\nlet globalSuggestionsCache: SuggestionsCache | null = null;\n\n/**\n * Get the global suggestions cache instance\n */\nexport const getSuggestionsCache = (options?: { maxSize?: number; defaultTtlMs?: number }): SuggestionsCache => {\n if (!globalSuggestionsCache) {\n globalSuggestionsCache = new SuggestionsCache(options);\n }\n return globalSuggestionsCache;\n};\n\n/**\n * Create a new cache instance (for isolated caching per component)\n */\nexport const createSuggestionsCache = (options?: { maxSize?: number; defaultTtlMs?: number }): SuggestionsCache => {\n return new SuggestionsCache(options);\n};\n\n/**\n * Clear the global cache\n */\nexport const clearSuggestionsCache = (): void => {\n globalSuggestionsCache?.clear();\n};\n\nexport { SuggestionsCache };\n","/**\n * Responsive Utilities and Breakpoints\n * \n * Shared responsive design utilities for all dropdown components\n */\n\nimport { useState, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n// ============================================================================\n// Breakpoints\n// ============================================================================\n\nexport const breakpoints = {\n xs: 0,\n sm: 480,\n md: 768,\n lg: 1024,\n xl: 1280,\n} as const;\n\nexport type Breakpoint = keyof typeof breakpoints;\n\n// ============================================================================\n// Media Query Helpers\n// ============================================================================\n\nexport const mediaQueries = {\n xs: `@media (max-width: ${breakpoints.sm - 1}px)`,\n sm: `@media (min-width: ${breakpoints.sm}px) and (max-width: ${breakpoints.md - 1}px)`,\n md: `@media (min-width: ${breakpoints.md}px) and (max-width: ${breakpoints.lg - 1}px)`,\n lg: `@media (min-width: ${breakpoints.lg}px) and (max-width: ${breakpoints.xl - 1}px)`,\n xl: `@media (min-width: ${breakpoints.xl}px)`,\n mobile: `@media (max-width: ${breakpoints.md - 1}px)`,\n tablet: `@media (min-width: ${breakpoints.md}px) and (max-width: ${breakpoints.lg - 1}px)`,\n desktop: `@media (min-width: ${breakpoints.lg}px)`,\n touch: '@media (hover: none) and (pointer: coarse)',\n mouse: '@media (hover: hover) and (pointer: fine)',\n} as const;\n\n// ============================================================================\n// Touch-Friendly Sizing\n// ============================================================================\n\nexport const touchTargets = {\n /** Minimum touch target size per WCAG guidelines */\n minimum: 44,\n /** Comfortable touch target size */\n comfortable: 48,\n /** Large touch target for primary actions */\n large: 56,\n} as const;\n\n// ============================================================================\n// Responsive Spacing\n// ============================================================================\n\nexport const responsiveSpacing = {\n mobile: {\n xs: '4px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '20px',\n },\n desktop: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n },\n} as const;\n\n// ============================================================================\n// Responsive Typography\n// ============================================================================\n\nexport const responsiveTypography = {\n mobile: {\n xs: '11px',\n sm: '13px',\n md: '15px',\n lg: '17px',\n xl: '20px',\n xxl: '24px',\n },\n desktop: {\n xs: '11px',\n sm: '12px',\n md: '14px',\n lg: '16px',\n xl: '18px',\n xxl: '24px',\n },\n} as const;\n\n// ============================================================================\n// CSS Generation Helpers\n// ============================================================================\n\n/**\n * Generate responsive CSS class string\n */\nexport const generateResponsiveCSS = (componentName: string): string => `\n /* Base responsive styles for ${componentName} */\n .${componentName} {\n --seekora-touch-target: ${touchTargets.minimum}px;\n --seekora-spacing-mobile: ${responsiveSpacing.mobile.md};\n --seekora-spacing-desktop: ${responsiveSpacing.desktop.md};\n }\n\n /* Mobile-first base */\n ${mediaQueries.mobile} {\n .${componentName} {\n width: 100% !important;\n max-width: 100vw !important;\n left: 0 !important;\n right: 0 !important;\n border-radius: 0 !important;\n margin-top: 0 !important;\n }\n \n .${componentName} [data-item],\n .${componentName} [role=\"option\"] {\n min-height: var(--seekora-touch-target);\n padding: 12px 16px;\n }\n \n .${componentName} button {\n min-height: var(--seekora-touch-target);\n min-width: var(--seekora-touch-target);\n }\n }\n\n /* Touch device optimizations */\n ${mediaQueries.touch} {\n .${componentName} [data-item]:active,\n .${componentName} [role=\"option\"]:active {\n background-color: var(--seekora-bg-hover, #f0f0f0) !important;\n }\n \n /* Disable hover states on touch */\n .${componentName} [data-item]:hover,\n .${componentName} [role=\"option\"]:hover {\n background-color: transparent;\n }\n }\n\n /* Tablet adjustments */\n ${mediaQueries.tablet} {\n .${componentName} {\n max-width: 90vw;\n margin: 8px auto;\n }\n }\n\n /* Desktop optimizations */\n ${mediaQueries.desktop} {\n .${componentName} [data-item],\n .${componentName} [role=\"option\"] {\n min-height: 40px;\n }\n }\n`;\n\n/**\n * Inject responsive styles into document\n */\nexport const injectResponsiveStyles = (componentName: string): void => {\n const styleId = `seekora-responsive-${componentName}`;\n \n // Don't inject if already exists\n if (typeof document !== 'undefined' && document.getElementById(styleId)) {\n return;\n }\n \n if (typeof document !== 'undefined') {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = generateResponsiveCSS(componentName);\n document.head.appendChild(style);\n }\n};\n\n// ============================================================================\n// Hook: useResponsive\n// ============================================================================\n\nexport interface ResponsiveState {\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n isTouch: boolean;\n width: number;\n height: number;\n breakpoint: Breakpoint;\n}\n\nexport const useResponsive = (): ResponsiveState => {\n const [state, setState] = useState<ResponsiveState>({\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n isTouch: false,\n width: typeof window !== 'undefined' ? window.innerWidth : 1024,\n height: typeof window !== 'undefined' ? window.innerHeight : 768,\n breakpoint: 'lg',\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const getBreakpoint = (width: number): Breakpoint => {\n if (width < breakpoints.sm) return 'xs';\n if (width < breakpoints.md) return 'sm';\n if (width < breakpoints.lg) return 'md';\n if (width < breakpoints.xl) return 'lg';\n return 'xl';\n };\n\n const updateState = () => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n const breakpoint = getBreakpoint(width);\n const isTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n\n setState({\n isMobile: width < breakpoints.md,\n isTablet: width >= breakpoints.md && width < breakpoints.lg,\n isDesktop: width >= breakpoints.lg,\n isTouch,\n width,\n height,\n breakpoint,\n });\n };\n\n updateState();\n window.addEventListener('resize', updateState);\n return () => window.removeEventListener('resize', updateState);\n }, []);\n\n return state;\n};\n\n// ============================================================================\n// Responsive Style Merger\n// ============================================================================\n\nexport interface ResponsiveStyles {\n base: CSSProperties;\n mobile?: CSSProperties;\n tablet?: CSSProperties;\n desktop?: CSSProperties;\n}\n\n/**\n * Get styles for current breakpoint\n */\nexport const getResponsiveStyle = (\n styles: ResponsiveStyles,\n responsive: ResponsiveState\n): CSSProperties => {\n const { isMobile, isTablet } = responsive;\n \n return {\n ...styles.base,\n ...(isMobile && styles.mobile),\n ...(isTablet && styles.tablet),\n ...(!isMobile && !isTablet && styles.desktop),\n };\n};\n\n// ============================================================================\n// Safe Area Handling\n// ============================================================================\n\nexport const safeAreaInsets = {\n top: 'env(safe-area-inset-top, 0px)',\n bottom: 'env(safe-area-inset-bottom, 0px)',\n left: 'env(safe-area-inset-left, 0px)',\n right: 'env(safe-area-inset-right, 0px)',\n} as const;\n\n/**\n * Get padding with safe area insets\n */\nexport const getSafeAreaPadding = (\n position: 'top' | 'bottom' | 'left' | 'right',\n additionalPadding: string = '0px'\n): string => {\n return `calc(${safeAreaInsets[position]} + ${additionalPadding})`;\n};\n","/**\n * Shared Styles Index\n */\n\nimport { useEffect } from 'react';\n\nexport * from './responsive';\n\n// ============================================================================\n// Global Responsive CSS for all Dropdown Variants\n// ============================================================================\n\nexport const globalResponsiveCSS = `\n/* ============================================\n SEEKORA DROPDOWN - RESPONSIVE STYLES\n ============================================ */\n\n/* CSS Variables for responsiveness */\n:root {\n --seekora-touch-target-min: 44px;\n --seekora-touch-target-comfortable: 48px;\n --seekora-mobile-padding: 16px;\n --seekora-desktop-padding: 20px;\n}\n\n/* Base responsive rules for all dropdowns */\n[class*=\"seekora-\"][class*=\"-dropdown\"] {\n box-sizing: border-box;\n}\n\n[class*=\"seekora-\"][class*=\"-dropdown\"] * {\n box-sizing: border-box;\n}\n\n/* ============================================\n MOBILE STYLES (< 768px)\n ============================================ */\n@media (max-width: 767px) {\n /* Full-width dropdowns on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"]:not(.seekora-mobile-sheet):not(.seekora-spotlight-dropdown) {\n width: 100% !important;\n max-width: 100vw !important;\n left: 0 !important;\n right: 0 !important;\n border-radius: 0 !important;\n margin: 0 !important;\n }\n\n /* Touch-friendly item sizes */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item],\n [class*=\"seekora-\"][class*=\"-dropdown\"] .suggestion-item,\n [class*=\"seekora-\"][class*=\"-dropdown\"] .product-card {\n min-height: var(--seekora-touch-target-min);\n }\n\n /* Larger padding on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item] {\n padding: 14px var(--seekora-mobile-padding) !important;\n }\n\n /* Larger fonts on mobile for readability */\n [class*=\"seekora-\"][class*=\"-dropdown\"] {\n font-size: 16px !important;\n }\n\n /* Stack columns on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .dropdown-content,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"display: flex\"][style*=\"flex-direction\"] {\n flex-direction: column !important;\n }\n\n /* Full-width columns on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 40%\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 45%\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 50%\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 55%\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"width: 60%\"] {\n width: 100% !important;\n flex: none !important;\n }\n\n /* Product grid adjustments */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .products-grid,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"grid-template-columns\"] {\n grid-template-columns: repeat(2, 1fr) !important;\n gap: 12px !important;\n }\n\n /* Horizontal scroll for products on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .products-scroll {\n display: flex !important;\n overflow-x: auto !important;\n scroll-snap-type: x mandatory !important;\n -webkit-overflow-scrolling: touch !important;\n padding-bottom: 8px !important;\n }\n\n [class*=\"seekora-\"][class*=\"-dropdown\"] .products-scroll > * {\n scroll-snap-align: start !important;\n flex-shrink: 0 !important;\n }\n\n /* Hide keyboard hints on mobile */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .keyboard-hint,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [class*=\"keyboard\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] kbd,\n [class*=\"seekora-\"][class*=\"-dropdown\"] .kbd {\n display: none !important;\n }\n\n /* Safe area padding for notched devices */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [style*=\"padding-bottom\"] {\n padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 12px) !important;\n }\n}\n\n/* ============================================\n TOUCH DEVICE STYLES\n ============================================ */\n@media (hover: none) and (pointer: coarse) {\n /* Active state instead of hover for touch */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"]:active,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item]:active,\n [class*=\"seekora-\"][class*=\"-dropdown\"] button:active {\n background-color: var(--seekora-bg-hover, rgba(0,0,0,0.05)) !important;\n transform: scale(0.98);\n }\n\n /* Disable hover effects on touch */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"]:hover,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item]:hover {\n background-color: transparent;\n }\n\n /* Larger touch targets */\n [class*=\"seekora-\"][class*=\"-dropdown\"] button,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"button\"] {\n min-height: var(--seekora-touch-target-min);\n min-width: var(--seekora-touch-target-min);\n }\n\n /* No text selection on touch */\n [class*=\"seekora-\"][class*=\"-dropdown\"] {\n -webkit-user-select: none;\n user-select: none;\n }\n}\n\n/* ============================================\n TABLET STYLES (768px - 1023px)\n ============================================ */\n@media (min-width: 768px) and (max-width: 1023px) {\n [class*=\"seekora-\"][class*=\"-dropdown\"]:not(.seekora-mobile-sheet) {\n max-width: 90vw !important;\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n /* 3-column product grid on tablet */\n [class*=\"seekora-\"][class*=\"-dropdown\"] .products-grid {\n grid-template-columns: repeat(3, 1fr) !important;\n }\n}\n\n/* ============================================\n DESKTOP STYLES (>= 1024px)\n ============================================ */\n@media (min-width: 1024px) {\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item] {\n min-height: 40px;\n }\n\n /* Hover effects only on desktop */\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"]:hover,\n [class*=\"seekora-\"][class*=\"-dropdown\"] [data-item]:hover {\n background-color: var(--seekora-bg-hover, rgba(0,0,0,0.04));\n }\n}\n\n/* ============================================\n ANIMATION & TRANSITIONS\n ============================================ */\n@keyframes seekora-dropdown-enter {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes seekora-dropdown-enter-mobile {\n from {\n opacity: 0;\n transform: translateY(100%);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes seekora-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n[class*=\"seekora-\"][class*=\"-dropdown\"].entering {\n animation: seekora-dropdown-enter 200ms ease-out;\n}\n\n@media (max-width: 767px) {\n [class*=\"seekora-\"][class*=\"-dropdown\"].entering {\n animation: seekora-dropdown-enter-mobile 300ms ease-out;\n }\n}\n\n/* ============================================\n ACCESSIBILITY\n ============================================ */\n@media (prefers-reduced-motion: reduce) {\n [class*=\"seekora-\"][class*=\"-dropdown\"],\n [class*=\"seekora-\"][class*=\"-dropdown\"] * {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n/* Focus visible styles */\n[class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"]:focus-visible,\n[class*=\"seekora-\"][class*=\"-dropdown\"] button:focus-visible {\n outline: 2px solid var(--seekora-primary, #007aff);\n outline-offset: -2px;\n}\n\n/* High contrast mode */\n@media (prefers-contrast: high) {\n [class*=\"seekora-\"][class*=\"-dropdown\"] {\n border: 2px solid currentColor !important;\n }\n\n [class*=\"seekora-\"][class*=\"-dropdown\"] [role=\"option\"][aria-selected=\"true\"] {\n outline: 2px solid currentColor;\n }\n}\n\n/* Dark mode adjustments */\n@media (prefers-color-scheme: dark) {\n [class*=\"seekora-\"][class*=\"-dropdown\"] {\n --seekora-bg-surface: #1c1c1e;\n --seekora-bg-secondary: #2c2c2e;\n --seekora-bg-hover: #3a3a3c;\n --seekora-text-primary: #ffffff;\n --seekora-text-secondary: #8e8e93;\n --seekora-border-color: #38383a;\n }\n}\n`;\n\n/**\n * Inject global responsive styles\n */\nlet stylesInjected = false;\n\nexport const injectGlobalResponsiveStyles = (): void => {\n if (stylesInjected) return;\n if (typeof document === 'undefined') return;\n\n const styleId = 'seekora-dropdown-responsive-global';\n if (document.getElementById(styleId)) {\n stylesInjected = true;\n return;\n }\n\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = globalResponsiveCSS;\n document.head.appendChild(style);\n stylesInjected = true;\n};\n\n/**\n * Hook to auto-inject styles on mount\n */\nexport const useInjectResponsiveStyles = (): void => {\n useEffect(() => {\n injectGlobalResponsiveStyles();\n }, []);\n};\n","/**\n * AmazonDropdown - Amazon-style Search Suggestions\n * \n * Features:\n * - Department/category scoping in search\n * - Suggestions with category context\n * - Product grid with images\n * - \"in Department\" suffix for scoped searches\n * - Clean, functional design\n */\n\nimport React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n extractCategory,\n formatPrice,\n highlightText,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = (theme: any = {}, isMobile: boolean = false) => ({\n root: {\n position: 'absolute' as const,\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '8px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #0f1111)',\n borderRadius: isMobile ? '12px' : '16px',\n boxShadow: '0 4px 6px -1px rgba(0,0,0,0.1), 0 10px 40px -5px rgba(0,0,0,0.15)',\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: '14px',\n zIndex: 1000,\n // Mobile: full width overlay\n ...(isMobile && {\n position: 'fixed' as const,\n top: '60px',\n bottom: 0,\n left: '8px',\n right: '8px',\n margin: 0,\n borderRadius: '16px 16px 0 0',\n }),\n },\n content: {\n display: 'flex',\n flexDirection: isMobile ? 'column' as const : 'row' as const,\n maxHeight: isMobile ? 'calc(100vh - 140px)' : '480px',\n overflowY: 'auto' as const,\n },\n leftColumn: {\n flex: isMobile ? 'none' : '0 0 55%',\n borderRight: isMobile ? 'none' : '1px solid var(--seekora-border-color, #e8e8e8)',\n borderBottom: isMobile ? '1px solid var(--seekora-border-color, #e8e8e8)' : 'none',\n overflowY: 'auto' as const,\n padding: '8px 0',\n },\n rightColumn: {\n flex: isMobile ? 'none' : '0 0 45%',\n backgroundColor: 'var(--seekora-bg-secondary, #fafafa)',\n overflowY: 'auto' as const,\n padding: '8px 0',\n },\n section: {\n padding: '4px 0',\n },\n sectionHeader: {\n padding: '8px 16px 6px',\n fontSize: '11px',\n fontWeight: 600,\n color: 'var(--seekora-text-secondary, #6b6b6b)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n },\n suggestionItem: {\n display: 'flex',\n alignItems: 'center',\n padding: isMobile ? '12px 16px' : '10px 16px',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n gap: isMobile ? '12px' : '10px',\n minHeight: isMobile ? `${touchTargets.minimum}px` : '40px',\n borderRadius: '8px',\n margin: '2px 8px',\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n suggestionItemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n suggestionIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-tertiary, #6b6b6b)',\n flexShrink: 0,\n },\n suggestionContent: {\n flex: 1,\n minWidth: 0,\n },\n suggestionQuery: {\n fontSize: '14px',\n color: 'var(--seekora-text-primary, #0f1111)',\n fontWeight: 400,\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n suggestionContext: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #565959)',\n marginTop: '2px',\n },\n suggestionDepartment: {\n color: 'var(--seekora-primary-dark, #c45500)',\n fontStyle: 'italic',\n },\n categoryScoped: {\n backgroundColor: 'var(--seekora-primary-light, #fef8f0)',\n borderRadius: '3px',\n padding: '0 4px',\n marginLeft: '4px',\n fontSize: '11px',\n color: 'var(--seekora-primary-dark, #c45500)',\n },\n productsHeader: {\n padding: '12px 16px 8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n productsTitle: {\n fontSize: '13px',\n fontWeight: 700,\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n viewAll: {\n fontSize: '12px',\n color: 'var(--seekora-link, #007185)',\n textDecoration: 'none',\n cursor: 'pointer',\n '&:hover': {\n color: 'var(--seekora-link-hover, #c45500)',\n textDecoration: 'underline',\n },\n },\n productsGrid: {\n display: 'grid',\n gridTemplateColumns: isMobile ? 'repeat(2, 1fr)' : 'repeat(2, 1fr)',\n gap: '12px',\n padding: '12px 16px 16px',\n },\n productCard: {\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n borderRadius: '12px',\n padding: '10px',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n boxShadow: '0 1px 3px rgba(0,0,0,0.06)',\n },\n productCardHover: {\n boxShadow: '0 4px 12px rgba(0,0,0,0.12)',\n transform: 'translateY(-2px)',\n },\n productImage: {\n width: '100%',\n aspectRatio: '1',\n objectFit: 'contain' as const,\n backgroundColor: 'var(--seekora-bg-tertiary, #f8f8f8)',\n borderRadius: '8px',\n marginBottom: '10px',\n },\n productTitle: {\n fontSize: '12px',\n color: 'var(--seekora-link, #007185)',\n lineHeight: 1.3,\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden',\n marginBottom: '4px',\n },\n productPrice: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n productPriceSymbol: {\n fontSize: '11px',\n verticalAlign: 'top',\n },\n productRating: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n marginTop: '4px',\n },\n stars: {\n color: 'var(--seekora-rating, #de7921)',\n fontSize: '12px',\n },\n reviewCount: {\n fontSize: '11px',\n color: 'var(--seekora-link, #007185)',\n },\n prime: {\n height: '16px',\n marginTop: '4px',\n },\n recentHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 16px',\n },\n clearRecent: {\n fontSize: '12px',\n color: 'var(--seekora-link, #007185)',\n cursor: 'pointer',\n background: 'none',\n border: 'none',\n padding: 0,\n },\n highlight: {\n fontWeight: 700,\n color: 'var(--seekora-text-primary, #0f1111)',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '40px',\n color: 'var(--seekora-text-secondary, #565959)',\n gap: '10px',\n },\n spinner: {\n width: '20px',\n height: '20px',\n border: '2px solid var(--seekora-border-color, #ddd)',\n borderTopColor: 'var(--seekora-primary, #f90)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '40px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #565959)',\n },\n footer: {\n padding: '10px 16px',\n borderTop: '1px solid var(--seekora-border-color, #e7e7e7)',\n backgroundColor: 'var(--seekora-bg-secondary, #f7f7f7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #767676)',\n },\n keyboard: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n key: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '20px',\n height: '18px',\n padding: '0 4px',\n backgroundColor: 'var(--seekora-bg-surface, #fff)',\n border: '1px solid var(--seekora-border-color, #ccc)',\n borderRadius: '3px',\n fontSize: '10px',\n fontFamily: 'monospace',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\" />\n <polyline points=\"17 6 23 6 23 12\" />\n </svg>\n);\n\nconst StarIcon = ({ filled = false }: { filled?: boolean }) => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill={filled ? 'currentColor' : 'none'} stroke=\"currentColor\" strokeWidth=\"2\">\n <polygon 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\" />\n </svg>\n);\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nconst RatingStars: React.FC<{ rating: number; count?: number }> = ({ rating, count }) => {\n const fullStars = Math.floor(rating);\n const hasHalf = rating % 1 >= 0.5;\n \n return (\n <div style={createStyles().productRating}>\n <div style={createStyles().stars}>\n {'★'.repeat(fullStars)}\n {hasHalf && '½'}\n {'☆'.repeat(5 - fullStars - (hasHalf ? 1 : 0))}\n </div>\n {count !== undefined && (\n <span style={createStyles().reviewCount}>({count.toLocaleString()})</span>\n )}\n </div>\n );\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface AmazonDropdownProps extends BaseDropdownProps {\n /** Show department scoping in suggestions */\n showDepartments?: boolean;\n /** Current department filter */\n currentDepartment?: string;\n /** Available departments */\n departments?: Array<{ id: string; label: string }>;\n /** Show Prime badge */\n showPrime?: boolean;\n /** Prime icon URL */\n primeIconUrl?: string;\n}\n\nexport const AmazonDropdown = forwardRef<DropdownRef, AmazonDropdownProps>(\n function AmazonDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n categories = [],\n recentSearches = [],\n trendingSearches = [],\n filteredTabs = [],\n activeTab = 'all',\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n categoryFields = { id: 'id', label: 'label' },\n productDisplay = {},\n theme = {},\n showDepartments = true,\n currentDepartment,\n departments = [],\n showPrime = false,\n width = '700px',\n maxHeight = '500px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onProductClick,\n onCategoryClick,\n onTabChange,\n onRecentClick,\n onRecentRemove,\n onRecentClearAll,\n onViewAll,\n onClose,\n header,\n footer,\n renderLoading,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile, isTablet } = responsive;\n \n const styles = useMemo(() => createStyles(theme, isMobile), [theme, isMobile]);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredProduct, setHoveredProduct] = useState<string | null>(null);\n\n // Process data through field mappings\n const processedSuggestions = useMemo(() => \n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n // Get products from active tab or default products\n const currentProducts = useMemo(() => {\n if (activeTab === 'all' || filteredTabs.length === 0) {\n return products;\n }\n const tab = filteredTabs.find(t => t.id === activeTab);\n return tab?.products || products;\n }, [activeTab, filteredTabs, products]);\n\n const processedProducts = useMemo(() => \n currentProducts.map(p => extractProduct(p, productFields)),\n [currentProducts, productFields]\n );\n\n const processedCategories = useMemo(() => \n categories.map(c => extractCategory(c, categoryFields)),\n [categories, categoryFields]\n );\n\n // Recent searches as strings\n const recentQueries = useMemo(() => \n recentSearches.map(r => typeof r === 'string' ? r : r.query),\n [recentSearches]\n );\n\n // All navigable items\n const allItems = useMemo(() => {\n const items: Array<{ type: string; data: any; index: number }> = [];\n let idx = 0;\n\n if (query.length === 0) {\n recentQueries.slice(0, 5).forEach(q => {\n items.push({ type: 'recent', data: q, index: idx++ });\n });\n }\n\n processedSuggestions.forEach(s => {\n items.push({ type: 'suggestion', data: s, index: idx++ });\n });\n\n return items;\n }, [query, recentQueries, processedSuggestions]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) return;\n const item = allItems[activeIndex];\n if (item.type === 'recent') {\n onRecentClick?.(item.data);\n } else if (item.type === 'suggestion') {\n onSuggestionSelect?.(item.data._raw, item.index);\n }\n }, [activeIndex, allItems, onRecentClick, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showRecent = query.length === 0 && recentQueries.length > 0;\n const showTrending = query.length === 0 && trendingSearches.length > 0;\n const showProducts = processedProducts.length > 0;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-amazon-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { \n width: isMobile ? '100%' : width, \n maxHeight: isMobile ? '100vh' : maxHeight, \n zIndex \n },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n {/* Styles */}\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n .seekora-amazon-dropdown mark {\n background: transparent;\n font-weight: 700;\n color: inherit;\n }\n `}</style>\n\n {header}\n\n {loading ? (\n renderLoading ? renderLoading() : (\n <div style={styles.loading}>\n <div style={styles.spinner} />\n <span>Searching...</span>\n </div>\n )\n ) : (\n <>\n {/* Tabs Navigation */}\n {filteredTabs.length > 0 && (\n <div style={{\n display: 'flex',\n gap: '8px',\n padding: isMobile ? '12px' : '12px 16px',\n overflowX: 'auto',\n borderBottomWidth: '1px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'var(--seekora-border-color, #e7e7e7)',\n background: 'var(--seekora-bg-secondary, #f5f5f5)',\n WebkitOverflowScrolling: 'touch',\n }}>\n <button\n onClick={() => onTabChange?.('all')}\n style={{\n padding: '8px 16px',\n borderWidth: 0,\n borderStyle: 'none',\n background: activeTab === 'all' ? 'var(--seekora-text-primary, #232f3e)' : 'var(--seekora-bg-surface, #ffffff)',\n color: activeTab === 'all' ? 'var(--seekora-bg-surface, #ffffff)' : 'var(--seekora-text-primary, #0f1111)',\n borderRadius: '20px',\n fontSize: '13px',\n fontWeight: 600,\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n minHeight: '36px',\n boxShadow: activeTab === 'all' ? 'none' : '0 1px 3px rgba(0,0,0,0.1)',\n transition: 'all 150ms ease',\n }}\n >\n All\n </button>\n {filteredTabs.slice(0, 6).map(tab => (\n <button\n key={tab.id}\n onClick={() => onTabChange?.(tab.id)}\n style={{\n padding: '8px 16px',\n borderWidth: 0,\n borderStyle: 'none',\n background: activeTab === tab.id ? 'var(--seekora-primary, #ff9900)' : 'var(--seekora-bg-surface, #ffffff)',\n color: activeTab === tab.id ? 'var(--seekora-text-on-primary, #0f1111)' : 'var(--seekora-text-primary, #0f1111)',\n borderRadius: '20px',\n fontSize: '13px',\n fontWeight: activeTab === tab.id ? 700 : 500,\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n minHeight: '36px',\n boxShadow: activeTab === tab.id ? '0 2px 4px rgba(255,153,0,0.3)' : '0 1px 3px rgba(0,0,0,0.1)',\n transition: 'all 150ms ease',\n }}\n >\n {tab.label} {tab.nb_hits ? `(${tab.nb_hits})` : ''}\n </button>\n ))}\n </div>\n )}\n\n <div style={styles.content}>\n {/* Left Column - Suggestions */}\n <div style={styles.leftColumn}>\n {/* Recent Searches */}\n {showRecent && (\n <div style={styles.section}>\n <div style={styles.recentHeader}>\n <span style={styles.sectionHeader as any}>Recent Searches</span>\n <button \n style={styles.clearRecent}\n onClick={onRecentClearAll}\n >\n Clear all\n </button>\n </div>\n {recentQueries.slice(0, 5).map((q, idx) => {\n const isActive = activeIndex === idx;\n return (\n <div\n key={`recent-${q}`}\n data-index={idx}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.suggestionItem,\n isActive ? styles.suggestionItemActive : undefined\n )}\n onClick={() => onRecentClick?.(q)}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <ClockIcon />\n <div style={styles.suggestionContent}>\n <div style={styles.suggestionQuery}>{q}</div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Trending (when no query) */}\n {showTrending && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>Trending Searches</div>\n {(trendingSearches as string[]).slice(0, 5).map((t, idx) => {\n const trendQuery = typeof t === 'string' ? t : (t as any).query;\n const itemIdx = recentQueries.length + idx;\n const isActive = activeIndex === itemIdx;\n return (\n <div\n key={`trending-${trendQuery}`}\n data-index={itemIdx}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.suggestionItem,\n isActive ? styles.suggestionItemActive : undefined\n )}\n onClick={() => onSuggestionSelect?.({ query: trendQuery }, idx)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n <TrendingIcon />\n <div style={styles.suggestionContent}>\n <div style={styles.suggestionQuery}>{trendQuery}</div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Suggestions */}\n {processedSuggestions.length > 0 && (\n <div style={styles.section}>\n {query && <div style={styles.sectionHeader}>Suggestions</div>}\n {processedSuggestions.map((suggestion, idx) => {\n const itemIdx = showRecent ? recentQueries.length + idx : idx;\n const isActive = activeIndex === itemIdx;\n const categories = suggestion.categories || [];\n const firstCategory = categories[0];\n \n return (\n <div\n key={suggestion.id || `suggestion-${idx}`}\n data-index={itemIdx}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.suggestionItem,\n isActive ? styles.suggestionItemActive : undefined\n )}\n onClick={() => onSuggestionSelect?.(suggestion._raw, idx)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n <div style={styles.suggestionIcon}>\n <SearchIcon />\n </div>\n <div style={styles.suggestionContent}>\n <div \n style={styles.suggestionQuery}\n dangerouslySetInnerHTML={{ \n __html: highlightText(suggestion.query, query, { className: 'highlight' })\n }}\n />\n {showDepartments && firstCategory && (\n <div style={styles.suggestionContext}>\n <span style={styles.suggestionDepartment}>\n in {typeof firstCategory === 'string' ? firstCategory : firstCategory.value || firstCategory.label}\n </span>\n </div>\n )}\n </div>\n {suggestion.count && (\n <span style={styles.categoryScoped}>\n {suggestion.count.toLocaleString()}\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Empty State */}\n {query && processedSuggestions.length === 0 && !loading && (\n renderEmpty ? renderEmpty(query) : (\n <div style={styles.empty}>\n No suggestions found for \"{query}\"\n </div>\n )\n )}\n </div>\n\n {/* Right Column - Products */}\n {showProducts && (\n <div style={styles.rightColumn}>\n <div style={styles.productsHeader}>\n <span style={styles.productsTitle}>Suggested Products</span>\n <a \n style={styles.viewAll as any}\n onClick={() => onViewAll?.('products')}\n >\n View all\n </a>\n </div>\n <div style={styles.productsGrid}>\n {processedProducts.slice(0, 4).map((product, idx) => (\n <div\n key={product.id}\n style={mergeStyles(\n styles.productCard,\n hoveredProduct === product.id ? styles.productCardHover : undefined\n )}\n onClick={() => onProductClick?.(product._raw, idx)}\n onMouseEnter={() => setHoveredProduct(product.id)}\n onMouseLeave={() => setHoveredProduct(null)}\n >\n {product.image ? (\n <img\n src={product.image}\n alt={product.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n ) : (\n <div style={{ ...styles.productImage, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <span style={{ color: 'var(--seekora-text-tertiary, #999)', fontSize: '32px' }}>📷</span>\n </div>\n )}\n <div style={styles.productTitle}>{product.title}</div>\n {product.price !== undefined && (\n <div style={styles.productPrice}>\n <span style={styles.productPriceSymbol}>\n {productDisplay.currency || '$'}\n </span>\n {formatPrice(product.price, { \n currency: '', \n priceDecimals: productDisplay.priceDecimals \n })}\n </div>\n )}\n {product.rating && (\n <RatingStars \n rating={parseFloat(String(product.rating))} \n count={product.reviewCount ? parseInt(String(product.reviewCount)) : undefined}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </>\n )}\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n <div style={styles.footer}>\n <div style={styles.keyboard}>\n <span style={styles.key}>↑</span>\n <span style={styles.key}>↓</span>\n <span>to navigate</span>\n <span style={styles.key}>↵</span>\n <span>to select</span>\n <span style={styles.key}>esc</span>\n <span>to close</span>\n </div>\n {processedSuggestions.length > 0 && (\n <span>{processedSuggestions.length} suggestions</span>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nexport default AmazonDropdown;\n","/**\n * GoogleDropdown - Google-style Clean Search Suggestions\n * \n * Features:\n * - Ultra-clean, minimal design\n * - Instant suggestions with smooth animations\n * - Trending searches when empty\n * - \"I'm Feeling Lucky\" style quick actions\n * - Voice search integration ready\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n highlightText,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = (isMobile: boolean = false) => ({\n root: {\n position: isMobile ? 'fixed' as const : 'absolute' as const,\n top: isMobile ? 0 : '100%',\n left: 0,\n right: 0,\n bottom: isMobile ? 0 : 'auto',\n marginTop: isMobile ? 0 : '4px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #202124)',\n borderRadius: isMobile ? '0' : '24px',\n boxShadow: isMobile ? 'none' : '0 4px 20px rgba(0,0,0,0.12)',\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: isMobile ? '17px' : '15px',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n list: {\n listStyle: 'none',\n margin: 0,\n padding: '8px',\n flex: 1,\n overflowY: 'auto' as const,\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n padding: isMobile ? '12px 14px' : '10px 14px',\n cursor: 'pointer',\n transition: 'all 100ms ease',\n gap: '12px',\n minHeight: '44px',\n borderRadius: '12px',\n margin: '2px 0',\n color: 'var(--seekora-text-primary, #202124)',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #202124)',\n },\n itemIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-tertiary, #9aa0a6)',\n flexShrink: 0,\n },\n itemContent: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n minWidth: 0,\n },\n itemText: {\n fontSize: '16px',\n color: 'var(--seekora-text-primary, #202124)',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n itemTextBold: {\n fontWeight: 400,\n },\n itemMatch: {\n fontWeight: 700,\n },\n itemAction: {\n fontSize: '14px',\n color: 'var(--seekora-link, #1a73e8)',\n marginLeft: '16px',\n opacity: 0,\n transition: 'opacity 100ms',\n whiteSpace: 'nowrap' as const,\n },\n itemActionVisible: {\n opacity: 1,\n },\n removeBtn: {\n padding: '4px 8px',\n background: 'none',\n border: 'none',\n color: 'var(--seekora-link, #1a73e8)',\n cursor: 'pointer',\n fontSize: '13px',\n borderRadius: '4px',\n opacity: 0,\n transition: 'opacity 100ms, background 100ms',\n },\n removeBtnVisible: {\n opacity: 1,\n },\n removeBtnHover: {\n backgroundColor: 'var(--seekora-bg-hover, #e8f0fe)',\n color: 'var(--seekora-text-primary, #202124)',\n },\n divider: {\n height: '1px',\n backgroundColor: 'var(--seekora-border-color, #e8eaed)',\n margin: '8px 0',\n },\n sectionTitle: {\n padding: '12px 16px 8px',\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--seekora-text-secondary, #5f6368)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.8px',\n },\n trending: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: 'var(--seekora-success, #1e8e3e)',\n fontSize: '12px',\n marginLeft: 'auto',\n },\n trendingIcon: {\n width: '12px',\n height: '12px',\n },\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '12px 16px',\n borderTop: '1px solid var(--seekora-border-color, #e8eaed)',\n gap: '24px',\n backgroundColor: 'var(--seekora-bg-secondary, #f8f9fa)',\n },\n footerButton: {\n padding: '8px 16px',\n backgroundColor: 'var(--seekora-bg-tertiary, #f1f3f4)',\n border: '1px solid var(--seekora-border-color, #f1f3f4)',\n borderRadius: '4px',\n fontSize: '14px',\n color: 'var(--seekora-text-secondary, #3c4043)',\n cursor: 'pointer',\n transition: 'border-color 100ms, box-shadow 100ms',\n },\n footerButtonHover: {\n borderColor: 'var(--seekora-border-color-dark, #dadce0)',\n boxShadow: '0 1px 1px rgba(0,0,0,0.1)',\n },\n voiceBtn: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n borderRadius: '50%',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: 'var(--seekora-primary, #4285f4)',\n transition: 'background 100ms',\n },\n voiceBtnHover: {\n backgroundColor: 'var(--seekora-bg-hover, #f1f3f4)',\n color: 'var(--seekora-text-primary, #202124)',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px',\n color: 'var(--seekora-text-secondary, #5f6368)',\n gap: '12px',\n },\n spinner: {\n width: '24px',\n height: '24px',\n border: '3px solid var(--seekora-border-color, #e8eaed)',\n borderTopColor: 'var(--seekora-primary, #4285f4)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '24px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #5f6368)',\n fontSize: '14px',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M15.5 14h-.79l-.28-.27A6.471 6.471 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" fill=\"currentColor\"/>\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M13 3a9 9 0 00-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42A8.954 8.954 0 0013 21a9 9 0 000-18zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z\" fill=\"currentColor\"/>\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z\" fill=\"currentColor\"/>\n </svg>\n);\n\nconst RemoveIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"18\" height=\"18\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" fill=\"currentColor\"/>\n </svg>\n);\n\nconst ArrowIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" width=\"20\" height=\"20\">\n <path d=\"M9 5l-4 4 4 4\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" transform=\"rotate(-90 12 12)\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface GoogleDropdownProps extends BaseDropdownProps {\n /** Show \"I'm Feeling Lucky\" button */\n showFeelingLucky?: boolean;\n /** Feeling lucky button text */\n feelingLuckyText?: string;\n /** Show remove button on recent searches */\n showRemoveRecent?: boolean;\n /** Show voice search button */\n showVoiceSearch?: boolean;\n /** Voice search handler */\n onVoiceSearch?: () => void;\n /** Feeling lucky handler */\n onFeelingLucky?: (query: string) => void;\n /** Show trending indicator */\n showTrendingIndicator?: boolean;\n}\n\nexport const GoogleDropdown = forwardRef<DropdownRef, GoogleDropdownProps>(\n function GoogleDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n recentSearches = [],\n trendingSearches = [],\n suggestionFields = { query: 'query' },\n theme = {},\n showFeelingLucky = true,\n feelingLuckyText = \"I'm Feeling Lucky\",\n showRemoveRecent = true,\n showVoiceSearch = false,\n showTrendingIndicator = true,\n width = '100%',\n maxHeight = '400px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onRecentClick,\n onRecentRemove,\n onVoiceSearch,\n onFeelingLucky,\n onClose,\n onSearchSubmit,\n header,\n footer,\n renderLoading,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(isMobile), [isMobile]);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredIndex, setHoveredIndex] = useState(-1);\n const [hoveredBtn, setHoveredBtn] = useState<string | null>(null);\n\n // Process suggestions\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const recentQueries = useMemo(() =>\n recentSearches.map(r => typeof r === 'string' ? r : r.query).slice(0, 5),\n [recentSearches]\n );\n\n const trendingQueries = useMemo(() =>\n (trendingSearches as any[]).map(t => typeof t === 'string' ? t : t.query).slice(0, 5),\n [trendingSearches]\n );\n\n // All items for navigation\n const allItems = useMemo(() => {\n const items: Array<{ type: string; query: string; data?: any }> = [];\n\n if (query.length === 0) {\n recentQueries.forEach(q => items.push({ type: 'recent', query: q }));\n trendingQueries.forEach(q => items.push({ type: 'trending', query: q }));\n } else {\n processedSuggestions.forEach(s => items.push({ type: 'suggestion', query: s.query, data: s }));\n }\n\n return items;\n }, [query, recentQueries, trendingQueries, processedSuggestions]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0) {\n if (query) onSearchSubmit?.(query);\n return;\n }\n const item = allItems[activeIndex];\n if (item.type === 'recent' || item.type === 'trending') {\n onRecentClick?.(item.query);\n } else {\n onSuggestionSelect?.(item.data?._raw || { query: item.query }, activeIndex);\n }\n }, [activeIndex, allItems, query, onSearchSubmit, onRecentClick, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Reset active index when items change\n useEffect(() => {\n setActiveIndex(-1);\n }, [query]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showRecent = query.length === 0 && recentQueries.length > 0;\n const showTrending = query.length === 0 && trendingQueries.length > 0;\n\n const renderItem = (\n item: { type: string; query: string; data?: any },\n index: number,\n globalIndex: number\n ) => {\n const isActive = activeIndex === globalIndex;\n const isHovered = hoveredIndex === globalIndex;\n const showAction = isActive || isHovered;\n\n return (\n <li\n key={`${item.type}-${item.query}-${index}`}\n data-index={globalIndex}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.item,\n isActive || isHovered ? styles.itemActive : undefined\n )}\n onClick={() => {\n if (item.type === 'recent' || item.type === 'trending') {\n onRecentClick?.(item.query);\n } else {\n onSuggestionSelect?.(item.data?._raw || { query: item.query }, index);\n }\n }}\n onMouseEnter={() => {\n setHoveredIndex(globalIndex);\n setActiveIndex(globalIndex);\n }}\n onMouseLeave={() => setHoveredIndex(-1)}\n >\n <div style={styles.itemIcon}>\n {item.type === 'recent' ? <ClockIcon /> :\n item.type === 'trending' ? <TrendingIcon /> :\n <SearchIcon />}\n </div>\n <div style={styles.itemContent}>\n <span \n style={styles.itemText}\n dangerouslySetInnerHTML={{\n __html: query \n ? highlightText(item.query, query, { tag: 'b' })\n : item.query\n }}\n />\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {item.type === 'trending' && showTrendingIndicator && (\n <span style={styles.trending}>\n <TrendingIcon />\n Trending\n </span>\n )}\n {item.type === 'recent' && showRemoveRecent && (\n <button\n style={mergeStyles(\n styles.removeBtn,\n showAction ? styles.removeBtnVisible : undefined\n )}\n onClick={(e) => {\n e.stopPropagation();\n onRecentRemove?.(item.query);\n }}\n aria-label={`Remove ${item.query}`}\n >\n Remove\n </button>\n )}\n <span\n style={mergeStyles(\n styles.itemAction,\n showAction ? styles.itemActionVisible : undefined\n )}\n >\n <ArrowIcon />\n </span>\n </div>\n </div>\n </li>\n );\n };\n\n let globalIndex = 0;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-google-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { width, maxHeight: 'none', zIndex },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n\n {header}\n\n {loading ? (\n renderLoading ? renderLoading() : (\n <div style={styles.loading}>\n <div style={styles.spinner} />\n </div>\n )\n ) : (\n <>\n <ul style={styles.list}>\n {/* Recent Searches */}\n {showRecent && (\n <>\n {recentQueries.map((q, idx) => {\n const item = { type: 'recent', query: q };\n const el = renderItem(item, idx, globalIndex);\n globalIndex++;\n return el;\n })}\n {showTrending && <div style={styles.divider} />}\n </>\n )}\n\n {/* Trending Searches */}\n {showTrending && (\n <>\n {!showRecent && <div style={styles.sectionTitle}>Trending searches</div>}\n {trendingQueries.map((q, idx) => {\n const item = { type: 'trending', query: q };\n const el = renderItem(item, idx, globalIndex);\n globalIndex++;\n return el;\n })}\n </>\n )}\n\n {/* Query Suggestions */}\n {query && processedSuggestions.length > 0 && (\n processedSuggestions.map((s, idx) => {\n const item = { type: 'suggestion', query: s.query, data: s };\n const el = renderItem(item, idx, globalIndex);\n globalIndex++;\n return el;\n })\n )}\n\n {/* Empty state */}\n {query && processedSuggestions.length === 0 && !loading && (\n renderEmpty ? renderEmpty(query) : (\n <li style={styles.empty}>\n No suggestions for \"{query}\"\n </li>\n )\n )}\n </ul>\n\n {/* Footer with buttons */}\n {(showFeelingLucky || showVoiceSearch) && (\n <div style={styles.footer}>\n {showFeelingLucky && (\n <>\n <button\n style={mergeStyles(\n styles.footerButton,\n hoveredBtn === 'search' ? styles.footerButtonHover : undefined\n )}\n onMouseEnter={() => setHoveredBtn('search')}\n onMouseLeave={() => setHoveredBtn(null)}\n onClick={() => onSearchSubmit?.(query || (activeIndex >= 0 ? allItems[activeIndex]?.query : ''))}\n >\n Search\n </button>\n <button\n style={mergeStyles(\n styles.footerButton,\n hoveredBtn === 'lucky' ? styles.footerButtonHover : undefined\n )}\n onMouseEnter={() => setHoveredBtn('lucky')}\n onMouseLeave={() => setHoveredBtn(null)}\n onClick={() => onFeelingLucky?.(query || (activeIndex >= 0 ? allItems[activeIndex]?.query : ''))}\n >\n {feelingLuckyText}\n </button>\n </>\n )}\n </div>\n )}\n </>\n )}\n\n {footer}\n </div>\n );\n }\n);\n\nexport default GoogleDropdown;\n","/**\n * PinterestDropdown - Visual Discovery Style Suggestions\n * \n * Features:\n * - Visually-driven masonry/grid product display\n * - Large hero images\n * - Category chips/pills for filtering\n * - Smooth hover effects with quick preview\n * - Color palette extraction ready\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n extractCategory,\n formatPrice,\n highlightText,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = () => ({\n root: {\n position: 'absolute' as const,\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '8px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #111111)',\n borderRadius: '20px',\n boxShadow: '0 4px 30px rgba(0,0,0,0.12)',\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: '15px',\n },\n header: {\n padding: '16px 20px 14px',\n borderBottom: '1px solid var(--seekora-border-color, #e8e8e8)',\n },\n searchInfo: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n marginBottom: '14px',\n },\n searchQuery: {\n fontSize: '16px',\n fontWeight: 600,\n color: '#111111',\n },\n searchCount: {\n fontSize: '13px',\n color: '#767676',\n },\n categoriesScroll: {\n display: 'flex',\n gap: '8px',\n overflowX: 'auto' as const,\n paddingBottom: '4px',\n scrollbarWidth: 'none' as const,\n msOverflowStyle: 'none' as const,\n },\n categoryChip: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 16px',\n backgroundColor: 'var(--seekora-bg-secondary, #f0f0f0)',\n borderRadius: '20px',\n fontSize: '13px',\n fontWeight: 500,\n color: '#111111',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n whiteSpace: 'nowrap' as const,\n borderWidth: 0,\n borderStyle: 'none',\n },\n categoryChipActive: {\n backgroundColor: 'var(--seekora-primary, #e60023)',\n color: 'var(--seekora-bg-surface, #ffffff)',\n },\n categoryChipHover: {\n backgroundColor: 'var(--seekora-bg-hover, #e0e0e0)',\n color: 'var(--seekora-text-primary, #111111)',\n },\n categoryIcon: {\n width: '16px',\n height: '16px',\n borderRadius: '4px',\n objectFit: 'cover' as const,\n },\n content: {\n padding: '16px',\n overflowY: 'auto' as const,\n },\n suggestionsRow: {\n display: 'flex',\n gap: '8px',\n marginBottom: '16px',\n flexWrap: 'wrap' as const,\n },\n suggestionPill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 14px',\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n borderRadius: '20px',\n fontSize: '13px',\n fontWeight: 500,\n color: '#111111',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n borderWidth: 0,\n borderStyle: 'none',\n },\n suggestionPillActive: {\n backgroundColor: 'var(--seekora-text-primary, #111111)',\n color: 'var(--seekora-bg-surface, #ffffff)',\n },\n suggestionPillHover: {\n backgroundColor: 'var(--seekora-bg-hover, #e8e8e8)',\n color: 'var(--seekora-text-primary, #111111)',\n },\n suggestionIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#767676',\n flexShrink: 0,\n },\n productsGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(180px, 1fr))',\n gap: '16px',\n },\n productCard: {\n position: 'relative' as const,\n borderRadius: '16px',\n overflow: 'hidden',\n cursor: 'pointer',\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n transition: 'transform 150ms, box-shadow 150ms',\n },\n productCardHover: {\n transform: 'scale(1.02)',\n boxShadow: '0 4px 20px rgba(0,0,0,0.15)',\n },\n productImageContainer: {\n position: 'relative' as const,\n paddingBottom: '133%', // 3:4 aspect ratio\n overflow: 'hidden',\n },\n productImage: {\n position: 'absolute' as const,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n objectFit: 'cover' as const,\n },\n productImagePlaceholder: {\n position: 'absolute' as const,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--seekora-bg-tertiary, #e9e9e9)',\n color: 'var(--seekora-text-tertiary, #aaa)',\n },\n productOverlay: {\n position: 'absolute' as const,\n bottom: 0,\n left: 0,\n right: 0,\n padding: '40px 12px 12px',\n background: 'linear-gradient(to top, rgba(0,0,0,0.7), transparent)',\n opacity: 0,\n transition: 'opacity 200ms',\n },\n productOverlayVisible: {\n opacity: 1,\n },\n productInfo: {\n padding: '12px',\n },\n productTitle: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--seekora-text-primary, #111)',\n lineHeight: 1.3,\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden',\n marginBottom: '4px',\n },\n productTitleOverlay: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n marginBottom: '4px',\n },\n productPrice: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--seekora-text-primary, #111)',\n },\n productPriceOverlay: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n productSaveBtn: {\n position: 'absolute' as const,\n top: '12px',\n right: '12px',\n width: '36px',\n height: '36px',\n borderRadius: '50%',\n backgroundColor: 'var(--seekora-primary, #e60023)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: 0,\n transform: 'scale(0.8)',\n transition: 'all 150ms',\n },\n productSaveBtnVisible: {\n opacity: 1,\n transform: 'scale(1)',\n },\n sectionTitle: {\n fontSize: '18px',\n fontWeight: 700,\n color: 'var(--seekora-text-primary, #111)',\n marginBottom: '16px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '60px',\n color: 'var(--seekora-text-secondary, #767676)',\n },\n spinner: {\n width: '32px',\n height: '32px',\n border: '3px solid var(--seekora-border-color, #efefef)',\n borderTopColor: 'var(--seekora-primary, #e60023)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '60px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #767676)',\n },\n emptyIcon: {\n width: '64px',\n height: '64px',\n margin: '0 auto 16px',\n color: 'var(--seekora-text-tertiary, #8c8c8c)',\n },\n footer: {\n padding: '16px 20px',\n borderTop: '1px solid var(--seekora-border-color, #efefef)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n viewAllBtn: {\n padding: '12px 20px',\n backgroundColor: 'var(--seekora-primary, #e60023)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n border: 'none',\n borderRadius: '24px',\n fontSize: '15px',\n fontWeight: 600,\n cursor: 'pointer',\n transition: 'background 150ms',\n },\n viewAllBtnHover: {\n backgroundColor: 'var(--seekora-primary-dark, #ad081b)',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M10 16c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6m13.12 2.88l-4.26-4.26A9.842 9.842 0 0020 10c0-5.52-4.48-10-10-10S0 4.48 0 10s4.48 10 10 10c1.67 0 3.24-.41 4.62-1.14l4.26 4.26a3 3 0 004.24-4.24z\"/>\n </svg>\n);\n\nconst HeartIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"18\" height=\"18\">\n <path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"/>\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"18\" height=\"18\">\n <path d=\"M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z\"/>\n </svg>\n);\n\nconst ImageIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" width=\"48\" height=\"48\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/>\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/>\n <polyline points=\"21 15 16 10 5 21\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface PinterestDropdownProps extends BaseDropdownProps {\n /** Show save/pin button on products */\n showSaveButton?: boolean;\n /** Save button handler */\n onSaveProduct?: (product: any) => void;\n /** Active category ID */\n activeCategory?: string;\n /** Show price overlay on hover */\n showPriceOverlay?: boolean;\n /** Grid columns */\n gridColumns?: number;\n /** Card aspect ratio */\n cardAspectRatio?: 'square' | 'portrait' | 'landscape';\n}\n\nexport const PinterestDropdown = forwardRef<DropdownRef, PinterestDropdownProps>(\n function PinterestDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n categories = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n categoryFields = { id: 'id', label: 'label' },\n productDisplay = {},\n theme = {},\n showSaveButton = true,\n activeCategory: initialActiveCategory,\n activeTab, // From BaseDropdownProps\n showPriceOverlay = true,\n gridColumns = 4,\n width = '800px',\n maxHeight = '600px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onProductClick,\n onCategoryClick,\n onTabChange,\n onSaveProduct,\n onViewAll,\n onClose,\n header,\n footer,\n renderLoading,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(), []);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredProduct, setHoveredProduct] = useState<string | null>(null);\n const [hoveredCategory, setHoveredCategory] = useState<string | null>(null);\n const [hoveredSuggestion, setHoveredSuggestion] = useState<number>(-1);\n const [activeCategory, setActiveCategory] = useState<string | null>(initialActiveCategory || null);\n const [hoveredViewAll, setHoveredViewAll] = useState(false);\n\n // Sync internal activeCategory with parent prop (activeTab or activeCategory)\n useEffect(() => {\n const propValue = activeTab ?? initialActiveCategory;\n if (propValue !== undefined) {\n setActiveCategory(propValue === 'all' ? null : propValue);\n }\n }, [activeTab, initialActiveCategory]);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const processedCategories = useMemo(() =>\n categories.map(c => extractCategory(c, categoryFields)),\n [categories, categoryFields]\n );\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, processedSuggestions.length - 1));\n }, [processedSuggestions.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex >= 0 && processedSuggestions[activeIndex]) {\n onSuggestionSelect?.(processedSuggestions[activeIndex]._raw, activeIndex);\n }\n }, [activeIndex, processedSuggestions, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showCategories = processedCategories.length > 0;\n\n // Products are already filtered by parent based on activeTab\n // No additional filtering needed here\n const displayProducts = processedProducts;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-pinterest-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { width, zIndex },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n .seekora-pinterest-dropdown .categories-scroll::-webkit-scrollbar {\n display: none;\n }\n `}</style>\n\n {header || (query && (\n <div style={styles.header}>\n <div style={styles.searchInfo}>\n <span style={styles.searchQuery}>\n {query ? `\"${query}\"` : 'Explore'}\n </span>\n {processedProducts.length > 0 && (\n <span style={styles.searchCount}>\n {processedProducts.length}+ ideas\n </span>\n )}\n </div>\n\n {showCategories && (\n <div style={styles.categoriesScroll} className=\"categories-scroll\">\n <button\n style={mergeStyles(\n styles.categoryChip,\n !activeCategory ? styles.categoryChipActive : undefined,\n hoveredCategory === 'all' && activeCategory ? styles.categoryChipHover : undefined\n )}\n onClick={() => {\n setActiveCategory(null);\n onTabChange?.('all');\n }}\n onMouseEnter={() => setHoveredCategory('all')}\n onMouseLeave={() => setHoveredCategory(null)}\n >\n All\n </button>\n {processedCategories.map(cat => (\n <button\n key={cat.id}\n style={mergeStyles(\n styles.categoryChip,\n activeCategory === cat.id ? styles.categoryChipActive : undefined,\n hoveredCategory === cat.id && activeCategory !== cat.id ? styles.categoryChipHover : undefined\n )}\n onClick={() => {\n setActiveCategory(cat.id);\n // Call onTabChange to update products in parent\n onTabChange?.(cat.id);\n }}\n onMouseEnter={() => setHoveredCategory(cat.id)}\n onMouseLeave={() => setHoveredCategory(null)}\n >\n {cat.icon && (\n <img src={cat.icon as string} alt=\"\" style={styles.categoryIcon} />\n )}\n {cat.label}\n {cat.count && <span>({cat.count})</span>}\n </button>\n ))}\n </div>\n )}\n </div>\n ))}\n\n <div style={{ ...styles.content, maxHeight }}>\n {loading ? (\n renderLoading ? renderLoading() : (\n <div style={styles.loading}>\n <div style={styles.spinner} />\n </div>\n )\n ) : (\n <>\n {/* Suggestions as pills */}\n {processedSuggestions.length > 0 && (\n <div style={styles.suggestionsRow}>\n {processedSuggestions.slice(0, 8).map((s, idx) => (\n <button\n key={s.id || idx}\n data-index={idx}\n style={mergeStyles(\n styles.suggestionPill,\n activeIndex === idx ? styles.suggestionPillActive : undefined,\n hoveredSuggestion === idx && activeIndex !== idx ? styles.suggestionPillHover : undefined\n )}\n onClick={() => onSuggestionSelect?.(s._raw, idx)}\n onMouseEnter={() => {\n setHoveredSuggestion(idx);\n setActiveIndex(idx);\n }}\n onMouseLeave={() => setHoveredSuggestion(-1)}\n >\n <span \n style={styles.suggestionIcon}\n dangerouslySetInnerHTML={{\n __html: query \n ? highlightText(s.query, query, { tag: 'strong' })\n : s.query\n }}\n />\n </button>\n ))}\n </div>\n )}\n\n {/* Products Grid */}\n {displayProducts.length > 0 && (\n <>\n <div style={styles.sectionTitle}>\n <TrendingIcon />\n Ideas for you\n </div>\n <div \n style={{\n ...styles.productsGrid,\n gridTemplateColumns: `repeat(${gridColumns}, 1fr)`,\n }}\n >\n {displayProducts.slice(0, 12).map((product, idx) => (\n <div\n key={product.id}\n style={mergeStyles(\n styles.productCard,\n hoveredProduct === product.id ? styles.productCardHover : undefined\n )}\n onClick={() => onProductClick?.(product._raw, idx)}\n onMouseEnter={() => setHoveredProduct(product.id)}\n onMouseLeave={() => setHoveredProduct(null)}\n >\n <div style={styles.productImageContainer}>\n {product.image ? (\n <img\n src={product.image}\n alt={product.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n ) : (\n <div style={styles.productImagePlaceholder}>\n <ImageIcon />\n </div>\n )}\n \n {/* Save button */}\n {showSaveButton && (\n <button\n style={mergeStyles(\n styles.productSaveBtn,\n hoveredProduct === product.id ? styles.productSaveBtnVisible : undefined\n )}\n onClick={(e) => {\n e.stopPropagation();\n onSaveProduct?.(product._raw);\n }}\n aria-label=\"Save\"\n >\n <HeartIcon />\n </button>\n )}\n\n {/* Price overlay */}\n {showPriceOverlay && product.price !== undefined && (\n <div\n style={mergeStyles(\n styles.productOverlay,\n hoveredProduct === product.id ? styles.productOverlayVisible : undefined\n )}\n >\n <div style={styles.productTitleOverlay}>{product.title}</div>\n <div style={styles.productPriceOverlay}>\n {formatPrice(product.price, { \n currency: productDisplay.currency || product.currency || '$' \n })}\n </div>\n </div>\n )}\n </div>\n\n {/* Product info (when not using overlay) */}\n {!showPriceOverlay && (\n <div style={styles.productInfo}>\n <div style={styles.productTitle}>{product.title}</div>\n {product.price !== undefined && (\n <div style={styles.productPrice}>\n {formatPrice(product.price, { \n currency: productDisplay.currency || product.currency || '$' \n })}\n </div>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n </>\n )}\n\n {/* Empty State */}\n {!loading && displayProducts.length === 0 && processedSuggestions.length === 0 && (\n renderEmpty ? renderEmpty(query) : (\n <div style={styles.empty}>\n <div style={styles.emptyIcon}>\n <SearchIcon />\n </div>\n <p>No ideas found for \"{query}\"</p>\n <p style={{ fontSize: '14px', marginTop: '8px' }}>\n Try searching for something else\n </p>\n </div>\n )\n )}\n </>\n )}\n </div>\n\n {footer !== undefined ? footer : (\n displayProducts.length > 0 && (\n <div style={styles.footer}>\n <span style={{ color: 'var(--seekora-text-secondary, #767676)', fontSize: '14px' }}>\n {displayProducts.length}+ more ideas\n </span>\n <button\n style={mergeStyles(\n styles.viewAllBtn,\n hoveredViewAll ? styles.viewAllBtnHover : undefined\n )}\n onClick={() => onViewAll?.('products')}\n onMouseEnter={() => setHoveredViewAll(true)}\n onMouseLeave={() => setHoveredViewAll(false)}\n >\n Explore all\n </button>\n </div>\n )\n )}\n </div>\n );\n }\n);\n\nexport default PinterestDropdown;\n","/**\n * SpotlightDropdown - macOS Spotlight / Command Palette Style\n * \n * Features:\n * - Clean, centered modal design\n * - Category grouping with keyboard navigation\n * - Instant preview panel\n * - Actions/commands support\n * - Keyboard-first interaction\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n extractCategory,\n formatPrice,\n highlightText,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = () => ({\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n backdropFilter: 'blur(4px)',\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'center',\n paddingTop: '15vh',\n zIndex: 9999,\n },\n root: {\n backgroundColor: 'var(--seekora-bg-surface, rgba(255, 255, 255, 0.95))',\n borderRadius: 'var(--seekora-border-radius, 12px)',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255,255,255,0.1)',\n overflow: 'hidden',\n fontFamily: 'var(--seekora-font-family, -apple-system, BlinkMacSystemFont, \"SF Pro Display\", sans-serif)',\n fontSize: 'var(--seekora-font-size, 14px)',\n backdropFilter: 'blur(20px)',\n },\n searchContainer: {\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n gap: '12px',\n borderBottom: '1px solid var(--seekora-border-color, rgba(0,0,0,0.1))',\n },\n searchIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-tertiary, #86868b)',\n flexShrink: 0,\n },\n searchInput: {\n flex: 1,\n border: 'none',\n background: 'transparent',\n fontSize: '17px',\n fontWeight: 300,\n color: 'var(--seekora-text-primary, #1d1d1f)',\n outline: 'none',\n fontFamily: 'inherit',\n },\n shortcut: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #86868b)',\n },\n kbd: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: '20px',\n height: '20px',\n padding: '0 4px',\n backgroundColor: 'var(--seekora-bg-tertiary, rgba(0,0,0,0.05))',\n borderRadius: '4px',\n fontSize: '11px',\n fontFamily: 'SF Mono, Monaco, monospace',\n },\n content: {\n display: 'flex',\n maxHeight: '400px',\n },\n resultsColumn: {\n flex: 1,\n overflowY: 'auto' as const,\n minWidth: '300px',\n },\n previewColumn: {\n width: '280px',\n borderLeft: '1px solid var(--seekora-border-color, rgba(0,0,0,0.1))',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(0,0,0,0.02))',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n section: {\n padding: '8px 0',\n },\n sectionTitle: {\n padding: '8px 16px 6px',\n fontSize: '11px',\n fontWeight: 600,\n color: 'var(--seekora-text-tertiary, #86868b)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.5px',\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n padding: '8px 16px',\n gap: '12px',\n cursor: 'pointer',\n transition: 'background-color 50ms',\n margin: '0 8px',\n borderRadius: '6px',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-primary, #007aff)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n itemIcon: {\n width: '32px',\n height: '32px',\n borderRadius: '6px',\n backgroundColor: 'var(--seekora-bg-tertiary, #f5f5f7)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-secondary, #515154)',\n flexShrink: 0,\n },\n itemIconActive: {\n backgroundColor: 'rgba(255,255,255,0.2)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n itemIconImage: {\n width: '100%',\n height: '100%',\n objectFit: 'cover' as const,\n borderRadius: '6px',\n },\n itemContent: {\n flex: 1,\n minWidth: 0,\n },\n itemTitle: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #1d1d1f)',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n itemTitleActive: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n itemSubtitle: {\n fontSize: '11px',\n color: 'var(--seekora-text-secondary, #86868b)',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n marginTop: '2px',\n },\n itemSubtitleActive: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n opacity: 0.9,\n },\n itemAction: {\n fontSize: '11px',\n color: 'var(--seekora-text-tertiary, #86868b)',\n opacity: 0,\n transition: 'opacity 100ms',\n },\n itemActionVisible: {\n opacity: 1,\n },\n itemActionActive: {\n color: 'var(--seekora-text-inverse, #ffffff)',\n opacity: 0.8,\n },\n previewContent: {\n flex: 1,\n padding: '16px',\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n },\n previewImage: {\n width: '160px',\n height: '160px',\n objectFit: 'contain' as const,\n borderRadius: '8px',\n marginBottom: '16px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\n },\n previewTitle: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--seekora-text-primary, #1d1d1f)',\n textAlign: 'center' as const,\n marginBottom: '4px',\n },\n previewSubtitle: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #86868b)',\n textAlign: 'center' as const,\n marginBottom: '8px',\n },\n previewPrice: {\n fontSize: '18px',\n fontWeight: 700,\n color: 'var(--seekora-primary, #007aff)',\n },\n previewActions: {\n display: 'flex',\n gap: '8px',\n marginTop: '16px',\n },\n previewAction: {\n padding: '6px 12px',\n fontSize: '12px',\n fontWeight: 500,\n borderRadius: '6px',\n border: 'none',\n cursor: 'pointer',\n transition: 'all 100ms',\n },\n previewActionPrimary: {\n backgroundColor: 'var(--seekora-primary, #007aff)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n },\n previewActionSecondary: {\n backgroundColor: 'var(--seekora-bg-tertiary, #f5f5f7)',\n color: 'var(--seekora-text-primary, #1d1d1f)',\n },\n footer: {\n padding: '8px 16px',\n borderTop: '1px solid var(--seekora-border-color, rgba(0,0,0,0.1))',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: 'var(--seekora-bg-secondary, rgba(0,0,0,0.02))',\n fontSize: '11px',\n color: 'var(--seekora-text-tertiary, #86868b)',\n },\n footerActions: {\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n },\n footerAction: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '40px',\n color: 'var(--seekora-text-secondary, #86868b)',\n },\n spinner: {\n width: '24px',\n height: '24px',\n border: '2px solid var(--seekora-border-color, #e5e5e5)',\n borderTopColor: 'var(--seekora-primary, #007aff)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '40px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #86868b)',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\"/>\n </svg>\n);\n\nconst CommandIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path d=\"M3.5 6A1.5 1.5 0 015 4.5h1.5A1.5 1.5 0 018 6v1.5H5A1.5 1.5 0 013.5 6zM8 6v8H5a1.5 1.5 0 110-3h3V8H5a1.5 1.5 0 010-3h3v1z\"/>\n <path d=\"M12 6v8h3a1.5 1.5 0 100-3h-3V8h3a1.5 1.5 0 100-3h-3v1z\"/>\n <path d=\"M16.5 6A1.5 1.5 0 0015 4.5h-1.5A1.5 1.5 0 0012 6v1.5h3A1.5 1.5 0 0016.5 6z\"/>\n </svg>\n);\n\nconst DocumentIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4z\" clipRule=\"evenodd\"/>\n </svg>\n);\n\nconst ShoppingIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path d=\"M10 2a4 4 0 00-4 4v1H5a1 1 0 00-.994.89l-1 9A1 1 0 004 18h12a1 1 0 00.994-1.11l-1-9A1 1 0 0015 7h-1V6a4 4 0 00-4-4zm2 5V6a2 2 0 10-4 0v1h4zm-6 3a1 1 0 112 0 1 1 0 01-2 0zm7-1a1 1 0 100 2 1 1 0 000-2z\"/>\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"16\" height=\"16\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clipRule=\"evenodd\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface SpotlightDropdownProps extends BaseDropdownProps {\n /** Show preview panel */\n showPreview?: boolean;\n /** Show as overlay */\n asOverlay?: boolean;\n /** Placeholder text */\n placeholder?: string;\n /** Show keyboard shortcuts */\n showShortcuts?: boolean;\n /** Quick actions */\n actions?: Array<{\n id: string;\n label: string;\n icon?: React.ReactNode;\n shortcut?: string;\n onAction: () => void;\n }>;\n}\n\nexport const SpotlightDropdown = forwardRef<DropdownRef, SpotlightDropdownProps>(\n function SpotlightDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n recentSearches = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n productDisplay = {},\n theme = {},\n showPreview = true,\n asOverlay = true,\n placeholder = 'Search...',\n showShortcuts = true,\n actions = [],\n width = '680px',\n maxHeight = '500px',\n zIndex = 9999,\n className,\n style,\n classNames = {},\n inputRef,\n onSuggestionSelect,\n onProductClick,\n onRecentClick,\n onClose,\n onSearchSubmit,\n header,\n footer,\n renderLoading,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(), []);\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const recentQueries = useMemo(() =>\n recentSearches.map(r => typeof r === 'string' ? r : r.query).slice(0, 3),\n [recentSearches]\n );\n\n // Build flat list of all items\n const allItems = useMemo(() => {\n const items: Array<{\n type: 'action' | 'recent' | 'suggestion' | 'product';\n id: string;\n title: string;\n subtitle?: string;\n icon?: React.ReactNode;\n image?: string;\n price?: number;\n data: any;\n }> = [];\n\n // Actions first\n actions.forEach(action => {\n items.push({\n type: 'action',\n id: action.id,\n title: action.label,\n icon: action.icon,\n data: action,\n });\n });\n\n // Recent searches\n if (!query && recentQueries.length > 0) {\n recentQueries.forEach((q, idx) => {\n items.push({\n type: 'recent',\n id: `recent-${idx}`,\n title: q,\n icon: <ClockIcon />,\n data: q,\n });\n });\n }\n\n // Suggestions\n processedSuggestions.forEach((s, idx) => {\n items.push({\n type: 'suggestion',\n id: s.id || `suggestion-${idx}`,\n title: s.query,\n icon: <DocumentIcon />,\n data: s,\n });\n });\n\n // Products\n processedProducts.forEach((p, idx) => {\n items.push({\n type: 'product',\n id: p.id,\n title: p.title,\n subtitle: p.brand,\n icon: <ShoppingIcon />,\n image: p.image,\n price: p.price as number,\n data: p,\n });\n });\n\n return items;\n }, [actions, query, recentQueries, processedSuggestions, processedProducts]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0) {\n // No selection, submit current query\n if (query.trim()) onSearchSubmit?.(query.trim());\n return;\n }\n \n const item = allItems[activeIndex];\n if (!item) return;\n\n switch (item.type) {\n case 'action':\n item.data.onAction?.();\n break;\n case 'recent':\n onRecentClick?.(item.data);\n break;\n case 'suggestion':\n onSuggestionSelect?.(item.data._raw, activeIndex);\n break;\n case 'product':\n onProductClick?.(item.data._raw, activeIndex);\n break;\n }\n }, [activeIndex, allItems, query, onSearchSubmit, onRecentClick, onSuggestionSelect, onProductClick]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => inputRef?.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, inputRef, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (listRef.current && activeIndex >= 0) {\n const activeEl = listRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, listRef.current);\n }\n }\n }, [activeIndex]);\n\n // Reset index when query changes\n useEffect(() => {\n setActiveIndex(-1);\n }, [query]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const activeItem = allItems[activeIndex];\n\n const content = (\n <div\n ref={containerRef}\n className={cx('seekora-spotlight-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { width, zIndex: asOverlay ? undefined : zIndex },\n cssVariables as any,\n style\n )}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n\n {/* Search Input */}\n <div style={styles.searchContainer}>\n <div style={styles.searchIcon}>\n <SearchIcon />\n </div>\n <input\n ref={inputRef as any}\n type=\"text\"\n placeholder={placeholder}\n defaultValue={query}\n style={styles.searchInput}\n onChange={(e) => onSearchSubmit?.(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n navigateNext();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n navigatePrevious();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n selectActive();\n } else if (e.key === 'Escape') {\n onClose?.();\n }\n }}\n autoFocus\n />\n {showShortcuts && (\n <div style={styles.shortcut}>\n <span style={styles.kbd}>⌘</span>\n <span style={styles.kbd}>K</span>\n </div>\n )}\n </div>\n\n {header}\n\n {/* Content */}\n <div style={styles.content}>\n {/* Results */}\n <div ref={listRef} style={{ ...styles.resultsColumn, maxHeight }}>\n {loading ? (\n renderLoading ? renderLoading() : (\n <div style={styles.loading}>\n <div style={styles.spinner} />\n </div>\n )\n ) : allItems.length === 0 ? (\n renderEmpty ? renderEmpty(query) : (\n <div style={styles.empty}>\n No results for \"{query}\"\n </div>\n )\n ) : (\n <>\n {/* Actions */}\n {actions.length > 0 && (\n <div style={styles.section}>\n <div style={styles.sectionTitle}>Actions</div>\n {allItems.filter(i => i.type === 'action').map((item) => {\n const idx = allItems.indexOf(item);\n const isActive = activeIndex === idx;\n return (\n <div\n key={item.id}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined\n )}\n onClick={() => {\n setActiveIndex(idx);\n selectActive();\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={mergeStyles(\n styles.itemIcon,\n isActive ? styles.itemIconActive : undefined\n )}>\n {item.icon}\n </div>\n <div style={styles.itemContent}>\n <div style={mergeStyles(\n styles.itemTitle,\n isActive ? styles.itemTitleActive : undefined\n )}>\n {item.title}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Recent */}\n {recentQueries.length > 0 && !query && (\n <div style={styles.section}>\n <div style={styles.sectionTitle}>Recent</div>\n {allItems.filter(i => i.type === 'recent').map((item) => {\n const idx = allItems.indexOf(item);\n const isActive = activeIndex === idx;\n return (\n <div\n key={item.id}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined\n )}\n onClick={() => {\n setActiveIndex(idx);\n onRecentClick?.(item.data);\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={mergeStyles(\n styles.itemIcon,\n isActive ? styles.itemIconActive : undefined\n )}>\n {item.icon}\n </div>\n <div style={styles.itemContent}>\n <div style={mergeStyles(\n styles.itemTitle,\n isActive ? styles.itemTitleActive : undefined\n )}>\n {item.title}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Suggestions */}\n {processedSuggestions.length > 0 && (\n <div style={styles.section}>\n <div style={styles.sectionTitle}>Suggestions</div>\n {allItems.filter(i => i.type === 'suggestion').map((item) => {\n const idx = allItems.indexOf(item);\n const isActive = activeIndex === idx;\n return (\n <div\n key={item.id}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined\n )}\n onClick={() => {\n setActiveIndex(idx);\n onSuggestionSelect?.(item.data._raw, idx);\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={mergeStyles(\n styles.itemIcon,\n isActive ? styles.itemIconActive : undefined\n )}>\n {item.icon}\n </div>\n <div style={styles.itemContent}>\n <div \n style={mergeStyles(\n styles.itemTitle,\n isActive ? styles.itemTitleActive : undefined\n )}\n dangerouslySetInnerHTML={{\n __html: highlightText(item.title, query, { tag: 'strong' })\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Products */}\n {processedProducts.length > 0 && (\n <div style={styles.section}>\n <div style={styles.sectionTitle}>Products</div>\n {allItems.filter(i => i.type === 'product').map((item) => {\n const idx = allItems.indexOf(item);\n const isActive = activeIndex === idx;\n return (\n <div\n key={item.id}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined\n )}\n onClick={() => {\n setActiveIndex(idx);\n onProductClick?.(item.data._raw, idx);\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={mergeStyles(\n styles.itemIcon,\n isActive ? styles.itemIconActive : undefined\n )}>\n {item.image ? (\n <img src={item.image} alt=\"\" style={styles.itemIconImage} />\n ) : (\n item.icon\n )}\n </div>\n <div style={styles.itemContent}>\n <div style={mergeStyles(\n styles.itemTitle,\n isActive ? styles.itemTitleActive : undefined\n )}>\n {item.title}\n </div>\n {item.subtitle && (\n <div style={mergeStyles(\n styles.itemSubtitle,\n isActive ? styles.itemSubtitleActive : undefined\n )}>\n {item.subtitle}\n </div>\n )}\n </div>\n {item.price !== undefined && (\n <span style={mergeStyles(\n styles.itemAction,\n styles.itemActionVisible,\n isActive ? styles.itemActionActive : undefined\n )}>\n {formatPrice(item.price, { currency: productDisplay.currency })}\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </>\n )}\n </div>\n\n {/* Preview Panel */}\n {showPreview && activeItem && activeItem.type === 'product' && (\n <div style={styles.previewColumn}>\n <div style={styles.previewContent}>\n {activeItem.image && (\n <img src={activeItem.image} alt=\"\" style={styles.previewImage} />\n )}\n <div style={styles.previewTitle}>{activeItem.title}</div>\n {activeItem.subtitle && (\n <div style={styles.previewSubtitle}>{activeItem.subtitle}</div>\n )}\n {activeItem.price !== undefined && (\n <div style={styles.previewPrice}>\n {formatPrice(activeItem.price, { currency: productDisplay.currency })}\n </div>\n )}\n <div style={styles.previewActions}>\n <button\n style={{ ...styles.previewAction, ...styles.previewActionPrimary }}\n onClick={() => onProductClick?.(activeItem.data._raw, activeIndex)}\n >\n View Product\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n <div style={styles.footer}>\n <div style={styles.footerActions}>\n <span style={styles.footerAction}>\n <span style={styles.kbd}>↑</span>\n <span style={styles.kbd}>↓</span>\n navigate\n </span>\n <span style={styles.footerAction}>\n <span style={styles.kbd}>↵</span>\n select\n </span>\n <span style={styles.footerAction}>\n <span style={styles.kbd}>esc</span>\n close\n </span>\n </div>\n <span>{allItems.length} results</span>\n </div>\n )}\n </div>\n );\n\n if (asOverlay) {\n return (\n <div \n style={{ ...styles.overlay, zIndex }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose?.();\n }}\n >\n {content}\n </div>\n );\n }\n\n return content;\n }\n);\n\nexport default SpotlightDropdown;\n","/**\n * ShopifyDropdown - Modern E-commerce Style Suggestions\n * \n * Features:\n * - Hero product with large image\n * - Horizontal product scroll\n * - Collection/category links\n * - Clean, modern design\n * - Quick add to cart\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n extractCategory,\n formatPrice,\n highlightText,\n cx,\n mergeStyles,\n generateCSSVariables,\n calculateDiscount,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = (isMobile: boolean = false) => ({\n root: {\n position: isMobile ? 'fixed' as const : 'absolute' as const,\n top: isMobile ? 0 : '100%',\n left: 0,\n right: 0,\n bottom: isMobile ? 0 : 'auto',\n marginTop: isMobile ? 0 : '8px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #121212)',\n borderRadius: isMobile ? 0 : '16px',\n boxShadow: isMobile ? 'none' : '0 4px 30px rgba(0, 0, 0, 0.12)',\n overflow: 'hidden',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: isMobile ? '16px' : '14px',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n layout: {\n display: isMobile ? 'flex' : 'grid',\n flexDirection: 'column' as const,\n gridTemplateColumns: isMobile ? '1fr' : '1fr 1fr',\n minHeight: isMobile ? 'auto' : '400px',\n flex: 1,\n overflowY: 'auto' as const,\n },\n leftPanel: {\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n borderRight: isMobile ? 'none' : '1px solid var(--seekora-border-color, #e8e8e1)',\n borderBottom: isMobile ? '1px solid var(--seekora-border-color, #e8e8e1)' : 'none',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n rightPanel: {\n backgroundColor: 'var(--seekora-bg-secondary, #fafafa)',\n padding: isMobile ? '16px' : '24px',\n display: 'flex',\n flexDirection: 'column' as const,\n overflow: 'hidden',\n },\n section: {\n flex: 1,\n overflowY: 'auto' as const,\n },\n sectionHeader: {\n padding: '16px 20px 12px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: '1px solid var(--seekora-border-color, #e8e8e1)',\n },\n sectionTitle: {\n fontSize: '11px',\n fontWeight: 600,\n color: 'var(--seekora-text-secondary, #666)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.1em',\n },\n viewAllLink: {\n fontSize: '12px',\n color: 'var(--seekora-text-primary, #121212)',\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n suggestionItem: {\n display: 'flex',\n alignItems: 'center',\n padding: isMobile ? '14px 16px' : '12px 16px',\n gap: '12px',\n cursor: 'pointer',\n transition: 'all 150ms ease',\n minHeight: '48px',\n margin: '4px 8px',\n borderRadius: '10px',\n color: 'var(--seekora-text-primary, #121212)',\n },\n suggestionItemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #121212)',\n },\n suggestionIcon: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--seekora-text-tertiary, #999999)',\n flexShrink: 0,\n },\n suggestionContent: {\n flex: 1,\n minWidth: 0,\n },\n suggestionQuery: {\n fontSize: '14px',\n color: 'var(--seekora-text-primary, #121212)',\n fontWeight: 400,\n },\n suggestionMeta: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #666)',\n marginTop: '2px',\n },\n suggestionArrow: {\n width: '16px',\n height: '16px',\n color: 'var(--seekora-text-tertiary, #ccc)',\n transform: 'rotate(-45deg)',\n opacity: 0,\n transition: 'opacity 150ms',\n },\n suggestionArrowVisible: {\n opacity: 1,\n },\n collectionsGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gap: '1px',\n backgroundColor: 'var(--seekora-border-color, #e8e8e1)',\n borderTop: '1px solid var(--seekora-border-color, #e8e8e1)',\n },\n collectionItem: {\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #121212)',\n padding: '16px 20px',\n cursor: 'pointer',\n transition: 'background-color 150ms',\n },\n collectionItemHover: {\n backgroundColor: 'var(--seekora-bg-hover, #f0f0f0)',\n color: 'var(--seekora-text-primary, #121212)',\n },\n collectionName: {\n fontSize: '13px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #121212)',\n marginBottom: '4px',\n },\n collectionCount: {\n fontSize: '11px',\n color: 'var(--seekora-text-secondary, #666)',\n },\n heroProduct: {\n marginBottom: '24px',\n },\n heroImage: {\n width: '100%',\n aspectRatio: '1',\n objectFit: 'cover' as const,\n borderRadius: '2px',\n marginBottom: '16px',\n backgroundColor: 'var(--seekora-bg-tertiary, #f5f5f5)',\n },\n heroTitle: {\n fontSize: '16px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #121212)',\n marginBottom: '8px',\n lineHeight: 1.3,\n },\n heroBrand: {\n fontSize: '12px',\n color: 'var(--seekora-text-secondary, #666)',\n marginBottom: '12px',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n },\n heroPricing: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '16px',\n },\n heroPrice: {\n fontSize: '18px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #121212)',\n },\n heroComparePrice: {\n fontSize: '14px',\n color: 'var(--seekora-text-tertiary, #999)',\n textDecoration: 'line-through',\n },\n heroDiscount: {\n fontSize: '12px',\n fontWeight: 600,\n color: 'var(--seekora-error, #d02e2e)',\n backgroundColor: 'var(--seekora-error-light, #fdf2f2)',\n padding: '2px 8px',\n borderRadius: '2px',\n },\n heroButton: {\n width: '100%',\n padding: '14px 20px',\n backgroundColor: 'var(--seekora-text-primary, #121212)',\n color: 'var(--seekora-bg-surface, #ffffff)',\n border: 'none',\n borderRadius: '2px',\n fontSize: '13px',\n fontWeight: 500,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.1em',\n cursor: 'pointer',\n transition: 'background-color 150ms',\n },\n heroButtonHover: {\n backgroundColor: 'var(--seekora-text-secondary, #666666)',\n color: 'var(--seekora-bg-surface, #ffffff)',\n },\n productsScroll: {\n flex: 1,\n overflowX: 'auto' as const,\n overflowY: 'hidden' as const,\n display: 'flex',\n gap: '16px',\n paddingBottom: '8px',\n scrollbarWidth: 'thin' as const,\n },\n productCard: {\n flex: '0 0 140px',\n cursor: 'pointer',\n transition: 'opacity 150ms',\n },\n productCardHover: {\n opacity: 0.7,\n },\n productImage: {\n width: '140px',\n height: '175px',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-tertiary, #f5f5f5)',\n marginBottom: '10px',\n },\n productTitle: {\n fontSize: '12px',\n color: 'var(--seekora-text-primary, #121212)',\n marginBottom: '4px',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n productPrice: {\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #121212)',\n },\n footer: {\n padding: '12px 20px',\n borderTop: '1px solid var(--seekora-border-color, #e8e8e1)',\n backgroundColor: 'var(--seekora-bg-secondary, #fafafa)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: '11px',\n color: 'var(--seekora-text-secondary, #666)',\n },\n footerLink: {\n color: 'var(--seekora-text-primary, #121212)',\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '60px',\n color: 'var(--seekora-text-secondary, #666)',\n },\n spinner: {\n width: '24px',\n height: '24px',\n border: '2px solid var(--seekora-border-color, #e8e8e1)',\n borderTopColor: 'var(--seekora-text-primary, #121212)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '60px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #666)',\n },\n highlight: {\n fontWeight: 600,\n textDecoration: 'underline',\n textDecorationColor: 'var(--seekora-text-primary, #121212)',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z\"/>\n </svg>\n);\n\nconst ArrowIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z\" clipRule=\"evenodd\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface ShopifyDropdownProps extends BaseDropdownProps {\n /** Show hero product */\n showHeroProduct?: boolean;\n /** Show collections/categories */\n showCollections?: boolean;\n /** Show add to cart button */\n showAddToCart?: boolean;\n /** Add to cart text */\n addToCartText?: string;\n /** Show compare price */\n showComparePrice?: boolean;\n}\n\nexport const ShopifyDropdown = forwardRef<DropdownRef, ShopifyDropdownProps>(\n function ShopifyDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n categories = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n categoryFields = { id: 'id', label: 'label' },\n productDisplay = {},\n theme = {},\n showHeroProduct = true,\n showCollections = true,\n showAddToCart = true,\n addToCartText = 'Quick Add',\n showComparePrice = true,\n width = '100%',\n maxHeight = '500px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onProductClick,\n onCategoryClick,\n onTabChange,\n onAddToCart,\n onViewAll,\n onClose,\n header,\n footer,\n renderLoading,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(isMobile), [isMobile]);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [hoveredProduct, setHoveredProduct] = useState<string | null>(null);\n const [hoveredCollection, setHoveredCollection] = useState<string | null>(null);\n const [hoveredButton, setHoveredButton] = useState(false);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const processedCategories = useMemo(() =>\n categories.map(c => extractCategory(c, categoryFields)),\n [categories, categoryFields]\n );\n\n // Hero product (first product)\n const heroProduct = processedProducts[0];\n const otherProducts = processedProducts.slice(1, 7);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, processedSuggestions.length - 1));\n }, [processedSuggestions.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex >= 0 && processedSuggestions[activeIndex]) {\n onSuggestionSelect?.(processedSuggestions[activeIndex]._raw, activeIndex);\n }\n }, [activeIndex, processedSuggestions, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const heroDiscount = heroProduct \n ? calculateDiscount(heroProduct.price as number, heroProduct.comparePrice as number)\n : undefined;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-shopify-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { \n width: isMobile ? '100%' : width, \n maxHeight: isMobile ? '100vh' : maxHeight,\n zIndex \n },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n .seekora-shopify-dropdown mark {\n background: transparent;\n text-decoration: underline;\n font-weight: 600;\n }\n `}</style>\n\n {header}\n\n {loading ? (\n renderLoading ? renderLoading() : (\n <div style={styles.loading}>\n <div style={styles.spinner} />\n </div>\n )\n ) : (\n <div style={styles.layout}>\n {/* Left Panel - Suggestions & Collections */}\n <div style={styles.leftPanel}>\n {/* Suggestions */}\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Suggestions</span>\n {processedSuggestions.length > 5 && (\n <span \n style={styles.viewAllLink}\n onClick={() => onViewAll?.('suggestions')}\n >\n View all\n </span>\n )}\n </div>\n {processedSuggestions.slice(0, 5).map((suggestion, idx) => {\n const isActive = activeIndex === idx;\n return (\n <div\n key={suggestion.id || idx}\n data-index={idx}\n role=\"option\"\n aria-selected={isActive}\n style={mergeStyles(\n styles.suggestionItem,\n isActive ? styles.suggestionItemActive : undefined\n )}\n onClick={() => onSuggestionSelect?.(suggestion._raw, idx)}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={styles.suggestionIcon}>\n <SearchIcon />\n </div>\n <div style={styles.suggestionContent}>\n <div \n style={styles.suggestionQuery}\n dangerouslySetInnerHTML={{\n __html: highlightText(suggestion.query, query, { tag: 'mark' })\n }}\n />\n {suggestion.count && (\n <div style={styles.suggestionMeta}>\n {suggestion.count} results\n </div>\n )}\n </div>\n <div \n style={mergeStyles(\n styles.suggestionArrow,\n isActive ? styles.suggestionArrowVisible : undefined\n )}\n >\n <ArrowIcon />\n </div>\n </div>\n );\n })}\n\n {/* Empty suggestions */}\n {processedSuggestions.length === 0 && query && (\n renderEmpty ? renderEmpty(query) : (\n <div style={{ padding: '20px', textAlign: 'center', color: '#666' }}>\n No suggestions for \"{query}\"\n </div>\n )\n )}\n </div>\n\n {/* Collections/Categories */}\n {showCollections && processedCategories.length > 0 && (\n <>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Collections</span>\n </div>\n <div style={styles.collectionsGrid}>\n {processedCategories.slice(0, 4).map(cat => (\n <div\n key={cat.id}\n style={mergeStyles(\n styles.collectionItem,\n hoveredCollection === cat.id ? styles.collectionItemHover : undefined\n )}\n onClick={() => onTabChange?.(cat.id)}\n onMouseEnter={() => setHoveredCollection(cat.id)}\n onMouseLeave={() => setHoveredCollection(null)}\n >\n <div style={styles.collectionName}>{cat.label}</div>\n {cat.count && (\n <div style={styles.collectionCount}>\n {cat.count} products\n </div>\n )}\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n\n {/* Right Panel - Products */}\n <div style={styles.rightPanel}>\n {/* Hero Product */}\n {showHeroProduct && heroProduct && (\n <div style={styles.heroProduct}>\n {heroProduct.image && (\n <img\n src={heroProduct.image}\n alt={heroProduct.title}\n style={styles.heroImage}\n loading=\"lazy\"\n />\n )}\n {heroProduct.brand && (\n <div style={styles.heroBrand}>{heroProduct.brand}</div>\n )}\n <div style={styles.heroTitle}>{heroProduct.title}</div>\n <div style={styles.heroPricing}>\n <span style={styles.heroPrice}>\n {formatPrice(heroProduct.price, { \n currency: productDisplay.currency || heroProduct.currency || '$' \n })}\n </span>\n {showComparePrice && heroProduct.comparePrice && (\n <span style={styles.heroComparePrice}>\n {formatPrice(heroProduct.comparePrice, { \n currency: productDisplay.currency || heroProduct.currency || '$' \n })}\n </span>\n )}\n {heroDiscount && (\n <span style={styles.heroDiscount}>-{heroDiscount}%</span>\n )}\n </div>\n {showAddToCart && (\n <button\n style={mergeStyles(\n styles.heroButton,\n hoveredButton ? styles.heroButtonHover : undefined\n )}\n onClick={() => onAddToCart?.(heroProduct._raw)}\n onMouseEnter={() => setHoveredButton(true)}\n onMouseLeave={() => setHoveredButton(false)}\n >\n {addToCartText}\n </button>\n )}\n </div>\n )}\n\n {/* Other Products - Horizontal Scroll */}\n {otherProducts.length > 0 && (\n <>\n <div style={{ ...styles.sectionTitle, marginBottom: '12px' }}>\n More Products\n </div>\n <div style={styles.productsScroll}>\n {otherProducts.map((product, idx) => (\n <div\n key={product.id}\n style={mergeStyles(\n styles.productCard,\n hoveredProduct === product.id ? styles.productCardHover : undefined\n )}\n onClick={() => onProductClick?.(product._raw, idx + 1)}\n onMouseEnter={() => setHoveredProduct(product.id)}\n onMouseLeave={() => setHoveredProduct(null)}\n >\n {product.image ? (\n <img\n src={product.image}\n alt={product.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n ) : (\n <div style={styles.productImage} />\n )}\n <div style={styles.productTitle}>{product.title}</div>\n {product.price !== undefined && (\n <div style={styles.productPrice}>\n {formatPrice(product.price, { \n currency: productDisplay.currency || product.currency || '$' \n })}\n </div>\n )}\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n )}\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n <div style={styles.footer}>\n <span>\n Press <strong>Enter</strong> to search, <strong>↑↓</strong> to navigate\n </span>\n <span \n style={styles.footerLink}\n onClick={() => onViewAll?.('products')}\n >\n View all results\n </span>\n </div>\n )}\n </div>\n );\n }\n);\n\nexport default ShopifyDropdown;\n","/**\n * MobileSheetDropdown - Mobile-First Bottom Sheet Style\n * \n * Features:\n * - iOS-style bottom sheet with drag handle\n * - Full-screen overlay with smooth transitions\n * - Touch-friendly large tap targets\n * - Swipe to dismiss\n * - Optimized for small screens\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n formatPrice,\n highlightText,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = () => ({\n overlay: {\n position: 'fixed' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 9998,\n transition: 'opacity 200ms ease',\n },\n root: {\n position: 'fixed' as const,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'var(--seekora-bg-surface, #fff)',\n borderRadius: '16px 16px 0 0',\n boxShadow: '0 -4px 20px rgba(0, 0, 0, 0.15)',\n fontFamily: 'var(--seekora-font-family, -apple-system, BlinkMacSystemFont, \"SF Pro Text\", sans-serif)',\n fontSize: 'var(--seekora-font-size, 16px)',\n zIndex: 9999,\n transform: 'translateY(0)',\n transition: 'transform 300ms cubic-bezier(0.32, 0.72, 0, 1)',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column' as const,\n },\n rootHidden: {\n transform: 'translateY(100%)',\n },\n dragHandle: {\n display: 'flex',\n justifyContent: 'center',\n padding: '12px',\n cursor: 'grab',\n },\n dragBar: {\n width: '36px',\n height: '5px',\n backgroundColor: 'var(--seekora-border-color, #e0e0e0)',\n borderRadius: '3px',\n },\n header: {\n padding: '0 16px 16px',\n borderBottom: '1px solid var(--seekora-border-color, #f0f0f0)',\n },\n searchContainer: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n borderRadius: '12px',\n padding: '12px 16px',\n gap: '12px',\n },\n searchIcon: {\n width: '20px',\n height: '20px',\n color: 'var(--seekora-text-tertiary, #8e8e93)',\n flexShrink: 0,\n },\n searchInput: {\n flex: 1,\n border: 'none',\n background: 'transparent',\n fontSize: '17px',\n color: 'var(--seekora-text-primary, #000)',\n outline: 'none',\n },\n cancelBtn: {\n padding: '8px',\n background: 'none',\n border: 'none',\n color: 'var(--seekora-primary, #007aff)',\n fontSize: '17px',\n cursor: 'pointer',\n },\n content: {\n flex: 1,\n overflowY: 'auto' as const,\n overscrollBehavior: 'contain',\n WebkitOverflowScrolling: 'touch' as const,\n },\n section: {\n padding: '8px 0',\n },\n sectionHeader: {\n padding: '16px 16px 8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n sectionTitle: {\n fontSize: '13px',\n fontWeight: 600,\n color: 'var(--seekora-text-secondary, #8e8e93)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.5px',\n },\n clearBtn: {\n fontSize: '15px',\n color: 'var(--seekora-primary, #007aff)',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n padding: '14px 16px',\n gap: '14px',\n cursor: 'pointer',\n transition: 'background-color 100ms',\n minHeight: '56px', // Touch-friendly\n color: 'var(--seekora-text-primary, #000)',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f2f2f7)',\n color: 'var(--seekora-text-primary, #000)',\n },\n itemIcon: {\n width: '24px',\n height: '24px',\n color: 'var(--seekora-text-tertiary, #8e8e93)',\n flexShrink: 0,\n },\n itemImage: {\n width: '48px',\n height: '48px',\n borderRadius: '8px',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n flexShrink: 0,\n },\n itemContent: {\n flex: 1,\n minWidth: 0,\n },\n itemTitle: {\n fontSize: '17px',\n color: 'var(--seekora-text-primary, #000)',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n itemSubtitle: {\n fontSize: '15px',\n color: 'var(--seekora-text-secondary, #8e8e93)',\n marginTop: '2px',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n itemAction: {\n color: 'var(--seekora-text-tertiary, #c7c7cc)',\n flexShrink: 0,\n },\n productsScroll: {\n display: 'flex',\n gap: '12px',\n padding: '0 16px 16px',\n overflowX: 'auto' as const,\n scrollSnapType: 'x mandatory',\n WebkitOverflowScrolling: 'touch' as const,\n },\n productCard: {\n flex: '0 0 140px',\n scrollSnapAlign: 'start',\n cursor: 'pointer',\n },\n productImage: {\n width: '140px',\n height: '140px',\n borderRadius: '12px',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n marginBottom: '8px',\n },\n productTitle: {\n fontSize: '15px',\n color: 'var(--seekora-text-primary, #000)',\n marginBottom: '4px',\n whiteSpace: 'nowrap' as const,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n productPrice: {\n fontSize: '15px',\n fontWeight: 600,\n color: 'var(--seekora-text-primary, #000)',\n },\n footer: {\n padding: '12px 16px',\n paddingBottom: 'calc(12px + env(safe-area-inset-bottom, 0px))',\n borderTop: '1px solid var(--seekora-border-color, #f0f0f0)',\n backgroundColor: 'var(--seekora-bg-secondary, #f8f8f8)',\n },\n footerBtn: {\n width: '100%',\n padding: '16px',\n backgroundColor: 'var(--seekora-primary, #007aff)',\n color: 'var(--seekora-text-inverse, #ffffff)',\n border: 'none',\n borderRadius: '12px',\n fontSize: '17px',\n fontWeight: 600,\n cursor: 'pointer',\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '60px',\n color: 'var(--seekora-text-secondary, #8e8e93)',\n },\n spinner: {\n width: '28px',\n height: '28px',\n border: '3px solid var(--seekora-border-color, #e5e5ea)',\n borderTopColor: 'var(--seekora-primary, #007aff)',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n },\n empty: {\n padding: '60px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #8e8e93)',\n fontSize: '17px',\n },\n emptyIcon: {\n width: '48px',\n height: '48px',\n margin: '0 auto 16px',\n color: 'var(--seekora-text-tertiary, #c7c7cc)',\n },\n});\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst SearchIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n <path d=\"M21 21l-4.35-4.35\"/>\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <polyline points=\"12 6 12 12 16 14\"/>\n </svg>\n);\n\nconst TrendingIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"/>\n <polyline points=\"17 6 23 6 23 12\"/>\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" width=\"20\" height=\"20\">\n <polyline points=\"9 18 15 12 9 6\"/>\n </svg>\n);\n\nconst ArrowUpIcon = () => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" width=\"20\" height=\"20\">\n <path d=\"M7 17l5-5-5-5M13 17l5-5-5-5\"/>\n </svg>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface MobileSheetDropdownProps extends BaseDropdownProps {\n /** Show search input in header */\n showSearchInput?: boolean;\n /** Show cancel button */\n showCancel?: boolean;\n /** Cancel button text */\n cancelText?: string;\n /** Show drag handle */\n showDragHandle?: boolean;\n /** Enable swipe to dismiss */\n swipeToDismiss?: boolean;\n /** Footer button text */\n footerButtonText?: string;\n /** Show footer button */\n showFooterButton?: boolean;\n}\n\nexport const MobileSheetDropdown = forwardRef<DropdownRef, MobileSheetDropdownProps>(\n function MobileSheetDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n recentSearches = [],\n trendingSearches = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n productDisplay = {},\n theme = {},\n showSearchInput = true,\n showCancel = true,\n cancelText = 'Cancel',\n showDragHandle = true,\n swipeToDismiss = true,\n footerButtonText = 'Search',\n showFooterButton = true,\n width = '100%',\n maxHeight = '85vh',\n zIndex = 9999,\n className,\n style,\n classNames = {},\n inputRef,\n onSuggestionSelect,\n onProductClick,\n onRecentClick,\n onRecentClearAll,\n onSearchSubmit,\n onClose,\n header,\n footer,\n renderLoading,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n\n const styles = useMemo(() => createStyles(), []);\n const containerRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n const [inputValue, setInputValue] = useState(query);\n const [dragY, setDragY] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const dragStartY = useRef(0);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const recentQueries = useMemo(() =>\n recentSearches.map(r => typeof r === 'string' ? r : r.query).slice(0, 5),\n [recentSearches]\n );\n\n const trendingQueries = useMemo(() =>\n (trendingSearches as any[]).map(t => typeof t === 'string' ? t : t.query).slice(0, 5),\n [trendingSearches]\n );\n\n // Navigation\n // Build all navigable items\n const allItems = useMemo(() => {\n const items: Array<{ type: string; data: any }> = [];\n recentQueries.forEach(q => items.push({ type: 'recent', data: q }));\n trendingQueries.forEach(q => items.push({ type: 'trending', data: q }));\n processedSuggestions.forEach(s => items.push({ type: 'suggestion', data: s }));\n return items;\n }, [recentQueries, trendingQueries, processedSuggestions]);\n\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n if (activeIndex < 0 || activeIndex >= allItems.length) {\n // No selection, submit current query\n if (inputValue.trim()) onSearchSubmit?.(inputValue.trim());\n return;\n }\n const item = allItems[activeIndex];\n if (item.type === 'recent' || item.type === 'trending') {\n onRecentClick?.(item.data);\n } else if (item.type === 'suggestion') {\n onSuggestionSelect?.(item.data._raw, activeIndex);\n }\n }, [activeIndex, allItems, inputValue, onSearchSubmit, onRecentClick, onSuggestionSelect]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => inputRef?.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, inputRef, onClose]);\n\n // Scroll active item into view\n useEffect(() => {\n if (activeIndex >= 0 && containerRef.current) {\n const activeEl = containerRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, containerRef.current);\n }\n }\n }, [activeIndex]);\n\n // Drag to dismiss\n const handleDragStart = (e: React.TouchEvent) => {\n if (!swipeToDismiss) return;\n setIsDragging(true);\n dragStartY.current = e.touches[0].clientY;\n };\n\n const handleDrag = (e: React.TouchEvent) => {\n if (!isDragging) return;\n const deltaY = e.touches[0].clientY - dragStartY.current;\n if (deltaY > 0) {\n setDragY(deltaY);\n }\n };\n\n const handleDragEnd = () => {\n if (!isDragging) return;\n setIsDragging(false);\n if (dragY > 150) {\n onClose?.();\n }\n setDragY(0);\n };\n\n // Sync input value\n useEffect(() => {\n setInputValue(query);\n }, [query]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showRecent = !inputValue && recentQueries.length > 0;\n const showTrending = !inputValue && trendingQueries.length > 0;\n const showProducts = processedProducts.length > 0;\n\n return (\n <>\n {/* Overlay */}\n <div \n style={{\n ...styles.overlay,\n opacity: isDragging ? 1 - (dragY / 300) : 1,\n }}\n onClick={onClose}\n />\n\n {/* Sheet */}\n <div\n ref={containerRef}\n className={cx('seekora-mobile-sheet', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { \n maxHeight, \n zIndex,\n transform: isDragging ? `translateY(${dragY}px)` : 'translateY(0)',\n },\n cssVariables as any,\n style\n )}\n onTouchStart={handleDragStart}\n onTouchMove={handleDrag}\n onTouchEnd={handleDragEnd}\n >\n <style>{`\n @keyframes seekora-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n\n {/* Drag Handle */}\n {showDragHandle && (\n <div style={styles.dragHandle}>\n <div style={styles.dragBar} />\n </div>\n )}\n\n {/* Header with Search */}\n {(showSearchInput || header) && (\n <div style={styles.header}>\n {header || (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <div style={styles.searchContainer}>\n <div style={styles.searchIcon}>\n <SearchIcon />\n </div>\n <input\n ref={inputRef as any}\n type=\"text\"\n placeholder=\"Search...\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (activeIndex >= 0) {\n selectActive();\n } else if (inputValue.trim()) {\n onSearchSubmit?.(inputValue.trim());\n }\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n navigateNext();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n navigatePrevious();\n } else if (e.key === 'Escape') {\n onClose?.();\n }\n }}\n style={styles.searchInput}\n autoFocus\n />\n </div>\n {showCancel && (\n <button style={styles.cancelBtn} onClick={onClose}>\n {cancelText}\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Content */}\n <div style={styles.content}>\n {loading ? (\n renderLoading ? renderLoading() : (\n <div style={styles.loading}>\n <div style={styles.spinner} />\n </div>\n )\n ) : (\n <>\n {/* Recent Searches */}\n {showRecent && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Recent</span>\n <button style={styles.clearBtn} onClick={onRecentClearAll}>\n Clear\n </button>\n </div>\n {recentQueries.map((q, idx) => (\n <div\n key={`recent-${q}`}\n data-index={idx}\n style={mergeStyles(\n styles.item,\n activeIndex === idx ? styles.itemActive : undefined\n )}\n onClick={() => {\n onRecentClick?.(q);\n setInputValue(q);\n }}\n onMouseEnter={() => setActiveIndex(idx)}\n >\n <div style={styles.itemIcon}>\n <ClockIcon />\n </div>\n <div style={styles.itemContent}>\n <div style={styles.itemTitle}>{q}</div>\n </div>\n <div style={styles.itemAction}>\n <ArrowUpIcon />\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Trending */}\n {showTrending && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Trending</span>\n </div>\n {trendingQueries.map((q, idx) => {\n const globalIdx = recentQueries.length + idx;\n return (\n <div\n key={`trending-${q}`}\n data-index={globalIdx}\n style={mergeStyles(\n styles.item,\n activeIndex === globalIdx ? styles.itemActive : undefined\n )}\n onClick={() => {\n onRecentClick?.(q);\n setInputValue(q);\n }}\n onMouseEnter={() => setActiveIndex(globalIdx)}\n >\n <div style={styles.itemIcon}>\n <TrendingIcon />\n </div>\n <div style={styles.itemContent}>\n <div style={styles.itemTitle}>{q}</div>\n </div>\n <div style={styles.itemAction}>\n <ChevronIcon />\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Suggestions */}\n {inputValue && processedSuggestions.length > 0 && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Suggestions</span>\n </div>\n {processedSuggestions.map((s, idx) => {\n const globalIdx = recentQueries.length + trendingQueries.length + idx;\n return (\n <div\n key={s.id || idx}\n data-index={globalIdx}\n style={mergeStyles(\n styles.item,\n activeIndex === globalIdx ? styles.itemActive : undefined\n )}\n onClick={() => onSuggestionSelect?.(s._raw, idx)}\n onMouseEnter={() => setActiveIndex(globalIdx)}\n >\n <div style={styles.itemIcon}>\n <SearchIcon />\n </div>\n <div style={styles.itemContent}>\n <div \n style={styles.itemTitle}\n dangerouslySetInnerHTML={{\n __html: highlightText(s.query, inputValue, { tag: 'strong' })\n }}\n />\n {s.count && (\n <div style={styles.itemSubtitle}>\n {s.count} results\n </div>\n )}\n </div>\n <div style={styles.itemAction}>\n <ChevronIcon />\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Products - Horizontal Scroll */}\n {showProducts && (\n <div style={styles.section}>\n <div style={styles.sectionHeader}>\n <span style={styles.sectionTitle}>Products</span>\n </div>\n <div style={styles.productsScroll}>\n {processedProducts.slice(0, 8).map((p, idx) => (\n <div\n key={p.id}\n style={styles.productCard}\n onClick={() => onProductClick?.(p._raw, idx)}\n >\n {p.image ? (\n <img\n src={p.image}\n alt={p.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n ) : (\n <div style={styles.productImage} />\n )}\n <div style={styles.productTitle}>{p.title}</div>\n {p.price !== undefined && (\n <div style={styles.productPrice}>\n {formatPrice(p.price, { \n currency: productDisplay.currency || p.currency || '$' \n })}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Empty State */}\n {inputValue && processedSuggestions.length === 0 && !loading && (\n renderEmpty ? renderEmpty(inputValue) : (\n <div style={styles.empty}>\n <div style={styles.emptyIcon}>\n <SearchIcon />\n </div>\n <p>No results for \"{inputValue}\"</p>\n </div>\n )\n )}\n </>\n )}\n </div>\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n showFooterButton && inputValue && (\n <div style={styles.footer}>\n <button\n style={styles.footerBtn}\n onClick={() => onSearchSubmit?.(inputValue)}\n >\n {footerButtonText} \"{inputValue}\"\n </button>\n </div>\n )\n )}\n </div>\n </>\n );\n }\n);\n\nexport default MobileSheetDropdown;\n","/**\n * MinimalDropdown - Ultra-Clean Minimalist Style\n * \n * Features:\n * - Stripped-down, distraction-free design\n * - Focus on typography and whitespace\n * - Subtle animations\n * - Perfect for editorial/content sites\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from 'react';\nimport type { BaseDropdownProps, DropdownRef } from './types';\nimport {\n extractSuggestion,\n extractProduct,\n formatPrice,\n highlightText,\n cx,\n mergeStyles,\n generateCSSVariables,\n scrollIntoViewIfNeeded,\n} from './utils';\nimport { useResponsive, touchTargets } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = () => ({\n root: {\n position: 'absolute' as const,\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #e5e5e5)',\n fontFamily: 'var(--seekora-font-family, \"Inter\", -apple-system, sans-serif)',\n fontSize: 'var(--seekora-font-size, 15px)',\n letterSpacing: '-0.01em',\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n padding: '16px 20px',\n cursor: 'pointer',\n transition: 'background-color 150ms ease, padding-left 150ms ease',\n borderBottom: '1px solid var(--seekora-border-color, #e8e8e8)',\n gap: '16px',\n color: 'var(--seekora-text-primary, #111)',\n },\n itemLast: {\n borderBottom: 'none',\n },\n itemActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #111)',\n paddingLeft: '24px',\n },\n itemIndex: {\n fontSize: '11px',\n fontWeight: 500,\n color: 'var(--seekora-text-tertiary, #999)',\n fontFamily: 'monospace',\n minWidth: '20px',\n },\n itemContent: {\n flex: 1,\n minWidth: 0,\n },\n itemQuery: {\n fontSize: '15px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #111)',\n },\n itemMeta: {\n fontSize: '13px',\n color: 'var(--seekora-text-secondary, #666)',\n marginTop: '4px',\n fontWeight: 400,\n },\n itemType: {\n fontSize: '10px',\n fontWeight: 600,\n color: 'var(--seekora-text-tertiary, #999)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.1em',\n padding: '4px 8px',\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n },\n productRow: {\n display: 'flex',\n alignItems: 'center',\n padding: '16px 20px',\n cursor: 'pointer',\n transition: 'background-color 150ms ease',\n borderBottom: '1px solid var(--seekora-border-color, #e8e8e8)',\n gap: '16px',\n color: 'var(--seekora-text-primary, #111)',\n },\n productRowActive: {\n backgroundColor: 'var(--seekora-bg-hover, #f5f5f5)',\n color: 'var(--seekora-text-primary, #111)',\n },\n productImage: {\n width: '56px',\n height: '56px',\n objectFit: 'cover' as const,\n backgroundColor: 'var(--seekora-bg-secondary, #f5f5f5)',\n flexShrink: 0,\n },\n productContent: {\n flex: 1,\n minWidth: 0,\n },\n productTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--seekora-text-primary, #111)',\n marginBottom: '4px',\n },\n productPrice: {\n fontSize: '14px',\n color: 'var(--seekora-text-secondary, #666)',\n },\n divider: {\n padding: '12px 20px 8px',\n fontSize: '10px',\n fontWeight: 600,\n color: 'var(--seekora-text-tertiary, #999)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.15em',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n borderBottom: '1px solid var(--seekora-border-color, #f0f0f0)',\n },\n footer: {\n padding: '12px 20px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: 'var(--seekora-bg-secondary, #fafafa)',\n fontSize: '12px',\n color: 'var(--seekora-text-tertiary, #999)',\n borderTop: '1px solid var(--seekora-border-color, #e5e5e5)',\n },\n footerHint: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n },\n kbd: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '2px 6px',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n border: '1px solid var(--seekora-border-color, #ddd)',\n fontSize: '10px',\n fontFamily: 'monospace',\n },\n loading: {\n padding: '40px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #666)',\n fontSize: '14px',\n },\n empty: {\n padding: '40px 20px',\n textAlign: 'center' as const,\n color: 'var(--seekora-text-secondary, #666)',\n fontSize: '14px',\n },\n highlight: {\n backgroundColor: 'var(--seekora-highlight-bg, #fff3cd)',\n padding: '0 2px',\n },\n});\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport interface MinimalDropdownProps extends BaseDropdownProps {\n /** Show item indices */\n showIndices?: boolean;\n /** Show item type labels */\n showTypeLabels?: boolean;\n /** Show dividers between sections */\n showSectionDividers?: boolean;\n /** Monospace indices */\n monoIndices?: boolean;\n}\n\nexport const MinimalDropdown = forwardRef<DropdownRef, MinimalDropdownProps>(\n function MinimalDropdown(props, ref) {\n const {\n query,\n isOpen = true,\n loading = false,\n suggestions = [],\n products = [],\n recentSearches = [],\n suggestionFields = { query: 'query' },\n productFields = { id: 'id', title: 'title' },\n productDisplay = {},\n theme = {},\n showIndices = false,\n showTypeLabels = false,\n showSectionDividers = true,\n width = '100%',\n maxHeight = '400px',\n zIndex = 1000,\n className,\n style,\n classNames = {},\n onSuggestionSelect,\n onProductClick,\n onRecentClick,\n onClose,\n onSearchSubmit,\n header,\n footer,\n renderLoading,\n renderEmpty,\n } = props;\n\n // Inject global responsive styles\n useInjectResponsiveStyles();\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n\n const styles = useMemo(() => createStyles(), []);\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n // Process data\n const processedSuggestions = useMemo(() =>\n suggestions.map(s => extractSuggestion(s, suggestionFields)),\n [suggestions, suggestionFields]\n );\n\n const processedProducts = useMemo(() =>\n products.map(p => extractProduct(p, productFields)),\n [products, productFields]\n );\n\n const recentQueries = useMemo(() =>\n recentSearches.map(r => typeof r === 'string' ? r : r.query).slice(0, 3),\n [recentSearches]\n );\n\n // All items for navigation\n const allItems = useMemo(() => {\n const items: Array<{ type: string; data: any }> = [];\n \n if (!query && recentQueries.length > 0) {\n recentQueries.forEach(q => items.push({ type: 'recent', data: q }));\n }\n \n processedSuggestions.forEach(s => items.push({ type: 'suggestion', data: s }));\n processedProducts.forEach(p => items.push({ type: 'product', data: p }));\n \n return items;\n }, [query, recentQueries, processedSuggestions, processedProducts]);\n\n // Navigation\n const navigateNext = useCallback(() => {\n setActiveIndex(prev => Math.min(prev + 1, allItems.length - 1));\n }, [allItems.length]);\n\n const navigatePrevious = useCallback(() => {\n setActiveIndex(prev => Math.max(prev - 1, -1));\n }, []);\n\n const selectActive = useCallback(() => {\n const item = allItems[activeIndex];\n if (!item) {\n if (query) onSearchSubmit?.(query);\n return;\n }\n \n switch (item.type) {\n case 'recent':\n onRecentClick?.(item.data);\n break;\n case 'suggestion':\n onSuggestionSelect?.(item.data._raw, activeIndex);\n break;\n case 'product':\n onProductClick?.(item.data._raw, activeIndex);\n break;\n }\n }, [activeIndex, allItems, query, onSearchSubmit, onRecentClick, onSuggestionSelect, onProductClick]);\n\n // Expose ref\n useImperativeHandle(ref, () => ({\n getActiveIndex: () => activeIndex,\n setActiveIndex,\n selectActive,\n navigateNext,\n navigatePrevious,\n focus: () => containerRef.current?.focus(),\n close: () => onClose?.(),\n }), [activeIndex, selectActive, navigateNext, navigatePrevious, onClose]);\n\n // Scroll active into view\n useEffect(() => {\n if (listRef.current && activeIndex >= 0) {\n const activeEl = listRef.current.querySelector(`[data-index=\"${activeIndex}\"]`) as HTMLElement;\n if (activeEl) {\n scrollIntoViewIfNeeded(activeEl, listRef.current);\n }\n }\n }, [activeIndex]);\n\n // Reset on query change\n useEffect(() => {\n setActiveIndex(-1);\n }, [query]);\n\n if (!isOpen) return null;\n\n const cssVariables = generateCSSVariables(theme);\n const showRecent = !query && recentQueries.length > 0;\n\n let globalIndex = 0;\n\n return (\n <div\n ref={containerRef}\n role=\"listbox\"\n aria-label=\"Search suggestions\"\n className={cx('seekora-minimal-dropdown', className, classNames.root)}\n style={mergeStyles(\n styles.root,\n { width, zIndex },\n cssVariables as any,\n style\n )}\n tabIndex={-1}\n >\n <style>{`\n .seekora-minimal-dropdown mark {\n background-color: var(--seekora-highlight-bg, #fff3cd);\n padding: 0 2px;\n }\n `}</style>\n\n {header}\n\n <div ref={listRef} style={{ maxHeight, overflowY: 'auto' }}>\n {loading ? (\n renderLoading ? renderLoading() : (\n <div style={styles.loading}>Loading...</div>\n )\n ) : allItems.length === 0 ? (\n renderEmpty ? renderEmpty(query) : (\n <div style={styles.empty}>\n {query ? `No results for \"${query}\"` : 'Start typing to search'}\n </div>\n )\n ) : (\n <>\n {/* Recent Searches */}\n {showRecent && (\n <>\n {showSectionDividers && (\n <div style={styles.divider}>Recent</div>\n )}\n {recentQueries.map((q, idx) => {\n const itemIdx = globalIndex++;\n const isActive = activeIndex === itemIdx;\n const isLast = idx === recentQueries.length - 1 && !processedSuggestions.length && !processedProducts.length;\n \n return (\n <div\n key={`recent-${q}`}\n data-index={itemIdx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined,\n isLast ? styles.itemLast : undefined\n )}\n onClick={() => onRecentClick?.(q)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n {showIndices && (\n <span style={styles.itemIndex}>{itemIdx + 1}</span>\n )}\n <div style={styles.itemContent}>\n <div style={styles.itemQuery}>{q}</div>\n </div>\n {showTypeLabels && (\n <span style={styles.itemType}>Recent</span>\n )}\n </div>\n );\n })}\n </>\n )}\n\n {/* Suggestions */}\n {processedSuggestions.length > 0 && (\n <>\n {showSectionDividers && (showRecent || false) && (\n <div style={styles.divider}>Suggestions</div>\n )}\n {processedSuggestions.map((s, idx) => {\n const itemIdx = globalIndex++;\n const isActive = activeIndex === itemIdx;\n const isLast = idx === processedSuggestions.length - 1 && !processedProducts.length;\n \n return (\n <div\n key={s.id || `suggestion-${idx}`}\n data-index={itemIdx}\n style={mergeStyles(\n styles.item,\n isActive ? styles.itemActive : undefined,\n isLast ? styles.itemLast : undefined\n )}\n onClick={() => onSuggestionSelect?.(s._raw, idx)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n {showIndices && (\n <span style={styles.itemIndex}>{itemIdx + 1}</span>\n )}\n <div style={styles.itemContent}>\n <div \n style={styles.itemQuery}\n dangerouslySetInnerHTML={{\n __html: highlightText(s.query, query, { tag: 'mark' })\n }}\n />\n {s.count && (\n <div style={styles.itemMeta}>\n {s.count.toLocaleString()} results\n </div>\n )}\n </div>\n {showTypeLabels && (\n <span style={styles.itemType}>Search</span>\n )}\n </div>\n );\n })}\n </>\n )}\n\n {/* Products */}\n {processedProducts.length > 0 && (\n <>\n {showSectionDividers && (\n <div style={styles.divider}>Products</div>\n )}\n {processedProducts.slice(0, 4).map((p, idx) => {\n const itemIdx = globalIndex++;\n const isActive = activeIndex === itemIdx;\n \n return (\n <div\n key={p.id}\n data-index={itemIdx}\n style={mergeStyles(\n styles.productRow,\n isActive ? styles.productRowActive : undefined\n )}\n onClick={() => onProductClick?.(p._raw, idx)}\n onMouseEnter={() => setActiveIndex(itemIdx)}\n >\n {p.image && (\n <img\n src={p.image}\n alt={p.title}\n style={styles.productImage}\n loading=\"lazy\"\n />\n )}\n <div style={styles.productContent}>\n <div style={styles.productTitle}>{p.title}</div>\n {p.price !== undefined && (\n <div style={styles.productPrice}>\n {formatPrice(p.price, { \n currency: productDisplay.currency || p.currency || '$' \n })}\n </div>\n )}\n </div>\n {showTypeLabels && (\n <span style={styles.itemType}>Product</span>\n )}\n </div>\n );\n })}\n </>\n )}\n </>\n )}\n </div>\n\n {/* Footer */}\n {footer !== undefined ? footer : (\n <div style={styles.footer}>\n <div style={styles.footerHint}>\n <span><span style={styles.kbd}>↑</span> <span style={styles.kbd}>↓</span> navigate</span>\n <span><span style={styles.kbd}>↵</span> select</span>\n <span><span style={styles.kbd}>esc</span> close</span>\n </div>\n <span>{allItems.length} results</span>\n </div>\n )}\n </div>\n );\n }\n);\n\nexport default MinimalDropdown;\n","/**\n * SuggestionSearchBar - Unified Search Component with Premium Dropdowns\n * \n * A self-contained search component that:\n * - Fetches suggestions from the API automatically\n * - Parses responses internally (no user-side parsing needed)\n * - Renders any of the 7 premium dropdown variants\n * - Handles analytics tracking\n * - Supports recent searches via localStorage\n * - Fully responsive and mobile-ready\n * \n * Usage:\n * ```tsx\n * <SuggestionSearchBar\n * client={seekoraClient}\n * variant=\"amazon\"\n * onSearch={(query) => router.push(`/search?q=${query}`)}\n * />\n * ```\n */\n\nimport React, {\n useState,\n useRef,\n useCallback,\n useEffect,\n forwardRef,\n useImperativeHandle,\n useMemo,\n} from 'react';\nimport type { SeekoraClient } from '@seekora-ai/search-sdk';\nimport type {\n SuggestionDropdownVariant,\n BaseDropdownProps,\n DropdownRef,\n SuggestionFieldMapping,\n ProductFieldMapping,\n DropdownThemeConfig,\n AnalyticsConfig,\n} from './types';\nimport {\n getRecentSearches,\n addRecentSearch,\n removeRecentSearch,\n clearRecentSearches,\n cx,\n mergeStyles,\n getSuggestionsCache,\n type SuggestionsCache,\n} from './utils';\nimport { useResponsive } from './styles/responsive';\nimport { useInjectResponsiveStyles } from './styles';\nimport { useSearchContext } from '../SearchProvider';\nimport { useSuggestionsAnalytics } from '../../hooks/useSuggestionsAnalytics';\n\n// Import all variants\nimport { AmazonDropdown } from './AmazonDropdown';\nimport { GoogleDropdown } from './GoogleDropdown';\nimport { PinterestDropdown } from './PinterestDropdown';\nimport { SpotlightDropdown } from './SpotlightDropdown';\nimport { ShopifyDropdown } from './ShopifyDropdown';\nimport { MobileSheetDropdown } from './MobileSheetDropdown';\nimport { MinimalDropdown } from './MinimalDropdown';\n\n// ============================================================================\n// Theme helpers (support both Theme { colors } and DropdownThemeConfig)\n// ============================================================================\n\nfunction getThemeVars(theme: DropdownThemeConfig | { colors?: Record<string, string> | any } | any | undefined): Record<string, string> {\n if (!theme) {\n return {\n '--seekora-bg-surface': '#ffffff',\n '--seekora-bg-secondary': '#f7f7f7',\n '--seekora-bg-tertiary': '#f0f0f0',\n '--seekora-bg-hover': '#f5f5f5',\n '--seekora-text-primary': '#0f1111',\n '--seekora-text-secondary': '#565959',\n '--seekora-text-tertiary': '#767676',\n '--seekora-border-color': '#e7e7e7',\n '--seekora-primary': '#f90',\n '--seekora-text-on-primary': '#0f1111',\n '--seekora-text-inverse': '#ffffff',\n '--seekora-link': '#007185',\n '--seekora-font-family': '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n };\n }\n const t = theme as any;\n const colors = t.colors ?? {};\n return {\n '--seekora-bg-surface': t.backgroundColor ?? colors.background ?? '#ffffff',\n '--seekora-bg-secondary': t.surfaceColor ?? colors.hover ?? '#f7f7f7',\n '--seekora-bg-tertiary': t.hoverColor ?? colors.hover ?? '#f0f0f0',\n '--seekora-bg-hover': t.hoverColor ?? colors.hover ?? '#f5f5f5',\n '--seekora-text-primary': t.textColor ?? colors.text ?? '#0f1111',\n '--seekora-text-secondary': t.textSecondaryColor ?? colors.text ?? '#565959',\n '--seekora-text-tertiary': t.textSecondaryColor ?? '#767676',\n '--seekora-border-color': t.borderColor ?? colors.border ?? '#e7e7e7',\n '--seekora-primary': t.primaryColor ?? colors.primary ?? '#f90',\n '--seekora-text-on-primary': t.textOnPrimaryColor ?? '#0f1111',\n '--seekora-text-inverse': t.textInverseColor ?? '#ffffff',\n '--seekora-link': t.primaryColor ?? colors.primary ?? '#007185',\n '--seekora-font-family': t.fontFamily ?? '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n };\n}\n\nfunction themeToDropdownConfig(theme: DropdownThemeConfig | { colors?: Record<string, string> | any } | any | undefined): DropdownThemeConfig | undefined {\n if (!theme) return undefined;\n const t = theme as any;\n const colors = t.colors ?? {};\n return {\n backgroundColor: t.backgroundColor ?? colors.background,\n textColor: t.textColor ?? colors.text,\n surfaceColor: t.surfaceColor ?? colors.hover,\n borderColor: t.borderColor ?? colors.border,\n hoverColor: t.hoverColor ?? colors.hover,\n primaryColor: t.primaryColor ?? colors.primary,\n textSecondaryColor: t.textSecondaryColor ?? colors.text,\n fontFamily: t.fontFamily,\n };\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SuggestionSearchBarProps {\n /** Seekora client instance - REQUIRED */\n client: SeekoraClient;\n \n /** Dropdown variant to use */\n variant?: SuggestionDropdownVariant;\n \n /** Auto-select mobile variant on small screens */\n autoMobileVariant?: boolean;\n \n // === Search Config ===\n /** Placeholder text */\n placeholder?: string;\n /** Initial/default query */\n defaultQuery?: string;\n /** Controlled query value */\n value?: string;\n /** Min characters before fetching */\n minQueryLength?: number;\n /** Max suggestions to fetch */\n maxSuggestions?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n \n // === API Config ===\n /** Include dropdown recommendations (products, tabs, trending) */\n includeDropdownRecommendations?: boolean;\n /** Include categories per suggestion */\n includeCategories?: boolean;\n /** Filtered tabs configuration */\n filteredTabs?: Array<{ id?: string; label: string; filter: string }>;\n /** Analytics tags */\n analyticsTags?: string[];\n \n // === Features ===\n /** Enable recent searches */\n enableRecentSearches?: boolean;\n /** Max recent searches to store */\n maxRecentSearches?: number;\n /** Show products in dropdown */\n showProducts?: boolean;\n /** Show trending when empty */\n showTrendingOnEmpty?: boolean;\n /** Enable analytics tracking */\n enableAnalytics?: boolean;\n /** Analytics configuration */\n analyticsConfig?: AnalyticsConfig;\n \n // === Field Mapping (for custom data structures) ===\n /** Map suggestion fields to your data */\n suggestionFields?: SuggestionFieldMapping;\n /** Map product fields to your data */\n productFields?: ProductFieldMapping;\n \n // === Theming ===\n /** Theme configuration */\n theme?: DropdownThemeConfig;\n \n // === Callbacks ===\n /** Called when search is submitted */\n onSearch?: (query: string) => void;\n /** Called when query changes */\n onQueryChange?: (query: string) => void;\n /** Called when a suggestion is selected */\n onSuggestionSelect?: (suggestion: any, index: number) => void;\n /** Called when a product is clicked */\n onProductClick?: (product: any, index: number) => void;\n /** Called when a category/tab is clicked */\n onCategoryClick?: (category: any, index: number) => void;\n /** Called when a tab is changed */\n onTabChange?: (tabId: string) => void;\n \n // === Styling ===\n /** Container class name */\n className?: string;\n /** Container style */\n style?: React.CSSProperties;\n /** Input class name */\n inputClassName?: string;\n /** Dropdown width */\n dropdownWidth?: string | number;\n /** Dropdown max height */\n dropdownMaxHeight?: string | number;\n /** Z-index for dropdown */\n zIndex?: number;\n \n // === Caching ===\n /** Enable caching for suggestions (reduces API calls) */\n enableCache?: boolean;\n /** Cache TTL in milliseconds (default: 30000 = 30 seconds) */\n cacheTtlMs?: number;\n /** Maximum cache entries (default: 100) */\n cacheMaxSize?: number;\n}\n\nexport interface SuggestionSearchBarRef {\n focus: () => void;\n blur: () => void;\n clear: () => void;\n getQuery: () => string;\n setQuery: (query: string) => void;\n openDropdown: () => void;\n closeDropdown: () => void;\n refresh: () => void;\n /** Clear the suggestions cache */\n clearCache: () => void;\n /** Get cache statistics */\n getCacheStats: () => { size: number; maxSize: number } | null;\n}\n\n// ============================================================================\n// Variant Map\n// ============================================================================\n\nconst VariantComponents: Record<SuggestionDropdownVariant, React.ComponentType<BaseDropdownProps>> = {\n amazon: AmazonDropdown,\n google: GoogleDropdown,\n pinterest: PinterestDropdown,\n spotlight: SpotlightDropdown,\n shopify: ShopifyDropdown,\n 'mobile-sheet': MobileSheetDropdown,\n minimal: MinimalDropdown,\n};\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst createStyles = (isMobile: boolean) => ({\n container: {\n position: 'relative' as const,\n width: '100%',\n fontFamily: 'var(--seekora-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)',\n },\n inputWrapper: {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--seekora-bg-surface, #ffffff)',\n color: 'var(--seekora-text-primary, #111827)',\n borderWidth: '2px',\n borderStyle: 'solid',\n borderColor: 'var(--seekora-border-color, #d1d5db)',\n borderRadius: isMobile ? '8px' : '24px',\n overflow: 'hidden',\n transition: 'border-color 150ms, box-shadow 150ms',\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n },\n inputWrapperFocused: {\n borderColor: 'var(--seekora-primary, #f90)',\n boxShadow: '0 0 0 3px rgba(255, 153, 0, 0.15), 0 2px 8px rgba(0,0,0,0.1)',\n },\n searchIcon: {\n padding: isMobile ? '0 10px 0 14px' : '0 12px 0 18px',\n color: 'var(--seekora-text-secondary, #6b7280)',\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n },\n input: {\n flex: 1,\n padding: isMobile ? '12px 8px 12px 0' : '14px 12px 14px 0',\n fontSize: isMobile ? '16px' : '15px',\n borderWidth: 0,\n borderStyle: 'none',\n outline: 'none',\n backgroundColor: 'transparent',\n color: 'var(--seekora-text-primary, #0f1111)',\n fontFamily: 'inherit',\n minWidth: 0,\n WebkitAppearance: 'none' as const,\n },\n clearButton: {\n padding: '8px 14px',\n background: 'none',\n borderWidth: 0,\n borderStyle: 'none',\n cursor: 'pointer',\n color: 'var(--seekora-text-tertiary, #9ca3af)',\n fontSize: '18px',\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: 'color 150ms',\n },\n loadingSpinner: {\n width: '18px',\n height: '18px',\n borderWidth: '2px',\n borderStyle: 'solid',\n borderColor: '#e5e7eb',\n borderTopColor: '#f90',\n borderRadius: '50%',\n animation: 'seekora-spin 0.8s linear infinite',\n marginRight: '12px',\n flexShrink: 0,\n },\n});\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const SuggestionSearchBar = forwardRef<SuggestionSearchBarRef, SuggestionSearchBarProps>(\n function SuggestionSearchBar(props, ref) {\n const {\n client,\n variant = 'amazon',\n autoMobileVariant = true,\n placeholder = 'Search...',\n defaultQuery = '',\n value,\n minQueryLength = 1,\n maxSuggestions = 8,\n debounceMs = 200,\n includeDropdownRecommendations = true,\n includeCategories = true,\n filteredTabs,\n analyticsTags,\n enableRecentSearches = true,\n maxRecentSearches = 10,\n showProducts = true,\n showTrendingOnEmpty = true,\n enableAnalytics = true,\n analyticsConfig,\n suggestionFields,\n productFields,\n theme,\n onSearch,\n onQueryChange,\n onSuggestionSelect,\n onProductClick,\n onCategoryClick,\n onTabChange,\n className,\n style,\n inputClassName,\n dropdownWidth,\n dropdownMaxHeight = '500px',\n zIndex = 1000,\n enableCache = true,\n cacheTtlMs = 30000,\n cacheMaxSize = 100,\n } = props;\n\n // Theme: prop overrides context (SearchProvider theme)\n const searchContext = useSearchContext();\n const effectiveTheme = theme ?? searchContext.theme;\n\n // Initialize analytics hook for proper event tracking\n const analytics = useSuggestionsAnalytics({\n client,\n enabled: enableAnalytics,\n analyticsTags: analyticsConfig?.tags ?? analyticsTags,\n trackImpressions: analyticsConfig?.trackImpressions ?? true,\n trackClicks: analyticsConfig?.trackSuggestionClicks ?? true,\n });\n\n // Inject responsive styles\n useInjectResponsiveStyles();\n \n // Inject theme CSS variables so dropdown and page use one consistent theme\n useEffect(() => {\n const root = document.documentElement;\n const themeVars = getThemeVars(effectiveTheme);\n Object.entries(themeVars).forEach(([key, value]) => {\n root.style.setProperty(key, value);\n });\n }, [effectiveTheme]);\n \n // Responsive state\n const responsive = useResponsive();\n const { isMobile } = responsive;\n \n // Determine actual variant (auto-switch to mobile on small screens)\n const actualVariant = useMemo(() => {\n if (autoMobileVariant && isMobile && variant !== 'mobile-sheet' && variant !== 'spotlight') {\n return 'mobile-sheet';\n }\n return variant;\n }, [variant, isMobile, autoMobileVariant]);\n\n // State\n const [query, setQuery] = useState(defaultQuery);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [loading, setLoading] = useState(false);\n const [suggestions, setSuggestions] = useState<any[]>([]);\n const [products, setProducts] = useState<any[]>([]);\n const [categories, setCategories] = useState<any[]>([]);\n const [tabs, setTabs] = useState<any[]>([]);\n const [trendingSearches, setTrendingSearches] = useState<any[]>([]);\n const [recentSearches, setRecentSearches] = useState<any[]>([]);\n const [activeTab, setActiveTab] = useState<string>('all');\n\n // Refs\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<DropdownRef>(null);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Initialize cache\n const cache = useMemo(() => {\n if (!enableCache) return null;\n return getSuggestionsCache({ maxSize: cacheMaxSize, defaultTtlMs: cacheTtlMs });\n }, [enableCache, cacheMaxSize, cacheTtlMs]);\n\n // Controlled vs uncontrolled query\n const currentQuery = value !== undefined ? value : query;\n\n // Styles\n const styles = useMemo(() => createStyles(isMobile), [isMobile]);\n\n // Load recent searches on mount\n useEffect(() => {\n if (enableRecentSearches) {\n const allRecent = getRecentSearches();\n setRecentSearches(allRecent.slice(0, maxRecentSearches));\n }\n }, [enableRecentSearches, maxRecentSearches]);\n\n // ========================================================================\n // API Data Fetching\n // ========================================================================\n \n const fetchSuggestions = useCallback(async (searchQuery: string) => {\n if (!client) return;\n // Allow empty string \"\" for focus-triggered search (API returns trending/default); otherwise enforce min length\n if (searchQuery.length > 0 && searchQuery.length < minQueryLength) {\n setSuggestions([]);\n setProducts([]);\n setTabs([]);\n return;\n }\n\n // Build cache key from query and options\n const cacheOptions = {\n maxSuggestions,\n includeDropdownRecommendations,\n includeCategories,\n filteredTabs: filteredTabs?.map(t => t.filter).join(','),\n };\n const cacheKey = cache?.generateKey(searchQuery, cacheOptions);\n\n // Check cache first\n if (cache && cacheKey) {\n const cachedResponse = cache.get<any>(cacheKey);\n if (cachedResponse) {\n console.log('Seekora: Cache hit for query:', searchQuery);\n parseAndSetData(cachedResponse);\n return;\n }\n }\n\n setLoading(true);\n\n try {\n // Use the SDK client to fetch suggestions (\"\" is valid - API returns something for empty query)\n // IMPORTANT: returnFullResponse: true is required to get filtered_tabs and extensions\n const response = await client.getSuggestions?.(searchQuery, {\n hitsPerPage: maxSuggestions,\n include_dropdown_recommendations: includeDropdownRecommendations,\n include_categories: includeCategories,\n filtered_tabs: filteredTabs,\n analytics_tags: analyticsTags,\n returnFullResponse: true, // Required to get tabs and products\n });\n\n // Cache the response\n if (cache && cacheKey && response) {\n cache.set(cacheKey, response);\n console.log('Seekora: Cached response for query:', searchQuery);\n }\n\n // Parse the response - SDK returns normalized structure\n parseAndSetData(response);\n\n // Track impressions via analytics hook (sends to API)\n if (enableAnalytics && response && !Array.isArray(response)) {\n const resp = response as any;\n analytics.trackImpression({\n suggestions: (resp.suggestions || []).map((s: any) => ({\n query: s.query || s.text || '',\n objectID: s.objectID || s.id,\n popularity: s.popularity,\n })),\n products: resp.extensions?.trending_products || resp.extensions?.item_recommendations || [],\n categories: resp.extensions?.popular_categories || [],\n brands: resp.extensions?.popular_brands || [],\n query: searchQuery,\n timestamp: Date.now(),\n });\n }\n\n } catch (error) {\n console.error('Seekora: Failed to fetch suggestions', error);\n setSuggestions([]);\n setProducts([]);\n setTabs([]);\n } finally {\n setLoading(false);\n }\n }, [client, minQueryLength, maxSuggestions, includeDropdownRecommendations, includeCategories, filteredTabs, analyticsTags, enableAnalytics, analytics, cache]);\n\n // Parse API response - handles multiple response formats\n const parseAndSetData = useCallback((response: any) => {\n // Handle different response structures from the API/SDK\n let hits: any[] = [];\n let extensions: any = {};\n \n console.log('Seekora: Raw response structure', {\n hasSuggestions: !!response?.suggestions,\n hasResults: !!response?.results,\n hasExtensions: !!response?.extensions,\n hasData: !!response?.data,\n });\n\n // SDK returnFullResponse format: { suggestions, results, extensions }\n if (response?.suggestions && response?.extensions) {\n hits = response.suggestions || [];\n extensions = response.extensions || {};\n }\n // Multi-index response: { results: [{ hits, extensions }, ...] }\n else if (response?.results && Array.isArray(response.results)) {\n const result0 = response.results[0] || {};\n const result1 = response.results[1] || {};\n hits = result0.hits || result0.suggestions || [];\n // Extensions can be in result0 or result1\n extensions = result0.extensions || result1.extensions || {};\n } \n // Wrapped response: { data: { hits, extensions, ... } }\n else if (response?.data) {\n hits = response.data.hits || [];\n extensions = response.data.extensions || response.data.dropdown_recommendations || {};\n } \n // Direct response: { hits, extensions, ... }\n else if (response?.hits) {\n hits = response.hits || [];\n extensions = response.extensions || response.dropdown_recommendations || {};\n } \n // Array response\n else if (Array.isArray(response)) {\n hits = response;\n }\n\n // Set suggestions\n setSuggestions(hits);\n\n // Set filtered tabs from extensions\n const filteredTabsData = extensions.filtered_tabs || [];\n setTabs(filteredTabsData);\n\n // Set products from first tab or trending\n if (filteredTabsData.length > 0 && filteredTabsData[0].products) {\n setProducts(filteredTabsData[0].products);\n } else {\n setProducts(extensions.trending_products || extensions.item_recommendations || []);\n }\n\n // Set categories\n setCategories(extensions.popular_categories || []);\n\n // Set trending searches\n setTrendingSearches(extensions.trending_searches || extensions.top_searches || []);\n\n console.log('Seekora: Parsed response', {\n suggestions: hits.length,\n tabs: filteredTabsData.length,\n products: filteredTabsData[0]?.products?.length || 0,\n extensionKeys: Object.keys(extensions),\n });\n }, []);\n\n // ========================================================================\n // Event Handlers\n // ========================================================================\n\n const handleInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newQuery = e.target.value;\n \n if (value === undefined) {\n setQuery(newQuery);\n }\n \n onQueryChange?.(newQuery);\n setActiveTab('all');\n\n // Debounced fetch\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n\n if (newQuery.length >= minQueryLength) {\n setIsOpen(true);\n debounceRef.current = setTimeout(() => {\n fetchSuggestions(newQuery);\n }, debounceMs);\n } else if (newQuery.length === 0 && (enableRecentSearches || showTrendingOnEmpty)) {\n setIsOpen(true);\n setSuggestions([]);\n } else {\n setIsOpen(false);\n }\n }, [value, onQueryChange, minQueryLength, debounceMs, fetchSuggestions, enableRecentSearches, showTrendingOnEmpty]);\n\n const handleInputFocus = useCallback(() => {\n setIsFocused(true);\n setIsOpen(true);\n \n // Track dropdown open\n if (enableAnalytics) {\n analytics.trackDropdownOpen(currentQuery);\n }\n \n // Trigger empty search \"\" when user clicks/focuses the box so API returns trending/default content\n if (currentQuery.length >= minQueryLength) {\n if (suggestions.length === 0) fetchSuggestions(currentQuery);\n } else {\n fetchSuggestions('');\n }\n }, [currentQuery, minQueryLength, suggestions.length, fetchSuggestions, enableAnalytics, analytics]);\n\n const handleInputBlur = useCallback(() => {\n setIsFocused(false);\n // Delay close to allow click events on dropdown\n setTimeout(() => {\n if (!containerRef.current?.contains(document.activeElement)) {\n setIsOpen(false);\n }\n }, 150);\n }, []);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false);\n inputRef.current?.blur();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n // Check if there's an active selection in the dropdown\n const activeIndex = dropdownRef.current?.getActiveIndex?.() ?? -1;\n if (activeIndex >= 0 && isOpen) {\n // Let the dropdown handle the selection\n dropdownRef.current?.selectActive?.();\n } else if (currentQuery.trim()) {\n // No active selection, submit the current query\n onSearch?.(currentQuery.trim());\n if (enableRecentSearches) {\n addRecentSearch(currentQuery.trim());\n setRecentSearches(getRecentSearches().slice(0, maxRecentSearches));\n }\n // Track search submit analytics\n if (enableAnalytics) {\n analytics.trackSearchSubmit(currentQuery.trim(), false);\n }\n setIsOpen(false);\n }\n } else if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n // Open dropdown if not already open\n if (!isOpen && (suggestions.length > 0 || recentSearches.length > 0)) {\n setIsOpen(true);\n }\n if (e.key === 'ArrowDown') {\n dropdownRef.current?.navigateNext?.();\n } else {\n dropdownRef.current?.navigatePrevious?.();\n }\n }\n }, [currentQuery, onSearch, enableRecentSearches, maxRecentSearches, isOpen, suggestions.length, recentSearches.length, enableAnalytics, analytics]);\n\n const handleSuggestionSelect = useCallback((suggestion: any, index: number) => {\n const text = suggestion.query || suggestion.text || suggestion.objectID || '';\n \n if (value === undefined) {\n setQuery(text);\n }\n \n onQueryChange?.(text);\n onSuggestionSelect?.(suggestion, index);\n \n if (enableRecentSearches && text) {\n addRecentSearch(text);\n setRecentSearches(getRecentSearches().slice(0, maxRecentSearches));\n }\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n analytics.trackSuggestionClick({\n suggestion: {\n query: text,\n objectID: suggestion.objectID || suggestion.id,\n popularity: suggestion.popularity,\n },\n position: index,\n section: 'suggestions',\n query: currentQuery,\n totalSuggestions: suggestions.length,\n });\n analytics.trackSearchSubmit(text, true, suggestion);\n }\n \n onSearch?.(text);\n setIsOpen(false);\n }, [value, onQueryChange, onSuggestionSelect, enableRecentSearches, maxRecentSearches, enableAnalytics, onSearch, analytics, currentQuery, suggestions.length]);\n\n const handleProductClick = useCallback((product: any, index: number) => {\n onProductClick?.(product, index);\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n analytics.trackProductClick({\n product: {\n id: product.id || product.objectID,\n objectID: product.objectID || product.id,\n title: product.title || product.name,\n image: product.image,\n price: product.price,\n },\n position: index,\n section: activeTab !== 'all' ? 'filtered_tab' : 'products',\n tabId: activeTab !== 'all' ? activeTab : undefined,\n query: currentQuery,\n });\n }\n }, [onProductClick, enableAnalytics, analytics, activeTab, currentQuery]);\n\n const handleCategoryClick = useCallback((category: any, index: number) => {\n onCategoryClick?.(category, index);\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n analytics.trackCategoryClick({\n value: category.label || category.value || category.id,\n count: category.count,\n path: category.path,\n }, currentQuery);\n }\n }, [onCategoryClick, enableAnalytics, analytics, currentQuery]);\n\n const handleTabChange = useCallback((tabId: string) => {\n console.log('Seekora: Tab changed to', tabId);\n setActiveTab(tabId);\n onTabChange?.(tabId);\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n const tab = tabs.find(t => t.id === tabId);\n if (tab) {\n analytics.trackTabSelect({\n id: tab.id,\n label: tab.label,\n filter: tab.filter,\n products: tab.products,\n nb_hits: tab.nb_hits,\n }, currentQuery);\n }\n }\n }, [onTabChange, enableAnalytics, analytics, tabs, currentQuery]);\n\n const handleRecentClick = useCallback((text: string) => {\n if (value === undefined) {\n setQuery(text);\n }\n onQueryChange?.(text);\n fetchSuggestions(text);\n \n // Track analytics via the proper hook (sends to API)\n if (enableAnalytics) {\n analytics.trackRecentSearchClick({\n query: text,\n timestamp: Date.now(),\n });\n }\n }, [value, onQueryChange, fetchSuggestions, enableAnalytics, analytics]);\n\n const handleRecentRemove = useCallback((text: string) => {\n removeRecentSearch(text);\n setRecentSearches(getRecentSearches().slice(0, maxRecentSearches));\n }, [maxRecentSearches]);\n\n const handleClear = useCallback(() => {\n if (value === undefined) {\n setQuery('');\n }\n onQueryChange?.('');\n setSuggestions([]);\n setProducts([]);\n setTabs([]);\n inputRef.current?.focus();\n }, [value, onQueryChange]);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n // Track dropdown close\n if (enableAnalytics) {\n analytics.trackDropdownClose(currentQuery);\n }\n }, [enableAnalytics, analytics, currentQuery]);\n\n // ========================================================================\n // Imperative Handle\n // ========================================================================\n\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus(),\n blur: () => inputRef.current?.blur(),\n clear: handleClear,\n getQuery: () => currentQuery,\n setQuery: (q) => {\n if (value === undefined) {\n setQuery(q);\n }\n onQueryChange?.(q);\n },\n openDropdown: () => setIsOpen(true),\n closeDropdown: () => setIsOpen(false),\n refresh: () => fetchSuggestions(currentQuery),\n clearCache: () => cache?.clear(),\n getCacheStats: () => cache?.getStats() ?? null,\n }), [currentQuery, value, onQueryChange, handleClear, fetchSuggestions, cache]);\n\n // ========================================================================\n // Render\n // ========================================================================\n\n const DropdownComponent = VariantComponents[actualVariant] || AmazonDropdown;\n\n // Get products for current tab - always derive from tabs to ensure consistency\n const currentTabProducts = useMemo(() => {\n console.log('Seekora: Computing products for tab', activeTab, 'from', tabs.length, 'tabs');\n \n if (tabs.length === 0) {\n return products; // Fallback to products state if no tabs\n }\n \n if (activeTab === 'all') {\n // For 'all' tab, use first tab's products or combined\n const firstTabProducts = tabs[0]?.products || [];\n return firstTabProducts.length > 0 ? firstTabProducts : products;\n }\n \n // Find the specific tab\n const tab = tabs.find(t => t.id === activeTab);\n if (tab?.products && tab.products.length > 0) {\n console.log('Seekora: Found', tab.products.length, 'products for tab', activeTab);\n return tab.products;\n }\n \n // Fallback\n return products;\n }, [activeTab, tabs, products]);\n\n return (\n <div\n ref={containerRef}\n className={cx('seekora-suggestion-search', className)}\n style={mergeStyles(styles.container, style)}\n >\n {/* Search Input */}\n <div\n style={mergeStyles(\n styles.inputWrapper,\n isFocused ? styles.inputWrapperFocused : undefined\n )}\n >\n <div style={styles.searchIcon}>\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\" width=\"20\" height=\"20\">\n <path fillRule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z\" clipRule=\"evenodd\"/>\n </svg>\n </div>\n \n <input\n ref={inputRef}\n type=\"text\"\n value={currentQuery}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className={inputClassName}\n style={styles.input}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label=\"Search\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n />\n\n {loading && <div style={styles.loadingSpinner} />}\n\n {currentQuery && !loading && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n aria-label=\"Clear search\"\n >\n ×\n </button>\n )}\n </div>\n\n {/* Dropdown */}\n {isOpen && (\n <DropdownComponent\n query={currentQuery}\n isOpen={isOpen}\n loading={loading}\n suggestions={suggestions}\n products={currentTabProducts}\n categories={tabs.map(t => ({ id: t.id, label: t.label, count: t.nb_hits }))}\n recentSearches={recentSearches.map(r => typeof r === 'string' ? r : r.query)}\n trendingSearches={trendingSearches}\n filteredTabs={tabs}\n activeTab={activeTab}\n suggestionFields={suggestionFields}\n productFields={productFields}\n theme={themeToDropdownConfig(effectiveTheme) ?? (effectiveTheme as DropdownThemeConfig)}\n width={dropdownWidth || '100%'}\n maxHeight={dropdownMaxHeight}\n zIndex={zIndex}\n analytics={{\n enabled: enableAnalytics,\n trackSuggestionClicks: analyticsConfig?.trackSuggestionClicks ?? true,\n trackProductClicks: analyticsConfig?.trackProductClicks ?? true,\n trackImpressions: analyticsConfig?.trackImpressions ?? true,\n trackCategoryClicks: analyticsConfig?.trackCategoryClicks ?? true,\n trackBrandClicks: analyticsConfig?.trackBrandClicks ?? true,\n trackSearchSubmit: analyticsConfig?.trackSearchSubmit ?? true,\n tags: analyticsConfig?.tags ?? analyticsTags,\n }}\n onSuggestionSelect={handleSuggestionSelect}\n onProductClick={handleProductClick}\n onCategoryClick={handleCategoryClick}\n onTabChange={handleTabChange}\n onRecentClick={handleRecentClick}\n onRecentRemove={handleRecentRemove}\n onClose={handleClose}\n />\n )}\n </div>\n );\n }\n);\n\nexport default SuggestionSearchBar;\n","/**\n * Query Suggestions Components\n * \n * Premium, configurable, data-agnostic dropdown components\n * for search suggestions UI\n */\n\n// ============================================================================\n// Main Component (Easy Integration - Handles Everything)\n// ============================================================================\nexport { SuggestionSearchBar, default as SuggestionSearch } from './SuggestionSearchBar';\nexport type { SuggestionSearchBarProps, SuggestionSearchBarRef } from './SuggestionSearchBar';\n\n// ============================================================================\n// Types\n// ============================================================================\nexport * from './types';\n\n// ============================================================================\n// Utilities\n// ============================================================================\nexport * from './utils';\n\n// ============================================================================\n// Responsive Utilities & Styles\n// ============================================================================\nexport {\n useResponsive,\n breakpoints,\n mediaQueries,\n touchTargets,\n responsiveSpacing,\n responsiveTypography,\n injectResponsiveStyles,\n type ResponsiveState,\n} from './styles/responsive';\n\nexport {\n globalResponsiveCSS,\n injectGlobalResponsiveStyles,\n useInjectResponsiveStyles,\n} from './styles';\n\n// ============================================================================\n// Components\n// ============================================================================\n\n// Amazon-style dropdown with department scoping\nexport { AmazonDropdown } from './AmazonDropdown';\nexport type { AmazonDropdownProps } from './AmazonDropdown';\n\n// Google-style clean search suggestions\nexport { GoogleDropdown } from './GoogleDropdown';\nexport type { GoogleDropdownProps } from './GoogleDropdown';\n\n// Pinterest-style visual discovery\nexport { PinterestDropdown } from './PinterestDropdown';\nexport type { PinterestDropdownProps } from './PinterestDropdown';\n\n// macOS Spotlight / Command palette style\nexport { SpotlightDropdown } from './SpotlightDropdown';\nexport type { SpotlightDropdownProps } from './SpotlightDropdown';\n\n// Shopify-style modern e-commerce\nexport { ShopifyDropdown } from './ShopifyDropdown';\nexport type { ShopifyDropdownProps } from './ShopifyDropdown';\n\n// Mobile-first bottom sheet\nexport { MobileSheetDropdown } from './MobileSheetDropdown';\nexport type { MobileSheetDropdownProps } from './MobileSheetDropdown';\n\n// Minimal/editorial style\nexport { MinimalDropdown } from './MinimalDropdown';\nexport type { MinimalDropdownProps } from './MinimalDropdown';\n\n// ============================================================================\n// Variant Map for easy access\n// ============================================================================\nimport { AmazonDropdown } from './AmazonDropdown';\nimport { GoogleDropdown } from './GoogleDropdown';\nimport { PinterestDropdown } from './PinterestDropdown';\nimport { SpotlightDropdown } from './SpotlightDropdown';\nimport { ShopifyDropdown } from './ShopifyDropdown';\nimport { MobileSheetDropdown } from './MobileSheetDropdown';\nimport { MinimalDropdown } from './MinimalDropdown';\n\nexport const SuggestionDropdownVariants = {\n amazon: AmazonDropdown,\n google: GoogleDropdown,\n pinterest: PinterestDropdown,\n spotlight: SpotlightDropdown,\n shopify: ShopifyDropdown,\n 'mobile-sheet': MobileSheetDropdown,\n minimal: MinimalDropdown,\n} as const;\n\nexport type SuggestionDropdownVariant = keyof typeof SuggestionDropdownVariants;\n","/**\n * useSeekoraSearch Hook\n * \n * Hook for performing searches with the Seekora SDK\n */\n\nimport { useState, useCallback } from 'react';\nimport type { SeekoraClient, SearchOptions, SearchResponse, SearchContext } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\n\nexport interface UseSeekoraSearchOptions {\n client: SeekoraClient;\n autoTrack?: boolean;\n}\n\nexport interface UseSeekoraSearchReturn {\n search: (options: SearchOptions) => Promise<SearchResponse | null>;\n results: SearchResponse | null;\n loading: boolean;\n error: Error | null;\n context: SearchContext | null;\n clearResults: () => void;\n}\n\nexport const useSeekoraSearch = ({\n client,\n autoTrack = true,\n}: UseSeekoraSearchOptions): UseSeekoraSearchReturn => {\n const [results, setResults] = useState<SearchResponse | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [context, setContext] = useState<SearchContext | null>(null);\n\n const search = useCallback(async (options: SearchOptions) => {\n setLoading(true);\n setError(null);\n\n const query = options.q || '';\n log.verbose('useSeekoraSearch: Starting search', { query, options });\n\n try {\n const { q, ...restOptions } = options;\n const query = typeof q === 'string' ? q : '';\n const response = await client.search(query, restOptions);\n \n log.info('useSeekoraSearch: Search completed', {\n query,\n resultsCount: Array.isArray(response?.results) ? response.results.length : 0,\n hasContext: !!response?.context,\n });\n \n setResults(response);\n \n // Extract context from response\n if (response.context != null) {\n setContext(response.context as SearchContext);\n }\n\n return response;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n log.error('useSeekoraSearch: Search failed', {\n query,\n error: error.message,\n stack: error.stack,\n });\n setError(error);\n setResults(null);\n setContext(null);\n return null;\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n const clearResults = useCallback(() => {\n setResults(null);\n setError(null);\n setContext(null);\n }, []);\n\n return {\n search,\n results,\n loading,\n error,\n context,\n clearResults,\n };\n};\n\n","/**\n * useAnalytics Hook\n * \n * Hook for tracking analytics events with the Seekora SDK\n */\n\nimport { useCallback } from 'react';\nimport type { SeekoraClient, SearchContext, ExtendedEventPayload, DataTypesEventPayload } from '@seekora-ai/search-sdk';\nimport { log } from '@seekora-ai/ui-sdk-core';\n\nexport interface UseAnalyticsOptions {\n client: SeekoraClient;\n enabled?: boolean;\n}\n\nexport interface UseAnalyticsReturn {\n trackEvent: (eventType: string, payload: Partial<DataTypesEventPayload>, context?: SearchContext | Partial<SearchContext>) => Promise<void>;\n trackClick: (resultId: string, result: any, context?: SearchContext | Partial<SearchContext>, position?: number) => Promise<void>;\n trackConversion: (resultId: string, result: any, value?: number, currency?: string, context?: SearchContext | Partial<SearchContext>) => Promise<void>;\n trackBatch: (events: (Partial<DataTypesEventPayload> & { event_name?: string })[], context?: SearchContext) => Promise<void>;\n}\n\nexport const useAnalytics = ({\n client,\n enabled = true,\n}: UseAnalyticsOptions): UseAnalyticsReturn => {\n const trackEvent = useCallback(async (\n eventType: string,\n payload: Partial<DataTypesEventPayload>,\n context?: SearchContext | Partial<SearchContext>\n ) => {\n if (!enabled) return;\n\n try {\n const eventPayload: Partial<DataTypesEventPayload> = {\n event_name: eventType,\n ...payload,\n };\n\n await client.trackEvent?.(eventPayload, context);\n } catch (err) {\n log.error('Failed to track event:', err);\n }\n }, [client, enabled]);\n\n const trackClick = useCallback(async (\n resultId: string,\n result: any,\n context?: SearchContext | Partial<SearchContext>,\n position?: number\n ) => {\n if (!enabled) return;\n\n await trackEvent('product_click', {\n clicked_item_id: resultId,\n metadata: {\n result: result,\n ...(position !== undefined && { position }),\n },\n }, context);\n }, [trackEvent, enabled]);\n\n const trackConversion = useCallback(async (\n resultId: string,\n result: any,\n value?: number,\n currency?: string,\n context?: SearchContext | Partial<SearchContext>\n ) => {\n if (!enabled) return;\n\n await trackEvent('conversion', {\n clicked_item_id: resultId,\n value: value,\n currency: currency,\n metadata: {\n result: result,\n },\n }, context);\n }, [trackEvent, enabled]);\n\n const trackBatch = useCallback(async (\n events: (Partial<DataTypesEventPayload> & { event_name?: string })[],\n context?: SearchContext\n ) => {\n if (!enabled || events.length === 0) return;\n\n try {\n await client.trackEvents?.(events, context);\n } catch (err) {\n log.error('Failed to track batch events:', err);\n }\n }, [client, enabled]);\n\n return {\n trackEvent,\n trackClick,\n trackConversion,\n trackBatch,\n };\n};\n\n","/**\n * useSmartSuggestions Hook\n * \n * AI-enhanced query suggestions with intent understanding\n * Provides context-aware suggestions based on user behavior and query patterns\n */\n\nimport { useState, useEffect, useCallback, useMemo, useRef } from 'react';\nimport { useSearchContext } from '../components/SearchProvider';\n\nexport interface SmartSuggestion {\n text: string;\n type: 'query' | 'correction' | 'expansion' | 'related' | 'trending';\n confidence: number;\n metadata?: {\n intent?: string;\n category?: string;\n correctedFrom?: string;\n expandedTo?: string[];\n };\n}\n\nexport interface SmartSuggestionsOptions {\n /** Minimum query length */\n minQueryLength?: number;\n /** Maximum suggestions to return */\n maxSuggestions?: number;\n /** Debounce delay in ms */\n debounceMs?: number;\n /** Enable spell correction */\n enableSpellCorrection?: boolean;\n /** Enable query expansion */\n enableQueryExpansion?: boolean;\n /** Enable intent detection */\n enableIntentDetection?: boolean;\n /** Include trending queries when query is empty */\n includeTrending?: boolean;\n /** User context for personalization */\n userContext?: {\n recentSearches?: string[];\n preferences?: Record<string, any>;\n };\n}\n\nexport interface UseSmartSuggestionsReturn {\n suggestions: SmartSuggestion[];\n loading: boolean;\n error: Error | null;\n /** Detected intent from the query */\n detectedIntent: string | null;\n /** Suggested corrections if query has typos */\n corrections: string[];\n /** Expanded query terms */\n expansions: string[];\n /** Process a query for smart suggestions */\n getSuggestions: (query: string) => Promise<SmartSuggestion[]>;\n /** Clear current suggestions */\n clear: () => void;\n}\n\n/**\n * Pattern-based intent detection (client-side fallback)\n */\nfunction detectIntent(query: string): { intent: string; confidence: number } | null {\n const patterns: Array<{ pattern: RegExp; intent: string }> = [\n { pattern: /^(buy|purchase|order|get)\\s+/i, intent: 'purchase' },\n { pattern: /^(find|search|looking for|where)\\s+/i, intent: 'search' },\n { pattern: /^(compare|vs|versus)\\s+/i, intent: 'compare' },\n { pattern: /^(how (to|do)|what is|why)\\s+/i, intent: 'informational' },\n { pattern: /under\\s*\\$?\\d+|less than\\s*\\$?\\d+|cheap|affordable/i, intent: 'price_sensitive' },\n { pattern: /best|top|recommended|popular/i, intent: 'recommendation' },\n { pattern: /\\d+\\s*(gb|tb|inch|cm|mm|kg|lb)/i, intent: 'specification' },\n { pattern: /(red|blue|green|black|white|pink|purple|yellow)\\s+/i, intent: 'color_preference' },\n { pattern: /(size|small|medium|large|xl|xxl)\\s+/i, intent: 'size_preference' },\n ];\n\n for (const { pattern, intent } of patterns) {\n if (pattern.test(query)) {\n return { intent, confidence: 0.8 };\n }\n }\n\n return null;\n}\n\n/**\n * Simple Levenshtein distance for spell checking\n */\nfunction levenshteinDistance(a: string, b: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n for (let j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1\n );\n }\n }\n }\n\n return matrix[b.length][a.length];\n}\n\n/**\n * Find potential corrections from a dictionary\n */\nfunction findCorrections(\n query: string,\n dictionary: string[],\n maxDistance: number = 2\n): string[] {\n const words = query.toLowerCase().split(/\\s+/);\n const corrections: string[] = [];\n\n words.forEach(word => {\n if (word.length < 3) return;\n\n dictionary.forEach(dictWord => {\n const distance = levenshteinDistance(word, dictWord.toLowerCase());\n if (distance > 0 && distance <= maxDistance && distance < word.length / 2) {\n const corrected = query.replace(new RegExp(word, 'gi'), dictWord);\n if (!corrections.includes(corrected)) {\n corrections.push(corrected);\n }\n }\n });\n });\n\n return corrections.slice(0, 3);\n}\n\n/**\n * Expand query with synonyms and related terms\n */\nfunction expandQuery(query: string): string[] {\n const expansions: Record<string, string[]> = {\n phone: ['smartphone', 'mobile', 'cellphone'],\n laptop: ['notebook', 'computer', 'pc'],\n tv: ['television', 'smart tv', 'monitor'],\n headphones: ['earbuds', 'earphones', 'headset'],\n shoes: ['footwear', 'sneakers', 'boots'],\n shirt: ['top', 'blouse', 'tee'],\n pants: ['trousers', 'jeans', 'bottoms'],\n cheap: ['affordable', 'budget', 'inexpensive'],\n best: ['top-rated', 'popular', 'recommended'],\n };\n\n const queryLower = query.toLowerCase();\n const expanded: string[] = [];\n\n Object.entries(expansions).forEach(([term, synonyms]) => {\n if (queryLower.includes(term)) {\n synonyms.forEach(syn => {\n const exp = query.replace(new RegExp(term, 'gi'), syn);\n if (!expanded.includes(exp)) {\n expanded.push(exp);\n }\n });\n }\n });\n\n return expanded.slice(0, 3);\n}\n\nexport function useSmartSuggestions(\n query: string,\n options: SmartSuggestionsOptions = {}\n): UseSmartSuggestionsReturn {\n const {\n minQueryLength = 1,\n maxSuggestions = 10,\n debounceMs = 200,\n enableSpellCorrection = true,\n enableQueryExpansion = true,\n enableIntentDetection = true,\n includeTrending = true,\n userContext,\n } = options;\n\n const { stateManager } = useSearchContext();\n const [suggestions, setSuggestions] = useState<SmartSuggestion[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [detectedIntent, setDetectedIntent] = useState<string | null>(null);\n const [corrections, setCorrections] = useState<string[]>([]);\n const [expansions, setExpansions] = useState<string[]>([]);\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Sample dictionary for spell checking (in production, this would come from the API)\n const dictionary = useMemo(() => [\n 'phone', 'laptop', 'computer', 'tablet', 'headphones', 'camera',\n 'television', 'speaker', 'watch', 'keyboard', 'mouse', 'monitor',\n 'shirt', 'pants', 'shoes', 'jacket', 'dress', 'skirt', 'sweater',\n 'electronics', 'clothing', 'accessories', 'furniture', 'appliances',\n ], []);\n\n const processQuery = useCallback(async (q: string): Promise<SmartSuggestion[]> => {\n const results: SmartSuggestion[] = [];\n\n // Detect intent\n if (enableIntentDetection) {\n const intent = detectIntent(q);\n if (intent) {\n setDetectedIntent(intent.intent);\n } else {\n setDetectedIntent(null);\n }\n }\n\n // Find spell corrections\n if (enableSpellCorrection && q.length >= 3) {\n const correctionResults = findCorrections(q, dictionary);\n setCorrections(correctionResults);\n \n correctionResults.forEach(correction => {\n results.push({\n text: correction,\n type: 'correction',\n confidence: 0.9,\n metadata: { correctedFrom: q },\n });\n });\n }\n\n // Expand query\n if (enableQueryExpansion) {\n const expansionResults = expandQuery(q);\n setExpansions(expansionResults);\n \n expansionResults.forEach(exp => {\n results.push({\n text: exp,\n type: 'expansion',\n confidence: 0.7,\n metadata: { expandedTo: [exp] },\n });\n });\n }\n\n // Add the original query as a suggestion\n results.unshift({\n text: q,\n type: 'query',\n confidence: 1.0,\n });\n\n // Add related suggestions based on context\n if (userContext?.recentSearches) {\n userContext.recentSearches\n .filter(s => s.toLowerCase().includes(q.toLowerCase()) && s !== q)\n .slice(0, 2)\n .forEach(s => {\n results.push({\n text: s,\n type: 'related',\n confidence: 0.6,\n });\n });\n }\n\n return results.slice(0, maxSuggestions);\n }, [dictionary, enableIntentDetection, enableSpellCorrection, enableQueryExpansion, maxSuggestions, userContext]);\n\n const getSuggestions = useCallback(async (q: string): Promise<SmartSuggestion[]> => {\n if (q.length < minQueryLength) {\n return [];\n }\n return processQuery(q);\n }, [minQueryLength, processQuery]);\n\n // Debounced effect\n useEffect(() => {\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n\n if (query.length < minQueryLength) {\n setSuggestions([]);\n setCorrections([]);\n setExpansions([]);\n setDetectedIntent(null);\n return;\n }\n\n setLoading(true);\n\n debounceTimer.current = setTimeout(async () => {\n try {\n const results = await processQuery(query);\n setSuggestions(results);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setSuggestions([]);\n } finally {\n setLoading(false);\n }\n }, debounceMs);\n\n return () => {\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n }\n };\n }, [query, minQueryLength, debounceMs, processQuery]);\n\n const clear = useCallback(() => {\n setSuggestions([]);\n setCorrections([]);\n setExpansions([]);\n setDetectedIntent(null);\n setError(null);\n }, []);\n\n return {\n suggestions,\n loading,\n error,\n detectedIntent,\n corrections,\n expansions,\n getSuggestions,\n clear,\n };\n}\n","/**\n * useNaturalLanguageFilters Hook\n * \n * Convert natural language queries to structured filters\n * Examples:\n * - \"red shirts under $50\" → color: red, category: shirts, price: <= 50\n * - \"size large blue jeans\" → size: L, color: blue, category: jeans\n */\n\nimport { useMemo, useCallback } from 'react';\nimport { useSearchState } from './useSearchState';\n\nexport interface ParsedFilter {\n field: string;\n value: string;\n operator: '=' | '>' | '<' | '>=' | '<=' | 'contains';\n confidence: number;\n matchedText: string;\n}\n\nexport interface NaturalLanguageResult {\n /** Cleaned query with filter terms removed */\n cleanedQuery: string;\n /** Extracted filters */\n filters: ParsedFilter[];\n /** Original query */\n originalQuery: string;\n /** Whether any filters were detected */\n hasFilters: boolean;\n}\n\nexport interface NaturalLanguageFiltersOptions {\n /** Custom field mappings */\n fieldMappings?: Record<string, string>;\n /** Custom value mappings */\n valueMappings?: Record<string, Record<string, string>>;\n /** Whether to auto-apply filters to search state */\n autoApply?: boolean;\n /** Currency symbol for price parsing */\n currencySymbol?: string;\n}\n\n// Default patterns for parsing natural language\nconst DEFAULT_PATTERNS = {\n // Price patterns\n price: [\n { pattern: /under\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: '<=' as const, field: 'price' },\n { pattern: /less than\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: '<' as const, field: 'price' },\n { pattern: /over\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: '>=' as const, field: 'price' },\n { pattern: /more than\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: '>' as const, field: 'price' },\n { pattern: /\\$(\\d+(?:\\.\\d{2})?)\\s*-\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: 'range' as const, field: 'price' },\n { pattern: /between\\s*\\$?(\\d+(?:\\.\\d{2})?)\\s*and\\s*\\$?(\\d+(?:\\.\\d{2})?)/i, operator: 'range' as const, field: 'price' },\n { pattern: /\\$(\\d+(?:\\.\\d{2})?)/i, operator: '<=' as const, field: 'price' },\n ],\n \n // Color patterns\n colors: ['red', 'blue', 'green', 'black', 'white', 'pink', 'purple', 'yellow', 'orange', 'brown', 'gray', 'grey', 'navy', 'beige', 'gold', 'silver'],\n \n // Size patterns\n sizes: {\n 'extra small': 'XS',\n 'xs': 'XS',\n 'small': 'S',\n 's': 'S',\n 'medium': 'M',\n 'm': 'M',\n 'large': 'L',\n 'l': 'L',\n 'extra large': 'XL',\n 'xl': 'XL',\n 'xxl': 'XXL',\n '2xl': 'XXL',\n 'xxxl': 'XXXL',\n '3xl': 'XXXL',\n },\n \n // Brand patterns (common examples)\n brandIndicators: ['by', 'from', 'brand'],\n \n // Rating patterns\n ratings: [\n { pattern: /(\\d+)\\s*\\+?\\s*stars?/i, field: 'rating', operator: '>=' as const },\n { pattern: /rated\\s*(\\d+)/i, field: 'rating', operator: '>=' as const },\n { pattern: /top\\s*rated/i, field: 'rating', value: '4', operator: '>=' as const },\n ],\n \n // Availability patterns\n availability: [\n { pattern: /in\\s*stock/i, field: 'inStock', value: 'true' },\n { pattern: /available/i, field: 'inStock', value: 'true' },\n { pattern: /on\\s*sale/i, field: 'onSale', value: 'true' },\n ],\n};\n\nexport function useNaturalLanguageFilters(\n options: NaturalLanguageFiltersOptions = {}\n): {\n /** Parse a natural language query */\n parse: (query: string) => NaturalLanguageResult;\n /** Apply parsed filters to search state */\n applyFilters: (filters: ParsedFilter[]) => void;\n /** Parse and apply in one step */\n parseAndApply: (query: string) => NaturalLanguageResult;\n} {\n const {\n fieldMappings = {},\n valueMappings = {},\n autoApply = false,\n currencySymbol = '$',\n } = options;\n\n const { addRefinement, removeRefinement, clearRefinements, setQuery } = useSearchState();\n\n // Merge default patterns with custom mappings\n const patterns = useMemo(() => ({\n ...DEFAULT_PATTERNS,\n colors: [...DEFAULT_PATTERNS.colors, ...(valueMappings.color ? Object.keys(valueMappings.color) : [])],\n sizes: { ...DEFAULT_PATTERNS.sizes, ...(valueMappings.size || {}) },\n }), [valueMappings]);\n\n const parse = useCallback((query: string): NaturalLanguageResult => {\n const filters: ParsedFilter[] = [];\n let cleanedQuery = query;\n\n // Parse price filters\n for (const pricePattern of patterns.price) {\n const match = query.match(pricePattern.pattern);\n if (match) {\n if (pricePattern.operator === 'range' && match[2]) {\n // Handle price range\n filters.push({\n field: fieldMappings.price || 'price',\n value: `>=${match[1]}`,\n operator: '>=',\n confidence: 0.95,\n matchedText: match[0],\n });\n filters.push({\n field: fieldMappings.price || 'price',\n value: `<=${match[2]}`,\n operator: '<=',\n confidence: 0.95,\n matchedText: match[0],\n });\n } else if (match[1]) {\n filters.push({\n field: fieldMappings.price || 'price',\n value: `${pricePattern.operator}${match[1]}`,\n operator: pricePattern.operator as any,\n confidence: 0.95,\n matchedText: match[0],\n });\n }\n cleanedQuery = cleanedQuery.replace(match[0], ' ');\n break; // Only match first price pattern\n }\n }\n\n // Parse colors\n const colorRegex = new RegExp(`\\\\b(${patterns.colors.join('|')})\\\\b`, 'gi');\n const colorMatches = query.match(colorRegex);\n if (colorMatches) {\n colorMatches.forEach(color => {\n const normalizedColor = valueMappings.color?.[color.toLowerCase()] || color.toLowerCase();\n filters.push({\n field: fieldMappings.color || 'color',\n value: normalizedColor,\n operator: '=',\n confidence: 0.9,\n matchedText: color,\n });\n cleanedQuery = cleanedQuery.replace(new RegExp(`\\\\b${color}\\\\b`, 'gi'), ' ');\n });\n }\n\n // Parse sizes\n const sizeEntries = Object.entries(patterns.sizes);\n for (const [sizeText, sizeValue] of sizeEntries) {\n const sizeRegex = new RegExp(`\\\\b${sizeText}\\\\b`, 'gi');\n if (sizeRegex.test(query)) {\n filters.push({\n field: fieldMappings.size || 'size',\n value: sizeValue,\n operator: '=',\n confidence: 0.85,\n matchedText: sizeText,\n });\n cleanedQuery = cleanedQuery.replace(sizeRegex, ' ');\n break; // Only match first size\n }\n }\n\n // Parse ratings\n for (const ratingPattern of patterns.ratings) {\n if ('value' in ratingPattern) {\n if (ratingPattern.pattern.test(query)) {\n filters.push({\n field: fieldMappings.rating || ratingPattern.field,\n value: `${ratingPattern.operator}${ratingPattern.value}`,\n operator: ratingPattern.operator,\n confidence: 0.8,\n matchedText: query.match(ratingPattern.pattern)?.[0] || '',\n });\n cleanedQuery = cleanedQuery.replace(ratingPattern.pattern, ' ');\n }\n } else {\n const match = query.match(ratingPattern.pattern);\n if (match && match[1]) {\n filters.push({\n field: fieldMappings.rating || ratingPattern.field,\n value: `${ratingPattern.operator}${match[1]}`,\n operator: ratingPattern.operator,\n confidence: 0.85,\n matchedText: match[0],\n });\n cleanedQuery = cleanedQuery.replace(match[0], ' ');\n }\n }\n }\n\n // Parse availability\n for (const availPattern of patterns.availability) {\n if (availPattern.pattern.test(query)) {\n filters.push({\n field: fieldMappings[availPattern.field] || availPattern.field,\n value: availPattern.value,\n operator: '=',\n confidence: 0.9,\n matchedText: query.match(availPattern.pattern)?.[0] || '',\n });\n cleanedQuery = cleanedQuery.replace(availPattern.pattern, ' ');\n }\n }\n\n // Clean up the query\n cleanedQuery = cleanedQuery\n .replace(/\\s+/g, ' ')\n .trim();\n\n return {\n cleanedQuery,\n filters,\n originalQuery: query,\n hasFilters: filters.length > 0,\n };\n }, [patterns, fieldMappings, valueMappings]);\n\n const applyFilters = useCallback((filters: ParsedFilter[]) => {\n filters.forEach(filter => {\n addRefinement(filter.field, filter.value, false);\n });\n // Trigger search after all filters are added\n if (filters.length > 0) {\n // The last addRefinement with triggerSearch=true would be called\n // But we add them all with false and rely on the query change to trigger\n }\n }, [addRefinement]);\n\n const parseAndApply = useCallback((query: string): NaturalLanguageResult => {\n const result = parse(query);\n \n if (result.hasFilters) {\n applyFilters(result.filters);\n // Update the query to the cleaned version\n if (result.cleanedQuery !== query) {\n setQuery(result.cleanedQuery, true);\n }\n }\n \n return result;\n }, [parse, applyFilters, setQuery]);\n\n return {\n parse,\n applyFilters,\n parseAndApply,\n };\n}\n\n/**\n * Utility to format parsed filters for display\n */\nexport function formatParsedFilters(filters: ParsedFilter[]): string {\n return filters\n .map(f => `${f.field}: ${f.value}`)\n .join(', ');\n}\n","/**\n * Dark Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const darkTheme: Theme = {\n colors: {\n primary: '#0d6efd',\n secondary: '#6c757d',\n background: '#1a1a1a',\n text: '#ffffff',\n border: '#333333',\n hover: '#2a2a2a',\n focus: '#0d6efd',\n error: '#dc3545',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.25rem',\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '1rem',\n large: '1.5rem',\n },\n borderRadius: '0.25rem',\n shadows: {\n small: '0 1px 3px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.7)',\n medium: '0 3px 6px rgba(0, 0, 0, 0.6), 0 3px 6px rgba(0, 0, 0, 0.8)',\n large: '0 10px 20px rgba(0, 0, 0, 0.7), 0 6px 6px rgba(0, 0, 0, 0.9)',\n },\n};\n\n\n","/**\n * Minimal Theme\n */\n\nimport type { Theme } from '@seekora-ai/ui-sdk-types';\n\nexport const minimalTheme: Theme = {\n colors: {\n primary: '#000000',\n secondary: '#666666',\n background: '#ffffff',\n text: '#000000',\n border: '#e0e0e0',\n hover: '#f5f5f5',\n focus: '#000000',\n error: '#cc0000',\n },\n typography: {\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontSize: {\n small: '0.875rem',\n medium: '1rem',\n large: '1.125rem',\n },\n },\n spacing: {\n small: '0.5rem',\n medium: '0.75rem',\n large: '1rem',\n },\n borderRadius: '0',\n shadows: {\n small: 'none',\n medium: 'none',\n large: 'none',\n },\n};\n\n\n","/**\n * Query Suggestions Theme System\n * \n * Provides comprehensive theming for query suggestions components including:\n * - CSS variables for easy customization\n * - Pre-built theme presets (light, dark, minimal, branded)\n * - Component-specific style generators\n * - Responsive utilities\n */\n\nimport type { Theme, ThemeConfig } from './types';\n\n// ============================================================================\n// CSS Variable Definitions\n// ============================================================================\n\nexport interface SuggestionsThemeVariables {\n // Colors\n '--seekora-bg-surface': string;\n '--seekora-bg-secondary': string;\n '--seekora-bg-tertiary': string;\n '--seekora-bg-hover': string;\n '--seekora-text-primary': string;\n '--seekora-text-secondary': string;\n '--seekora-text-tertiary': string;\n '--seekora-border-color': string;\n '--seekora-primary': string;\n '--seekora-primary-light': string;\n '--seekora-primary-dark': string;\n '--seekora-highlight-bg': string;\n '--seekora-success': string;\n '--seekora-warning': string;\n '--seekora-error': string;\n \n // Typography\n '--seekora-font-family': string;\n '--seekora-font-size-xs': string;\n '--seekora-font-size-sm': string;\n '--seekora-font-size-base': string;\n '--seekora-font-size-lg': string;\n '--seekora-font-weight-normal': string;\n '--seekora-font-weight-medium': string;\n '--seekora-font-weight-semibold': string;\n '--seekora-font-weight-bold': string;\n '--seekora-line-height-tight': string;\n '--seekora-line-height-normal': string;\n '--seekora-line-height-relaxed': string;\n \n // Spacing\n '--seekora-spacing-xs': string;\n '--seekora-spacing-sm': string;\n '--seekora-spacing-md': string;\n '--seekora-spacing-lg': string;\n '--seekora-spacing-xl': string;\n \n // Border radius\n '--seekora-border-radius-sm': string;\n '--seekora-border-radius': string;\n '--seekora-border-radius-lg': string;\n '--seekora-border-radius-xl': string;\n '--seekora-border-radius-full': string;\n \n // Shadows\n '--seekora-shadow-sm': string;\n '--seekora-shadow': string;\n '--seekora-shadow-md': string;\n '--seekora-shadow-lg': string;\n '--seekora-shadow-xl': string;\n \n // Transitions\n '--seekora-transition-fast': string;\n '--seekora-transition-normal': string;\n '--seekora-transition-slow': string;\n \n // Z-index\n '--seekora-z-dropdown': string;\n '--seekora-z-modal': string;\n '--seekora-z-tooltip': string;\n}\n\n// ============================================================================\n// Theme Presets\n// ============================================================================\n\nexport const lightThemeVariables: SuggestionsThemeVariables = {\n // Colors\n '--seekora-bg-surface': '#ffffff',\n '--seekora-bg-secondary': '#f9fafb',\n '--seekora-bg-tertiary': '#f3f4f6',\n '--seekora-bg-hover': '#f3f4f6',\n '--seekora-text-primary': '#111827',\n '--seekora-text-secondary': '#6b7280',\n '--seekora-text-tertiary': '#9ca3af',\n '--seekora-border-color': '#e5e7eb',\n '--seekora-primary': '#3b82f6',\n '--seekora-primary-light': '#eff6ff',\n '--seekora-primary-dark': '#1d4ed8',\n '--seekora-highlight-bg': '#fef3c7',\n '--seekora-success': '#10b981',\n '--seekora-warning': '#f59e0b',\n '--seekora-error': '#ef4444',\n \n // Typography\n '--seekora-font-family': '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n '--seekora-font-size-xs': '11px',\n '--seekora-font-size-sm': '12px',\n '--seekora-font-size-base': '14px',\n '--seekora-font-size-lg': '16px',\n '--seekora-font-weight-normal': '400',\n '--seekora-font-weight-medium': '500',\n '--seekora-font-weight-semibold': '600',\n '--seekora-font-weight-bold': '700',\n '--seekora-line-height-tight': '1.25',\n '--seekora-line-height-normal': '1.5',\n '--seekora-line-height-relaxed': '1.75',\n \n // Spacing\n '--seekora-spacing-xs': '4px',\n '--seekora-spacing-sm': '8px',\n '--seekora-spacing-md': '12px',\n '--seekora-spacing-lg': '16px',\n '--seekora-spacing-xl': '24px',\n \n // Border radius\n '--seekora-border-radius-sm': '4px',\n '--seekora-border-radius': '6px',\n '--seekora-border-radius-lg': '8px',\n '--seekora-border-radius-xl': '12px',\n '--seekora-border-radius-full': '9999px',\n \n // Shadows\n '--seekora-shadow-sm': '0 1px 2px 0 rgba(0, 0, 0, 0.05)',\n '--seekora-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n '--seekora-shadow-md': '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n '--seekora-shadow-lg': '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n '--seekora-shadow-xl': '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n \n // Transitions\n '--seekora-transition-fast': '100ms ease',\n '--seekora-transition-normal': '150ms ease',\n '--seekora-transition-slow': '300ms ease',\n \n // Z-index\n '--seekora-z-dropdown': '1000',\n '--seekora-z-modal': '1100',\n '--seekora-z-tooltip': '1200',\n};\n\nexport const darkThemeVariables: SuggestionsThemeVariables = {\n ...lightThemeVariables,\n // Override colors for dark mode\n '--seekora-bg-surface': '#1f2937',\n '--seekora-bg-secondary': '#111827',\n '--seekora-bg-tertiary': '#374151',\n '--seekora-bg-hover': '#374151',\n '--seekora-text-primary': '#f9fafb',\n '--seekora-text-secondary': '#d1d5db',\n '--seekora-text-tertiary': '#9ca3af',\n '--seekora-border-color': '#4b5563',\n '--seekora-primary': '#60a5fa',\n '--seekora-primary-light': '#1e3a5f',\n '--seekora-primary-dark': '#93c5fd',\n '--seekora-highlight-bg': '#854d0e',\n // Shadows for dark mode\n '--seekora-shadow-sm': '0 1px 2px 0 rgba(0, 0, 0, 0.3)',\n '--seekora-shadow': '0 1px 3px 0 rgba(0, 0, 0, 0.4), 0 1px 2px 0 rgba(0, 0, 0, 0.3)',\n '--seekora-shadow-md': '0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3)',\n '--seekora-shadow-lg': '0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -2px rgba(0, 0, 0, 0.3)',\n '--seekora-shadow-xl': '0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.4)',\n};\n\nexport const minimalThemeVariables: SuggestionsThemeVariables = {\n ...lightThemeVariables,\n // Minimal styling overrides\n '--seekora-border-color': '#f3f4f6',\n '--seekora-shadow-sm': 'none',\n '--seekora-shadow': '0 1px 2px 0 rgba(0, 0, 0, 0.03)',\n '--seekora-shadow-md': '0 2px 4px 0 rgba(0, 0, 0, 0.05)',\n '--seekora-shadow-lg': '0 4px 8px 0 rgba(0, 0, 0, 0.08)',\n '--seekora-shadow-xl': '0 8px 16px 0 rgba(0, 0, 0, 0.1)',\n '--seekora-border-radius-sm': '2px',\n '--seekora-border-radius': '4px',\n '--seekora-border-radius-lg': '6px',\n '--seekora-border-radius-xl': '8px',\n};\n\n// Brand color presets\nexport const brandPresets = {\n blue: {\n '--seekora-primary': '#3b82f6',\n '--seekora-primary-light': '#eff6ff',\n '--seekora-primary-dark': '#1d4ed8',\n },\n green: {\n '--seekora-primary': '#10b981',\n '--seekora-primary-light': '#ecfdf5',\n '--seekora-primary-dark': '#059669',\n },\n purple: {\n '--seekora-primary': '#8b5cf6',\n '--seekora-primary-light': '#f5f3ff',\n '--seekora-primary-dark': '#7c3aed',\n },\n red: {\n '--seekora-primary': '#ef4444',\n '--seekora-primary-light': '#fef2f2',\n '--seekora-primary-dark': '#dc2626',\n },\n orange: {\n '--seekora-primary': '#f97316',\n '--seekora-primary-light': '#fff7ed',\n '--seekora-primary-dark': '#ea580c',\n },\n teal: {\n '--seekora-primary': '#14b8a6',\n '--seekora-primary-light': '#f0fdfa',\n '--seekora-primary-dark': '#0d9488',\n },\n pink: {\n '--seekora-primary': '#ec4899',\n '--seekora-primary-light': '#fdf2f8',\n '--seekora-primary-dark': '#db2777',\n },\n};\n\n// ============================================================================\n// CSS Generation Utilities\n// ============================================================================\n\n/**\n * Generate CSS variables string from theme variables object\n */\nexport function generateCSSVariables(variables: Partial<SuggestionsThemeVariables>): string {\n return Object.entries(variables)\n .map(([key, value]) => `${key}: ${value};`)\n .join('\\n');\n}\n\n/**\n * Generate a style tag with CSS variables for a specific scope\n */\nexport function generateThemeStyleTag(\n variables: Partial<SuggestionsThemeVariables>,\n scope: string = ':root'\n): string {\n return `\n ${scope} {\n ${generateCSSVariables(variables)}\n }\n `;\n}\n\n/**\n * Create a complete theme object from variables\n */\nexport function createSuggestionsTheme(\n baseTheme: 'light' | 'dark' | 'minimal' = 'light',\n overrides: Partial<SuggestionsThemeVariables> = {},\n brandColor?: keyof typeof brandPresets\n): SuggestionsThemeVariables {\n const baseVariables = {\n light: lightThemeVariables,\n dark: darkThemeVariables,\n minimal: minimalThemeVariables,\n }[baseTheme];\n\n const brandOverrides = brandColor ? brandPresets[brandColor] : {};\n\n return {\n ...baseVariables,\n ...brandOverrides,\n ...overrides,\n };\n}\n\n// ============================================================================\n// Component Style Generators\n// ============================================================================\n\n/**\n * Generate styles for dropdown container\n */\nexport function getDropdownContainerStyles(theme: SuggestionsThemeVariables) {\n return {\n backgroundColor: `var(--seekora-bg-surface, ${theme['--seekora-bg-surface']})`,\n border: `1px solid var(--seekora-border-color, ${theme['--seekora-border-color']})`,\n borderRadius: `var(--seekora-border-radius-lg, ${theme['--seekora-border-radius-lg']})`,\n boxShadow: `var(--seekora-shadow-xl, ${theme['--seekora-shadow-xl']})`,\n fontFamily: `var(--seekora-font-family, ${theme['--seekora-font-family']})`,\n fontSize: `var(--seekora-font-size-base, ${theme['--seekora-font-size-base']})`,\n color: `var(--seekora-text-primary, ${theme['--seekora-text-primary']})`,\n };\n}\n\n/**\n * Generate styles for suggestion item\n */\nexport function getSuggestionItemStyles(\n theme: SuggestionsThemeVariables,\n isActive: boolean = false\n) {\n return {\n padding: `var(--seekora-spacing-md, ${theme['--seekora-spacing-md']}) var(--seekora-spacing-lg, ${theme['--seekora-spacing-lg']})`,\n cursor: 'pointer',\n transition: `background-color var(--seekora-transition-fast, ${theme['--seekora-transition-fast']})`,\n backgroundColor: isActive\n ? `var(--seekora-bg-hover, ${theme['--seekora-bg-hover']})`\n : 'transparent',\n };\n}\n\n/**\n * Generate styles for product card\n */\nexport function getProductCardStyles(\n theme: SuggestionsThemeVariables,\n isHovered: boolean = false\n) {\n return {\n backgroundColor: `var(--seekora-bg-surface, ${theme['--seekora-bg-surface']})`,\n borderRadius: `var(--seekora-border-radius-lg, ${theme['--seekora-border-radius-lg']})`,\n border: `1px solid var(--seekora-border-color, ${theme['--seekora-border-color']})`,\n overflow: 'hidden',\n cursor: 'pointer',\n transition: `transform var(--seekora-transition-normal, ${theme['--seekora-transition-normal']}), box-shadow var(--seekora-transition-normal, ${theme['--seekora-transition-normal']})`,\n transform: isHovered ? 'translateY(-2px)' : 'none',\n boxShadow: isHovered\n ? `var(--seekora-shadow-md, ${theme['--seekora-shadow-md']})`\n : 'none',\n };\n}\n\n/**\n * Generate styles for highlight/mark\n */\nexport function getHighlightStyles(theme: SuggestionsThemeVariables) {\n return {\n backgroundColor: `var(--seekora-highlight-bg, ${theme['--seekora-highlight-bg']})`,\n fontWeight: `var(--seekora-font-weight-semibold, ${theme['--seekora-font-weight-semibold']})`,\n padding: '0 2px',\n borderRadius: '2px',\n };\n}\n\n// ============================================================================\n// CSS Classes Generator\n// ============================================================================\n\n/**\n * Generate complete CSS stylesheet for suggestions components\n */\nexport function generateSuggestionsStylesheet(theme: SuggestionsThemeVariables = lightThemeVariables): string {\n return `\n /* Seekora Query Suggestions Styles */\n .seekora-suggestions {\n ${generateCSSVariables(theme)}\n }\n\n /* Container */\n .seekora-suggestions-container {\n background-color: var(--seekora-bg-surface);\n border: 1px solid var(--seekora-border-color);\n border-radius: var(--seekora-border-radius-lg);\n box-shadow: var(--seekora-shadow-xl);\n font-family: var(--seekora-font-family);\n font-size: var(--seekora-font-size-base);\n color: var(--seekora-text-primary);\n overflow: hidden;\n }\n\n /* Section */\n .seekora-suggestions-section {\n padding: var(--seekora-spacing-sm) 0;\n }\n\n .seekora-suggestions-section-title {\n font-size: var(--seekora-font-size-xs);\n font-weight: var(--seekora-font-weight-bold);\n color: var(--seekora-text-tertiary);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n padding: var(--seekora-spacing-sm) var(--seekora-spacing-lg) var(--seekora-spacing-xs);\n margin: 0;\n }\n\n /* Item */\n .seekora-suggestions-item {\n display: flex;\n align-items: center;\n gap: var(--seekora-spacing-md);\n padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);\n cursor: pointer;\n transition: background-color var(--seekora-transition-fast);\n }\n\n .seekora-suggestions-item:hover,\n .seekora-suggestions-item--active {\n background-color: var(--seekora-bg-hover);\n }\n\n .seekora-suggestions-item-icon {\n width: 16px;\n height: 16px;\n color: var(--seekora-text-secondary);\n flex-shrink: 0;\n }\n\n .seekora-suggestions-item-text {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .seekora-suggestions-item-count {\n font-size: var(--seekora-font-size-sm);\n color: var(--seekora-text-tertiary);\n }\n\n /* Highlight */\n .seekora-suggestions mark,\n .seekora-suggestions-highlight {\n background-color: var(--seekora-highlight-bg);\n font-weight: var(--seekora-font-weight-semibold);\n padding: 0 2px;\n border-radius: 2px;\n }\n\n /* Product Card */\n .seekora-product-card {\n background-color: var(--seekora-bg-surface);\n border: 1px solid var(--seekora-border-color);\n border-radius: var(--seekora-border-radius-lg);\n overflow: hidden;\n cursor: pointer;\n transition: transform var(--seekora-transition-normal), box-shadow var(--seekora-transition-normal);\n }\n\n .seekora-product-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--seekora-shadow-md);\n }\n\n .seekora-product-card-image {\n width: 100%;\n aspect-ratio: 1;\n object-fit: cover;\n background-color: var(--seekora-bg-secondary);\n }\n\n .seekora-product-card-info {\n padding: var(--seekora-spacing-md);\n }\n\n .seekora-product-card-title {\n font-size: var(--seekora-font-size-sm);\n font-weight: var(--seekora-font-weight-medium);\n color: var(--seekora-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n\n .seekora-product-card-price {\n font-size: var(--seekora-font-size-base);\n font-weight: var(--seekora-font-weight-bold);\n color: var(--seekora-primary);\n margin-top: var(--seekora-spacing-xs);\n }\n\n /* Tabs */\n .seekora-suggestions-tabs {\n display: flex;\n gap: var(--seekora-spacing-xs);\n padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);\n border-bottom: 1px solid var(--seekora-border-color);\n overflow-x: auto;\n }\n\n .seekora-suggestions-tab {\n display: inline-flex;\n align-items: center;\n gap: var(--seekora-spacing-sm);\n padding: var(--seekora-spacing-sm) var(--seekora-spacing-md);\n font-size: var(--seekora-font-size-sm);\n font-weight: var(--seekora-font-weight-medium);\n color: var(--seekora-text-secondary);\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: var(--seekora-border-radius-full);\n cursor: pointer;\n white-space: nowrap;\n transition: all var(--seekora-transition-fast);\n }\n\n .seekora-suggestions-tab:hover {\n background-color: var(--seekora-bg-hover);\n }\n\n .seekora-suggestions-tab--active {\n color: var(--seekora-primary);\n background-color: var(--seekora-primary-light);\n border-color: var(--seekora-primary);\n }\n\n /* Brand chip */\n .seekora-brand-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--seekora-spacing-sm);\n padding: var(--seekora-spacing-sm) var(--seekora-spacing-md);\n font-size: var(--seekora-font-size-sm);\n font-weight: var(--seekora-font-weight-medium);\n color: var(--seekora-text-primary);\n background-color: var(--seekora-bg-surface);\n border: 1px solid var(--seekora-border-color);\n border-radius: var(--seekora-border-radius-lg);\n cursor: pointer;\n transition: all var(--seekora-transition-fast);\n }\n\n .seekora-brand-chip:hover {\n border-color: var(--seekora-primary);\n background-color: var(--seekora-primary-light);\n }\n\n /* Category pill */\n .seekora-category-pill {\n display: inline-flex;\n align-items: center;\n gap: var(--seekora-spacing-xs);\n padding: 3px var(--seekora-spacing-sm);\n font-size: var(--seekora-font-size-xs);\n font-weight: var(--seekora-font-weight-medium);\n color: var(--seekora-text-secondary);\n background-color: var(--seekora-bg-tertiary);\n border-radius: var(--seekora-border-radius-full);\n cursor: pointer;\n transition: all var(--seekora-transition-fast);\n }\n\n .seekora-category-pill:hover {\n background-color: var(--seekora-primary-light);\n color: var(--seekora-primary);\n }\n\n /* Loading */\n .seekora-suggestions-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--seekora-spacing-xl);\n color: var(--seekora-text-secondary);\n }\n\n /* Empty state */\n .seekora-suggestions-empty {\n padding: var(--seekora-spacing-xl);\n text-align: center;\n color: var(--seekora-text-secondary);\n }\n\n /* Footer */\n .seekora-suggestions-footer {\n padding: var(--seekora-spacing-md) var(--seekora-spacing-lg);\n border-top: 1px solid var(--seekora-border-color);\n background-color: var(--seekora-bg-secondary);\n font-size: var(--seekora-font-size-sm);\n color: var(--seekora-text-secondary);\n }\n\n /* Keyboard hint */\n .seekora-keyboard-key {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 18px;\n padding: 0 4px;\n border-radius: 3px;\n background-color: var(--seekora-bg-secondary);\n border: 1px solid var(--seekora-border-color);\n font-size: 10px;\n font-weight: var(--seekora-font-weight-medium);\n }\n\n /* Animations */\n @keyframes seekora-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n @keyframes seekora-fade-in {\n from { opacity: 0; transform: translateY(-8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n @keyframes seekora-fade-out {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-8px); }\n }\n\n .seekora-suggestions--entering {\n animation: seekora-fade-in var(--seekora-transition-normal) ease-out;\n }\n\n .seekora-suggestions--exiting {\n animation: seekora-fade-out var(--seekora-transition-normal) ease-in;\n }\n `;\n}\n\n// ============================================================================\n// React Style Injection Hook\n// ============================================================================\n\nlet stylesInjected = false;\n\n/**\n * Inject suggestions styles into the document\n */\nexport function injectSuggestionsStyles(\n theme: SuggestionsThemeVariables = lightThemeVariables,\n force: boolean = false\n): void {\n if (typeof document === 'undefined') return;\n if (stylesInjected && !force) return;\n\n const styleId = 'seekora-suggestions-styles';\n let styleElement = document.getElementById(styleId) as HTMLStyleElement | null;\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.id = styleId;\n styleElement.type = 'text/css';\n document.head.appendChild(styleElement);\n }\n\n styleElement.textContent = generateSuggestionsStylesheet(theme);\n stylesInjected = true;\n}\n\n/**\n * Update injected styles with new theme\n */\nexport function updateSuggestionsStyles(theme: SuggestionsThemeVariables): void {\n injectSuggestionsStyles(theme, true);\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport type { Theme, ThemeConfig };\n\nexport default {\n lightThemeVariables,\n darkThemeVariables,\n minimalThemeVariables,\n brandPresets,\n createSuggestionsTheme,\n generateSuggestionsStylesheet,\n injectSuggestionsStyles,\n updateSuggestionsStyles,\n};\n"],"names":["createTheme","getNestedValue","createThemeCore","formatPrice","SearchIcon","ClockIcon","CloseIcon","styles","TrendingIcon","generateCSSVariables","stylesInjected","createStyles","ArrowIcon"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,aAAW,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK;AAC3C,IAAI,OAAO;AACX,QAAQ,MAAM,EAAE;AAChB,YAAY,GAAG,SAAS,CAAC,MAAM;AAC/B,YAAY,GAAG,MAAM,CAAC,MAAM;AAC5B,SAAS;AACT,QAAQ,UAAU,EAAE;AACpB,YAAY,GAAG,SAAS,CAAC,UAAU;AACnC,YAAY,GAAG,MAAM,CAAC,UAAU;AAChC,YAAY,QAAQ,EAAE;AACtB,gBAAgB,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ;AAChD,gBAAgB,GAAG,MAAM,CAAC,UAAU,EAAE,QAAQ;AAC9C,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,EAAE;AACjB,YAAY,GAAG,SAAS,CAAC,OAAO;AAChC,YAAY,GAAG,MAAM,CAAC,OAAO;AAC7B,SAAS;AACT,QAAQ,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC;AACrE,QAAQ,OAAO,EAAE;AACjB,YAAY,GAAG,SAAS,CAAC,OAAO;AAChC,YAAY,GAAG,MAAM,CAAC,OAAO;AAC7B,SAAS;AACT,QAAQ,WAAW,EAAE;AACrB,YAAY,GAAG,SAAS,CAAC,WAAW;AACpC,YAAY,GAAG,MAAM,CAAC,WAAW;AACjC,SAAS;AACT,QAAQ,WAAW,EAAE;AACrB,YAAY,GAAG,SAAS,CAAC,WAAW;AACpC,YAAY,GAAG,MAAM,CAAC,WAAW;AACjC,SAAS;AACT,QAAQ,MAAM,EAAE;AAChB,YAAY,GAAG,SAAS,CAAC,MAAM;AAC/B,YAAY,GAAG,MAAM,CAAC,MAAM;AAC5B,SAAS;AACT,KAAK;AACL,CAAC;AACD;AACA;AACA;AACK,MAAC,WAAW,GAAG,CAAC,SAAS,EAAE,GAAG,MAAM,KAAK;AAC9C,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;AACzC,QAAQ,OAAO;AACf,YAAY,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;AACtD,YAAY,UAAU,EAAE;AACxB,gBAAgB,GAAG,GAAG,CAAC,UAAU;AACjC,gBAAgB,GAAG,KAAK,CAAC,UAAU;AACnC,gBAAgB,QAAQ,EAAE;AAC1B,oBAAoB,GAAG,GAAG,CAAC,UAAU,EAAE,QAAQ;AAC/C,oBAAoB,GAAG,KAAK,CAAC,UAAU,EAAE,QAAQ;AACjD,iBAAiB;AACjB,aAAa;AACb,YAAY,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;AACzD,YAAY,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC;AAClE,YAAY,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;AACzD,YAAY,WAAW,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE;AACrE,YAAY,WAAW,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE;AACrE,YAAY,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;AACtD,SAAS;AACT,IAAI,CAAC,EAAE,SAAS,CAAC;AACjB;;AAioBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ;AACZ,CAAC,UAAU,QAAQ,EAAE;AACrB,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;AACjD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ;AAC/C,CAAC,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC;AAC/B,MAAM,MAAM,CAAC;AACb,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE;AAC7B,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE;AAC3D,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,kBAAkB;AACzD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,KAAK;AAC9D,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB;AACA,QAAQ,KAAK,EAAE,GAAG;AAClB,YAAY,MAAM,QAAQ,GAAG,SAAS,EAAE,WAAW,EAAE;AACrD,YAAY,QAAQ,QAAQ;AAC5B,gBAAgB,KAAK,SAAS;AAC9B,oBAAoB,OAAO,QAAQ,CAAC,OAAO;AAC3C,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,OAAO,QAAQ,CAAC,IAAI;AACxC,gBAAgB,KAAK,MAAM;AAC3B,oBAAoB,OAAO,QAAQ,CAAC,IAAI;AACxC,gBAAgB,KAAK,OAAO;AAC5B,oBAAoB,OAAO,QAAQ,CAAC,KAAK;AACzC,gBAAgB,KAAK,QAAQ;AAC7B,oBAAoB,OAAO,QAAQ,CAAC,MAAM;AAC1C;AACA,QAAQ;AACR;AACA,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,iBAAiB,EAAE;AACvE,YAAY,OAAO,QAAQ,CAAC,OAAO;AACnC,QAAQ;AACR,QAAQ,OAAO,QAAQ,CAAC,IAAI;AAC5B,IAAI;AACJ,IAAI,aAAa,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE;AAClC,QAAQ,MAAM,KAAK,GAAG,EAAE;AACxB,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;AAClC,YAAY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD,QAAQ;AACR,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAQ,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;AAClC,IAAI;AACJ,IAAI,OAAO,CAAC,GAAG,IAAI,EAAE;AACrB,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE;AAC5C,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;AAClE,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE;AAClB,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE;AACzC,YAAY,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAChE,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE;AAClB,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE;AACzC,YAAY,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAChE,QAAQ;AACR,IAAI;AACJ,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE;AACnB,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE;AAC1C,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAClE,QAAQ;AACR,IAAI;AACJ,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,KAAK;AACzB,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,IAAI;AACJ,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,QAAQ,IAAI,CAAC,eAAe,GAAG,OAAO;AACtC,IAAI;AACJ;AACA;AACA,IAAI,aAAa,GAAG,IAAI;AACxB,SAAS,YAAY,CAAC,MAAM,GAAG,EAAE,EAAE;AACnC,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC;AAC7B;AACA,SAAS,SAAS,GAAG;AACrB,IAAI,IAAI,CAAC,aAAa,EAAE;AACxB,QAAQ,aAAa,GAAG,YAAY,EAAE;AACtC,IAAI;AACJ,IAAI,OAAO,aAAa;AACxB;AAaA;AACA,MAAM,GAAG,GAAG;AACZ,IAAI,OAAO,EAAE,CAAC,GAAG,IAAI,KAAK,SAAS,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AACtD,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAChD,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAChD,IAAI,KAAK,EAAE,CAAC,GAAG,IAAI,KAAK,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAClD,CAAC;AACD;AACA,SAAS,EAAE;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,OAAO,EAAE;AACtC,IAAI,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE,QAAQ,GAAG,GAAG,OAAO;AACzF;AACA,IAAI,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE,KAAK;AACpE,QAAQ,GAAG,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE,KAAK;AAChD,QAAQ,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC;AACnC,QAAQ,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAClC,IAAI,IAAI,eAAe,EAAE;AACzB;AACA,QAAQ,OAAO;AACf,aAAa,OAAO,CAAC,OAAO,EAAE,MAAM;AACpC,aAAa,OAAO,CAAC,SAAS,EAAE,OAAO;AACvC,aAAa,OAAO,CAAC,SAAS,EAAE,MAAM;AACtC,aAAa,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;AAC1C,IAAI;AACJ;AACA,IAAI,MAAM,UAAU,GAAGC,gBAAc,CAAC,GAAG,EAAE,SAAS,CAAC;AACrD,IAAI,OAAO,UAAU,KAAK,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,QAAQ,IAAI,EAAE,CAAC;AAC3E;AAmCA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE;AACzF,IAAI,MAAM,KAAK,GAAG,EAAE;AACpB,IAAI,IAAI,SAAS,GAAG,gBAAgB;AACpC,IAAI,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;AAClD,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE;AAC7B;AACA,YAAY,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,gBAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACtE,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE;AAC1B,YAAY,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACzF,QAAQ;AACR;AACA,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;AACzE,QAAQ,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;AACnD,QAAQ,IAAI,MAAM,KAAK,EAAE,EAAE;AAC3B;AACA,YAAY,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACtF,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACpF;AACA,QAAQ,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAClE,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB;AAcA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,GAAG,KAAK,EAAE;AACtE,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACtD,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG,EAAE;AACpB,IAAI,MAAM,KAAK,GAAG,aAAa,GAAG,GAAG,GAAG,IAAI;AAC5C,IAAI,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;AACrE,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC;AACjD,IAAI,IAAI,SAAS,GAAG,CAAC;AACrB,IAAI,IAAI,KAAK;AACb,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AAChD;AACA,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE;AACrC,YAAY,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC/F,QAAQ;AACR;AACA,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC5D,QAAQ,SAAS,GAAG,KAAK,CAAC,SAAS;AACnC,IAAI;AACJ;AACA,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;AACjC,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC9E,IAAI;AACJ,IAAI,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC7E;AACA;AACA;AACA;AACA,SAASA,gBAAc,CAAC,GAAG,EAAE,IAAI,EAAE;AACnC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK;AACpD,QAAQ,OAAO,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS;AAC/E,IAAI,CAAC,EAAE,GAAG,CAAC;AACX;;AAwXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,kBAAkB,CAAC;AACzB,IAAI,WAAW,CAAC,MAAM,EAAE;AACxB,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;AAC3B,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI;AACjC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AACnC,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,KAAK,KAAK;AACrD,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG;AAClD,QAAQ,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;AACxF,QAAQ,IAAI,CAAC,KAAK,GAAG;AACrB,YAAY,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;AAC5C,YAAY,WAAW,EAAE,EAAE;AAC3B,YAAY,WAAW,EAAE,CAAC;AAC1B,YAAY,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;AACnD,YAAY,MAAM,EAAE,SAAS;AAC7B,YAAY,OAAO,EAAE,IAAI;AACzB,YAAY,OAAO,EAAE,KAAK;AAC1B,YAAY,KAAK,EAAE,IAAI;AACvB,SAAS;AACT,QAAQ,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE;AACpD,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;AACvC,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;AACvC,SAAS,CAAC;AACV,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;AAChC,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;AAC/B,IAAI;AACJ,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC1C,IAAI;AACJ,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW;AACrC,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;AACjC,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;AACjC,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;AAC/B,IAAI;AACJ;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE;AAC1C,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;AACxC,YAAY,GAAG,CAAC,OAAO,CAAC,sDAAsD,EAAE,EAAE,KAAK,EAAE,CAAC;AAC1F;AACA,YAAY,IAAI,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE;AAClD,gBAAgB,GAAG,CAAC,OAAO,CAAC,+EAA+E,CAAC;AAC5G,gBAAgB,IAAI,CAAC,eAAe,EAAE;AACtC,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;AAChC,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,OAAO,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC/G,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;AAC9C,YAAY,GAAG,CAAC,OAAO,CAAC,iDAAiD,CAAC;AAC1E,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,QAAQ;AACR,aAAa;AACb,YAAY,GAAG,CAAC,OAAO,CAAC,0CAA0C,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC;AACnH,QAAQ;AACR,IAAI;AACJ,IAAI,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE;AACtD;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AAC/F,QAAQ,IAAI,MAAM;AAClB,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACrD,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,OAAO,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC7E,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;AAC9C,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,EAAE;AACzD,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AACnG,QAAQ,IAAI,KAAK,KAAK,EAAE;AACxB,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/C,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC/E,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;AAC9C,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ,IAAI,gBAAgB,CAAC,aAAa,GAAG,IAAI,EAAE;AAC3C,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;AAC/C,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE;AACnC,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC;AAClC,QAAQ,GAAG,CAAC,OAAO,CAAC,yCAAyC,CAAC;AAC9D,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;AAC9C,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE;AACxC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI;AAC3C,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI;AACrC,QAAQ,GAAG,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,CAAC;AACjE,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;AAC9C,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE;AAC5C,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM;AACxC,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAClC,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,MAAM,EAAE,CAAC;AACnE,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;AAC9C,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ,IAAI,eAAe,CAAC,YAAY,EAAE,aAAa,GAAG,IAAI,EAAE;AACxD,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,KAAK,YAAY;AACpD,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY;AAC9C,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AACnC,QAAQ,GAAG,CAAC,OAAO,CAAC,4CAA4C,EAAE,EAAE,YAAY,EAAE,CAAC;AACnF,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE;AAC9C,YAAY,IAAI,CAAC,eAAe,EAAE;AAClC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,MAAM,MAAM,CAAC,iBAAiB,EAAE;AACpC;AACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;AAChC,YAAY,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5C,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI;AACrC,QAAQ;AACR,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACrD,QAAQ,IAAI;AACZ,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;AAC5E,YAAY,GAAG,CAAC,OAAO,CAAC,uCAAuC,EAAE;AACjE,gBAAgB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvC,gBAAgB,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM;AAC/D,gBAAgB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;AACnD,gBAAgB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;AACzC,gBAAgB,SAAS,EAAE,aAAa,CAAC,SAAS;AAClD,aAAa,CAAC;AACd,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC;AACtF,YAAY,IAAI,CAAC,QAAQ,CAAC;AAC1B,gBAAgB,OAAO,EAAE,QAAQ;AACjC,gBAAgB,OAAO,EAAE,KAAK;AAC9B,gBAAgB,KAAK,EAAE,IAAI;AAC3B,aAAa,CAAC;AACd,YAAY,GAAG,CAAC,IAAI,CAAC,sCAAsC,EAAE;AAC7D,gBAAgB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvC,gBAAgB,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC5D,gBAAgB,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,CAAC;AACzD,aAAa,CAAC;AACd,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7E,YAAY,IAAI,CAAC,QAAQ,CAAC;AAC1B,gBAAgB,OAAO,EAAE,IAAI;AAC7B,gBAAgB,OAAO,EAAE,KAAK;AAC9B,gBAAgB,KAAK;AACrB,aAAa,CAAC;AACd,YAAY,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE;AAC3D,gBAAgB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACvC,gBAAgB,KAAK,EAAE,KAAK,CAAC,OAAO;AACpC,aAAa,CAAC;AACd,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,iBAAiB,EAAE;AAC1C,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,GAAG,IAAI,CAAC,oBAAoB;AACxC,YAAY,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;AACxC,YAAY,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;AAC7C,YAAY,GAAG,iBAAiB;AAChC,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE;AACpE,YAAY,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAC/C,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,YAAY,MAAM,cAAc,GAAG,EAAE;AACrC,YAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK;AAC3D,gBAAgB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACvD,oBAAoB,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE;AACzD,gBAAgB;AAChB,gBAAgB,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACvE,YAAY,CAAC,CAAC;AACd,YAAY,MAAM,WAAW,GAAG,EAAE;AAClC,YAAY,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK;AACxE,gBAAgB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC1C,oBAAoB,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzD,gBAAgB,CAAC,CAAC;AAClB,YAAY,CAAC,CAAC;AACd,YAAY,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,gBAAgB,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5D,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;AAChC,YAAY,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5C,QAAQ;AACR,QAAQ,GAAG,CAAC,OAAO,CAAC,iDAAiD,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACvG,QAAQ,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM;AAC9C,YAAY,GAAG,CAAC,OAAO,CAAC,4DAA4D,CAAC;AACrF,YAAY,IAAI,CAAC,MAAM,EAAE;AACzB,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAC3B,IAAI;AACJ;AACA,IAAI,SAAS,CAAC,QAAQ,EAAE;AACxB,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACrC;AACA,QAAQ,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjC;AACA,QAAQ,OAAO,MAAM;AACrB,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;AACvE,QAAQ,CAAC;AACT,IAAI;AACJ;AACA,IAAI,QAAQ,CAAC,OAAO,EAAE;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE;AAClD,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,IAAI;AACJ;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AACrC,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI;AAC3C,YAAY,IAAI;AAChB,gBAAgB,QAAQ,CAAC,KAAK,CAAC;AAC/B,YAAY;AACZ,YAAY,OAAO,GAAG,EAAE;AACxB,gBAAgB,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjF,gBAAgB,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE;AACnE,oBAAoB,KAAK,EAAE,KAAK,CAAC,OAAO;AACxC,iBAAiB,CAAC;AAClB,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,KAAK,GAAG;AACrB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,WAAW,EAAE,EAAE;AAC3B,YAAY,WAAW,EAAE,CAAC;AAC1B,YAAY,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;AACjD,YAAY,MAAM,EAAE,SAAS;AAC7B,YAAY,OAAO,EAAE,IAAI;AACzB,YAAY,OAAO,EAAE,KAAK;AAC1B,YAAY,KAAK,EAAE,IAAI;AACvB,SAAS;AACT,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,IAAI;AACJ;;AChoDA;;AAEG;AAII,MAAM,YAAY,GAAU;AACjC,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,OAAO,EAAE,SAAS;AACnB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,UAAU,EAAE,4FAA4F;AACxG,QAAA,QAAQ,EAAE;AACR,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,IAAI,EAAE,GAAG;AACV,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACF,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,GAAG;AACT,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE,UAAU;AAClB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,IAAI,EAAE,QAAQ;AACf,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,8DAA8D;AACrE,QAAA,MAAM,EAAE,8DAA8D;AACtE,QAAA,KAAK,EAAE,gEAAgE;AACxE,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,MAAM,EAAE,mBAAmB;AAC3B,QAAA,IAAI,EAAE,mBAAmB;AAC1B,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,EAAE,EAAE,OAAO;AACX,QAAA,EAAE,EAAE,OAAO;AACX,QAAA,EAAE,EAAE,QAAQ;AACZ,QAAA,EAAE,EAAE,QAAQ;AACb,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,OAAO,EAAE,IAAI;AACd,KAAA;;;ACxEH;;;;AAIG;AAMI,MAAM,WAAW,GAAG,CAAC,MAAmB,KAAI;AACjD,IAAA,OAAOC,aAAe,CAAC,MAAM,EAAE,YAAY,CAAC;AAC9C;;ACZA;;;;AAIG;AAiBH,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC;AAW7D,MAAM,cAAc,GAAkC,CAAC,EAC5D,MAAM,EACN,KAAK,EAAE,WAAW,EAClB,eAAe,GAAG,IAAI,EACtB,eAAe,GAAG,IAAI,EACtB,YAAY,EAAE,kBAAkB,EAChC,QAAQ,GACT,KAAI;AACH,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAK;AACzB,QAAA,OAAO,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,YAAY;AAC9D,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;;AAGjB,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAK;QAChC,OAAO,IAAI,kBAAkB,CAAC;YAC5B,MAAM;AACN,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,oBAAoB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AAC3C,YAAA,GAAG,kBAAkB;AACtB,SAAA,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAEhC,IAAA,MAAM,KAAK,GAAuB,OAAO,CAAC,OAAO;QAC/C,MAAM;QACN,KAAK;QACL,eAAe;QACf,eAAe;QACf,YAAY;AACb,KAAA,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;AAEpE,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,aAAa,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,EACjC,QAAQ,CACc;AAE7B;AAEO,MAAM,gBAAgB,GAAG,MAAyB;AACvD,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,uDAAuD,CAAC;AAChF,QAAA,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAC5E,QAAA,MAAM,KAAK;IACb;AACA,IAAA,OAAO,OAAO;AAChB;;AC/EA;;;;;AAKG;AA6BH;;;AAGG;AACI,MAAM,cAAc,GAAG,MAA2B;AACvD,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE;AAC3C,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAc,YAAY,CAAC,QAAQ,EAAE,CAAC;;IAGxE,SAAS,CAAC,MAAK;QACb,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;YACtD,QAAQ,CAAC,QAAQ,CAAC;AACpB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;;IAGlB,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,aAAA,GAAyB,IAAI,KAAI;AAC5E,QAAA,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;AAC7C,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAElB,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,aAAA,GAAyB,IAAI,KAAI;QAChG,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC;AACzD,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAElB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,aAAA,GAAyB,IAAI,KAAI;QACnG,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC;AAC5D,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAElB,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,aAAA,GAAyB,IAAI,KAAI;AACrE,QAAA,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAC9C,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAElB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,aAAA,GAAyB,IAAI,KAAI;AAC1E,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC;AAC3C,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAElB,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,aAAA,GAAyB,IAAI,KAAI;AAC9E,QAAA,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;AAC/C,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAElB,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,iBAA+D,KAAI;AAC7F,QAAA,OAAO,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC/C,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAElB,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;QAC7B,YAAY,CAAC,KAAK,EAAE;AACtB,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAElB,OAAO;;QAEL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;;QAGlB,QAAQ;QACR,aAAa;QACb,gBAAgB;QAChB,gBAAgB;QAChB,OAAO;QACP,SAAS;QACT,MAAM;QACN,KAAK;KACN;AACH;;ACxGA;;;;AAIG;MAqBU,mBAAmB,GAAG,CAAC,EAClC,MAAM,EACN,KAAK,EACL,OAAO,GAAG,IAAI,EACd,UAAU,GAAG,GAAG,EAChB,cAAc,GAAG,EAAE,GACQ,KAA+B;IAC1D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAmB,EAAE,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC;AACtD,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAwB,IAAI,CAAC;IAE5D,SAAS,CAAC,MAAK;;AAEb,QAAA,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC5B,YAAA,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACxC;QAEA,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YAC7B,cAAc,CAAC,EAAE,CAAC;YAClB,UAAU,CAAC,KAAK,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC;YACd;QACF;QAEA,UAAU,CAAC,IAAI,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;AAEd,QAAA,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC,YAAW;AAC/C,YAAA,IAAI;AACF,gBAAA,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,GAAG,KAAK,EAAE,cAAc,CAAC;;;;AAKrE,gBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE;gBAE9D,MAAM,eAAe,GAAqB,cAAc,CAAC,GAAG,CAAC,CAAC,UAAe,KAAI;;oBAE/E,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU;;AAEzE,oBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,KAAK,SAAS,GAAG,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,GAAG,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;AAE3I,oBAAA,MAAM,IAAI,GAAmB;AAC3B,wBAAA,KAAK,EAAE,OAAO,eAAe,KAAK,QAAQ,GAAG,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACtF,wBAAA,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,SAAS;AACpD,wBAAA,QAAQ,EAAE,UAAU;qBACrB;AAED,oBAAA,OAAO,IAAI;AACb,gBAAA,CAAC,CAAC;gBAEF,cAAc,CAAC,eAAe,CAAC;YACjC;YAAE,OAAO,GAAG,EAAE;gBACZ,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjE,gBAAA,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;gBACjD,QAAQ,CAAC,KAAK,CAAC;gBACf,cAAc,CAAC,EAAE,CAAC;YACpB;oBAAU;gBACR,UAAU,CAAC,KAAK,CAAC;YACnB;QACF,CAAC,EAAE,UAAU,CAAC;AAEd,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC5B,gBAAA,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACxC;AACF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IAExD,OAAO;QACL,WAAW;QACX,OAAO;QACP,KAAK;KACN;AACH;;ACpGA,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAQ,SAAS,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;;ACA/W;;;;AAIG;MAuCU,SAAS,GAA6B,CAAC,EAClD,WAAW,GAAG,WAAW,EACzB,eAAe,GAAG,IAAI,EACtB,UAAU,GAAG,GAAG,EAChB,cAAc,GAAG,CAAC,EAClB,cAAc,GAAG,EAAE,EACnB,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,gBAAgB,EAChB,aAAa,GACd,KAAI;AACH,IAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,gBAAgB,EAAE;IAC9E,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE;IACxH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AACtD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;AAC/C,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,mBAAmB,CAAC;QACvE,MAAM;QACN,KAAK;AACL,QAAA,OAAO,EAAE,eAAe,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc;QAC1D,UAAU;QACV,cAAc;AACf,KAAA,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;;IAGjE,SAAS,CAAC,MAAK;QACb,IAAI,mBAAmB,EAAE;AACvB,YAAA,mBAAmB,CAAC;gBAClB,OAAO;AACP,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,KAAK,EAAE,WAAW;AACnB,aAAA,CAAC;QACJ;IACF,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAE9D,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,OAAO,IAAI,QAAQ,EAAE;AACvB,YAAA,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAC1B;IACF,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE9B,SAAS,CAAC,MAAK;QACb,IAAI,aAAa,EAAE;YACjB,aAAa,CAAC,KAAK,CAAC;QACtB;AACF,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAE1B,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,WAAmB,KAAI;;AAE7D,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE;AAEhC,QAAA,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;;AAGhG,QAAA,cAAc,CAAC,OAAO,GAAG,IAAI;;QAG7B,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,gBAAgB,CAAC,EAAE,CAAC;;AAGpB,QAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;;AAGtB,QAAA,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC;QAChD,MAAM,aAAa,EAAE;;QAGrB,UAAU,CAAC,MAAK;AACd,YAAA,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE;;YAExB,UAAU,CAAC,MAAK;AACd,gBAAA,cAAc,CAAC,OAAO,GAAG,KAAK;YAChC,CAAC,EAAE,EAAE,CAAC;QACR,CAAC,EAAE,GAAG,CAAC;AACT,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAE7B,IAAA,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,UAAkB,KAAI;QAChE,GAAG,CAAC,OAAO,CAAC,gCAAgC,EAAE,EAAE,UAAU,EAAE,CAAC;AAC7D,QAAA,gBAAgB,CAAC,EAAE,CAAC;QACpB,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE;QAExB,IAAI,kBAAkB,EAAE;YACtB,kBAAkB,CAAC,UAAU,CAAC;QAChC;;QAGA,QAAQ,CAAC,UAAU,CAAC;AACtB,IAAA,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAElC,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,CAAsC,KAAI;AAC/E,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;;;AAG5B,QAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvB,QAAA,gBAAgB,CAAC,EAAE,CAAC;AACtB,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEd,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAwC,KAAI;AAC7E,QAAA,QAAQ,CAAC,CAAC,GAAG;AACX,YAAA,KAAK,WAAW;gBACd,IAAI,eAAe,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtD,CAAC,CAAC,cAAc,EAAE;oBAClB,gBAAgB,CAAC,CAAC,IAAI,KACpB,IAAI,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CACzD;gBACH;gBACA;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,eAAe,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtD,CAAC,CAAC,cAAc,EAAE;oBAClB,gBAAgB,CAAC,CAAC,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxD;gBACA;AACF,YAAA,KAAK,OAAO;gBACV,CAAC,CAAC,cAAc,EAAE;gBAClB,CAAC,CAAC,eAAe,EAAE;;;AAGnB,gBAAA,IAAI,eAAe,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,IAAI,CAAC,IAAI,aAAa,GAAG,oBAAoB,CAAC,MAAM,EAAE;;oBAE3H,sBAAsB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC;gBACnE;qBAAO;;;oBAGL,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,KAAK;oBACrD,YAAY,CAAC,YAAY,CAAC;gBAC5B;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,YAAY,CAAC,KAAK,CAAC;AACnB,gBAAA,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE;gBACxB;;AAEN,IAAA,CAAC,EAAE,CAAC,oBAAoB,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;AAEvG,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,YAAY,CAAC,IAAI,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAmB,KAAI;;AAErD,QAAA,IAAI,cAAc,CAAC,OAAO,EAAE;YAC1B;QACF;;QAGA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBAC3D,YAAY,CAAC,KAAK,CAAC;AACnB,gBAAA,gBAAgB,CAAC,EAAE,CAAC;YACtB;QACF,CAAC,EAAE,GAAG,CAAC;IACT,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,uBAAuB,GAAG,CAAC,UAAkB,EAAE,KAAa,MAChE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,KAAK,IACZ,UAAU,CACP,CACP;IAED,MAAM,oBAAoB,GAAG,OAC3B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAA,EAAA,wBAAA,CAE5D,CACP;AAED,IAAA,MAAM,cAAc,GAAG,WAAW,IAAI,EAAE;AACxC,IAAA,MAAM,SAAS,GAAG,kBAAkB,IAAI,aAAa;;;;;;AAMrD,IAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC;AACtD,IAAA,MAAM,mBAAmB,GAAG,SAAS,IAAI,eAAe,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc,KAAK,cAAc,IAAI,SAAS,CAAC;;IAG3H,MAAM,GAAG,GAAG,OAA6E;AACzF,IAAA,MAAM,cAAc,GAAI,GAAW,EAAE;WAC/B,GAAW,EAAE,IAAI,EAAE;AACnB,WAAA,GAAW,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB;AAE/C,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,EACpD,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,GAAG,KAAK;AACT,SAAA,EAAA;QAED,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,IAAI,CACb,cAAc,CAAC,KAAK,EACpB,SAAS,IAAI,cAAc,CAAC,YAAY,CACzC,EACD,KAAK,EAAE;AACL,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,gBAAA,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU;AACvC,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,WAAW,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;gBACjE,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,gBAAA,OAAO,EAAE,MAAM;gBACf,IAAI,SAAS,IAAI;AACf,oBAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;iBAC/B,CAAC;aACH,EAAA,CACD;AACD,QAAA,cAAc,KAAK,SAAS,KAC3B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC/B,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gBAAA,OAAO,EAAE,GAAG;AACZ,gBAAA,UAAU,EAAE,QAAQ;AACrB,aAAA,EAAA;YAEA,cAAc;iBACV,CACR;QAEA,mBAAmB,KAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,cAAc,CAAC,oBAAoB,EAC9C,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC9B,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,gBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;gBAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AAC/F,gBAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AACrC,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,MAAM,EAAE,IAAI;AACb,aAAA,EAAA;AAEA,YAAA,SAAS,KAAK,aAAa,GAAG,aAAa,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAEvE,YAAA,CAAC,SAAS,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,KAC5C,0CACG,oBAAoB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,KAAI;AAC9C,gBAAA,MAAM,UAAU,GAAG,KAAK,KAAK,aAAa;AAC1C,gBAAA,MAAM,QAAQ,GAAG,gBAAgB,IAAI,uBAAuB;gBAE5D,QACE,6BACE,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,IAAI,CACb,cAAc,CAAC,cAAc,EAC7B,UAAU,IAAI,cAAc,CAAC,oBAAoB,CAClD,EACD,OAAO,EAAE,MAAM,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,EACvD,YAAY,EAAE,MAAM,gBAAgB,CAAC,KAAK,CAAC,EAC3C,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,eAAe,EAAE;AACf,8BAAE,KAAK,CAAC,MAAM,CAAC;AACf,8BAAE,aAAa;AACjB,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,wBAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,mBAAmB;qBAC3D,EAAA,EAEA,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAC9B;YAEV,CAAC,CAAC,CACD,CACJ;YAEA,CAAC,SAAS,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc,KAChF,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAA,EAAA,sBAAA,CAE/F,CACP,CACG,CACP,CACG;AAEV;;AClWA;;;;;AAKG;AAoDH;AACA,MAAMD,gBAAc,GAAG,CAAC,GAAQ,EAAE,IAAY,KAAS;AACrD,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;AACtE,CAAC;AAED;AACA,MAAME,aAAW,GAAG,CAAC,KAAU,EAAE,QAAA,GAAmB,GAAG,KAAwB;AAC7E,IAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,SAAS;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,KAAK,EAAE;AAC3D,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,GAAG,EAAE;AAC3C,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAEM,MAAM,aAAa,GAAiC,CAAC,EAC1D,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,EAChB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,YAAY,GAAG,EAAE,EACjB,cAAc,GAAG,KAAK,EACtB,QAAQ,GAAG,MAAM,EACjB,YAAY,EACZ,cAAc,EACd,wBAAwB,GAAG,IAAI,EAC/B,SAAS,GAAG,KAAK,GAClB,KAAI;IACH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,gBAAgB,EAAE;IAC7D,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,cAAc,EAAE;AAC1I,IAAA,MAAM,kBAAkB,GAAG,WAAW,IAAI,EAAE;;IAG5C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AAClD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;;AAGjD,IAAA,MAAM,OAAO,GAAG,WAAW,KAAK,SAAS,GAAG,WAAW,GAAG,YAAY;AACtE,IAAA,MAAM,OAAO,GAAG,WAAW,KAAK,SAAS,GAAG,WAAW,GAAG,YAAY;AACtE,IAAA,MAAM,KAAK,GAAG,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,UAAU;;IAG9D,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,CAAC,EAAE,CAAC;AACpB,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;;IAGb,SAAS,CAAC,MAAK;QACb,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,IAAI,wBAAwB,EAAE;AACxE,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,oBAAA,EAAuB,WAAW,CAAA,EAAA,CAAI,CAAgB;YAC1G,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YACnE;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;;AAG3C,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAsB,KAAI;AAC3D,QAAA,IAAI,CAAC,wBAAwB;YAAE;;QAG/B,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,qBAAqB,CAAC;AACpF,QAAA,MAAM,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE;AAEhE,QAAA,QAAQ,CAAC,CAAC,GAAG;AACX,YAAA,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACpD;AACF,YAAA,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C;AACF,YAAA,KAAK,OAAO;gBACV,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,WAAW,IAAI,CAAC,EAAE;;AAEpB,oBAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA,oBAAA,EAAuB,WAAW,CAAA,EAAA,CAAI,CAAgB;oBAC3G,IAAI,QAAQ,EAAE;wBACZ,QAAQ,CAAC,KAAK,EAAE;oBAClB;gBACF;gBACA;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,cAAc,CAAC,EAAE,CAAC;AAClB,gBAAA,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE;gBAC5B;AACF,YAAA,KAAK,MAAM;gBACT,CAAC,CAAC,cAAc,EAAE;gBAClB,cAAc,CAAC,CAAC,CAAC;gBACjB;AACF,YAAA,KAAK,KAAK;gBACR,CAAC,CAAC,cAAc,EAAE;gBAClB,cAAc,CAAC,QAAQ,CAAC;gBACxB;;AAEN,IAAA,CAAC,EAAE,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;IAE3C,MAAM,uBAAuB,GAAG,CAAC,MAAkB,EAAE,KAAa,EAAE,QAAA,GAAoB,KAAK,KAAI;AAC/F,QAAA,MAAM,WAAW,GAAG,YAAW;;AAE7B,YAAA,IAAI,eAAe,IAAI,MAAM,CAAC,EAAE,EAAE;AAChC,gBAAA,IAAI;AACF,oBAAA,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY;oBAC3C,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE;;AAG9D,oBAAA,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC;;oBAGjF,MAAM,aAAa,GAAG,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG;wBACnD,KAAK,EAAE,EAAE;wBACT,IAAI,EAAE,KAAK,CAAC,WAAW;AACxB,qBAAA,GAAG,SAAS,CAAC;AAEd,oBAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE;wBACxD,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,wBAAA,WAAW,EAAE,KAAK;wBAClB,gBAAgB;wBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;wBAChC,UAAU,EAAE,CAAC,CAAC,aAAa;AAC5B,qBAAA,CAAC;AAEF,oBAAA,MAAM,MAAM,CAAC,UAAU,GAAG;AACxB,wBAAA,UAAU,EAAE,eAAe;wBAC3B,eAAe,EAAE,MAAM,CAAC,EAAE;AAC1B,wBAAA,QAAQ,EAAE;AACR,4BAAA,MAAM,EAAE,MAAM;AACd,4BAAA,QAAQ,EAAE,gBAAgB;AAC3B,yBAAA;qBACF,EAAE,aAAoB,CAAC;AAExB,oBAAA,OAAO,CAAC,GAAG,CAAC,wDAAwD,EAAE;wBACpE,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,wBAAA,QAAQ,EAAE,gBAAgB;AAC3B,qBAAA,CAAC;gBACJ;gBAAE,OAAO,GAAG,EAAE;oBACZ,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjE,oBAAA,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE;wBAC7D,QAAQ,EAAE,MAAM,CAAC,EAAE;wBACnB,KAAK,EAAE,KAAK,CAAC,OAAO;AACrB,qBAAA,CAAC;gBACJ;YACF;;YAGA,IAAI,aAAa,EAAE;AACjB,gBAAA,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;YAC9B;AACF,QAAA,CAAC;QAED,QACE,6BACE,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,KAAK,EAAA,mBAAA,EACJ,KAAK,EACxB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,IAAI,kBAAkB,CAAC,eAAe,CAAC,EAC9F,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,wBAAwB,IAAI,cAAc,CAAC,KAAK,CAAC,EACrE,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AAC1C,gBAAA,YAAY,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AAChD,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,YAAY,EAAE,CAAC;gBACf,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS;AAC7C,gBAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,mBAAmB;AAC5D,gBAAA,eAAe,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU;AACxE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AACzB,gBAAA,OAAO,EAAE,QAAQ,GAAG,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,OAAO,CAAA,CAAE,GAAG,MAAM;AAChE,gBAAA,aAAa,EAAE,MAAM;AACtB,aAAA,EAAA;YAEA,MAAM,CAAC,KAAK,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,MAAM,CAAC,KAAK,EACjB,GAAG,EAAE,MAAM,CAAC,KAAK,EACjB,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,MAAM,EAAE,OAAO;AACf,oBAAA,SAAS,EAAE,OAAO;oBAClB,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,oBAAA,UAAU,EAAE,CAAC;AACd,iBAAA,EAAA,CACD,CACH;YAED,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAA;AAClC,gBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;qBACzB,EAAA,EAEA,MAAM,CAAC,KAAK,CACV;AAEJ,gBAAA,MAAM,CAAC,WAAW,KACjB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,iBAAiB,EAC/C,KAAK,EAAE;AACL,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,wBAAA,OAAO,EAAE,GAAG;AACb,qBAAA,EAAA,EAEA,MAAM,CAAC,WAAW,CACjB,CACL;AAEA,gBAAA,MAAM,CAAC,KAAK,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;qBAC5B,EAAA,EAEA,MAAM,CAAC,KAAK,CACT,CACP,CACG,CACF;AAEV,IAAA,CAAC;IAED,MAAM,uBAAuB,GAAG,CAAC,MAAkB,EAAE,KAAa,EAAE,QAAA,GAAoB,KAAK,KAAI;AAC/F,QAAA,MAAM,WAAW,GAAG,YAAW;;AAE7B,YAAA,IAAI,eAAe,IAAI,MAAM,CAAC,EAAE,EAAE;AAChC,gBAAA,IAAI;AACF,oBAAA,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY;oBAC3C,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE;;AAG9D,oBAAA,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC;;oBAGjF,MAAM,aAAa,GAAG,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG;wBACnD,KAAK,EAAE,EAAE;wBACT,IAAI,EAAE,KAAK,CAAC,WAAW;AACxB,qBAAA,GAAG,SAAS,CAAC;AAEd,oBAAA,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE;wBACxD,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,wBAAA,WAAW,EAAE,KAAK;wBAClB,gBAAgB;wBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;wBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;wBAChC,UAAU,EAAE,CAAC,CAAC,aAAa;AAC5B,qBAAA,CAAC;AAEF,oBAAA,MAAM,MAAM,CAAC,UAAU,GAAG;AACxB,wBAAA,UAAU,EAAE,eAAe;wBAC3B,eAAe,EAAE,MAAM,CAAC,EAAE;AAC1B,wBAAA,QAAQ,EAAE;AACR,4BAAA,MAAM,EAAE,MAAM;AACd,4BAAA,QAAQ,EAAE,gBAAgB;AAC3B,yBAAA;qBACF,EAAE,aAAoB,CAAC;AAExB,oBAAA,OAAO,CAAC,GAAG,CAAC,wDAAwD,EAAE;wBACpE,QAAQ,EAAE,MAAM,CAAC,EAAE;AACnB,wBAAA,QAAQ,EAAE,gBAAgB;AAC3B,qBAAA,CAAC;gBACJ;gBAAE,OAAO,GAAG,EAAE;oBACZ,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjE,oBAAA,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE;wBAC7D,QAAQ,EAAE,MAAM,CAAC,EAAE;wBACnB,KAAK,EAAE,KAAK,CAAC,OAAO;AACrB,qBAAA,CAAC;gBACJ;YACF;;YAGA,IAAI,aAAa,EAAE;AACjB,gBAAA,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;YAC9B;AACF,QAAA,CAAC;;QAGD,MAAM,WAAW,GAAI,MAAc,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK;QAC/D,MAAM,aAAa,GAAI,MAAc,CAAC,aAAa,IAAI,MAAM,CAAC,WAAW;QACzE,MAAM,YAAY,GAAI,MAAc,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK;QACjE,MAAM,QAAQ,GAAI,MAAc,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK;QAEzD,QACE,6BACE,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,KAAK,EAAA,mBAAA,EACJ,KAAK,EACxB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,IAAI,kBAAkB,CAAC,eAAe,CAAC,EAC9F,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,wBAAwB,IAAI,cAAc,CAAC,KAAK,CAAC,EACrE,KAAK,EAAE;AACL,gBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;gBAC5E,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS;AAC7C,gBAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,mBAAmB;AAC5D,gBAAA,eAAe,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU;AACxE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,aAAa,EAAE,QAAQ;AACvB,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,SAAS,EAAE,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AAChE,gBAAA,OAAO,EAAE,QAAQ,GAAG,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,OAAO,CAAA,CAAE,GAAG,MAAM;AAChE,gBAAA,aAAa,EAAE,MAAM;AACtB,aAAA,EAAA;AAEA,YAAA,QAAQ,KACP,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,WAAW,EAAE,MAAM;AACnB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AACpC,iBAAA,EAAA;gBAED,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE;AACL,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,SAAS,EAAE,OAAO;AACnB,qBAAA,EAAA,CACD,CACE,CACP;YAED,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAA;gBAC1C,WAAW,KACV,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;qBACzB,EAAA,EAEA,WAAW,CACT,CACN;gBAEA,aAAa,KACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,iBAAiB,EAC/C,KAAK,EAAE;AACL,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,wBAAA,OAAO,EAAE,GAAG;AACZ,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,eAAe,EAAE,CAAC;AAClB,wBAAA,eAAe,EAAE,UAAU;AAC3B,wBAAA,QAAQ,EAAE,QAAQ;qBACnB,EAAA,EAEA,aAAa,CACZ,CACL;gBAEA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC3B,wBAAA,SAAS,EAAE,MAAM;AAClB,qBAAA,EAAA,EAEA,YAAY,CACT,CACP,CACG,CACF;AAEV,IAAA,CAAC;IAED,MAAM,mBAAmB,GAAG,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK;AAC9D,UAAE;UACA,uBAAuB;AAE3B,IAAA,MAAM,kBAAkB,GAAG,OACzB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,UAAU,EACxC,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,SAAA,EAAA,EAAA,kBAAA,CAGG,CACP;AAED,IAAA,MAAM,oBAAoB,GAAG,OAC3B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,YAAY,EAC1C,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,SAAA,EAAA,EAAA,oBAAA,CAGG,CACP;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,GAAU,MACpC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,UAAU,EACxC,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AAC1B,SAAA,EAAA;;AAEO,QAAA,GAAG,CAAC,OAAO,CACf,CACP;;IAGD,IAAI,UAAU,GAAU,EAAE;IAE1B,IAAI,cAAc,EAAE;;AAElB,QAAA,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE;IAC5C;SAAO,IAAI,OAAO,EAAE;QAClB,MAAM,GAAG,GAAG,OAAc;AAC1B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACxD,YAAA,UAAU,GAAG,GAAG,CAAC,OAAO;QAC1B;aAAO,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACrF,YAAA,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO;QAC/B;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACrG,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;QACpC;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjC,UAAU,GAAG,OAAO;QACtB;aAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrC,YAAA,UAAU,GAAG,GAAG,CAAC,OAAO;QAC1B;IACF;;AAGA,IAAA,MAAM,mBAAmB,GAAiB;AACxC,QAAA,KAAK,EAAE,sBAAsB;AAC7B,QAAA,WAAW,EAAE,oBAAoB;AACjC,QAAA,KAAK,EAAE,gBAAgB;AACvB,QAAA,KAAK,EAAE,cAAc;AACrB,QAAA,GAAG,EAAE,cAAc;AACnB,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,GAAG,YAAY;KAChB;;AAGD,IAAA,MAAM,YAAY,GAAG,CAAC,IAAS,EAAE,IAAwB,KAAS;AAChE,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,SAAS;AAC3B,QAAA,OAAOF,gBAAc,CAAC,IAAI,EAAE,IAAI,CAAC;AACnC,IAAA,CAAC;IAED,MAAM,WAAW,GAAiB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,KAAa,KAAI;AAC5E,QAAA,IAAI;;YAEJ,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,WAAW,CAAC;YACvE,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,aAAa,CAAC;YAC3E,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,YAAY,CAAC;YACzE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC;;AAGjE,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,WAAW,IAAI,UAAU;AACxF,YAAA,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,WAAW,CAAC,IAAI,aAAa;AACxF,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,QAAQ;AACvE,YAAA,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,YAAY;YAChF,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,GAAG,CAAC;AACvD,YAAA,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;;AAGtE,YAAA,MAAM,KAAK,GAAG,UAAU,KAAK,SAAS,GAAGE,aAAW,CAAC,UAAU,CAAC,GAAG,SAAS;;YAG5E,MAAM,YAAY,GAAwB,EAAE;AAC5C,YAAA,IAAI,mBAAmB,CAAC,MAAM,EAAE;AAC9B,gBAAA,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAI;oBACjE,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;AAC9C,gBAAA,CAAC,CAAC;YACJ;AAEA,YAAA,MAAM,UAAU,GAAe;gBAC7B,EAAE;gBACF,KAAK;gBACL,WAAW;gBACX,GAAG;gBACH,KAAK;gBACL,KAAK;AACL,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,GAAG,YAAY;;AAEf,gBAAA,IAAI,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;AACnC,gBAAA,IAAI,aAAa,IAAI,EAAE,aAAa,EAAE,CAAC;AACvC,gBAAA,IAAI,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;AACrC,gBAAA,IAAI,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;;AAE7B,gBAAA,IAAI,EAAE,IAAI;aACX;AAED,YAAA,OAAO,UAAU;QACjB;QAAE,OAAO,GAAG,EAAE;YACZ,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjE,YAAA,GAAG,CAAC,IAAI,CAAC,6CAA6C,EAAE;gBACtD,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,OAAO;AACpB,gBAAA,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,SAAS;AAC5B,aAAA,CAAC;;YAEF,OAAO;AACL,gBAAA,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC;AACjB,gBAAA,KAAK,EAAE,sBAAsB;AAC7B,gBAAA,QAAQ,EAAE,IAAI;aACf;QACH;AACF,IAAA,CAAC,CAAC;;AAGF,IAAA,MAAM,cAAc,GAAwB;AAC1C,QAAA,GAAG,KAAK;KACT;;AAGD,IAAA,MAAM,gBAAgB,GAAwB;AAC5C,QAAA,IAAI,QAAQ,KAAK,MAAM,IAAI;AACzB,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,mBAAmB,EAAE,uCAAuC;AAC5D,YAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;SAC1B,CAAC;AACF,QAAA,IAAI,QAAQ,KAAK,MAAM,IAAI;AACzB,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,mBAAmB,EAAE,uCAAuC;AAC5D,YAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;SAC1B,CAAC;KACH;;AAGD,IAAA,GAAG,CAAC,OAAO,CAAC,kCAAkC,EAAE;QAC9C,eAAe,EAAE,UAAU,CAAC,MAAM;QAClC,gBAAgB,EAAE,WAAW,CAAC,MAAM;QACpC,QAAQ;QACR,QAAQ,EAAE,CAAC,CAAC,KAAK;AACjB,QAAA,SAAS,EAAE,OAAO;AACnB,KAAA,CAAC;IAEF,IAAI,OAAO,EAAE;AACX,QAAA,GAAG,CAAC,OAAO,CAAC,wCAAwC,CAAC;AACrD,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EACxE,aAAa,GAAG,aAAa,EAAE,GAAG,oBAAoB,EAAE,CACrD;IAEV;IAEA,IAAI,KAAK,EAAE;AACT,QAAA,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE;YAChD,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;AACnB,SAAA,CAAC;AACF,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EACxE,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CACzD;IAEV;IAEA,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,QAAA,GAAG,CAAC,OAAO,CAAC,sCAAsC,CAAC;AACnD,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EACxE,WAAW,GAAG,WAAW,EAAE,GAAG,kBAAkB,EAAE,CAC/C;IAEV;AAEA,IAAA,MAAM,QAAQ,GAAG,YAAY,IAAI,mBAAmB;IAEpD,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,EACxD,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,wBAAwB,GAAG,CAAC,GAAG,SAAS,EAClD,SAAS,EAAE,aAAa,EACxB,IAAI,EAAC,SAAS,EAAA,YAAA,EACH,gBAAgB,2BACJ,WAAW,IAAI,CAAC,GAAG,CAAA,OAAA,EAAU,WAAW,CAAA,CAAE,GAAG,SAAS,EAAA;AAE5E,QAAA,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS,IAAI,OAAO,EAAE,IAAI,EAAE,aAAa,KAAK,SAAS,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,KAC5G,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,MAAM,EACpC,KAAK,EAAE;AACL,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAClC,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,aAAA,EAAA;;YAEM,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,IAAI,EAAE,aAAa,IAAI,CAAC;;YAAS,CAAC,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,IAAI,EAAE,aAAa,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CACnJ,CACP;QAGA,wBAAwB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,KACjD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gBAAA,OAAO,EAAE,GAAG;AACZ,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,GAAG,EAAE,KAAK;AACV,gBAAA,UAAU,EAAE,QAAQ;AACrB,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE;AACX,oBAAA,OAAO,EAAE,aAAa;AACtB,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,OAAO,EAAE,SAAS;AAClB,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AACnC,oBAAA,YAAY,EAAE,KAAK;AACnB,oBAAA,QAAQ,EAAE,MAAM;iBACjB,EAAA,EAAA,uBAAA,CAEM;AACP,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE;AACX,oBAAA,OAAO,EAAE,aAAa;AACtB,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,OAAO,EAAE,SAAS;AAClB,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AACnC,oBAAA,YAAY,EAAE,KAAK;AACnB,oBAAA,QAAQ,EAAE,MAAM;AACjB,iBAAA,EAAA,EAAA,eAAA,CAEM,CACH,CACP;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE,gBAAgB,IAEtB,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAC/E,CACF;AAEV;;AC1tBA;;;;AAIG;AAqCI,MAAM,KAAK,GAAyB,CAAC,EAC1C,OAAO,EACP,WAAW,EACX,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,kBAAkB,GAAG,KAAK,EAC1B,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,KAAK,GAClB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,UAAU,GAAG,WAAW,IAAI,EAAE;;IAGpC,MAAM,GAAG,GAAG,OAA6E;AACzF,IAAA,MAAM,YAAY,GAAI,GAAW,EAAE;WAC7B,GAAW,EAAE,IAAI,EAAE;AACnB,WAAA,GAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1B,WAAA,CAAC;AAEN,IAAA,MAAM,cAAc,GAAI,GAAW,EAAE;WAC/B,GAAW,EAAE,IAAI,EAAE;AACnB,WAAA,GAAW,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB;IAE/C,MAAM,KAAK,IAAK,GAAW,EAAE,KAAK,IAAI,EAAE,CAAW;IAEnD,MAAM,kBAAkB,GAAG,MAAK;QAC9B,MAAM,KAAK,GAAa,EAAE;AAE1B,QAAA,IAAI,YAAY,GAAG,CAAC,EAAE;YACpB,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,YAAY,CAAC,cAAc,EAAE,CAAA,OAAA,EAAU,YAAY,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA,CAAE,CAAC;QACvF;aAAO;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QAC1B;AAEA,QAAA,IAAI,kBAAkB,IAAI,cAAc,KAAK,SAAS,EAAE;AACtD,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAA,EAAA,CAAI,CAAC;QACnC;AAEA,QAAA,IAAI,SAAS,IAAI,KAAK,EAAE;AACtB,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAA,CAAA,CAAG,CAAC;QAC9B;AAEA,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,EAChD,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gBAAA,GAAG,KAAK;AACT,aAAA,EAAA,EAEA,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MACrB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,GAAG,EAAE,KAAK,EAAA;YACb,KAAK,GAAG,CAAC,IAAI,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAE,EAAE,EAAA,EAAG,SAAS,CAAQ;AACtH,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,UAAU,CAAC,IAAI,EAAA,EAAG,IAAI,CAAQ,CAC1C,CACR,CAAC,CACE;AAEV,IAAA,CAAC;IAED,IAAI,WAAW,EAAE;AACf,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EAChE,WAAW,CAAC;YACX,YAAY;YACZ,cAAc;YACd,KAAK;SACN,CAAC,CACE;IAEV;IAEA,OAAO,kBAAkB,EAAE;AAC7B;;ACpHA;;;;AAIG;MA6CU,UAAU,GAA8B,CAAC,EACpD,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,eAAe,EAC5B,YAAY,EAAE,gBAAgB,EAC9B,UAAU,EAAE,cAAc,EAC1B,YAAY,EACZ,QAAQ,GAAG,CAAC,EACZ,aAAa,GAAG,IAAI,EACpB,YAAY,GAAG,IAAI,EACnB,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,GACnB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE;AAC1F,IAAA,MAAM,eAAe,GAAG,WAAW,IAAI,EAAE;;AAGzC,IAAA,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY;;AAG3C,IAAA,MAAM,WAAW,GAAG,eAAe,IAAI,gBAAgB;IAEvD,MAAM,GAAG,GAAG,OAA4C;IACxD,MAAM,YAAY,GAAG;AACf,WAAA,GAAW,EAAE;WACb,GAAW,EAAE,IAAI,EAAE;AACnB,WAAA,GAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1B,WAAA,EAAE;AAEP,IAAA,MAAM,YAAY,GAAI,GAAW,EAAE;WAC7B,GAAW,EAAE,IAAI,EAAE;AACnB,WAAA,GAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1B,WAAA,CAAC;IAEN,MAAM,UAAU,GAAG;AACb,WAAA,GAAW,EAAE;WACb,GAAW,EAAE,IAAI,EAAE;AACnB,WAAA,GAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1B,WAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AAE3C,IAAA,MAAM,gBAAgB,GAAG,CAAC,IAAY,KAAI;QACxC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,UAAU,IAAI,IAAI,KAAK,WAAW;YAAE;;QAG3D,OAAO,CAAC,IAAI,CAAC;;QAGb,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,IAAI,CAAC;QACpB;AACF,IAAA,CAAC;IAED,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,QAAiB,EAAE,UAAmB,MACnF,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,MAAqB,gBAAgB,CAAC,IAAI,CAAC,EACpD,SAAS,EAAE,IAAI,CACb,eAAe,CAAC,IAAI,EACpB,QAAQ,IAAI,eAAe,CAAC,UAAU,EACtC,UAA0C,CAC3C,EACD,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,YAAA,MAAM,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAE;AAClC,YAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;YAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,YAAA,eAAe,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU;AAC1E,YAAA,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI;YAC5C,MAAM,EAA+B,SAAS;YAC9C,OAAO,EAAqB,CAAC;AAC7B,YAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,YAAA,QAAQ,EAAE,MAAM;YAChB,IAAI,QAAQ,IAAI;AACd,gBAAA,UAAU,EAAE,MAAM;aACnB,CAAC;SACH,EAAA,EAEA,IAAI,CACE,CACV;AAED,IAAA,IAAI,UAAU,IAAI,CAAC,EAAE;AACnB,QAAA,OAAO,IAAI;IACb;;IAGA,MAAM,cAAc,GAAG,MAA8B;QACnD,MAAM,KAAK,GAA4B,EAAE;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AAE1C,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;AACpD,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC;;AAG3D,QAAA,IAAI,WAAW,IAAI,SAAS,EAAE;YAC5B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC1C;AACA,QAAA,IAAI,WAAW,IAAI,UAAU,GAAG,SAAS,EAAE;AACzC,YAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC;QACpD;AAEA,QAAA,IAAI,aAAa,IAAI,SAAS,GAAG,CAAC,EAAE;AAClC,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,YAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,gBAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACxB;QACF;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACf;AAEA,QAAA,IAAI,aAAa,IAAI,OAAO,GAAG,UAAU,EAAE;AACzC,YAAA,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,EAAE;AAC5B,gBAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACxB;AACA,YAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QACxB;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AAEpC,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,EACrD,KAAK,EAAE,KAAK,gBACD,YAAY,EAAA;AAEvB,QAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,IAAI,EAC/B,KAAK,EAAE;AACL,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,cAAc,EAAE,QAAQ;AACxB,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,QAAQ,EAAE,MAAM;AACjB,aAAA,EAAA;AAEA,YAAA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA;AACE,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,WAAW,KAAK,CAAC,EAC3B,OAAO,EAAE,MAAM,gBAAgB,CAAC,WAAW,GAAG,CAAC,CAAC,EAChD,SAAS,EAAE,IAAI,CACb,eAAe,CAAC,IAAI,EACpB,WAAW,KAAK,CAAC,IAAI,eAAe,CAAC,YAAY,CAClD,EACD,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,wBAAA,MAAM,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAE;AAClC,wBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;wBAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,wBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;wBACxB,MAAM,EAAE,WAAW,KAAK,CAAC,GAAG,aAAa,GAAG,SAAS;wBACrD,OAAO,EAAE,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AACpC,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;qBAC3C,EAAA,YAAA,EACU,eAAe,EAAA,EAAA,UAAA,CAGnB,CACN,CACN;YAEA,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC/B,gBAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,oBAAA,QACE,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,GAAG,EAAE,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE,EAAA;AAC1B,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,QAAQ,EACnC,KAAK,EAAE;AACL,gCAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,gCAAA,MAAM,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAE;AAClC,gCAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gCAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;6BAC3C,EAAA,EAAA,KAAA,CAGI,CACJ;gBAET;AAEA,gBAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,WAAW;gBACrC,MAAM,UAAU,GAAG,KAAK;AAExB,gBAAA,QACE,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,GAAG,EAAE,IAAI,IACV;sBACG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU;sBAC3C,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CACpD;AAET,YAAA,CAAC,CAAC;AAED,YAAA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA;AACE,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,WAAW,KAAK,UAAU,EACpC,OAAO,EAAE,MAAM,gBAAgB,CAAC,WAAW,GAAG,CAAC,CAAC,EAChD,SAAS,EAAE,IAAI,CACb,eAAe,CAAC,IAAI,EACpB,WAAW,KAAK,UAAU,IAAI,eAAe,CAAC,YAAY,CAC3D,EACD,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,wBAAA,MAAM,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAE;AAClC,wBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;wBAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,wBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;wBACxB,MAAM,EAAE,WAAW,KAAK,UAAU,GAAG,aAAa,GAAG,SAAS;wBAC9D,OAAO,EAAE,WAAW,KAAK,UAAU,GAAG,GAAG,GAAG,CAAC;AAC7C,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC3C,qBAAA,EAAA,YAAA,EACU,WAAW,EAAA,EAAA,MAAA,CAGf,CACN,CACN,CACE,CACD;AAEV;;AC3RA;;;;;AAKG;AA6CI,MAAM,MAAM,GAA0B,CAAC,EAC5C,OAAO,EACP,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,WAAW,GAAG,YAAY,EAC1B,aAAa,GAAG,IAAI,GACrB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;IACpC,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE;AAClE,IAAA,MAAM,WAAW,GAAG,WAAW,IAAI,EAAE;;IAGrC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CACtD,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CACxC;;IAGD,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,aAAa,IAAI,YAAY,IAAI,CAAC,kBAAkB,EAAE;AACxD,YAAA,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACjC;IACF,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,MAAM,KAAK,GAAG,SAAS,KAAK;AAC1B,UAAE;AACF,UAAE,CAAC,aAAa,IAAI,kBAAkB;AACpC,cAAE;cACA,aAAa;AAEnB,IAAA,MAAM,YAAY,GAAG,CAAC,CAAuC,KAAI;AAC/D,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QAC/B,gBAAgB,CAAC,QAAQ,CAAC;;QAG1B,IAAI,aAAa,EAAE;YACjB,SAAS,CAAC,QAAQ,CAAC;QACrB;;QAGA,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,QAAQ,CAAC;QACxB;AACF,IAAA,CAAC;IAED,MAAM,mBAAmB,GAAG,OAC1B,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAC9C,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,YAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAClC,YAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,YAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;YAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,YAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,GAAG,KAAK;AACT,SAAA,EAAA,YAAA,EACU,cAAc,EAAA,EAExB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAClB,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,MAAM,CAAC,KAAK,EACjB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAA,EAE5B,MAAM,CAAC,KAAK,CACN,CACV,CAAC,CACK,CACV;IAED,IAAI,YAAY,EAAE;AAChB,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EACjE,YAAY,CAAC;YACZ,KAAK;AACL,YAAA,QAAQ,EAAE,YAAY;YACtB,OAAO;SACR,CAAC,CACE;IAEV;IAEA,OAAO,mBAAmB,EAAE;AAC9B;;AChJA;;;;AAIG;AAyDI,MAAM,MAAM,GAA0B,CAAC,EAC5C,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,aAAa,EACb,WAAW,EACX,eAAe,EACf,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,GACnB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE;AAChG,IAAA,MAAM,WAAW,GAAG,WAAW,IAAI,EAAE;IACrC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAA0B,EAAE,CAAC;;AAGjF,IAAA,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY;;IAG3C,MAAM,aAAa,GAAG,MAAc;AAClC,QAAA,IAAI,UAAU;AAAE,YAAA,OAAO,UAAU;;;AAIjC,QAAA,MAAM,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE;AAC5B,eAAA,OAAO,EAAE;AACT,eAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;AACrB,eAAA,IAAI;AAET,QAAA,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE;YACvC,UAAU,EAAE,CAAC,CAAC,OAAO;AACrB,YAAA,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI;YACxB,SAAS,EAAE,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,WAAW,IAAI,IAAI;AACzF,YAAA,WAAW,EAAE,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAChD,YAAA,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YACxD,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;AACjG,SAAA,CAAC;;QAGF,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC3C,YAAA,GAAG,CAAC,OAAO,CAAC,qCAAqC,EAAE;gBACjD,aAAa,EAAE,SAAS,GAAG,OAAO,SAAS,GAAG,MAAM;AACpD,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;AACjC,gBAAA,gBAAgB,EAAE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM;gBACzE,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM;AAClF,aAAA,CAAC;AACF,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAU,KAAI;YAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK;YACjD,OAAO;AACL,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS;gBAC/B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,MAAM;oBACrE,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AAClF,iBAAA,CAAC,CAAC,GAAG,EAAE;aACT;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE;YACtC,KAAK,EAAE,SAAS,CAAC,MAAM;YACvB,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7E,SAAA,CAAC;AAEF,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,aAAa,EAAE;IAE9B,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,QAAiB,KAAI;AAC5E,QAAA,MAAM,WAAW,GAAG,CAAC,QAAQ;AAC7B,QAAA,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;QAG7E,IAAI,WAAW,EAAE;AACf,YAAA,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC;QAC7B;aAAO;AACL,YAAA,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;QAChC;;QAGA,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI;AACF,gBAAA,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC;YAC1C;YAAE,OAAO,GAAG,EAAE;gBACZ,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjE,gBAAA,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE;oBACnD,KAAK;oBACL,KAAK;AACL,oBAAA,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,KAAK,CAAC,OAAO;AACrB,iBAAA,CAAC;YACJ;QACF;AACF,IAAA,CAAC;AAED,IAAA,MAAM,oBAAoB,GAAG,CAAC,KAAa,KAAI;AAC7C,QAAA,iBAAiB,CAAC,CAAC,IAAI,MAAM;AAC3B,YAAA,GAAG,IAAI;AACP,YAAA,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AACtB,SAAA,CAAC,CAAC;AACL,IAAA,CAAC;IAED,MAAM,sBAAsB,GAAG,CAAC,IAAe,EAAE,KAAY,EAAE,KAAa,KAAI;AAC9E,QAAA,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,QAAQ;AAElE,QAAA,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,QAAQ,EAAE;AACpC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,EAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAA,CAAE,EACnC,SAAS,EAAE,IAAI,CACb,WAAW,CAAC,SAAS,EACrB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC,eAAe,CAC3H,EACD,OAAO,EAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,EACjF,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,gBAAA,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,gBAAA,eAAe,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa;AACjJ,gBAAA,UAAU,EAAE,4BAA4B;AACzC,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,EAC3G,QAAQ,EAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,EAClF,SAAS,EAAE,WAAW,CAAC,QAAQ,EAC/B,KAAK,EAAE;AACL,oBAAA,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAChC,oBAAA,MAAM,EAAE,SAAS;AAClB,iBAAA,EAAA,YAAA,EACW,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,EAAE,EAAA,CACrC;AACF,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,WAAW,CAAC,cAAc,EACrC,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;iBACzB,EAAA,EAEA,IAAI,CAAC,KAAK,CACN;AACP,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,WAAW,CAAC,cAAc,EACrC,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;oBACzC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI;AACtD,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAChC,iBAAA,EAAA;;AAEC,gBAAA,IAAI,CAAC,KAAK;AACP,gBAAA,GAAA,CAAA,CACH;AAEV,IAAA,CAAC;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAY,EAAE,KAAa,KAAI;QACzD,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK;QACvD,MAAM,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ;AAE7C,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,CAAC,KAAK,EAChB,SAAS,EAAE,WAAW,CAAC,KAAK,EAC5B,KAAK,EAAE;AACL,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,gBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;gBAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACtG,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,WAAW,CAAC,UAAU,EACjC,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAClC,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,iBAAA,EAAA,EAEA,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CACxB;AACL,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,WAAW,CAAC,SAAS,EAAA,EAClC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAI;gBACpC,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS;AACtD,gBAAA,OAAO;sBACH,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW;sBACxC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC;AACtD,YAAA,CAAC,CAAC,CACE;YACL,QAAQ,IAAI,OAAO,IAAI,CAAC,UAAU,KACjC,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,EAChD,KAAK,EAAE;AACL,oBAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC9B,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,eAAe,EAAE,aAAa;AAC9B,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC3B,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,oBAAA,cAAc,EAAE,WAAW;AAC5B,iBAAA,EAAA;;AAEW,gBAAA,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ;yBAClC,CACV;YACA,UAAU,IAAI,OAAO,KACpB,gCACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,EAChD,KAAK,EAAE;AACL,oBAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC9B,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,eAAe,EAAE,aAAa;AAC9B,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC3B,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,oBAAA,cAAc,EAAE,WAAW;iBAC5B,EAAA,EAAA,WAAA,CAGM,CACV,CACG;AAEV,IAAA,CAAC;AAED,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,QAAA,GAAG,CAAC,OAAO,CAAC,8BAA8B,EAAE;YAC1C,UAAU,EAAE,CAAC,CAAC,OAAO;YACrB,WAAW,EAAE,OAAO,GAAG,OAAO,OAAO,GAAG,MAAM;AAC/C,SAAA,CAAC;AASF,QAAA,OAAO,IAAI;IACb;IAEA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,EACjD,KAAK,EAAE,KAAK,EAAA,EAEX,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC3B,QAAA,OAAO;AACL,cAAE,WAAW,CAAC,KAAK,EAAE,KAAK;AAC1B,cAAE,kBAAkB,CAAC,KAAY,CAAC;IACtC,CAAC,CAAC,CACE;AAEV;;AChVA;;;;AAIG;AA0CI,MAAM,kBAAkB,GAAsC,CAAC,EACpE,WAAW,GAAG,EAAE,EAChB,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,YAAY,GAAG,IAAI,EACnB,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,GACnB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,gBAAgB,GAAG,WAAW,IAAI,EAAE;AAE1C,IAAA,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,KAAa,KAAI;QACnD,IAAI,iBAAiB,EAAE;AACrB,YAAA,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;QACjC;AACF,IAAA,CAAC;IAED,MAAM,cAAc,GAAG,MAAK;QAC1B,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,EAAE;QACd;AACF,IAAA,CAAC;AAED,IAAA,MAAM,uBAAuB,GAAG,CAAC,UAAsB,EAAE,KAAa,MACpE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,UAAU,CAAC,KAAK,CAAA,CAAA,EAAI,UAAU,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,EACvD,SAAS,EAAE,gBAAgB,CAAC,IAAI,EAChC,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE;AACzD,YAAA,MAAM,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,EAAA,CAAI;AAC3D,YAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;AACnC,YAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;YAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,YAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AAC1C,SAAA,EAAA;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,gBAAA,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAChC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gBAAA,UAAU,EAAE,KAAK;AAClB,aAAA,EAAA;AAEA,YAAA,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK;AAChC,YAAA,GAAA,CAAA;AACP,QAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,gBAAA,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAChC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,aAAA,EAAA,EAEA,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,KAAK,CACvC;QACP,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAC9D,SAAS,EAAE,gBAAgB,CAAC,WAAW,EACvC,KAAK,EAAE;AACL,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,eAAe,EAAE,aAAa;AAC9B,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC/B,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,cAAc,EAAE,QAAQ;AACxB,gBAAA,YAAY,EAAE,KAAK;AACnB,gBAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,mBAAmB;AAC3D,aAAA,EAAA,YAAA,EACW,SAAS,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA,EAAA,EAAK,UAAU,CAAC,KAAK,CAAA,CAAE,EAAA,EAAA,QAAA,CAGzE,CACL,CACP;AAED,IAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,EACtD,KAAK,EAAE,KAAK,EAAA;AAEZ,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,IAAI,EAChC,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,YAAY,EAAE,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;aACtD,EAAA,EAEA,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,KAAI;AACrC,YAAA,OAAO;AACL,kBAAE,gBAAgB,CAAC,UAAU,EAAE,KAAK;AACpC,kBAAE,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC;AAChD,QAAA,CAAC,CAAC,CACE;QACL,YAAY,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,KACrC,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,gBAAgB,CAAC,cAAc,EAC1C,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE;AACzD,gBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;gBAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,gBAAA,cAAc,EAAE,WAAW;aAC5B,EAAA,EAAA,mBAAA,CAGM,CACV,CACG;AAEV;;ACjLA;;;;;AAKG;AA0CI,MAAM,gBAAgB,GAAoC,CAAC,EAChE,WAAW,GAAG,KAAK,EACnB,UAAU,GAAG,mBAAmB,EAChC,aAAa,GAAG,oBAAoB,EACpC,cAAc,EACd,cAAc,GAAG,EAAE,EACnB,OAAO,EACP,YAAY,EACZ,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,aAAa,GAAG,KAAK,GACtB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE;AAC7F,IAAA,MAAM,UAAU,GAAG,WAAW,IAAI,EAAE;;AAGpC,IAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAK;AACvC,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,IAAG;AAC5B,YAAA,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;YAClD,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,KAAK;AACrE,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AAEjD,IAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEpF,MAAM,WAAW,GAAG,MAAK;AACvB,QAAA,IAAI,CAAC,QAAQ;YAAE;;QAGf,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE/C,YAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAG;gBAC9B,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;AAC3C,YAAA,CAAC,CAAC;;AAEF,YAAA,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,gBAAA,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1B;QACF;aAAO;;AAEL,YAAA,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;QACjC;;QAGA,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QACpB;;QAGA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,EAAE;QACX;AACF,IAAA,CAAC;;AAGD,IAAA,IAAI,aAAa,IAAI,CAAC,QAAQ,EAAE;AAC9B,QAAA,OAAO,IAAI;IACb;;IAGA,IAAI,YAAY,EAAE;AAChB,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EAC3D,YAAY,CAAC;YACZ,QAAQ;AACR,YAAA,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,CAAC,QAAQ;SACpB,CAAC,CACE;IAEV;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;AAC5D,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,CAAC,QAAQ,EACnB,SAAS,EAAE,IAAI,CACb,UAAU,CAAC,MAAM,EACjB,CAAC,QAAQ,IAAI,UAAU,CAAC,cAAc,CACvC,EACD,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE;AACzD,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;gBAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACtD,gBAAA,eAAe,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AACrE,gBAAA,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa;AACxD,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;sBACxC,KAAK,CAAC;AACR,sBAAE,KAAK,CAAC,YAAY,CAAC,MAAM;gBAC7B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa;gBAC5C,OAAO,EAAE,QAAQ,GAAG,CAAC,GAAG,GAAG;AAC3B,gBAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,mBAAmB;aAC3D,EAAA,YAAA,EACW,QAAQ,GAAG,UAAU,GAAG,aAAa,EAAA,EAEhD,QAAQ,GAAG,UAAU,GAAG,aAAa,CAC/B,CACL;AAEV;;ACxJA;;;;AAIG;AAmCI,MAAM,YAAY,GAAgC,CAAC,EACxD,OAAO,EACP,QAAQ,EACR,MAAM,EACN,MAAM,EACN,YAAY,GAAG,OAAO,EACtB,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,mBAAmB,GAAG,KAAK,GAC5B,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,WAAW,GAAG,WAAW,IAAI,EAAE;IACrC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE/C,SAAS,CAAC,MAAK;QACb,MAAM,WAAW,GAAG,MAAK;AACvB,YAAA,WAAW,CAAC,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC;AACvC,QAAA,CAAC;AAED,QAAA,WAAW,EAAE;AACb,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC;QAC9C,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC;IAChE,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,EACjD,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,YAAA,GAAG,KAAK;AACT,SAAA,EAAA;QAEA,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,WAAW,CAAC,MAAM,EAC7B,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,YAAY,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AAChD,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;aACzC,EAAA,EAEA,MAAM,CACA,CACV;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACxB,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,aAAA,EAAA;AAEA,YAAA,OAAO,KAAK,CAAC,QAAQ,IAAI,mBAAmB,CAAC,KAC5C,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,SAAS,EAAE,WAAW,CAAC,OAAO,EAC9B,KAAK,EAAE;AACL,oBAAA,KAAK,EAAE,YAAY;AACnB,oBAAA,QAAQ,EAAE,YAAY;iBACvB,EAAA,EAEA,OAAO,CACF,CACT;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,WAAW,CAAC,IAAI,EAC3B,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,CAAC;oBACP,QAAQ,EAAE,CAAC;AACX,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;iBACzB,EAAA,EAEA,QAAQ,CACJ,CACH;QAEL,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,WAAW,CAAC,MAAM,EAC7B,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,SAAS,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AAC7C,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACzC,aAAA,EAAA,EAEA,MAAM,CACA,CACV,CACG;AAEV;;ACzIA;;;;;AAKG;AA0DH;;AAEG;AACH,MAAM,yBAAyB,GAAG,CAChC,WAAoD,EACpD,KAAa,KACqB;AAClC,IAAA,IAAI,GAAuB;AAC3B,IAAA,IAAI,GAAuB;AAE3B,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;;YAErB,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACrD,IAAI,QAAQ,EAAE;gBACZ,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B;;YAEA,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACrD,IAAI,QAAQ,EAAE;gBACZ,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B;QACF;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;AACrB,CAAC;AAEM,MAAM,UAAU,GAA8B,CAAC,EACpD,KAAK,EACL,KAAK,EACL,GAAG,EACH,GAAG,EACH,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,cAAc,EAC1B,IAAI,GAAG,CAAC,EACR,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,eAAe,GAAG,IAAI,EACtB,WAAW,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EACxC,aAAa,GAAG,IAAI,GACrB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;IACpC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE;AACzE,IAAA,MAAM,eAAe,GAAG,WAAW,IAAI,EAAE;;AAGzC,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;AAC7D,QAAA,OAAO,yBAAyB,CAAC,WAAW,EAAE,KAAK,CAAC;IACtD,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAEvC,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAqB,cAAc,IAAI,UAAU,CAAC,GAAG,CAAC;AACpG,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAqB,cAAc,IAAI,UAAU,CAAC,GAAG,CAAC;AACpG,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAqB,cAAc,IAAI,UAAU,CAAC,GAAG,CAAC;AAClG,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAqB,cAAc,IAAI,UAAU,CAAC,GAAG,CAAC;;IAGlG,SAAS,CAAC,MAAK;QACb,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,UAAU,CAAC,GAAG,KAAK,UAAU,IAAI,UAAU,CAAC,GAAG,KAAK,UAAU,EAAE;AAClE,gBAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;AAC9B,gBAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;AAC9B,gBAAA,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;AAC7B,gBAAA,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;YAC/B;QACF;AACF,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;AAEnD,IAAA,MAAM,UAAU,GAAG,cAAc,KAAK,SAAS,GAAG,cAAc,GAAG,WAAW;AAC9E,IAAA,MAAM,UAAU,GAAG,cAAc,KAAK,SAAS,GAAG,cAAc,GAAG,WAAW;;IAG9E,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,MAA0B,EAAE,MAA0B,KAAI;AAChG,QAAA,IAAI,CAAC,aAAa;YAAE;;AAGpB,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;gBACrB,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1C;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,aAAa,CAAC,KAAK,EAAE,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC;QAC7C;AACA,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,aAAa,CAAC,KAAK,EAAE,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,EAAE,IAAI,CAAC,CAAC;QAC5C;AAAO,aAAA,IAAI,MAAM,KAAK,SAAS,EAAE;;YAE/B,aAAa,CAAC,KAAK,EAAE,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,EAAE,IAAI,CAAC;QAC3C;AACF,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAExE,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAsC,KAAI;QAC7E,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5E,cAAc,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC;YACrC,IAAI,aAAa,EAAE;AACjB,gBAAA,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;YAClC;QACF;IACF,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAEpE,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAsC,KAAI;QAC7E,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5E,cAAc,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC;YACrC,IAAI,aAAa,EAAE;AACjB,gBAAA,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC;YAClC;QACF;IACF,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAEpE,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,aAAa,CAAC,WAAW,CAAC;QAC1B,aAAa,CAAC,WAAW,CAAC;AAC1B,QAAA,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC;QAC5C,IAAI,aAAa,EAAE;AACjB,YAAA,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC;QACzC;IACF,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAEjE,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,cAAc,CAAC,SAAS,CAAC;QACzB,cAAc,CAAC,SAAS,CAAC;QACzB,aAAa,CAAC,SAAS,CAAC;QACxB,aAAa,CAAC,SAAS,CAAC;;QAGxB,IAAI,aAAa,EAAE;AACjB,YAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,gBAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;oBACrB,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;gBACxC;AACF,YAAA,CAAC,CAAC;QACJ;QAEA,IAAI,aAAa,EAAE;AACjB,YAAA,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;QACrC;AACF,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAExE,MAAM,uBAAuB,GAAG,OAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,EACrD,KAAK,EAAE,KAAK,EAAA;QAEX,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,KAAK,EAChC,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACzB,EAAA,EAEA,KAAK,CACA,CACT;AACD,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,UAAU,EACrC,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACzB,aAAA,EAAA;YAED,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,EAAE,EACjD,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,WAAW,CAAC,GAAG,EAC5B,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EACtC,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,oBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;oBAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,oBAAA,OAAO,EAAE,MAAM;iBAChB,EAAA,CACD;AACF,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,SAAS,EACpC,KAAK,EAAE;AACL,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,oBAAA,OAAO,EAAE,GAAG;iBACb,EAAA,EAAA,IAAA,CAGI;YACP,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,EAAE,EACjD,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,WAAW,CAAC,GAAG,EAC5B,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EACtC,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,oBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;oBAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,oBAAA,OAAO,EAAE,MAAM;iBAChB,EAAA,CACD;AACD,YAAA,eAAe,KACd,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,eAAe,CAAC,MAAM,EACjC,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE;AACzD,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AACrC,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA,EAAA,EAAA,OAAA,CAGM,CACV;AACA,YAAA,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,MAC5G,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE;AACzD,oBAAA,eAAe,EAAE,aAAa;AAC9B,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,oBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;oBAC1C,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AAC1C,iBAAA,EAAA,EAAA,OAAA,CAGM,CACV,CACG,CACF,CACP;IAED,IAAI,gBAAgB,EAAE;AACpB,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EACrE,gBAAgB,CAAC;AAChB,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,WAAW,EAAE,CAAC,KAAK,KAAI;gBACrB,cAAc,CAAC,KAAK,CAAC;AACrB,gBAAA,IAAI,CAAC,eAAe,IAAI,aAAa,EAAE;AACrC,oBAAA,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;gBAClC;YACF,CAAC;AACD,YAAA,WAAW,EAAE,CAAC,KAAK,KAAI;gBACrB,cAAc,CAAC,KAAK,CAAC;AACrB,gBAAA,IAAI,CAAC,eAAe,IAAI,aAAa,EAAE;AACrC,oBAAA,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC;gBAClC;YACF,CAAC;AACD,YAAA,OAAO,EAAE,WAAW;SACrB,CAAC,CACE;IAEV;IAEA,OAAO,uBAAuB,EAAE;AAClC;;ACjWA;;;;;AAKG;AA0CI,MAAM,WAAW,GAA+B,CAAC,EACtD,KAAK,EACL,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,KAAK,GAAG,MAAM,EACd,aAAa,GAAG,IAAI,GACrB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;IACpC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE;AAClD,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE;AAC3C,IAAA,MAAM,gBAAgB,GAAG,WAAW,IAAI,EAAE;;AAG1C,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AAC1D,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;;IAGlF,SAAS,CAAC,MAAK;QACb,IAAI,aAAa,IAAI,WAAW,IAAI,YAAY,KAAK,WAAW,CAAC,KAAK,EAAE;YACtE,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;QACxD;IACF,CAAC,EAAE,EAAE,CAAC;;IAGN,MAAM,KAAK,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa;AAE1D,IAAA,MAAM,YAAY,GAAG,CAAC,CAAuC,KAAI;AAC/D,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QAC7C,gBAAgB,CAAC,QAAQ,CAAC;;QAG1B,IAAI,aAAa,EAAE;AACjB,YAAA,YAAY,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;;AAE7C,YAAA,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;QAClB;;QAGA,IAAI,mBAAmB,EAAE;YACvB,mBAAmB,CAAC,QAAQ,CAAC;QAC/B;AACF,IAAA,CAAC;;IAGD,IAAI,YAAY,EAAE;AAChB,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EACjE,YAAY,CAAC;YACZ,KAAK;AACL,YAAA,QAAQ,EAAE,YAAY;YACtB,KAAK;SACN,CAAC,CACE;IAEV;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,EACjD,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACxB,YAAA,GAAG,KAAK;AACT,SAAA,EAAA;AAEA,QAAA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACzB,EAAA,EAEA,KAAK,CACA,CACT;AACD,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,gBAAgB,CAAC,MAAM,EAClC,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAClC,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;AAC1C,gBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AAC1C,gBAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;sBACxC,KAAK,CAAC;AACR,sBAAE,KAAK,CAAC,YAAY,CAAC,MAAM;AAC7B,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,OAAO,EAAE,MAAM;AAChB,aAAA,EAAA,YAAA,EACU,kBAAkB,EAAA,EAE5B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MACd,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,KAAK,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,SAAS,EAAE,gBAAgB,CAAC,MAAM,EAAA,EAEjC,IAAI,CAAC,KAAK,CACJ,CACV,CAAC,CACK,CACL;AAEV;;AC7JA;;;;;AAKG;MAwDU,YAAY,GAAgC,CAAC,EACxD,SAAS,EACT,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,GAAG,IAAI,EACrB,iBAAiB,GAAG,KAAK,EACzB,eAAe,GAAG,GAAG,EACrB,YAAY,EACZ,aAAa,GAAG,WAAW,EAC3B,YAAY,GAAG,YAAY,EAC3B,UAAU,EACV,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,aAAa,GAAG,IAAI,GACrB,KAAI;IACH,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE;AAClD,IAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE;AACnE,IAAA,MAAM,iBAAiB,GAAG,WAAW,IAAI,EAAE;;IAG3C,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAe,EAAE,CAAC;IACxE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACzD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC;AAChD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;;AAGvC,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,QAAa,KAAkB;AAC9D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;QACxB,IAAI,QAAQ,CAAC,OAAO;YAAE,OAAO,QAAQ,CAAC,OAAO;QAC7C,IAAI,QAAQ,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAC,IAAI;AACvC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,QAAQ;AAC5C,QAAA,OAAO,EAAE;IACX,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;;IAG/E,MAAM,YAAY,GAAW,OAAO,EAAE,YAAY,IAAK,OAAe,EAAE,KAAK,IAAI,CAAC;IAClF,MAAM,YAAY,GAAW,YAAY,CAAC,QAAQ,EAAE,CAAC,YAAY,IAAI,EAAE;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACzD,IAAA,MAAM,UAAU,GAAG,WAAW,IAAI,UAAU;;IAG5C,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE;AAEzB,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;;YAErB,kBAAkB,CAAC,WAAW,CAAC;QACjC;AAAO,aAAA,IAAI,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE;;AAE5C,YAAA,kBAAkB,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC;QACvD;AAEA,QAAA,WAAW,CAAC,OAAO,GAAG,WAAW;QACjC,gBAAgB,CAAC,KAAK,CAAC;AACzB,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;;IAG9B,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;YACrB,kBAAkB,CAAC,WAAW,CAAC;AAC/B,YAAA,WAAW,CAAC,OAAO,GAAG,CAAC;QACzB;AACF,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;;AAGb,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAK;AACtC,QAAA,IAAI,UAAU,IAAI,OAAO,IAAI,aAAa;YAAE;QAE5C,gBAAgB,CAAC,IAAI,CAAC;QACtB,IAAI,aAAa,EAAE;AACjB,YAAA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;QAC1B;AACF,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;;IAG7E,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE;QAEhD,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,CAAC,OAAO,KAAI;AACV,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AACrE,gBAAA,cAAc,EAAE;YAClB;AACF,QAAA,CAAC,EACD,EAAE,SAAS,EAAE,eAAe,EAAE,CAC/B;AAED,QAAA,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;AAErC,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC,IAAA,CAAC,EAAE,CAAC,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;;AAG5F,IAAA,MAAM,YAAY,GAAG,CAAC,GAAe,EAAE,KAAyB,KAAY;QAC1E,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACzC,YAAA,OAAQ,GAAW,CAAC,KAAK,CAAC,IAAI,EAAE;QAClC;AACA,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAW;AACjD,QAAA,OAAQ,GAAW,CAAC,WAAW,CAAC,IAAI,EAAE;AACxC,IAAA,CAAC;;AAGD,IAAA,MAAM,gBAAgB,GAAG,CAAC,GAAe,EAAE,KAAa,KAAI;AAC1D,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;AAC3D,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE;AAC7E,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,IAAK,GAAW,CAAC,QAAQ,IAAI,EAAE;AACpF,QAAA,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK;AAErD,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,KAAK,EACpB,SAAS,EAAE,iBAAiB,CAAC,IAAI,EACjC,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AACzB,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,gBAAA,YAAY,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;gBAChD,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;AAC1C,gBAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,mBAAmB;AAC3D,aAAA,EACD,OAAO,EAAE,MAAM,UAAU,GAAG,GAAG,EAAE,KAAK,CAAC,EACvC,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,EACvC,QAAQ,EAAE,UAAU,GAAG,CAAC,GAAG,SAAS,EAAA;AAEnC,YAAA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,KAAK,EACV,KAAK,EAAE;AACL,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,SAAS,EAAE,OAAO;AAClB,oBAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;0BACxC,KAAK,CAAC;AACR,0BAAE,KAAK,CAAC,YAAY,CAAC,KAAK;AAC7B,iBAAA,EAAA,CACD,CACH;AACD,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAA;AACrB,gBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,KAAK,EAAE;AACL,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;wBAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,IAAI,GAAG;AACxD,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,qBAAA,EAAA,EAEA,KAAK,CACH;AACJ,gBAAA,WAAW,KACV,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,KAAK,EAAE;AACL,wBAAA,MAAM,EAAE,CAAC;AACT,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;wBACjC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;qBACvD,EAAA,EAEA,WAAW,CACV,CACL;AACA,gBAAA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,cAAc;AACvB,wBAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC9B,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;wBAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,GAAG;AACpD,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC5B,qBAAA,EAAA;;oBAEC,OAAO,KAAK,KAAK,QAAQ,GAAI,KAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAC7D,CACR,CACG,CACF;AAEV,IAAA,CAAC;;AAGD,IAAA,MAAM,kBAAkB,GAAG,OACzB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,iBAAiB,CAAC,KAAK,EAClC,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;AAClC,SAAA,EAAA,EAAA,kBAAA,CAGG,CACP;;AAGD,IAAA,MAAM,oBAAoB,GAAG,OAC3B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,iBAAiB,CAAC,OAAO,EACpC,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;SAClC,EAAA,EAEA,YAAY,CACT,CACP;;AAGD,IAAA,MAAM,qBAAqB,GAAG,OAC5B,gCACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,UAAU,IAAI,aAAa,EACrC,SAAS,EAAE,IAAI,CACb,iBAAiB,CAAC,QAAQ,EAC1B,CAAC,UAAU,IAAI,aAAa,KAAK,iBAAiB,CAAC,gBAAgB,CACpE,EACD,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,YAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC/B,YAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;YAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACtD,YAAA,eAAe,EAAE,UAAU,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO;AACxF,YAAA,KAAK,EAAE,UAAU,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,SAAS;AAC3E,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;kBACxC,KAAK,CAAC;AACR,kBAAE,KAAK,CAAC,YAAY,CAAC,MAAM;YAC7B,MAAM,EAAE,UAAU,IAAI,aAAa,GAAG,aAAa,GAAG,SAAS;AAC/D,YAAA,UAAU,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,mBAAmB;AAC3D,SAAA,EAAA,EAEA,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,CACvE,CACV;;IAGD,IAAI,OAAO,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EAClE,aAAa,GAAG,aAAa,EAAE,GAAG,oBAAoB,EAAE,CACrD;IAEV;;IAGA,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA,EAClE,WAAW,GAAG,WAAW,EAAE,GAAG,kBAAkB,EAAE,CAC/C;IAEV;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;AACnE,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,iBAAiB,CAAC,IAAI,IACnC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAC9B,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CACjE,CACG;QAGL,cAAc,IAAI,CAAC,iBAAiB,IAAI,CAAC,UAAU,KAClD;AACE,cAAE,cAAc,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE;cAChF,qBAAqB,EAAE,CAC5B;AAGA,QAAA,aAAa,KAAK,aAAa,GAAG,aAAa,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAG3E,QAAA,iBAAiB,IAAI,CAAC,UAAU,KAC/B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EACrC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAClC,MAAM,EAAA,CAClB,CACH,CACG;AAEV;;ACjWA;;;;AAIG;AAsCI,MAAM,SAAS,GAA6B,CAAC,EAClD,GAAG,EACH,SAAS,EACT,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,GAAG,GAAG,MAAM,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,GACN,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,cAAc,GAAG,WAAW,IAAI,EAAE;;AAGxC,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAK;AACpC,QAAA,OAAO,mBAAmB,CAAC;YACzB,GAAG;YACH,SAAS;AACT,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,OAAO,EAAE,SAAS;AACnB,SAAA,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;;AAGpB,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAsB;;QAE1C,MAAM,WAAW,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,SAAS,CAAC;;AAGhF,QAAA,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAgB,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE;YACtE,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,gBAAgB;YACrD,OAAO,wBAAwB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;QAC5D;AAEA,QAAA,OAAO,WAAW;IACpB,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;;AAG7C,IAAA,MAAM,qBAAqB,GAAwB;AACjD,QAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;QAClD,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,IAAI,GAAG;AACxD,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,YAAY,EAAE,KAAK;KACpB;;IAGD,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAmB,EAAE,KAAa,KAAI;AACrE,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,iBAAiB,EAAE;AACrB,gBAAA,OAAO,oBAAC,KAAK,CAAC,QAAQ,EAAA,EAAC,GAAG,EAAE,KAAK,EAAA,EAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAkB;YACtF;YACA,QACE,8BACE,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,cAAc,CAAC,WAAW,EACrC,KAAK,EAAE,qBAAqB,EAAA,EAE3B,IAAI,CAAC,KAAK,CACN;QAEX;QAEA,IAAI,oBAAoB,EAAE;AACxB,YAAA,OAAO,oBAAC,KAAK,CAAC,QAAQ,EAAA,EAAC,GAAG,EAAE,KAAK,EAAA,EAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAkB;QACzF;AACA,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,cAAc,EAAA,EACvD,IAAI,CAAC,KAAK,CACN;AAEX,IAAA,CAAC,CAAC;AAEF,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,GAAG,IAAC,SAAS,EAAE,SAAS,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,IAC3D,aAAa,CACV;AAEV;AAqBO,MAAM,OAAO,GAA2B,CAAC,EAC9C,GAAG,EACH,SAAS,EACT,SAAS,GAAG,GAAG,EACf,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,GAAG,GAAG,MAAM,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,GACN,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,YAAY,GAAG,WAAW,IAAI,EAAE;;AAGtC,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAK;;QAEhC,MAAM,aAAa,GACjB,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,KAAK;AACtC,YAAA,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,KAAK;AACtC,YAAA,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC;AACzB,YAAA,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;QAE1B,IAAI,aAAa,EAAE;AACjB,YAAA,OAAO;AACJ,iBAAA,OAAO,CAAC,OAAO,EAAE,QAAQ;AACzB,iBAAA,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;QAClC;;QAGA,IAAI,IAAI,GAAG,mBAAmB,CAAC;YAC7B,GAAG;YACH,SAAS;AACT,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,OAAO,EAAE,SAAS;AACnB,SAAA,CAAC;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AAEhD,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,EAAE;;YAEhC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC;YACnD,OAAO,SAAS,GAAG,QAAQ;QAC7B;AAEA,QAAA,OAAO,IAAI;IACb,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;;AAGzC,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAsB;QAC1C,MAAM,WAAW,GAAG,qBAAqB,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC;AAE5E,QAAA,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAgB,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE;YACtE,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,YAAY;AACjD,YAAA,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7B,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;gBAC3B,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,QAAQ;YAChD;AACA,YAAA,OAAO,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC;QAC9C;AAEA,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;;AAG9D,IAAA,MAAM,qBAAqB,GAAwB;AACjD,QAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS;QAClD,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,IAAI,GAAG;AACxD,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,YAAY,EAAE,KAAK;KACpB;;IAGD,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAmB,EAAE,KAAa,KAAI;AACrE,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,iBAAiB,EAAE;AACrB,gBAAA,OAAO,oBAAC,KAAK,CAAC,QAAQ,EAAA,EAAC,GAAG,EAAE,KAAK,EAAA,EAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAkB;YACtF;YACA,QACE,8BACE,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,YAAY,CAAC,WAAW,EACnC,KAAK,EAAE,qBAAqB,EAAA,EAE3B,IAAI,CAAC,KAAK,CACN;QAEX;QAEA,IAAI,oBAAoB,EAAE;AACxB,YAAA,OAAO,oBAAC,KAAK,CAAC,QAAQ,EAAA,EAAC,GAAG,EAAE,KAAK,EAAA,EAAG,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAkB;QACzF;AACA,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,cAAc,EAAA,EACrD,IAAI,CAAC,KAAK,CACN;AAEX,IAAA,CAAC,CAAC;AAEF,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,GAAG,IAAC,SAAS,EAAE,SAAS,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,IACzD,aAAa,CACV;AAEV;AAEA;;AAEG;AACH,SAAS,gBAAgB,CAAC,IAAY,EAAE,SAAiB,EAAA;IACvD,IAAI,aAAa,GAAG,CAAC;IACrB,IAAI,MAAM,GAAG,EAAE;IACf,IAAI,KAAK,GAAG,KAAK;AAEjB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AAEpB,QAAA,IAAI,IAAI,KAAK,GAAG,EAAE;YAChB,KAAK,GAAG,IAAI;YACZ,MAAM,IAAI,IAAI;QAChB;AAAO,aAAA,IAAI,IAAI,KAAK,GAAG,EAAE;YACvB,KAAK,GAAG,KAAK;YACb,MAAM,IAAI,IAAI;QAChB;aAAO,IAAI,KAAK,EAAE;YAChB,MAAM,IAAI,IAAI;QAChB;aAAO;AACL,YAAA,IAAI,aAAa,IAAI,SAAS,EAAE;gBAC9B;YACF;YACA,MAAM,IAAI,IAAI;AACd,YAAA,aAAa,EAAE;QACjB;IACF;;AAGA,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;AACrD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;AAExD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,IAAI,SAAS;IACrB;AAEA,IAAA,OAAO,MAAM;AACf;;AC/RA;;;;;AAKG;MAwDU,gBAAgB,GAAoC,CAAC,EAChE,UAAU,EACV,SAAS,GAAG,KAAK,EACjB,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,IAAI,EACf,aAAa,GAAG,EAAE,EAClB,UAAU,EACV,QAAQ,EACR,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,QAAQ,GAAG,IAAI,EACf,MAAM,GAAG,MAAM,EACf,KAAK,EAAE,SAAS,GACjB,KAAI;IACH,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE;AAClD,IAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE;AAClF,IAAA,MAAM,iBAAiB,GAAG,WAAW,IAAI,EAAE;IAE3C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAA0B,EAAE,CAAC;;AAGrE,IAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAA6B;AACnE,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,SAAS;AAC/B,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;;QAGvB,MAAM,MAAM,GAA4C,OAAe,CAAC,MAAM,IAAK,OAAe,CAAC,YAAY,IAAI,EAAE;;AAGrH,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC;QACnC,MAAM,SAAS,GAA2B,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QAErE,MAAM,KAAK,GAA2B,EAAE;AAExC,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAI;YACnD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAChC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,aAAa,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CACpD;YAED,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,KAAK,EAAE,KAAK;gBACZ,KAAK;AACL,gBAAA,KAAK,EAAE,KAAe;gBACtB,SAAS;AACT,gBAAA,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;;IAGjD,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,WAAmB,EAAE,KAAa,KAA4B;AAC/F,QAAA,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACzC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;QAEvB,MAAM,MAAM,GAA4C,OAAe,CAAC,MAAM,IAAK,OAAe,CAAC,YAAY,IAAI,EAAE;AACrH,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC;QACnC,MAAM,KAAK,GAA2B,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;QAE7D,MAAM,KAAK,GAA2B,EAAE;AAExC,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAI;;YAE/C,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE;gBAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5E,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAChC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAChD;;AAGD,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS,EAAE,EAAE,CAAC;gBAChE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;oBACtC,KAAK,CAAC,IAAI,CAAC;wBACT,KAAK;wBACL,KAAK;AACL,wBAAA,KAAK,EAAE,KAAe;wBACtB,SAAS;wBACT,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;AACtC,qBAAA,CAAC;gBACJ;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;;AAGjD,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAK;AAClC,QAAA,IAAI,KAAK,GAAG,mBAAmB,EAAE;;AAGjC,QAAA,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC/B,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACtB,gBAAA,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACxC;AACA,YAAA,IAAI,MAAM,KAAK,WAAW,EAAE;AAC1B,gBAAA,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS;oBAAE,OAAO,EAAE;AAC1C,gBAAA,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS;AAAE,oBAAA,OAAO,CAAC;YAC3C;YACA,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;;IAGjC,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,IAA0B,EAAE,KAAa,KAAI;QAChF,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;AAEpD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;YAElB,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBACvC;qBACG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9D,qBAAA,OAAO,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5D,YAAA,CAAC,CAAC;YACF,YAAY,CAAC,MAAM,EAAE;QACvB;aAAO;;YAEL;AACG,iBAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;AAC3D,iBAAA,OAAO,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;;YAG1D,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;QAC5C;QAEA,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QAC7B;AACF,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;;AAGtF,IAAA,MAAM,cAAc,GAAG,CAAC,KAAa,KAAI;QACvC,WAAW,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC3D,IAAA,CAAC;;AAGD,IAAA,MAAM,WAAW,GAAG,CAAC,KAA6B,EAAE,KAAa,KAAI;AACnE,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QAE7C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK;QAC3C,MAAM,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,KAAK;QACvD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;AACjD,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY;QAE3C,QACE,4BACE,SAAS,EAAE,iBAAiB,CAAC,IAAI,EACjC,KAAK,EAAE;AACL,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,OAAO,EAAE,KAAK,GAAG,CAAC,GAAG,CAAA,MAAA,EAAS,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACzD,aAAA,EAAA;YAEA,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAC5B,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,KAAK,EACf,SAAS,EAAE,IAAI,CACb,iBAAiB,CAAC,IAAI,EACtB,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC,YAAY,EAChD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAClE,EACD,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,EAAA,CAAI;AACpC,iBAAA,EAAA,EAEA,UAAU,IACT,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,KAEvB,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;gBACE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,EAC3C,SAAS,EAAE,iBAAiB,CAAC,IAAI,EACjC,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,MAAM;AACf,wBAAA,UAAU,EAAE,QAAQ;AACpB,wBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACxB,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,UAAU,EAAE,SAAS;AACrB,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI;wBAChE,UAAU,EAAE,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG;AACvC,qBAAA,EAAA;AAED,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IACzD,IAAI,CAAC,KAAK,CACN;AACN,oBAAA,IAAI,CAAC,KAAK,KAAK,SAAS,KACvB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,iBAAiB,CAAC,KAAK,EAClC,KAAK,EAAE;AACL,4BAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;AACjC,4BAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AAC1C,yBAAA,EAAA,EAEA,IAAI,CAAC,KAAK,CACN,CACR,CACM;AACR,gBAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAClD,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAClC,CACA,CACJ,CACE,CACN,CAAC;YACD,QAAQ,IAAI,OAAO,KAClB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA;gBACE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EACpC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EACrC,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,EAAA,CAAI;AACnC,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC3B,wBAAA,cAAc,EAAE,WAAW;qBAC5B,EAAA,EAEA,UAAU,GAAG,WAAW,GAAG,CAAA,KAAA,EAAQ,KAAK,CAAC,MAAM,GAAG,YAAY,CAAA,KAAA,CAAO,CAC/D,CACN,CACN,CACE;AAET,IAAA,CAAC;AAED,IAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,QAAA,OAAO,IAAI;IACb;IAEA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,EAClD,KAAK,EAAE,KAAK,EAAA,EAEX,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAC3B;AAEV;;ACxTA;;;;;AAKG;AAmDI,MAAM,WAAW,GAA+B,CAAC,EACtD,KAAK,EACL,KAAK,EACL,GAAG,EACH,GAAG,EACH,IAAI,GAAG,CAAC,EACR,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,cAAc,EAC1B,aAAa,EACb,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EACjC,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,UAAU,GAAG,IAAI,EACjB,aAAa,GAAG,IAAI,EACpB,UAAU,GAAG,GAAG,GACjB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;IACpC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE;AACzE,IAAA,MAAM,gBAAgB,GAAG,WAAW,IAAI,EAAE;;AAG1C,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;AAC7D,QAAA,IAAI,MAA0B;AAC9B,QAAA,IAAI,MAA0B;AAE9B,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;gBACrB,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC;AACrD,gBAAA,IAAI,QAAQ;oBAAE,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC;AACrD,gBAAA,IAAI,QAAQ;oBAAE,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IACrC,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAEvC,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,cAAc,IAAI,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC;AACvF,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,cAAc,IAAI,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC;IACvF,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnD,IAAA,MAAM,WAAW,GAAG,MAAM,CAAuC,IAAI,CAAC;;IAGtE,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,aAAa,IAAI,CAAC,UAAU,EAAE;AAChC,YAAA,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS;AAAE,gBAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;;gBAC3D,cAAc,CAAC,GAAG,CAAC;AACxB,YAAA,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS;AAAE,gBAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;;gBAC3D,cAAc,CAAC,GAAG,CAAC;QAC1B;AACF,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;;IAGzE,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,MAAc,KAAI;AACxE,QAAA,IAAI,CAAC,aAAa;YAAE;;AAGpB,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;gBACrB,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;YACzC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,MAAM,GAAG,GAAG,EAAE;YAChB,aAAa,CAAC,KAAK,EAAE,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,EAAE,KAAK,CAAC;QAC5C;AACA,QAAA,IAAI,MAAM,GAAG,GAAG,EAAE;AAChB,YAAA,aAAa,CAAC,KAAK,EAAE,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;QACrD;QACA,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE;;YAEjC,aAAa,CAAC,KAAK,EAAE,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,EAAE,IAAI,CAAC;QAC3C;AAIF,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;;IAGlF,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,MAAc,KAAI;AACrE,QAAA,IAAI,WAAW,CAAC,OAAO,EAAE;AACvB,YAAA,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;QACnC;AAEA,QAAA,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,MAAK;AACpC,YAAA,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC;YAClC,IAAI,aAAa,EAAE;AACjB,gBAAA,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;YAC/B;QACF,CAAC,EAAE,UAAU,CAAC;IAChB,CAAC,EAAE,CAAC,kBAAkB,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;;AAGnD,IAAA,MAAM,eAAe,GAAG,CAAC,CAAsC,KAAI;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;QAClE,cAAc,CAAC,KAAK,CAAC;QACrB,aAAa,CAAC,IAAI,CAAC;AACnB,QAAA,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;AACrC,IAAA,CAAC;;AAGD,IAAA,MAAM,eAAe,GAAG,CAAC,CAAsC,KAAI;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;QAClE,cAAc,CAAC,KAAK,CAAC;QACrB,aAAa,CAAC,IAAI,CAAC;AACnB,QAAA,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC;AACrC,IAAA,CAAC;;IAGD,MAAM,aAAa,GAAG,MAAK;QACzB,aAAa,CAAC,KAAK,CAAC;AACtB,IAAA,CAAC;;AAGD,IAAA,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG;AAC5D,IAAA,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG;AAE5D,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,EACjD,KAAK,EAAE;AACL,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,GAAG,KAAK;AACT,SAAA,EAAA;QAEA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACjC,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;gBAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACtD,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACzB,EAAA,EAEA,KAAK,CACA,CACT;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,MAAM,EAClC,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,QAAQ;AACrB,aAAA,EAAA;AAGD,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;AACpC,oBAAA,YAAY,EAAE,KAAK;iBACpB,EAAA,CACD;AAGF,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,WAAW,EACvC,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG;AACtB,oBAAA,KAAK,EAAE,CAAA,EAAG,UAAU,GAAG,UAAU,CAAA,CAAA,CAAG;AACpC,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AACrC,oBAAA,YAAY,EAAE,KAAK;iBACpB,EAAA,CACD;AAGF,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,gBAAgB,EAAE,MAAM;AACxB,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,aAAa,EAAE,MAAM;AACtB,iBAAA,EAAA,YAAA,EACW,CAAA,QAAA,EAAW,KAAK,IAAI,KAAK,EAAE,EAAA,CACvC;AAGF,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,gBAAgB,EAAE,MAAM;AACxB,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,aAAa,EAAE,MAAM;AACtB,iBAAA,EAAA,YAAA,EACW,WAAW,KAAK,IAAI,KAAK,CAAA,CAAE,GACvC,CACE;QAEL,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,MAAM,EAClC,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,cAAc,EAAE,eAAe;AAC/B,gBAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC9B,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;AAClC,aAAA,EAAA;YAED,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,gBAAgB,CAAC,KAAK,IAAG,WAAW,CAAC,WAAW,CAAC,CAAQ;AAC1E,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,gBAAgB,CAAC,KAAK,EAAA,EAAG,WAAW,CAAC,WAAW,CAAC,CAAQ,CACtE,CACP;QAGD,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;WACH,gBAAgB,CAAC,KAAK,IAAI,6BAA6B,CAAA;;;;;wBAK1C,KAAK,CAAC,MAAM,CAAC,OAAO,CAAA;;;;;;WAMjC,gBAAgB,CAAC,KAAK,IAAI,6BAA6B,CAAA;;;wBAG1C,KAAK,CAAC,MAAM,CAAC,OAAO,CAAA;;;;;;;OAOrC,CAAS,CACN;AAEV;;ACpUA;;;;;AAKG;AA4CI,MAAM,UAAU,GAA8B,CAAC,EACpD,UAAU,EACV,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,MAAM,EAClB,UAAU,EACV,eAAe,EACf,UAAU,EACV,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,SAAS,GACjB,KAAI;IACH,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE;IAClD,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE;AAC5E,IAAA,MAAM,eAAe,GAAG,WAAW,IAAI,EAAE;;AAGzC,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAuB;AAC3C,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,SAAS;QAE/B,MAAM,eAAe,GAAqB,EAAE;;QAG5C,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACjC,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;YAC1D,IAAI,UAAU,EAAE;;gBAEd,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC/C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,KAAI;AAChC,oBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE9D,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE;wBAC1D,eAAe,CAAC,IAAI,CAAC;AACnB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,KAAK,EAAE,QAAQ;AAChB,yBAAA,CAAC;oBACJ;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,eAAe;IACxB,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;;IAGnD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,IAA2B,EAAE,KAAa,KAAI;AAC7E,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;;AAEjB,YAAA,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;gBACxB;qBACG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI;AAC5B,qBAAA,OAAO,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5D,YAAA,CAAC,CAAC;YACF,YAAY,CAAC,MAAM,EAAE;QACvB;aAAO;;AAEL,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;YAEjE,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,KAAI;gBACrC;qBACG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI;qBAC5B,OAAO,CAAC,CAAC,IAAG;;oBAEX,IAAI,SAAS,GAAG,YAAY;AACxB,yBAAC,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;wBAC1D,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;oBAC3C;AACF,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;YACF,YAAY,CAAC,MAAM,EAAE;QACvB;QAEA,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;QACzB;AACF,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;;AAGhF,IAAA,MAAM,sBAAsB,GAAG,OAC7B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,SAAS,EACpC,KAAK,EAAE;AACL,YAAA,MAAM,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAE;AAClC,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;SAClC,EAAA,aAAA,EACW,MAAM,EAAA,EAAA,QAAA,CAGb,CACR;;AAGD,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,EAChD,KAAK,EAAE,KAAK,gBACD,YAAY,EAAA;AAEvB,QAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,IAAI,EAC/B,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AAC1C,aAAA,EAAA;AAGD,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAE,eAAe,CAAC,IAAI,EAAA;gBACjC,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EACpC,SAAS,EAAE,eAAe,CAAC,IAAI,EAC/B,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC3B,wBAAA,UAAU,EAAE,SAAS;AACrB,wBAAA,QAAQ,EAAE,SAAS;AACnB,wBAAA,cAAc,EAAE,MAAM;qBACvB,EAAA,EAEA,SAAS,CACH,CACN;YAGJ,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;gBACzB,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;gBAEzC,QACE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAA;oBAC5B,eAAe,GAAG,eAAe,EAAE,GAAG,sBAAsB,EAAE;AAC/D,oBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,IAAI,CACb,eAAe,CAAC,IAAI,EACpB,MAAM,IAAI,eAAe,CAAC,OAAO,CAClC,EAAA,EAEA,UAAU,IACT,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAC7B,MAAM,IACR,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE;AACL,4BAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;4BACxB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACvD,yBAAA,EAAA,cAAA,EACY,MAAM,EAAA,EAElB,IAAI,CAAC,KAAK,CACN,KAEP,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,EACvC,SAAS,EAAE,eAAe,CAAC,IAAI,EAC/B,KAAK,EAAE;AACL,4BAAA,OAAO,EAAE,CAAC;AACV,4BAAA,UAAU,EAAE,MAAM;AAClB,4BAAA,MAAM,EAAE,MAAM;AACd,4BAAA,MAAM,EAAE,SAAS;AACjB,4BAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC3B,4BAAA,UAAU,EAAE,SAAS;AACrB,4BAAA,QAAQ,EAAE,SAAS;AACnB,4BAAA,cAAc,EAAE,MAAM;yBACvB,EAAA,EAEA,IAAI,CAAC,KAAK,CACJ,CACV,CACE,CACU;AAErB,YAAA,CAAC,CAAC,CACC,CACD;AAEV;;AC3OA;;;;;AAKG;AAqDI,MAAM,aAAa,GAAiC,CAAC,EAC1D,MAAM,EACN,OAAO,EACP,OAAO,EACP,KAAK,GAAG,SAAS,EACjB,eAAe,GAAG,OAAO,EACzB,eAAe,GAAG,WAAW,EAC7B,QAAQ,GAAG,OAAO,EAClB,QAAQ,EACR,SAAS,EACT,KAAK,EAAE,WAAW,EAClB,UAAU,GAAG,IAAI,EACjB,UAAU,GAAG,IAAI,EACjB,eAAe,GAAG,IAAI,EACtB,oBAAoB,GAAG,IAAI,EAC3B,aAAa,GAAG,IAAI,GACrB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;IACpC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,cAAc,EAAE;AAC1D,IAAA,MAAM,kBAAkB,GAAG,WAAW,IAAI,EAAE;AAC5C,IAAA,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC;;IAG9C,SAAS,CAAC,MAAK;QACb,IAAI,MAAM,EAAE;YACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;QACzC;aAAO;YACL,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;QACnC;AACA,QAAA,OAAO,MAAK;YACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;AACnC,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;;IAGZ,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,MAAM,aAAa,GAAG,CAAC,CAAgB,KAAI;YACzC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,EAAE;AAChC,gBAAA,OAAO,EAAE;YACX;AACF,QAAA,CAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;QACnD,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;IACrE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;;IAGpC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE;YAC/B,MAAM,iBAAiB,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAC1D,0EAA0E,CAC3E;AACD,YAAA,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAgB;YACxD,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAgB;AAElF,YAAA,MAAM,SAAS,GAAG,CAAC,CAAgB,KAAI;AACrC,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;oBAAE;AAErB,gBAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,oBAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,YAAY,EAAE;wBAC3C,CAAC,CAAC,cAAc,EAAE;wBAClB,WAAW,EAAE,KAAK,EAAE;oBACtB;gBACF;qBAAO;AACL,oBAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,WAAW,EAAE;wBAC1C,CAAC,CAAC,cAAc,EAAE;wBAClB,YAAY,EAAE,KAAK,EAAE;oBACvB;gBACF;AACF,YAAA,CAAC;AAED,YAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;YAC/C,YAAY,EAAE,KAAK,EAAE;YAErB,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC;QACjE;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEZ,IAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAK;QAC3C,IAAI,oBAAoB,EAAE;AACxB,YAAA,OAAO,EAAE;QACX;AACF,IAAA,CAAC,EAAE,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;AAEnC,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,EAAE;AACX,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAEtB,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,gBAAgB,CAAC,IAAI,CAAC;AACxB,IAAA,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;;AAGtB,IAAA,MAAM,YAAY,GAAG,CAAC,SAAkB,KAAI;AAC1C,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,iBAAiB;QACvC,QAAQ,QAAQ;AACd,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,mBAAmB;AAC5B,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,kBAAkB;AAC3B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,kBAAkB;AAC3B,YAAA;AACE,gBAAA,OAAO,kBAAkB;;AAE/B,IAAA,CAAC;;IAGD,MAAM,uBAAuB,GAAG,MAA0B;AACxD,QAAA,MAAM,IAAI,GAAwB;AAChC,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,aAAa,EAAE,QAAQ;AACvB,YAAA,UAAU,EAAE,6BAA6B;AACzC,YAAA,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC;YAC/B,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC;SAC1C;QAED,QAAQ,QAAQ;AACd,YAAA,KAAK,MAAM;gBACT,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;AACjF,YAAA,KAAK,OAAO;gBACV,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;AAClF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE;AAChI,YAAA;AACE,gBAAA,OAAO,IAAI;;AAEjB,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;QAEE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,OAAO,EACrC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,GAAG,EAAE,CAAC;AACN,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,eAAe,EAAE,oBAAoB;AACrC,gBAAA,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI;gBACnC,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC;AACvB,gBAAA,UAAU,EAAE,2BAA2B;AACxC,aAAA,EAAA,aAAA,EACW,MAAM,EAAA,CAClB;QAGF,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,EACrD,KAAK,EAAE,uBAAuB,EAAE,EAChC,IAAI,EAAC,QAAQ,EAAA,YAAA,EACF,MAAM,EAAA,YAAA,EACL,KAAK,EAAA;YAGhB,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,MAAM,EACpC,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,UAAU,EAAE,QAAQ;AACpB,oBAAA,cAAc,EAAE,eAAe;AAC/B,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,oBAAA,YAAY,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AACjD,iBAAA,EAAA;AAED,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAA;AAC7E,oBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,KAAK,EACnC,KAAK,EAAE;AACL,4BAAA,MAAM,EAAE,CAAC;AACT,4BAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;4BACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,IAAI,GAAG;AACxD,4BAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,yBAAA,EAAA,EAEA,KAAK,CACH;AACJ,oBAAA,eAAe,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,KACxC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,UAAU,EAAE,QAAQ;AACpB,4BAAA,cAAc,EAAE,QAAQ;AACxB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,MAAM,EAAE,MAAM;AACd,4BAAA,OAAO,EAAE,OAAO;AAChB,4BAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;4BACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,GAAG;AACpD,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AACrC,4BAAA,YAAY,EAAE,MAAM;AACrB,yBAAA,EAAA,EAEA,WAAW,CAAC,MAAM,CACd,CACR,CACG;AACN,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,QAAQ,EAAE,QAAQ;AAClB,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;qBACzB,EAAA,YAAA,EACU,eAAe,EAAA,EAAA,QAAA,CAGnB,CACL,CACP;AAGD,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,OAAO,EACrC,KAAK,EAAE;AACL,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC9B,iBAAA,EAAA,EAEA,QAAQ,CACL;YAGL,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,kBAAkB,CAAC,MAAM,EACpC,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACxB,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,oBAAA,SAAS,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AAC9C,iBAAA,EAAA;AAED,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;wBAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACtD,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,wBAAA,eAAe,EAAE,aAAa;AAC9B,wBAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AAC1C,wBAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;8BACxC,KAAK,CAAC;AACR,8BAAE,KAAK,CAAC,YAAY,CAAC,MAAM;AAC7B,wBAAA,MAAM,EAAE,SAAS;AAClB,qBAAA,EAAA,EAEA,eAAe,CACT;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,kBAAkB,CAAC,WAAW,EACzC,KAAK,EAAE;AACL,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;wBAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACtD,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AACrC,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;8BACxC,KAAK,CAAC;AACR,8BAAE,KAAK,CAAC,YAAY,CAAC,MAAM;AAC7B,wBAAA,MAAM,EAAE,SAAS;AAClB,qBAAA,EAAA;oBAEA,eAAe;AACf,oBAAA,eAAe,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAA,EAAA,EAAK,WAAW,CAAC,MAAM,GAAG,CACjE,CACL,CACP,CACG,CACL;AAEP;MAqBa,mBAAmB,GAAuC,CAAC,EACtE,OAAO,EACP,IAAI,GAAG,SAAS,EAChB,SAAS,GAAG,IAAI,EAChB,SAAS,EACT,KAAK,GACN,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE;AAExC,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AACxB,YAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE;AACzD,YAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;YAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACtD,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,YAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;AACxC,YAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;AAC1C,YAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;kBACxC,KAAK,CAAC;AACR,kBAAE,KAAK,CAAC,YAAY,CAAC,MAAM;AAC7B,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,GAAG,KAAK;AACT,SAAA,EAAA;QAED,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,QAAA,CAAc;AACd,QAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAO,IAAI,CAAQ;QAClB,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,KAClC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,cAAc,EAAE,QAAQ;AACxB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;gBACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,GAAG;AACpD,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AACrC,gBAAA,YAAY,EAAE,MAAM;AACrB,aAAA,EAAA,EAEA,WAAW,CAAC,MAAM,CACd,CACR,CACM;AAEb;;AClbA;;;;;;;;AAQG;MA2DU,eAAe,GAAmC,CAAC,EAC9D,SAAS,EACT,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GAAG,KAAK,EAC5B,KAAK,GAAG,kBAAkB,EAC1B,QAAQ,GAAG,CAAC,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,MAAM,GAAG,YAAY,EACrB,cAAc,GAAG,GAAG,GACrB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,mBAAmB,GAAG,WAAW,IAAI,EAAE;;AAG7C,IAAA,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE;IACjD,MAAM,OAAO,GAAG,WAAW;IAE3B,IAAI,OAAO,EAAE;AACX,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;AACrE,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,EAAA,EAAA,6BAAA,CAEpE,CACF;IAEV;AAEA,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,qBAAqB,IACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAAA,CAC9B;AAEN;MAea,aAAa,GAAiC,CAAC,EAC1D,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GAAG,KAAK,EAC5B,KAAK,GAAG,cAAc,EACtB,QAAQ,GAAG,CAAC,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,MAAM,GAAG,YAAY,EACrB,cAAc,GAAG,GAAG,GACrB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,mBAAmB,GAAG,WAAW,IAAI,EAAE;AAE7C,IAAA,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE;IACjD,MAAM,OAAO,GAAG,WAAW;IAE3B,IAAI,OAAO,EAAE;AACX,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;AACrE,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,EAAA,EAAA,2BAAA,CAEpE,CACF;IAEV;AAEA,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,qBAAqB,IACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAAA,CAC9B;AAEN;AAmBO,MAAM,wBAAwB,GAA4C,CAAC,EAChF,SAAS,EACT,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,GAAG,KAAK,EAC5B,KAAK,GAAG,4BAA4B,EACpC,QAAQ,GAAG,CAAC,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,MAAM,GAAG,YAAY,EACrB,cAAc,GAAG,GAAG,EACpB,gBAAgB,GAAG,IAAI,EACvB,QAAQ,GACT,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,mBAAmB,GAAG,WAAW,IAAI,EAAE;AAE7C,IAAA,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE;IACjD,MAAM,OAAO,GAAG,WAAW;;AAG3B,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;QAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AAChC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;YAC5B,MAAM,KAAK,GAAG,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;YAC5F,OAAO,GAAG,GAAG,KAAK;QACpB,CAAC,EAAE,CAAC,CAAC;AACP,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAEX,IAAI,OAAO,EAAE;AACX,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;AACrE,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,EAAA,EAAA,4BAAA,CAEpE,CACF;IAEV;AAEA,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;QACpE,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,mBAAmB,CAAC,KAAK,EACpC,KAAK,EAAE;AACL,gBAAA,MAAM,EAAE,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,EAAA,CAAI;AACvC,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;gBACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,IAAI,GAAG;AACxD,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACzB,EAAA,EAEA,KAAK,CACH,CACN;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AACzB,gBAAA,QAAQ,EAAE,MAAM;AACjB,aAAA,EAAA;YAEA,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MACrB,oBAAC,KAAK,CAAC,QAAQ,EAAA,EAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,EAAA;gBAClC,KAAK,GAAG,CAAC,KACR,8BAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAA,EAAA,GAAA,CAAU,CACjF;AACD,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,OAAO,EAAE,MAAM,WAAW,GAAG,IAAI,EAAE,KAAK,CAAC,EACzC,KAAK,EAAE;wBACL,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS;AAC3C,wBAAA,SAAS,EAAE,QAAQ;AACpB,qBAAA,EAAA,EAEA,UAAU,IACT,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,KAEvB,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;oBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EACtC,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAClC,KAAK,EAAE;AACL,4BAAA,KAAK,EAAE,MAAM;AACb,4BAAA,MAAM,EAAE,MAAM;AACd,4BAAA,SAAS,EAAE,OAAO;AAClB,4BAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;kCACxC,KAAK,CAAC;AACR,kCAAE,KAAK,CAAC,YAAY,CAAC,KAAK;AAC5B,4BAAA,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;yBAC3C,EAAA,CACD;AACF,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,4BAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC9B,4BAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,4BAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,yBAAA,EAAA;wBAEA,cAAc;AAAE,wBAAA,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAI,IAAI,CAAC,KAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAC5F,CACL,CACJ,CACG,CACS,CAClB,CAAC;YAED,gBAAgB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KACnC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,SAAS,EAAE,QAAQ;AACpB,iBAAA,EAAA;AAED,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;wBACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,GAAG;AACpD,wBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,wBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAClC,qBAAA,EAAA;;oBAEO,cAAc;AAAE,oBAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CACzC;AACN,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,QAAQ,GAAG,KAAK,CAAC,EAChC,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,CAAA,EAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE;AACzD,wBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM;wBAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACtD,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AACrC,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;8BACxC,KAAK,CAAC;AACR,8BAAE,KAAK,CAAC,YAAY,CAAC,MAAM;AAC7B,wBAAA,MAAM,EAAE,SAAS;AAClB,qBAAA,EAAA,EAAA,iBAAA,CAGM,CACL,CACP,CACG,CACF;AAEV;AAaO,MAAM,cAAc,GAAkC,CAAC,EAC5D,UAAU,GAAG,yBAAyB,EACtC,KAAK,EAAE,SAAS,EAChB,KAAK,GAAG,iBAAiB,EACzB,QAAQ,GAAG,CAAC,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,MAAM,GAAG,YAAY,EACrB,cAAc,GAAG,GAAG,GACrB,KAAI;IACH,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAuB,EAAE,CAAC;IAExE,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,SAAS;YAAE;AAEf,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;YAC/C,IAAI,MAAM,EAAE;gBACV,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpC;QACF;QAAE,OAAO,CAAC,EAAE;;QAEZ;AACF,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAE3B,IAAA,MAAM,KAAK,GAAG,CAAC,SAAS,IAAI,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;AAE3D,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAC,qBAAqB,IACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAAA,CAC9B;AAEN;AAEA;;AAEG;AACG,SAAU,mBAAmB,CACjC,IAAwB,EACxB,UAAA,GAAqB,yBAAyB,EAC9C,QAAA,GAAmB,EAAE,EAAA;IAErB,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE;AAEzC,IAAA,IAAI;QACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;AAC/C,QAAA,IAAI,KAAK,GAAyB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;;AAGlE,QAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;;AAG3C,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;;QAGnB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;AAEhC,QAAA,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzD;IAAE,OAAO,CAAC,EAAE;;IAEZ;AACF;AAUA,MAAM,qBAAqB,GAAyC,CAAC,EACnE,KAAK,EACL,KAAK,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,EAClB,MAAM,GAAG,YAAY,EACrB,cAAc,GAAG,GAAG,GACrB,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AACpC,IAAA,MAAM,mBAAmB,GAAG,WAAW,IAAI,EAAE;IAE7C,MAAM,YAAY,GAAG,MAA0B;QAC7C,QAAQ,MAAM;AACZ,YAAA,KAAK,YAAY;gBACf,OAAO;AACL,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AACzB,oBAAA,SAAS,EAAE,MAAM;AACjB,oBAAA,cAAc,EAAE,aAAa;AAC7B,oBAAA,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;iBACnC;AACH,YAAA,KAAK,MAAM;gBACT,OAAO;AACL,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,mBAAmB,EAAE,uCAAuC;AAC5D,oBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;iBAC1B;AACH,YAAA,KAAK,MAAM;gBACT,OAAO;AACL,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,aAAa,EAAE,QAAQ;AACvB,oBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;iBACzB;AACH,YAAA;AACE,gBAAA,OAAO,EAAE;;AAEf,IAAA,CAAC;IAED,MAAM,YAAY,GAAG,MAA0B;QAC7C,QAAQ,MAAM;AACZ,YAAA,KAAK,YAAY;gBACf,OAAO;AACL,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,eAAe,EAAE,OAAO;iBACzB;AACH,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,EAAE;AACX,YAAA,KAAK,MAAM;gBACT,OAAO;AACL,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AACzB,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,oBAAA,YAAY,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;iBACjD;AACH,YAAA;AACE,gBAAA,OAAO,EAAE;;AAEf,IAAA,CAAC;AAED,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;QACpE,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,mBAAmB,CAAC,KAAK,EACpC,KAAK,EAAE;AACL,gBAAA,MAAM,EAAE,CAAA,IAAA,EAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA,EAAA,CAAI;AACvC,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;gBACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,IAAI,GAAG;AACxD,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACzB,EAAA,EAEA,KAAK,CACH,CACN;QAED,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,EAAA,EAC5D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MACrB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,EACrB,SAAS,EAAE,mBAAmB,CAAC,IAAI,EACnC,OAAO,EAAE,MAAM,WAAW,GAAG,IAAI,EAAE,KAAK,CAAC,EACzC,KAAK,EAAE;AACL,gBAAA,GAAG,YAAY,EAAE;gBACjB,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS;AAC5C,aAAA,EAAA,EAEA,UAAU,IACT,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,KAEvB,KAAA,CAAA,aAAA,CAAC,yBAAyB,IACxB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EAAA,CACd,CACH,CACG,CACP,CAAC,CACE,CACF;AAEV,CAAC;AAUD,MAAM,yBAAyB,GAA6C,CAAC,EAC3E,IAAI,EACJ,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EACd,MAAM,GACP,KAAI;AACH,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AAC3C,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAExB,IAAA,MAAM,SAAS,GAAG,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM;AAErD,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACG,QAAA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,EACV,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,mBAAmB,CAAC,KAAK,EACpC,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO;AAC5C,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK;sBACxC,KAAK,CAAC;AACR,sBAAE,KAAK,CAAC,YAAY,CAAC,KAAK;AAC7B,aAAA,EAAA,CACD,CACH;QACD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,CAAC,GAAG,SAAS,EAAE,EAAA;AAC7F,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,mBAAmB,CAAC,IAAI,EACnC,KAAK,EAAE;AACL,oBAAA,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AACtD,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;oBACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG;AACtD,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,YAAY,EAAE,UAAU;AACxB,oBAAA,OAAO,EAAE,aAAa;AACtB,oBAAA,eAAe,EAAE,CAAC;AAClB,oBAAA,eAAe,EAAE,UAAU;AAC5B,iBAAA,EAAA,EAEA,KAAK,CACF;AACL,YAAA,KAAK,KAAK,SAAS,KAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,mBAAmB,CAAC,KAAK,EACpC,KAAK,EAAE;AACL,oBAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC9B,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;oBACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,GAAG;AACpD,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;AAC5B,iBAAA,EAAA;gBAEA,cAAc;gBAAE,OAAO,KAAK,KAAK,QAAQ,GAAI,KAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAC7E,CACP,CACG,CACL;AAEP,CAAC;AAED;AACA,SAAS,eAAe,CAAC,KAAU,EAAA;IACjC,OAAO;AACL,QAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;AAC5B,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;KAClC;AACH;;AC1nBA;;;;AAIG;MAyCU,gBAAgB,GAAoC,CAAC,EAChE,KAAK,GAAG,EAAE,EACV,cAAc,GAAG,EAAE,EACnB,UAAU,GAAG,GAAG,EAChB,cAAc,GAAG,CAAC,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,SAAS,GAAG,KAAK,EACjB,KAAK,GAAG,aAAa,EACrB,SAAS,EACT,KAAK,EACL,KAAK,EAAE,WAAW,GACnB,KAAI;IACH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;IAC5C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAEtD,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,mBAAmB,CAAC;QAC1D,MAAM;QACN,KAAK;AACL,QAAA,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,cAAc;QACvC,UAAU;QACV,cAAc;AACf,KAAA,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;AACjE,IAAA,MAAM,gBAAgB,GAAG,WAAW,IAAI,EAAE;AAE1C,IAAA,MAAM,uBAAuB,GAAG,CAAC,UAA0B,EAAE,KAAa,MACxE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,KAAK,EAAA;QACb,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAO,UAAU,CAAC,KAAK,CAAQ;QAC9B,UAAU,CAAC,KAAK,KAAK,SAAS,KAC7B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAA;;AAC1D,YAAA,UAAU,CAAC,KAAK;gBACb,CACR,CACG,CACP;IAED,MAAM,oBAAoB,GAAG,OAC3B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACzB,SAAA,EAAA,EAAA,wBAAA,CAGG,CACP;IAED,MAAM,kBAAkB,GAAG,OACzB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;AACxB,YAAA,OAAO,EAAE,GAAG;AACb,SAAA,EAAA,EAAA,0BAAA,CAGG,CACP;AAED,IAAA,MAAM,qBAAqB,GAAG,CAAC,UAA0B,KAAI;QAC3D,IAAI,iBAAiB,EAAE;AACrB,YAAA,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC;QACrC;AACF,IAAA,CAAC;AAED,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;AACjC,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,OAAO,EAAE;AACX,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;YACtE,SAAS,KACR,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAClC,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;iBACzB,EAAA,EAEA,KAAK,CACF,CACP;AACA,YAAA,aAAa,GAAG,aAAa,EAAE,GAAG,oBAAoB,EAAE,CACrD;IAEV;IAEA,IAAI,KAAK,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAA;YACtE,SAAS,KACR,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAClC,oBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;iBACzB,EAAA,EAEA,KAAK,CACF,CACP;AACA,YAAA,WAAW,GAAG,WAAW,EAAE,GAAG,kBAAkB,EAAE,CAC/C;IAEV;AAEA,IAAA,MAAM,QAAQ,GAAG,gBAAgB,IAAI,uBAAuB;AAE5D,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,EACtD,KAAK,EAAE,KAAK,EAAA;QAEX,SAAS,KACR,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gBAAgB,CAAC,KAAK,EACjC,KAAK,EAAE;AACL,gBAAA,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK;AACzC,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAClC,gBAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACzB,EAAA,EAEA,KAAK,CACF,CACP;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,gBAAgB,CAAC,eAAe,EAAA,EAC7C,oBAAoB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,KAAI;AAC9C,YAAA,MAAM,UAAU,GAAG,KAAK,KAAK,aAAa;YAE1C,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,IAAI,CACb,gBAAgB,CAAC,cAAc,EAC/B,UAAU,IAAI,gBAAgB,CAAC,oBAAoB,CACpD,EACD,OAAO,EAAE,MAAM,qBAAqB,CAAC,UAAU,CAAC,EAChD,YAAY,EAAE,MAAM,gBAAgB,CAAC,KAAK,CAAC,EAC3C,YAAY,EAAE,MAAM,gBAAgB,CAAC,EAAE,CAAC,EACxC,KAAK,EAAE;AACL,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;AAC7B,oBAAA,MAAM,EAAE,SAAS;oBACjB,YAAY,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;AACrG,oBAAA,UAAU,EAAE,4BAA4B;AACxC,oBAAA,eAAe,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa;AAChE,oBAAA,YAAY,EAAE,KAAK,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;iBAChF,EAAA,EAEA,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CACxB;AAEV,QAAA,CAAC,CAAC,CACE,CACF;AAEV;;ACrNA;;;;;;;;;AASG;AAyHH;AACA;AACA;AAEA,MAAM,2BAA2B,GAAG,yBAAyB;AAC7D,MAAM,2BAA2B,GAAG,EAAE;AAEtC,SAAS,4BAA4B,CAAC,GAAW,EAAA;IAC/C,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,QAAA,OAAO,EAAE;AAC5C,IAAA,IAAI;QACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAmB;IAC7C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,EAAE;IACX;AACF;AAEA,SAAS,2BAA2B,CAAC,GAAW,EAAE,QAAwB,EAAA;IACxE,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE;AACnC,IAAA,IAAI;AACF,QAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrD;IAAE,OAAO,KAAK,EAAE;QACd,GAAG,CAAC,IAAI,CAAC,gDAAgD,EAAE,EAAE,KAAK,EAAE,CAAC;IACvE;AACF;AAEA;AACA;AACA;AAEA,SAAS,mBAAmB,CAAC,GAAQ,EAAA;AACnC,IAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC;IAClD,MAAM,WAAW,GAAG,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK;IAEtD,OAAO;QACL,KAAK;QACL,UAAU,EAAE,GAAG,CAAC,UAAU;AAC1B,QAAA,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,aAAa,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK;QACvE,QAAQ,EAAE,GAAG,CAAC,QAAQ;AACtB,QAAA,gBAAgB,EAAE,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,GAAG,SAAS;AACvE,QAAA,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM;AAC3C,YAAA,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI;YACxB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;AACb,SAAA,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM;AAChD,QAAA,QAAQ,EAAE,GAAG;KACd;AACH;AAEA,SAAS,cAAc,CAAC,WAAmB,EAAA;;AAEzC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,oBAAoB,EAAE,QAAQ;AACtC,SAAA,OAAO,CAAC,sBAAsB,EAAE,SAAS,CAAC;AAC/C;AAEA,SAAS,gBAAgB,CAAC,GAAQ,EAAA;IAChC,OAAO;AACL,QAAA,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,QAAQ;AAC1B,QAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE;QAChC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW;AAC/C,QAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK;AAC3B,QAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK;AACvD,QAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS;QAC5D,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE;AACtD,QAAA,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG;QAClD,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;AAC5B,QAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG;KAC9B;AACH;AAEA,SAAS,oBAAoB,CAAC,GAAQ,EAAA;IACpC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE;QACnD,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;KAC3C;AACH;AAEA;AACA;AACA;AAEM,SAAU,2BAA2B,CACzC,OAA2C,EAAA;AAE3C,IAAA,MAAM,EACJ,MAAM,EACN,KAAK,EACL,OAAO,GAAG,IAAI,EACd,UAAU,GAAG,GAAG,EAChB,cAAc,GAAG,EAAE,EACnB,cAAc,GAAG,CAAC,EAClB,8BAA8B,GAAG,KAAK,EACtC,iBAAiB,GAAG,KAAK,EACzB,aAAa,GAAG,KAAK,EACrB,aAAa,GAAG,CAAC,EACjB,SAAS,GAAG,CAAC,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,aAAa,EACb,oBAAoB,GAAG,IAAI,EAC3B,iBAAiB,GAAG,2BAA2B,EAC/C,iBAAiB,GAAG,2BAA2B,EAC/C,mBAAmB,EACnB,OAAO,GACR,GAAG,OAAO;;IAGX,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAmB,EAAE,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC;IACtD,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,QAAQ,CAAiC,IAAI,CAAC;IAC5G,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC;IACxE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IAC7E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;;AAGtD,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAwB,IAAI,CAAC;AAC5D,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC;AAC/D,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;;IAG/B,SAAS,CAAC,MAAK;QACb,IAAI,oBAAoB,EAAE;AACxB,YAAA,MAAM,MAAM,GAAG,4BAA4B,CAAC,iBAAiB,CAAC;YAC9D,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACvD;AACA,QAAA,OAAO,MAAK;AACV,YAAA,UAAU,CAAC,OAAO,GAAG,KAAK;AAC5B,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;;IAGhE,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,WAAmB,KAAI;QACjE,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE;YAClC,cAAc,CAAC,EAAE,CAAC;YAClB,0BAA0B,CAAC,IAAI,CAAC;YAChC;QACF;;AAGA,QAAA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAC9B,YAAA,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE;QACpC;AACA,QAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI,eAAe,EAAE;QAElD,UAAU,CAAC,IAAI,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;AAEd,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,GAAG,WAAW,EAAE;AAC1D,gBAAA,WAAW,EAAE,cAAc;gBAC3B,gCAAgC,EAAE,8BAA8B,KAAK,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7G,gBAAA,kBAAkB,EAAE,iBAAiB;AACrC,gBAAA,cAAc,EAAE,aAAa;AAC7B,gBAAA,cAAc,EAAE,aAAa;AAC7B,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,aAAa,EAAE,YAAY;AAC3B,gBAAA,cAAc,EAAE,aAAa;AAC7B,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,sBAAsB,EAAE,oBAAoB;AAC5C,gBAAA,cAAc,EAAE,aAAa;AAC7B,gBAAA,kBAAkB,EAAE,IAAI;AACzB,aAAA,CAAiC;YAElC,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE;;AAGzB,YAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE;YACjD,MAAM,sBAAsB,GAAG,cAAc,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACtE,cAAc,CAAC,sBAAsB,CAAC;;YAGtC,MAAM,UAAU,IAAI,QAAQ,CAAC,UAAU,IAAI,EAAE,CAA4B;AACzE,YAAA,MAAM,eAAe,GAA4B;AAC/C,gBAAA,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,UAAU,CAAC,iBAAqC,GAAG,EAAE;AACtH,gBAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,YAA2B,GAAG,EAAE;AAClG,gBAAA,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC,gBAAmC,GAAG,EAAE;gBAClH,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAI,UAAU,CAAC,iBAA+B,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE;gBACvI,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,GAAI,UAAU,CAAC,oBAAkC,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE;AAChJ,gBAAA,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,cAAgC,GAAG,EAAE;gBAC3G,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,GAAI,UAAU,CAAC,aAA2B,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,EAAE;AAC/H,gBAAA,kBAAkB,EAAE,OAAO,UAAU,CAAC,kBAAkB,KAAK,QAAQ,GAAG,UAAU,CAAC,kBAAkB,GAAG,SAAS;AACjH,gBAAA,SAAS,EAAE,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,GAAG,UAAU,CAAC,SAAS,GAAG,SAAS;aACvF;YACD,0BAA0B,CAAC,eAAe,CAAC;;AAG3C,YAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAA0C;AAC/D,YAAA,MAAM,aAAa,GAAG,GAAG,EAAE,OAAgC;AAC3D,YAAA,MAAM,SAAS,IAAI,aAAa,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAA4B;AAC9E,YAAA,MAAM,GAAG,GAAG,CAAC,CAAU,MAAc,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvF,MAAM,GAAG,GAAG,CAAC,CAAU,MAAc,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC;AACpE,YAAA,mBAAmB,CAAC,OAAO,SAAS,CAAC,gBAAgB,KAAK,QAAQ,GAAG,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC;AACvG,YAAA,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC;YACpE,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC;;YAGrD,IAAI,mBAAmB,EAAE;AACvB,gBAAA,mBAAmB,CAAC;AAClB,oBAAA,WAAW,EAAE,sBAAsB;oBACnC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,sBAAsB,CAAC,MAAM;oBAC9D,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC9B,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;oBACpC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,cAAc;AACzD,oBAAA,gBAAgB,EAAE,OAAO,SAAS,CAAC,gBAAgB,KAAK,QAAQ,GAAG,SAAS,CAAC,gBAAgB,GAAG,SAAS;oBACzG,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,WAAW;AAC1C,oBAAA,uBAAuB,EAAE,eAAe;AACxC,oBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,GAAG,SAAS;oBACvE,UAAU;AACX,iBAAA,CAAC;YACJ;AAEA,YAAA,GAAG,CAAC,OAAO,CAAC,0BAA0B,EAAE;AACtC,gBAAA,KAAK,EAAE,WAAW;gBAClB,gBAAgB,EAAE,sBAAsB,CAAC,MAAM;AAC/C,gBAAA,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CACnD,CAAC,IAAI,KAAK,CAAC,OAAO,CAAE,eAAuB,CAAC,CAAC,CAAC,CAAC,IAAK,eAAuB,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAC1F;AACF,aAAA,CAAC;QACJ;QAAE,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE;YAEzB,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjE,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE;AAEjC,YAAA,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAC5F,QAAQ,CAAC,KAAK,CAAC;YACf,cAAc,CAAC,EAAE,CAAC;YAClB,0BAA0B,CAAC,IAAI,CAAC;YAEhC,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,KAAK,CAAC;YAChB;QACF;gBAAU;AACR,YAAA,IAAI,UAAU,CAAC,OAAO,EAAE;gBACtB,UAAU,CAAC,KAAK,CAAC;YACnB;QACF;AACF,IAAA,CAAC,EAAE;QACD,MAAM;QACN,cAAc;QACd,8BAA8B;QAC9B,iBAAiB;QACjB,aAAa;QACb,aAAa;QACb,SAAS;QACT,YAAY;QACZ,aAAa;QACb,SAAS;QACT,oBAAoB;QACpB,aAAa;QACb,mBAAmB;QACnB,OAAO;AACR,KAAA,CAAC;;IAGF,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC5B,YAAA,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACxC;QAEA,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;YAC7C,cAAc,CAAC,EAAE,CAAC;YAClB,UAAU,CAAC,KAAK,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC;YACd;QACF;QAEA,UAAU,CAAC,IAAI,CAAC;AAEhB,QAAA,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC,MAAK;YACzC,gBAAgB,CAAC,KAAK,CAAC;QACzB,CAAC,EAAE,UAAU,CAAC;AAEd,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC5B,gBAAA,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACxC;AACF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;;IAGlE,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,WAAmB,EAAE,YAAqB,KAAI;AACjF,QAAA,IAAI,CAAC,oBAAoB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YAAE;QAElD,iBAAiB,CAAC,IAAI,IAAG;;YAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;;AAEtF,YAAA,MAAM,SAAS,GAAiB;AAC9B,gBAAA,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE;AACzB,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,YAAY;aACb;AACD,YAAA,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC;AACpE,YAAA,2BAA2B,CAAC,iBAAiB,EAAE,OAAO,CAAC;AACvD,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;AAEhE,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,WAAmB,KAAI;QAC7D,iBAAiB,CAAC,IAAI,IAAG;AACvB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC;AACzD,YAAA,2BAA2B,CAAC,iBAAiB,EAAE,OAAO,CAAC;AACvD,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAEvB,IAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAK;QAC3C,iBAAiB,CAAC,EAAE,CAAC;AACrB,QAAA,2BAA2B,CAAC,iBAAiB,EAAE,EAAE,CAAC;AACpD,IAAA,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;;AAGvB,IAAA,MAAM,OAAO,GAAG,WAAW,CAAC,YAAW;AACrC,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc,EAAE;AAClC,YAAA,MAAM,gBAAgB,CAAC,KAAK,CAAC;QAC/B;IACF,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;;AAG7C,IAAA,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,iBAAiB,IAAI,EAAE;AACzE,IAAA,MAAM,WAAW,GAAG,uBAAuB,EAAE,YAAY,IAAI,EAAE;AAC/D,IAAA,MAAM,eAAe,GAAG,uBAAuB,EAAE,gBAAgB,IAAI,EAAE;AACvE,IAAA,MAAM,aAAa,GAAG,uBAAuB,EAAE,cAAc,IAAI,EAAE;AACnE,IAAA,MAAM,kBAAkB,GAAG,uBAAuB,EAAE,aAAa,IAAI,EAAE;AACvE,IAAA,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,iBAAiB,IAAI,EAAE;AAEzE,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAK;AAC9B,QAAA,QACE,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,cAAc,CAAC,MAAM,GAAG,CAAC;YACzB,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAC3B,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,eAAe,CAAC,MAAM,GAAG,CAAC;YAC1B,aAAa,CAAC,MAAM,GAAG,CAAC;YACxB,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAC7B,YAAA,gBAAgB,CAAC,MAAM,GAAG,CAAC;AAE/B,IAAA,CAAC,EAAE;QACD,WAAW;QACX,cAAc;QACd,gBAAgB;QAChB,WAAW;QACX,eAAe;QACf,aAAa;QACb,kBAAkB;QAClB,gBAAgB;AACjB,KAAA,CAAC;;AAGF,IAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAsB;QAC7D,MAAM,KAAK,GAAoB,EAAE;QACjC,IAAI,KAAK,GAAG,CAAC;;AAGb,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACnD,YAAA,cAAc,CAAC,OAAO,CAAC,MAAM,IAAG;AAC9B,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACtE,QAAA,CAAC,CAAC;;AAGF,QAAA,gBAAgB,CAAC,OAAO,CAAC,QAAQ,IAAG;AAClC,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAA0B,EAAE,CAAC;AACpF,QAAA,CAAC,CAAC;;AAGF,QAAA,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAG;AACjC,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAChE,QAAA,CAAC,CAAC;;AAGF,QAAA,aAAa,CAAC,OAAO,CAAC,KAAK,IAAG;AAC5B,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAqB,EAAE,CAAC;AAC5E,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;IAE3F,OAAO;QACL,WAAW;QACX,OAAO;QACP,KAAK;QACL,uBAAuB;QACvB,gBAAgB;QAChB,WAAW;QACX,eAAe;QACf,aAAa;AACb,QAAA,YAAY,EAAE,kBAAkB;QAChC,gBAAgB;QAChB,cAAc;QACd,gBAAgB;QAChB,SAAS;QACT,WAAW;QACX,UAAU;QACV,aAAa;QACb,eAAe;QACf,kBAAkB;QAClB,mBAAmB;QACnB,OAAO;QACP,UAAU;QACV,oBAAoB;KACrB;AACH;;AC5iBA;;;;;;;;;;AAUG;AA6GH;AACA;AACA;AAEA,MAAM,aAAa,GAAG;AACpB,IAAA,SAAS,EAAE;AACT,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,YAAY,EAAE,mCAAmC;AACjD,QAAA,SAAS,EAAE,mGAAmG;AAC9G,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,SAAS,EAAE,QAAiB;AAC7B,KAAA;AACD,IAGA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,MAAM,EAAE,CAAC;AACV,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,6BAA6B;AACzC,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,oBAAoB,EAAE;AACpB,QAAA,eAAe,EAAE,kCAAkC;AACpD,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,UAAU,EAAE,QAAiB;AAC9B,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE,sCAAsC;AACnD,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,GAAG,EAAE,KAAK;AACX,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AAChC,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,SAAS,EAAE,QAAiB;AAC7B,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,MAAM,EAAE,OAAO;AAChB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAChC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AAChB,KAAA;CACF;AAED;AACA;AACA;AAEA,MAAMC,YAAU,GAAkE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MACrG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACrG,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,kHAAkH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CAC/J,CACP;AAED,MAAMC,WAAS,GAAkE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MACpG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACrG,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,oHAAoH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CACjK,CACP;AAED,MAAMC,WAAS,GAAkE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MACpG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACrG,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,oMAAoM,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CACjP,CACP;AAED,MAAM,cAAc,GAA8C,CAAC,EAAE,KAAK,EAAE,MAC1E,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,yBAAyB,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;IACxG,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAA,CAAG;IAClG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,IAAI,EAAC,cAAc,EAAC,CAAC,EAAC,6CAA6C,EAAA,CAAG,CACxE,CACP;AAED;AACA;AACA;AAEO,MAAM,wBAAwB,GAAG,UAAU,CAGhD,SAAS,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAA;AAC5C,IAAA,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,cAAc,GAAG,CAAC,EAClB,cAAc,GAAG,CAAC,EAClB,UAAU,GAAG,GAAG,EAChB,kBAAkB,GAAG,IAAI,EACzB,iBAAiB,GAAG,CAAC,EACrB,UAAU,GAAG,IAAI,EACjB,WAAW,GAAG,IAAI,EAClB,cAAc,GAAG,IAAI,EACrB,SAAS,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EACnE,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAC/B,SAAS,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,EAC9D,UAAU,GAAG,EAAE,EACf,KAAK,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,MAAM,EACN,QAAQ,GAAG,UAAU,EACrB,KAAK,GAAG,MAAM,EACd,MAAM,GAAG,IAAI,EACb,mBAAmB,GAAG,IAAI,EAC1B,aAAa,GAAG,IAAI,EACpB,SAAS,GAAG,oBAAoB,EAChC,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,EACN,OAAO,EACP,UAAU,GACX,GAAG,KAAK;IAET,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE;AAC5C,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAGjD,IAAA,MAAM,EACJ,WAAW,EACX,OAAO,EACP,KAAK,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,UAAU,GACX,GAAG,2BAA2B,CAAC;QAC9B,MAAM;QACN,KAAK;AACL,QAAA,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc;QACjD,UAAU;QACV,cAAc;QACd,cAAc;AACd,QAAA,oBAAoB,EAAE,kBAAkB;QACxC,iBAAiB;AAClB,KAAA,CAAC;;AAGF,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,KAAK,GAAkF,EAAE;;AAG/F,QAAA,IAAI,kBAAkB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACzE,YAAA,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;AAC1D,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9C,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACtD,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;;IAG/E,SAAS,CAAC,MAAK;QACb,IAAI,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,EAAE;YACrC,YAAY,CAAC,IAAI,CAAC;YAClB,MAAM,IAAI;QACZ;aAAO;AACL,YAAA,IAAI,SAAS,CAAC,OAAO,EAAE;AACrB,gBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC;AACvE,gBAAA,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC;YAClC;iBAAO;gBACL,YAAY,CAAC,KAAK,CAAC;YACrB;YACA,OAAO,IAAI;QACb;IACF,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;;IAGzF,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,CAAC,EAAE,CAAC;AACpB,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;AAGrB,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE;QAC1B,cAAc,CAAC,IAAI,IAAG;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AACtD,YAAA,UAAU,GAAG,MAAM,EAAE,IAAI,CAAC;AAC1B,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEtD,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;QACxC,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE;QAC1B,cAAc,CAAC,IAAI,IAAG;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;AACtD,YAAA,UAAU,GAAG,IAAI,EAAE,IAAI,CAAC;AACxB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEtD,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,QAAQ,CAAC,MAAM;YAAE;AAEvD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAoB;AACxC,YAAA,mBAAmB,GAAG,MAAM,CAAC;QAC/B;aAAO;AACL,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAsB;AAC9C,YAAA,kBAAkB,GAAG,UAAU,CAAC;YAChC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;QACrD;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;AAErF,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAK;AACtC,QAAA,cAAc,CAAC,EAAE,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;QAC9B,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,cAAc;AACd,QAAA,cAAc,EAAE,MAAM,WAAW;AACjC,QAAA,aAAa,EAAE,MAAM,QAAQ,CAAC,MAAM;AACrC,KAAA,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;;IAGjG,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM;YAAE;AAErC,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;AAC/C,YAAA,IAAI,YAAY,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;gBAChF,OAAO,IAAI;YACb;AACF,QAAA,CAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC;QAC1D,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAC5E,CAAC,EAAE,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;;IAG1C,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,WAAoB,KAAqB;QACxF,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KACvB,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,IAC9C,8BACE,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,UAAU,CAAC,uBAAuB,EAC7C,KAAK,EAAE,aAAa,CAAC,SAAS,EAAA,EAE7B,IAAI,CACA,IACL,IAAI,CACT;IACH,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC,CAAC;;AAG3D,IAAA,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,UAA0B,KAAqB;QACxF,IAAI,UAAU,CAAC,gBAAgB,IAAI,SAAS,CAAC,OAAO,EAAE;;YAEpD,QACE,8BACE,uBAAuB,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,gBAAgB,EAAE,EAChE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAA,CAC5B;QAEN;QACA,OAAO,aAAa,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;IAC/C,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;;IAG7C,MAAM,oBAAoB,GAAG,CAAC,UAA0B,EAAE,KAAa,EAAE,QAAiB,KAAI;QAC5F,IAAI,gBAAgB,EAAE;YACpB,OAAO,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5F;QAEA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;gBACL,GAAG,aAAa,CAAC,cAAc;AAC/B,gBAAA,IAAI,QAAQ,GAAG,aAAa,CAAC,oBAAoB,GAAG,EAAE,CAAC;AACxD,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAACF,YAAU,EAAA,EAAC,KAAK,EAAE,aAAa,CAAC,UAAU,EAAA,CAAI;YAC/C,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,aAAa,CAAC,eAAe,IACvC,qBAAqB,CAAC,UAAU,CAAC,CAC7B;YACN,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,KAC3C,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,aAAa,CAAC,eAAe,EAAA,EACvC,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,CAC7B,CACR,CACG;AAEV,IAAA,CAAC;IAED,MAAM,sBAAsB,GAAG,CAAC,MAAoB,EAAE,KAAa,EAAE,QAAiB,KAAI;QACxF,IAAI,kBAAkB,EAAE;YACtB,OAAO,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;QACpD;QAEA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;gBACL,GAAG,aAAa,CAAC,cAAc;AAC/B,gBAAA,IAAI,QAAQ,GAAG,aAAa,CAAC,oBAAoB,GAAG,EAAE,CAAC;AACxD,aAAA,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAACC,WAAS,EAAA,EAAC,KAAK,EAAE,aAAa,CAAC,UAAU,EAAA,CAAI;YAC9C,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,aAAa,CAAC,eAAe,EAAA,EAAG,MAAM,CAAC,KAAK,CAAQ;YACjE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,CAAC,CAAC,KAAI;oBACb,CAAC,CAAC,eAAe,EAAE;AACnB,oBAAA,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC;AAChC,oBAAA,oBAAoB,GAAG,MAAM,CAAC;gBAChC,CAAC,EACD,KAAK,EAAE;oBACL,GAAG,aAAa,CAAC,YAAY;AAC7B,oBAAA,IAAI,QAAQ,GAAG,aAAa,CAAC,mBAAmB,GAAG,EAAE,CAAC;AACvD,iBAAA,EAAA,YAAA,EACW,CAAA,OAAA,EAAU,MAAM,CAAC,KAAK,CAAA,qBAAA,CAAuB,EAAA;AAEzD,gBAAA,KAAA,CAAA,aAAA,CAACC,WAAS,EAAA,IAAA,CAAG,CACN,CACL;AAEV,IAAA,CAAC;;AAGD,IAAA,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE;AACzB,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,MAAM,UAAU,GAAG,kBAAkB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;AACxF,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;AAC9C,IAAA,MAAM,SAAS,GAAG,cAAc,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc;;AAGjH,IAAA,MAAM,cAAc,GAAwB,SAAS,CAAC;AACpD,UAAE;YACE,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC;YACvB,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,kBAAkB;YACxD,UAAU,EAAE,WAAW,SAAS,CAAC,QAAQ,CAAA,mBAAA,EAAsB,SAAS,CAAC,QAAQ,CAAA,OAAA,CAAS;AAC3F;UACD,EAAE;AAEN,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,SAAS,EAAA,YAAA,EACF,SAAS,EAAA,eAAA,EACN,MAAM,EACrB,SAAS,EAAE,IAAI,CAAC,8BAA8B,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EACtF,KAAK,EAAE;YACL,QAAQ;YACR,KAAK;YACL,MAAM;YACN,GAAG,aAAa,CAAC,SAAS;AAC1B,YAAA,GAAG,cAAc;AACjB,YAAA,GAAG,KAAK;AACT,SAAA,EAAA;QAGA,OAAO,IAAI,WAAW,KACrB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,YAAY,EAAA,EACvE,aAAa,GAAG,aAAa,EAAE,IAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,YAAA,KAAA,CAAA,aAAA,CAAC,cAAc,EAAA,IAAA,CAAG;YAClB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,cAAA,CAAyB,CACxB,CACJ,CACG,CACP;AAGA,QAAA,CAAC,OAAO,IAAI,UAAU,KACrB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,6BAA6B,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAA;YAChG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,YAAY,EAAA,EAAA,iBAAA,CAEpE;AACL,YAAA,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAChE,gBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,KAAK;AACtC,gBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,OAAA,EAAU,MAAM,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,EAAE,EACtC,IAAI,EAAC,QAAQ,mBACE,QAAQ,EACvB,SAAS,EAAE,IAAI,CACb,UAAU,CAAC,UAAU,EACrB,QAAQ,IAAI,UAAU,CAAC,oBAAoB,CAC5C,EACD,OAAO,EAAE,MAAK;AACZ,wBAAA,mBAAmB,GAAG,MAAM,CAAC;oBAC/B,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,IAExC,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAC5C;YAEV,CAAC,CAAC,CACE,CACP;AAGA,QAAA,CAAC,OAAO,IAAI,UAAU,IAAI,eAAe,KACxC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,aAAa,CAAC,OAAO,GAAI,CACtC;AAGA,QAAA,CAAC,OAAO,IAAI,eAAe,KAC1B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,6BAA6B,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,eAAe,CAAC,EAAA;AAChG,YAAA,KAAK,CAAC,MAAM,GAAG,CAAC,KACf,6BAAK,SAAS,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,YAAY,kBAEpE,CACP;YACA,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,KAAI;AACrC,gBAAA,MAAM,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK;AACpE,gBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS;AAC1C,gBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,UAAU,CAAC,QAAQ,IAAI,CAAA,WAAA,EAAc,KAAK,EAAE,EACjD,IAAI,EAAC,QAAQ,mBACE,QAAQ,EACvB,SAAS,EAAE,IAAI,CACb,UAAU,CAAC,cAAc,EACzB,QAAQ,IAAI,UAAU,CAAC,oBAAoB,CAC5C,EACD,OAAO,EAAE,MAAK;AACZ,wBAAA,kBAAkB,GAAG,UAAU,CAAC;wBAChC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;oBACrD,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,IAE5C,oBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAC9C;YAEV,CAAC,CAAC,CACE,CACP;QAGA,SAAS,KACR,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,UAAU,EAAA,EACnE,WAAW,GAAG,WAAW,EAAE,IAC1B,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;YACE,KAAA,CAAA,aAAA,CAACF,YAAU,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAA,CAAI;AAC/E,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;;gBAAiC,KAAK;qBAAS,CAC9C,CACJ,CACG,CACP;AAGA,QAAA,MAAM,KAAK,WAAW,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IACrD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,EAAA,EAC3D,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,aAAa,CAAC,YAAY,EAAA;AACpC,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,aAAa,CAAC,WAAW,EAAA,EAAA,QAAA,CAAU;AAChD,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,aAAa,CAAC,WAAW,EAAA,EAAA,QAAA,CAAU;YAChD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,aAAA,CAAwB;AACxB,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,aAAa,CAAC,WAAW,EAAA,EAAA,QAAA,CAAU;YAChD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,WAAA,CAAsB;AACtB,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,aAAa,CAAC,WAAW,EAAA,EAAA,KAAA,CAAY;AAClD,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,UAAA,CAAqB,CACjB,CACP,CACG,IACJ,IAAI;QAGR,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;;;;;;;;;;;OAcP,CAAS,CACN;AAEV,CAAC;;AC9rBD;;;;;;;;;;;AAWG;AA6FH;AACA,MAAM,gBAAgB,GAA4B;AAChD,IAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;AAChF,IAAA,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;AACjF,IAAA,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;AAC3E,IAAA,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;CACjF;AAED;AACA;AACA;AAEA,MAAMG,QAAM,GAAG;AACb,IAAA,SAAS,EAAE;AACT,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,YAAY,EAAE,uCAAuC;AACrD,QAAA,SAAS,EAAE,qGAAqG;AAChH,QAAA,QAAQ,EAAE,QAAQ;AACnB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,YAAY,EAAE,gDAAgD;AAC9D,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,SAAS,EAAE,QAAiB;AAC7B,KAAA;AACD,IAGA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,OAAO,EAAE,cAAc;AACxB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,MAAM,EAAE,CAAC;AACV,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,iCAAiC;AACxC,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,cAAc,EAAE,MAAM;AACtB,QAAA,UAAU,EAAE,GAAG;AAChB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,6BAA6B;AACzC,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,eAAe,EAAE,kCAAkC;AACpD,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,UAAU,EAAE,QAAiB;AAC9B,KAAA;AACD,IAKA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,QAAQ,EAAE,MAAe;AACzB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,eAAe,EAAE,qCAAqC;AACtD,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;AAC7B,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,eAAe,EAAE,uCAAuC;AACxD,QAAA,KAAK,EAAE,iCAAiC;AACzC,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,KAAK,EAAE,uCAAuC;AAC/C,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,QAAQ,EAAE,MAAe;AACzB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,UAAU;AACpB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;AAC7B,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,WAAW,EAAE,iCAAiC;AAC9C,QAAA,eAAe,EAAE,uCAAuC;AACzD,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,iCAAiC;AACzC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACzB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE,oBAAoB;AACjC,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,MAAM,EAAE,UAAU;AACnB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,eAAe,EAAE,0BAA0B;AAC5C,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,OAAO,EAAE,OAAO;AACjB,KAAA;CACF;AAED;AACA;AACA;AAEA,MAAMH,YAAU,GAAG,OACjB,6BAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAEG,QAAM,CAAC,QAAQ,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,kHAAkH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CAC/J,CACP;AAED,MAAMF,WAAS,GAAG,OAChB,6BAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAEE,QAAM,CAAC,QAAQ,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,oHAAoH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CACjK,CACP;AAED,MAAMC,cAAY,GAAG,OACnB,6BAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAED,QAAM,CAAC,YAAY,EAAA;AACrE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,0KAA0K,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CACvN,CACP;AAQD,MAAM,SAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAA;AAC3E,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,oMAAoM,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CACjP,CACP;AAED;AACA;AACA;AAEO,MAAM,oBAAoB,GAAG,UAAU,CAC5C,SAAS,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAA;IACtC,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,gBAAgB,EAC3B,wBAAwB,GAAG,CAAC,EAC5B,cAAc,GAAG,CAAC,EAClB,UAAU,GAAG,GAAG,EAChB,8BAA8B,GAAG,IAAI,EACrC,iBAAiB,GAAG,IAAI,EACxB,aAAa,GAAG,CAAC,EACjB,UAAU,GAAG,IAAI,EACjB,kBAAkB,GAAG,IAAI,EACzB,kBAAkB,GAAG,IAAI,EACzB,UAAU,GAAG,EAAE,EACf,KAAK,EACL,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,EACN,MAAM,EACN,KAAK,GAAG,MAAM,EACd,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,IAAI,EACb,SAAS,GAAG,oBAAoB,EAChC,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,MAAM,EACN,OAAO,GACR,GAAG,KAAK;AAET,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE;AACrC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;;AAG3E,IAAA,MAAM,EACJ,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,UAAU,GACX,GAAG,2BAA2B,CAAC;QAC9B,MAAM;QACN,KAAK;AACL,QAAA,OAAO,EAAE,MAAM;QACf,UAAU;AACV,QAAA,cAAc,EAAE,wBAAwB;QACxC,cAAc;QACd,8BAA8B;QAC9B,iBAAiB;QACjB,aAAa;QACb,aAAa;AACb,QAAA,oBAAoB,EAAE,IAAI;AAC3B,KAAA,CAAC;;AAGF,IAAA,MAAM,eAAe,GAAG,OAAO,CAAC,MAAK;AACnC,QAAA,OAAO;aACJ,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK;aAC/B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AACpD,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;;AAGd,IAAA,MAAM,gBAAgB,GAAG,CAAC,EAAmB,KAAuC;AAClF,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/C,IAAA,CAAC;;AAGD,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,KAAK,GAIN,EAAE;QAEP,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,KAAI;AAChD,YAAA,QAAQ,OAAO,CAAC,EAAE;AAChB,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,wBAAA,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;AAC9D,4BAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC5D,wBAAA,CAAC,CAAC;oBACJ;oBACA;AACF,gBAAA,KAAK,aAAa;AAChB,oBAAA,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,wBAAwB,CAAC,CAAC,OAAO,CAAC,UAAU,IAAG;AACtF,wBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACpE,oBAAA,CAAC,CAAC;oBACF;AACF,gBAAA,KAAK,UAAU;AACb,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,wBAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,GAAG,WAAW;6BAC1D,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;6BAC9B,OAAO,CAAC,QAAQ,IAAG;AAClB,4BAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAChE,wBAAA,CAAC,CAAC;oBACN;oBACA;;AAEN,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,wBAAwB,CAAC,CAAC;;AAGlH,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,KAAK,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;QACxC,cAAc,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,QAAQ,CAAC,MAAM;YAAE;AAEvD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;AAClC,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC;gBAChC;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC;AAC/B,gBAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBACjD;AACF,YAAA,KAAK,UAAU;gBACb,kBAAkB,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAoB,CAAC;AAC1F,gBAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAChC;;AAEN,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;;AAGrF,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;AAChB,QAAA,aAAa,EAAE,MAAM,QAAQ,CAAC,MAAM;AACrC,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;;AAGjF,IAAA,MAAM,cAAc,GAAG,CAAC,IAAY,KAAqB;AACvD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,CAAC;AACxD,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KACvB,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,IACxC,8BAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAEA,QAAM,CAAC,SAAS,EAAA,EAAG,IAAI,CAAQ,IAClD,IAAI,CACT;AACH,IAAA,CAAC;;AAGD,IAAA,MAAM,YAAY,GAAG,CAAC,SAA0B,EAAE,SAAiB,KAAY;QAC7E,IAAI,MAAM,GAAG,CAAC;AACd,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;AACxD,YAAA,IAAI,aAAa,CAAC,EAAE,KAAK,SAAS,EAAE;gBAClC,OAAO,MAAM,GAAG,SAAS;YAC3B;AACA,YAAA,IAAI,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE;AAC1E,gBAAA,MAAM,EAAE;YACV;QACF;QACA,OAAO,MAAM,GAAG,SAAS;AAC3B,IAAA,CAAC;;IAGD,MAAM,mBAAmB,GAAG,MAAK;AAC/B,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAE3E,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,UAAU,CAAC,OAAO,CAAC,EAAA;AAClF,YAAA,kBAAkB,KACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAA;gBAC9B,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAEA,QAAM,CAAC,YAAY,EAAA,EAAG,MAAM,CAAC,KAAK,IAAI,iBAAiB,CAAM;AACvE,gBAAA,cAAc,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,KAC7C,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAEA,QAAM,CAAC,aAAa,EAC3B,OAAO,EAAE,MAAM,cAAc,GAAG,QAAQ,CAAC,EAAA,EAAA,UAAA,CAGlC,CACV,CACG,CACP;AACA,YAAA,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;gBACnE,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC/C,gBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS;AAE1C,gBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,OAAA,EAAU,MAAM,CAAC,KAAK,CAAA,CAAE,EAC7B,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,QAAQ,EACvB,KAAK,EAAE,EAAE,GAAGA,QAAM,CAAC,IAAI,EAAE,IAAI,QAAQ,GAAGA,QAAM,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,EACjE,OAAO,EAAE,MAAK;AACZ,wBAAA,mBAAmB,GAAG,MAAM,CAAC;AAC/B,oBAAA,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,EAC7C,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,IAAI,UAAU,CAAC,oBAAoB,CAAC,IAElF,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAC1C,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,oBAAA,KAAA,CAAA,aAAA,CAACF,WAAS,EAAA,IAAA,CAAG;AACb,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEE,QAAM,CAAC,WAAW,EAAA;wBAC5B,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAEA,QAAM,CAAC,SAAS,IAAG,MAAM,CAAC,KAAK,CAAK,CAC1C;oBACN,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAEA,QAAM,CAAC,YAAY,EAC1B,OAAO,EAAE,CAAC,CAAC,KAAI;4BACb,CAAC,CAAC,eAAe,EAAE;AACnB,4BAAA,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC;AAChC,4BAAA,oBAAoB,GAAG,MAAM,CAAC;AAChC,wBAAA,CAAC,gBACU,QAAQ,EAAA;AAEnB,wBAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,CAAG,CACN,CACR,CACJ,CACG;YAEV,CAAC,CAAC,CACE;AAEV,IAAA,CAAC;;IAGD,MAAM,wBAAwB,GAAG,MAAK;AACpC,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAEpD,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,UAAU,CAAC,OAAO,CAAC,EAAA;AACvF,YAAA,kBAAkB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KACrC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAA;AAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAEA,QAAM,CAAC,YAAY,EAAA,EAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAM,CAChE,CACP;AACA,YAAA,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,KAAI;AAC3F,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAClC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK,YAAY;oBACzC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,MAAM,KAAK,KAAK,CAC7E;AACD,gBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS;gBAE1C,QACE,6BACE,GAAG,EAAE,UAAU,CAAC,QAAQ,IAAI,CAAA,WAAA,EAAc,KAAK,EAAE,EACjD,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,QAAQ,EACvB,KAAK,EAAE,EAAE,GAAGA,QAAM,CAAC,IAAI,EAAE,IAAI,QAAQ,GAAGA,QAAM,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,EACjE,OAAO,EAAE,MAAK;AACZ,wBAAA,kBAAkB,GAAG,UAAU,CAAC;wBAChC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;AACrD,oBAAA,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,EAC7C,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,IAAI,UAAU,CAAC,oBAAoB,CAAC,EAAA,EAEtF,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,IACxD,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,oBAAA,KAAA,CAAA,aAAA,CAACH,YAAU,EAAA,IAAA,CAAG;AACd,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEG,QAAM,CAAC,WAAW,EAAA;AAC5B,wBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAEA,QAAM,CAAC,SAAS,EAAA,EAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAK;AACjE,wBAAA,iBAAiB,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,KAC7E,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,mBAAmB,EAAA,EACnC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,MACpE,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,IACvC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,GAAG,EAAE,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAE,EACtB,KAAK,EAAE;gCACL,GAAGA,QAAM,CAAC,YAAY;AACtB,gCAAA,IAAI,eAAe,KAAK,QAAQ,CAAC,KAAK,GAAGA,QAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC;AACxE,6BAAA,EACD,OAAO,EAAE,CAAC,CAAC,KAAI;gCACb,CAAC,CAAC,eAAe,EAAE;AACnB,gCAAA,eAAe,GAAG,QAAQ,CAAC;4BAC7B,CAAC,EACD,YAAY,EAAE,MAAM,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EACtD,YAAY,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,EAAA;AAE3C,4BAAA,QAAQ,CAAC,KAAK;AACd,4BAAA,kBAAkB,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,KACjD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAA;;AAAI,gCAAA,QAAQ,CAAC,KAAK;AAAS,gCAAA,GAAA,CAAA,CAC7D,CACI,CACR,CACF,CAAC,CACE,CACP,CACG;oBACL,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,KAC3C,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAEA,QAAM,CAAC,SAAS,EAAA,EAAG,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,CAAQ,CAC1E,CACA,CACJ,CACG;YAEV,CAAC,CAAC,CACE;AAEV,IAAA,CAAC;;IAGD,MAAM,qBAAqB,GAAG,MAAK;AACjC,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,GAAG,WAAW;AAC7E,QAAA,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAErE,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,UAAU,CAAC,OAAO,CAAC,EAAA;AACpF,YAAA,kBAAkB,KACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAA;AAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAEA,QAAM,CAAC,YAAY,EAAA,EAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAM,CAC7D,CACP;YACD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,YAAY,EAAA,EAC5B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC3D,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAClC,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,KAAK,UAAU;oBAC7C,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,MAAM,KAAK,KAAK,CAC3E;AACD,gBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS;gBAE1C,OAAO,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,IACzD,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,CAAA,SAAA,EAAY,IAAI,CAAC,KAAK,CAAA,CAAE,EAC7B,KAAK,EAAE;wBACL,GAAGA,QAAM,CAAC,YAAY;AACtB,wBAAA,IAAI,QAAQ,GAAGA,QAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC;qBAC9C,EACD,OAAO,EAAE,MAAK;AACZ,wBAAA,kBAAkB,GAAG;4BACnB,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AACA,yBAAA,CAAC;AACpB,wBAAA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC7B,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,EAC7C,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,IAAI,UAAU,CAAC,oBAAoB,CAAC,EAAA;oBAErF,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAEA,QAAM,CAAC,YAAY,EAAA,EAAG,KAAK,GAAG,CAAC,CAAQ;oBACpD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAQ;AACzB,oBAAA,KAAA,CAAA,aAAA,CAACC,cAAY,EAAA,IAAA,CAAG,CACT,CACV;AACH,YAAA,CAAC,CAAC,CACE,CACF;AAEV,IAAA,CAAC;;AAGD,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;IAExB,MAAM,WAAW,GAAG,UAAU,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAC/D,IAAA,IAAI,CAAC,WAAW;AAAE,QAAA,OAAO,IAAI;AAE7B,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,SAAS,EAAA,YAAA,EACF,SAAS,EACrB,SAAS,EAAE,IAAI,CAAC,0BAA0B,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAClF,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;YACpB,KAAK;YACL,MAAM;YACN,GAAGD,QAAM,CAAC,SAAS;AACnB,YAAA,GAAG,KAAK;AACT,SAAA,EAAA;QAGA,MAAM,IAAI,6BAAK,KAAK,EAAEA,QAAM,CAAC,MAAM,EAAA,EAAG,MAAM,CAAO;QAGpD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,GAAGA,QAAM,CAAC,OAAO,EAAE,SAAS,EAAE,EAAA;AAEzC,YAAA,OAAO,KACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,cAAc,EAAA;AAC/B,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,YAAA,CAAuB,CACnB,CACP;YAGA,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;gBACtC,IAAI,OAAO,GAAoB,IAAI;AAEnC,gBAAA,QAAQ,OAAO,CAAC,EAAE;AAChB,oBAAA,KAAK,QAAQ;wBACX,OAAO,GAAG,mBAAmB,EAAE;wBAC/B;AACF,oBAAA,KAAK,aAAa;wBAChB,OAAO,GAAG,wBAAwB,EAAE;wBACpC;AACF,oBAAA,KAAK,UAAU;wBACb,OAAO,GAAG,qBAAqB,EAAE;wBACjC;;AAGJ,gBAAA,IAAI,CAAC,OAAO;AAAE,oBAAA,OAAO,IAAI;gBAEzB,QACE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAA;oBAC5B,KAAK,GAAG,CAAC,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,OAAO,EAAA,CAAI;oBAC3C,OAAO,CACO;AAErB,YAAA,CAAC,CAAC;YAGD,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,KACvD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,UAAU,EAAA;AAC3B,gBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;;oBAA8B,KAAK;AAAM,oBAAA,IAAA,CAAA,CACrC,CACP,CACG;QAGL,MAAM,IAAI,6BAAK,KAAK,EAAEA,QAAM,CAAC,MAAM,EAAA,EAAG,MAAM,CAAO;QAGpD,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;;;;;;;SAUP,CAAS,CACN;AAEV,CAAC;;AC5xBH;;;;;;;;;;;AAWG;AAqGH;AACA;AACA;AAEA,MAAMA,QAAM,GAAG;AACb,IAAA,SAAS,EAAE;AACT,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,YAAY,EAAE,uCAAuC;AACrD,QAAA,SAAS,EAAE,uCAAuC;AAClD,QAAA,QAAQ,EAAE,QAAQ;AACnB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,YAAY,EAAE,gDAAgD;AAC9D,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,SAAS,EAAE,MAAe;AAC3B,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,aAAa,EAAE,QAAiB;AACjC,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,WAAW,EAAE,gDAAgD;AAC7D,QAAA,SAAS,EAAE,MAAe;AAC3B,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,QAAQ;AAClB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,OAAO,EAAE,YAAY;AACtB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,MAAM,EAAE,CAAC;AACV,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,iCAAiC;AACxC,QAAA,cAAc,EAAE,MAAM;AACtB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,6BAA6B;AACzC,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,oBAAoB,EAAE;AACpB,QAAA,eAAe,EAAE,kCAAkC;AACpD,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,UAAU,EAAE,QAAiB;AAC9B,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE,oBAAoB;AACjC,KAAA;AACD,IAAA,sBAAsB,EAAE;AACtB,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,uCAAuC;AAC/C,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,YAAY,EAAE,gDAAgD;AAC9D,QAAA,SAAS,EAAE,MAAe;AAC3B,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,eAAe,EAAE,aAAa;AAC9B,QAAA,MAAM,EAAE,uBAAuB;AAC/B,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,UAAU,EAAE,gBAAgB;AAC7B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,iCAAiC;AACxC,QAAA,eAAe,EAAE,uCAAuC;AACxD,QAAA,WAAW,EAAE,iCAAiC;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,eAAe,EAAE,qCAAqC;AACvD,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,OAAO;AACf,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,mBAAmB,EAAE,uCAAuC;AAC5D,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,OAAO,EAAE,WAAW;AACrB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AAChC,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,6CAA6C;AACzD,QAAA,MAAM,EAAE,gDAAgD;AACzD,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,SAAS,EAAE,kBAAkB;AAC7B,QAAA,SAAS,EAAE,+BAA+B;AAC3C,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,WAAW,EAAE,GAAG;AAChB,QAAA,SAAS,EAAE,OAAgB;AAC3B,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,OAAO,EAAE,MAAM;AAChB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,eAAe,EAAE,CAAC;AAClB,QAAA,eAAe,EAAE,UAAmB;AACpC,QAAA,UAAU,EAAE,GAAG;AAChB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,iCAAiC;AACxC,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,QAAQ,EAAE,MAAe;AACzB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,eAAe;AACzB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;AAC7B,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,WAAW,EAAE,iCAAiC;AAC9C,QAAA,eAAe,EAAE,uCAAuC;AACzD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,SAAkB;AAC7B,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACD,IAKA,SAAS,EAAE;AACT,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;CACF;AAED;AACA;AACA;AAEA,MAAMH,YAAU,GAAG,CAAC,EAAE,KAAK,EAAmC,MAC5D,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,GAAGG,QAAM,CAAC,cAAc,EAAE,GAAG,KAAK,EAAE,EAAA;AACxF,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,kHAAkH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CAC/J,CACP;AAED,MAAMF,WAAS,GAAG,CAAC,EAAE,KAAK,EAAmC,MAC3D,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,GAAGE,QAAM,CAAC,cAAc,EAAE,GAAG,KAAK,EAAE,EAAA;AACxF,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,oHAAoH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CACjK,CACP;AAED,MAAM,cAAc,GAAG,CAAC,EAAE,KAAK,EAAmC,MAChE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,GAAGA,QAAM,CAAC,eAAe,EAAE,GAAG,KAAK,EAAE,EAAA;AACzF,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,oHAAoH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CACjK,CACP;AAQD,MAAM,gBAAgB,GAAG,OACvB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA;IACjH,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,WAAW,EAAC,GAAG,EAAA,CAAG;AACzE,IAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,KAAK,EAAC,CAAC,EAAC,KAAK,EAAC,WAAW,EAAC,GAAG,EAAA,CAAG;IACpD,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,kBAAkB,EAAC,WAAW,EAAC,GAAG,EAAA,CAAG,CAClD,CACP;AAED;AACA;AACA;AAEO,MAAM,iBAAiB,GAAG,UAAU,CACzC,SAAS,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAA;IACnC,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,cAAc,GAAG,CAAC,EAClB,WAAW,GAAG,CAAC,EACf,SAAS,GAAG,CAAC,EACb,cAAc,GAAG,CAAC,EAClB,UAAU,GAAG,GAAG,EAChB,YAAY,EAAE,UAAU,EACxB,YAAY,GAAG,IAAI,EACnB,UAAU,GAAG,IAAI,EACjB,gBAAgB,GAAG,IAAI,EACvB,kBAAkB,GAAG,IAAI,EACzB,MAAM,GAAG,cAAc,EACvB,mBAAmB,GAAG,KAAK,EAC3B,sBAAsB,GAAG,KAAK,EAC9B,UAAU,GAAG,IAAI,EACjB,cAAc,GAAG,GAAG,EACpB,UAAU,GAAG,EAAE,EACf,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,MAAM,EACN,MAAM,EACN,mBAAmB,EACnB,KAAK,GAAG,OAAO,EACf,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,IAAI,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,MAAM,EACN,OAAO,GACR,GAAG,KAAK;AAET,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE;AACrC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAS,KAAK,CAAC;IACzD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IACzE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;;IAGrE,MAAM,EACJ,WAAW,EACX,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,UAAU,GACX,GAAG,2BAA2B,CAAC;QAC9B,MAAM;QACN,KAAK;AACL,QAAA,OAAO,EAAE,MAAM;QACf,UAAU;QACV,cAAc;QACd,cAAc;AACd,QAAA,8BAA8B,EAAE,IAAI;AACpC,QAAA,YAAY,EAAE,UAAU;QACxB,aAAa;AACb,QAAA,oBAAoB,EAAE,kBAAkB;AACzC,KAAA,CAAC;;AAGF,IAAA,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAK;AACtC,QAAA,IAAI,SAAS,KAAK,KAAK,EAAE;;AAEvB,YAAA,MAAM,WAAW,GAAG,CAAC,GAAG,gBAAgB,CAAC;AACzC,YAAA,YAAY,CAAC,OAAO,CAAC,GAAG,IAAG;AACzB,gBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,oBAAA,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AAC7B,wBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE;AAC/C,4BAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;wBAC3B;AACF,oBAAA,CAAC,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;YACF,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;QAC1C;AACA,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC;AACtD,QAAA,OAAO,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE;IACnD,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;;AAG5D,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,KAAK,GAAuC,EAAE;;QAGpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,EAAE;AAC5C,YAAA,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;AAC1C,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9C,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACtD,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;;AAG5D,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,KAAK,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;QACxC,cAAc,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,QAAQ,CAAC,MAAM;YAAE;AACvD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC;QAClC;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;AACrC,YAAA,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC;AAC/B,YAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;;AAGrF,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;AAChB,QAAA,YAAY,EAAE,MAAM,SAAS;QAC7B,YAAY;AACb,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC;;AAG3E,IAAA,MAAM,cAAc,GAAG,CAAC,IAAY,KAAqB;AACvD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,CAAC;AACxD,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KACvB,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,IACxC,8BAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAEA,QAAM,CAAC,SAAS,EAAA,EAAG,IAAI,CAAQ,IAClD,IAAI,CACT;AACH,IAAA,CAAC;;AAGD,IAAA,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,QAAiB,KAAY;QAChE,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAClC,QAAA,MAAM,MAAM,GAAG,QAAQ,IAAI,cAAc;QACzC,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,CAAC,cAAc,EAAE,EAAE;AAC7C,IAAA,CAAC;;AAGD,IAAA,MAAM,eAAe,GAAG,CAAC,KAAa,KAAI;QACxC,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC;QAClD,IAAI,GAAG,EAAE;AACP,YAAA,WAAW,GAAG,GAAG,CAAC;QACpB;AACF,IAAA,CAAC;AAED,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,QAAQ,GAAG,gBAAgB,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7F,MAAM,mBAAmB,GAAG,YAAY,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC;IACzE,MAAM,iBAAiB,GAAG,UAAU,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AAChE,IAAA,MAAM,UAAU,GAAG,kBAAkB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;AACxF,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;IAE9C,MAAM,eAAe,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,YAAY;AAEvE,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,SAAS,EAAA,YAAA,EACH,iCAAiC,EAC5C,SAAS,EAAE,IAAI,CAAC,4BAA4B,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EACpF,KAAK,EAAE;AACL,YAAA,QAAQ,EAAE,UAAU;YACpB,KAAK;YACL,MAAM;YACN,GAAGA,QAAM,CAAC,SAAS;AACnB,YAAA,GAAG,KAAK;AACT,SAAA,EAAA;QAGA,MAAM,IAAI,6BAAK,KAAK,EAAEA,QAAM,CAAC,MAAM,EAAA,EAAG,MAAM,CAAO;AAGnD,QAAA,QAAQ,KACP,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAA;AAC9D,YAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE;oBACL,GAAGA,QAAM,CAAC,GAAG;AACb,oBAAA,IAAI,SAAS,KAAK,KAAK,GAAGA,QAAM,CAAC,SAAS,GAAG,EAAE,CAAC;iBACjD,EACD,OAAO,EAAE,MAAM,eAAe,CAAC,KAAK,CAAC,EACrC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,KAAK,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,EAAA;;gBAG/E,gBAAgB,CAAC,MAAM,GAAG,CAAC,KAC1B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE;wBACX,GAAGA,QAAM,CAAC,QAAQ;AAClB,wBAAA,IAAI,SAAS,KAAK,KAAK,GAAGA,QAAM,CAAC,cAAc,GAAG,EAAE,CAAC;AACtD,qBAAA,EAAA;AACE,oBAAA,gBAAgB,CAAC,MAAM;AACnB,oBAAA,GAAA,CAAA,CACR,CACM;AACR,YAAA,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,MACpB,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,SAAS,KAAK,GAAG,CAAC,EAAE,CAAC,IAC9C,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,GAAG,CAAC,EAAE,EACX,KAAK,EAAE;oBACL,GAAGA,QAAM,CAAC,GAAG;AACb,oBAAA,IAAI,SAAS,KAAK,GAAG,CAAC,EAAE,GAAGA,QAAM,CAAC,SAAS,GAAG,EAAE,CAAC;AAClD,iBAAA,EACD,OAAO,EAAE,MAAM,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EACtC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,KAAK,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAA;AAEhF,gBAAA,GAAG,CAAC,KAAK;gBACT,GAAG,CAAC,OAAO,KAAK,SAAS,KACxB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE;wBACX,GAAGA,QAAM,CAAC,QAAQ;AAClB,wBAAA,IAAI,SAAS,KAAK,GAAG,CAAC,EAAE,GAAGA,QAAM,CAAC,cAAc,GAAG,EAAE,CAAC;qBACvD,EAAA,EACE,GAAG,CAAC,OAAO,CACP,CACR,CACM,CACV,CACF,CAAC,CACE,CACP;AAGD,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;gBACL,GAAGA,QAAM,CAAC,OAAO;AACjB,gBAAA,IAAI,eAAe,GAAGA,QAAM,CAAC,cAAc,GAAG,EAAE,CAAC;gBACjD,SAAS;AACV,aAAA,EAAA;AAGD,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;oBACL,GAAGA,QAAM,CAAC,iBAAiB;oBAC3B,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,sBAAsB;oBACxD,QAAQ,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO;AAC/C,oBAAA,WAAW,EAAE,eAAe,GAAG,MAAM,GAAGA,QAAM,CAAC,iBAAiB,CAAC,WAAW;AAC7E,iBAAA,EAAA;AAGA,gBAAA,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,cAAc,EAAA;AAC9D,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAEA,QAAM,CAAC,YAAY,sBAAsB,CAChD;AACL,oBAAA,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAChD,wBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,KAAK;AACtC,wBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,OAAA,EAAU,MAAM,CAAC,KAAK,CAAA,CAAE,EAC7B,IAAI,EAAC,QAAQ,mBACE,QAAQ,EACvB,KAAK,EAAE;gCACL,GAAGA,QAAM,CAAC,cAAc;AACxB,gCAAA,IAAI,QAAQ,GAAGA,QAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC;AACjD,6BAAA,EACD,OAAO,EAAE,MAAM,mBAAmB,GAAG,MAAM,CAAC,EAC5C,YAAY,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC,EACzC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,IAAI,UAAU,CAAC,oBAAoB,CAAC,EAAA;AAEnF,4BAAA,KAAA,CAAA,aAAA,CAACF,WAAS,EAAA,IAAA,CAAG;4BACb,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAEE,QAAM,CAAC,cAAc,EAAA,EAAG,MAAM,CAAC,KAAK,CAAQ;AACzD,4BAAA,KAAA,CAAA,aAAA,CAAC,cAAc,EAAA,EAAC,KAAK,EAAE,QAAQ,GAAGA,QAAM,CAAC,sBAAsB,GAAG,EAAE,EAAA,CAAI,CACpE;oBAEV,CAAC,CAAC,CACE,CACP;AAGA,gBAAA,eAAe,KACd,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,eAAe,EAAA;AAC/D,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAEA,QAAM,CAAC,YAAY,IAC3B,KAAK,GAAG,aAAa,GAAG,kBAAkB,CACxC,CACD;AACL,oBAAA,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,KAAI;AAC9D,wBAAA,MAAM,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK;AACpE,wBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,SAAS;AAE1C,wBAAA,OAAO,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,IACrE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,UAAU,CAAC,QAAQ,IAAI,cAAc,KAAK,CAAA,CAAE,EACjD,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,QAAQ,EACvB,KAAK,EAAE;gCACL,GAAGA,QAAM,CAAC,cAAc;AACxB,gCAAA,IAAI,QAAQ,GAAGA,QAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC;6BACjD,EACD,OAAO,EAAE,MAAK;AACZ,gCAAA,kBAAkB,GAAG,UAAU,CAAC;AAChC,gCAAA,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;4BACnC,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,EAC7C,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,IAAI,UAAU,CAAC,oBAAoB,CAAC,EAAA;AAEvF,4BAAA,KAAA,CAAA,aAAA,CAACH,YAAU,EAAA,IAAA,CAAG;AACd,4BAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAEG,QAAM,CAAC,cAAc,EAAA,EAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAQ;4BAC5E,UAAU,CAAC,KAAK,KAAK,SAAS,KAC7B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAEA,QAAM,CAAC,eAAe,EAAA,EAAG,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,CAAQ,CAChF;AACD,4BAAA,KAAA,CAAA,aAAA,CAAC,cAAc,EAAA,EAAC,KAAK,EAAE,QAAQ,GAAGA,QAAM,CAAC,sBAAsB,GAAG,EAAE,EAAA,CAAI,CACpE,CACP;oBACH,CAAC,CAAC,CACE,CACP;AAGA,gBAAA,iBAAiB,KAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,EAAA;AAC1D,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAEA,QAAM,CAAC,YAAY,qBAAqB,CAC/C;oBACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,UAAU,EAAA,EAC1B,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAClD,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,IACrC,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,CAAA,MAAA,EAAS,KAAK,CAAC,IAAI,CAAA,CAAE,EAC1B,KAAK,EAAE;4BACL,GAAGA,QAAM,CAAC,SAAS;AACnB,4BAAA,IAAI,YAAY,KAAK,KAAK,CAAC,IAAI,GAAGA,QAAM,CAAC,cAAc,GAAG,EAAE,CAAC;AAC9D,yBAAA,EACD,OAAO,EAAE,MAAM,YAAY,GAAG,KAAK,CAAC,EACpC,YAAY,EAAE,MAAM,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAC/C,YAAY,EAAE,MAAM,eAAe,CAAC,IAAI,CAAC,EACzC,SAAS,EAAE,UAAU,CAAC,SAAS,EAAA;AAE9B,wBAAA,KAAK,CAAC,IAAI,KACT,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,KAAK,CAAC,IAAI,EACf,GAAG,EAAE,KAAK,CAAC,IAAI,EACf,KAAK,EAAEA,QAAM,CAAC,SAAS,EACvB,OAAO,EAAE,CAAC,CAAC,KAAI;gCACZ,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AACvD,4BAAA,CAAC,GACD,CACH;wBACD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAO,KAAK,CAAC,IAAI,CAAQ,CAClB,CACV,CACF,CAAC,CACE,CACF,CACP,CACG;AAGL,YAAA,mBAAmB,IAAI,CAAC,eAAe,KACtC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;oBACL,GAAGA,QAAM,CAAC,cAAc;AACxB,oBAAA,KAAK,EAAE,mBAAmB;AAC3B,iBAAA,EAAA;AAED,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAEA,QAAM,CAAC,YAAY,IAC3B,SAAS,KAAK,KAAK,GAAG,mBAAmB,GAAG,CAAA,YAAA,EAAe,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,SAAS,EAAE,CACzH;AACJ,wBAAA,mBAAmB,KAClB,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAEA,QAAM,CAAC,WAAW,EACzB,OAAO,EAAE,CAAC,CAAC,KAAI;gCACb,CAAC,CAAC,cAAc,EAAE;AAClB,gCAAA,cAAc,GAAG,UAAU,CAAC;4BAC9B,CAAC,EAAA,EAAA,UAAA,CAGC,CACL,CACG;oBACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,YAAY,IAChE,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,MACrC,aAAa,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAC3C,6BACE,GAAG,EAAE,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,QAAQ,EACnC,KAAK,EAAE;4BACL,GAAGA,QAAM,CAAC,WAAW;AACrB,4BAAA,IAAI,cAAc,KAAK,OAAO,CAAC,EAAE,GAAGA,QAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAClE,yBAAA,EACD,OAAO,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,EACxC,YAAY,EAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,EACjD,YAAY,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAC3C,SAAS,EAAE,UAAU,CAAC,WAAW,EAAA;AAEhC,wBAAA,OAAO,CAAC,KAAK,IACZ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,GAAG,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EACxC,KAAK,EAAEA,QAAM,CAAC,YAAY,EAC1B,OAAO,EAAE,CAAC,CAAC,KAAI;gCACZ,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;4BACvD,CAAC,EAAA,CACD,KAEF,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;gCACL,GAAGA,QAAM,CAAC,YAAY;AACtB,gCAAA,OAAO,EAAE,MAAM;AACf,gCAAA,UAAU,EAAE,QAAQ;AACpB,gCAAA,cAAc,EAAE,QAAQ;AACzB,6BAAA,EAAA;4BAED,KAAA,CAAA,aAAA,CAAC,gBAAgB,EAAA,IAAA,CAAG,CAChB,CACP;AACD,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,QAAM,CAAC,WAAW,EAAA;AAC5B,4BAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAEA,QAAM,CAAC,YAAY,EAAA,EAC3B,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAC3B;AACJ,4BAAA,UAAU,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,KACxC,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAEA,QAAM,CAAC,YAAY,EAAA,EAC1B,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAC3C,CACL,CACG,CACF,CACP,CACF,CAAC,CACE,CACF,CACF,CACP,CACG;QAGL,MAAM,IACL,6BAAK,KAAK,EAAEA,QAAM,CAAC,MAAM,EAAA,EAAG,MAAM,CAAO,KAEzC,6BAAK,KAAK,EAAEA,QAAM,CAAC,MAAM,EAAA;YACvB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,kDAAA,CAA8C;AAC7C,YAAA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,EAAE,GAAGA,QAAM,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EACpE,OAAO,EAAE,MAAM,cAAc,GAAG,aAAa,CAAC,EAAA;;gBAExB,KAAK;AACpB,gBAAA,IAAA,CAAA,CACV,CACG,CACP;QAGD,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;;;;;;;SAUP,CAAS,CACN;AAEV,CAAC;;ACv2BH;;;;;;;;;AASG;AAoGH;AACA;AACA;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,gBAAgB,EAAE,mBAAmB;AACrC,IAAA,qBAAqB,EAAE,wBAAwB;AAC/C,IAAA,aAAa,EAAE,2BAA2B;AAC1C,IAAA,cAAc,EAAE,4BAA4B;AAC5C,IAAA,WAAW,EAAE,yBAAyB;AACtC,IAAA,UAAU,EAAE,wBAAwB;AACpC,IAAA,YAAY,EAAE,0BAA0B;AACxC,IAAA,cAAc,EAAE,4BAA4B;AAC5C,IAAA,aAAa,EAAE,2BAA2B;AAC1C,IAAA,aAAa,EAAE,2BAA2B;AAC1C,IAAA,cAAc,EAAE,4BAA4B;CAC7C;AAED;AACA;AACA;AAEM,SAAU,uBAAuB,CACrC,OAAuC,EAAA;IAEvC,MAAM,EACJ,MAAM,EACN,OAAO,GAAG,IAAI,EACd,aAAa,GAAG,EAAE,EAClB,kBAAkB,GAAG,GAAG,EACxB,gBAAgB,GAAG,IAAI,EACvB,WAAW,GAAG,IAAI,GACnB,GAAG,OAAO;;AAGX,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAwB,IAAI,CAAC;AAC9D,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAgB,IAAI,CAAC;AACrD,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAAgB,IAAI,CAAC;;IAGvD,SAAS,CAAC,MAAK;AACb,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAC9B,gBAAA,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAC1C;AACF,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;;IAGN,MAAM,SAAS,GAAG,WAAW,CAC3B,OAAO,SAAiB,EAAE,QAA6B,KAAI;AACzD,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;YAAE;AAEzB,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,CAAC,UAAU,GAAG;AACxB,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,cAAc,EAAE,aAAa;AAC7B,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,QAAQ;AACX,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,oBAAA,MAAM,EAAE,sBAAsB;AAC/B,iBAAA;AACF,aAAA,CAAC;YACF,GAAG,CAAC,OAAO,CAAC,CAAA,WAAA,EAAc,SAAS,CAAA,CAAE,EAAE,QAAQ,CAAC;QAClD;QAAE,OAAO,KAAK,EAAE;YACd,GAAG,CAAC,IAAI,CAAC,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACrD;IACF,CAAC,EACD,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CACjC;;AAGD,IAAA,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,IAA8B,KAAI;AACjC,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE;AACjC,YAAA,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;AACvC,YAAA,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;AACvC,YAAA,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;YACjD,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,aAAa;YACtC,cAAc,EAAE,IAAI,CAAC,KAAK;YAC1B,iBAAiB,EAAE,IAAI,CAAC,gBAAgB;AACzC,SAAA,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,SAAS,EAAE,WAAW,CAAC,CACzB;;AAGD,IAAA,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,IAA2B,KAAI;AAC9B,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE;YAC9B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ;YACpD,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI;AACtD,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,UAAU;YACnC,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,cAAc,EAAE,IAAI,CAAC,KAAK;AAC3B,SAAA,CAAC;;QAGF,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACzH;IACF,CAAC,EACD,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CACjC;;IAGD,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,QAA4B,EAAE,KAAc,KAAI;AAC/C,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE;YAC/B,cAAc,EAAE,QAAQ,CAAC,KAAK;YAC9B,cAAc,EAAE,QAAQ,CAAC,KAAK;YAC9B,aAAa,EAAE,QAAQ,CAAC,IAAI;AAC5B,YAAA,cAAc,EAAE,KAAK;AACtB,SAAA,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,SAAS,EAAE,WAAW,CAAC,CACzB;;IAGD,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,KAAmB,EAAE,KAAc,KAAI;AACtC,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE;YAC5B,UAAU,EAAE,KAAK,CAAC,IAAI;YACtB,WAAW,EAAE,KAAK,CAAC,KAAK;AACxB,YAAA,cAAc,EAAE,KAAK;AACtB,SAAA,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,SAAS,EAAE,WAAW,CAAC,CACzB;;IAGD,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,GAAgB,EAAE,KAAc,KAAI;AACnC,QAAA,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;YAC3B,MAAM,EAAE,GAAG,CAAC,EAAE;YACd,SAAS,EAAE,GAAG,CAAC,KAAK;YACpB,UAAU,EAAE,GAAG,CAAC,MAAM;AACtB,YAAA,cAAc,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;YACzC,OAAO,EAAE,GAAG,CAAC,OAAO;AACpB,YAAA,cAAc,EAAE,KAAK;AACtB,SAAA,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,SAAS,CAAC,CACZ;;AAGD,IAAA,MAAM,sBAAsB,GAAG,WAAW,CACxC,CAAC,MAAoB,KAAI;AACvB,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,kBAAkB,EAAE,MAAM,CAAC,SAAS;YACpC,aAAa,EAAE,MAAM,CAAC,YAAY;AACnC,SAAA,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,SAAS,EAAE,WAAW,CAAC,CACzB;;IAGD,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,QAAwB,EAAE,QAAgB,KAAI;AAC7C,QAAA,IAAI,CAAC,WAAW;YAAE;AAElB,QAAA,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE;YAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ;AACT,SAAA,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,SAAS,EAAE,WAAW,CAAC,CACzB;;AAGD,IAAA,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAAmC,KAAI;AACtC,QAAA,IAAI,CAAC,gBAAgB;YAAE;;QAGvB,MAAM,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAA,CAAE;AAC/F,QAAA,IAAI,cAAc,KAAK,iBAAiB,CAAC,OAAO;YAAE;;AAGlD,QAAA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAC9B,YAAA,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAC1C;;AAGA,QAAA,kBAAkB,CAAC,OAAO,GAAG,UAAU,CAAC,MAAK;AAC3C,YAAA,iBAAiB,CAAC,OAAO,GAAG,cAAc;AAE1C,YAAA,SAAS,CAAC,MAAM,CAAC,qBAAqB,EAAE;gBACtC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM;gBAC1C,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;oBACxD,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,oBAAA,QAAQ,EAAE,CAAC;oBACX,UAAU,EAAE,CAAC,CAAC,UAAU;AACzB,iBAAA,CAAC,CAAC;AACH,gBAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,gBAAA,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,gBAAA,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;gBACtC,oBAAoB,EAAE,IAAI,CAAC,SAAS;AACrC,aAAA,CAAC;QACJ,CAAC,EAAE,kBAAkB,CAAC;IACxB,CAAC,EACD,CAAC,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAClD;;IAGD,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAa,EAAE,cAAuB,EAAE,UAA2B,KAAI;AACtE,QAAA,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE;YAC9B,KAAK;AACL,YAAA,eAAe,EAAE,cAAc;YAC/B,gBAAgB,EAAE,UAAU,EAAE,KAAK;YACnC,aAAa,EAAE,UAAU,EAAE,QAAQ;YACnC,qBAAqB,EAAE,UAAU,EAAE,UAAU;AAC9C,SAAA,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,SAAS,CAAC,CACZ;;AAGD,IAAA,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAa,KAAI;AAChB,QAAA,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AACxC,QAAA,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE;YAC9B,KAAK;AACL,YAAA,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;AAC5B,SAAA,CAAC;AACJ,IAAA,CAAC,EACD,CAAC,SAAS,CAAC,CACZ;;IAGD,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,KAAa,EAAE,kBAA2B,KAAI;AAC7C,QAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC;cACjC,IAAI,CAAC,GAAG,EAAE,GAAG,mBAAmB,CAAC;cACjC,IAAI;AAER,QAAA,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE;YAC/B,KAAK;AACL,YAAA,mBAAmB,EAAE,kBAAkB;YACvC,aAAa,EAAE,CAAC,CAAC,kBAAkB;AACnC,YAAA,WAAW,EAAE,QAAQ;AACtB,SAAA,CAAC;AAEF,QAAA,mBAAmB,CAAC,OAAO,GAAG,IAAI;AACpC,IAAA,CAAC,EACD,CAAC,SAAS,CAAC,CACZ;IAED,OAAO;QACL,oBAAoB;QACpB,iBAAiB;QACjB,kBAAkB;QAClB,eAAe;QACf,cAAc;QACd,sBAAsB;QACtB,kBAAkB;QAClB,eAAe;QACf,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;KACnB;AACH;;ACpYA;;;;;AAKG;AAkHH;AACA;AACA;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,YAAY,EAAE,sCAAsC;AACpD,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,gDAAgD;AAC7D,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,WAAW,EAAE,iCAAiC;AAC9C,QAAA,SAAS,EAAE,iEAAiE;AAC7E,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,eAAe,EAAE,aAAa;AAC9B,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,UAAU,EAAE,SAAS;AACtB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,eAAe,EAAE,aAAa;AAC9B,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,+CAA+C;AAC5D,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,YAAY,EAAE,mCAAmC;AACjD,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,6BAA6B;AAC1C,KAAA;CACF;AAED;AACA;AACA;AAEA,MAAMH,YAAU,GAAG,OACjB,6BAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AACnE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,kHAAkH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CAC/J,CACP;AAED,MAAM,SAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAA;AAC3E,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,oMAAoM,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAG,CACjP,CACP;AAED;AACA;AACA;AAEO,MAAM,wBAAwB,GAAG,UAAU,CAChD,SAAS,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAA;AAC1C,IAAA,MAAM,EACJ,OAAO,GAAG,SAAS,EACnB,WAAW,GAAG,WAAW,EACzB,YAAY,GAAG,EAAE,EACjB,KAAK,EACL,aAAa,EACb,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,QAAQ,EAC3B,eAAe,GAAG,IAAI,EACtB,SAAS,GAAG,KAAK,EACjB,cAAc,GAAG,CAAC,EAClB,cAAc,GAAG,CAAC,EAClB,UAAU,GAAG,GAAG,EAChB,kBAAkB,GAAG,IAAI,EACzB,mBAAmB,GAAG,IAAI,EAC1B,8BAA8B,GAAG,KAAK,EACtC,YAAY,EACZ,eAAe,GAAG,IAAI,EACtB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,UAAU,GAAG,EAAE,EACf,KAAK,EACL,UAAU,EACV,SAAS,GAAG,QAAQ,GACrB,GAAG,KAAK;AAET,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE;AACrC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;AAC/C,IAAA,MAAM,WAAW,GAAG,MAAM,CAA+E,IAAI,CAAC;AAE9G,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAG3D,MAAM,SAAS,GAAG,uBAAuB,CAAC;QACxC,MAAM;AACN,QAAA,OAAO,EAAE,eAAe;QACxB,aAAa;AACd,KAAA,CAAC;;IAGF,SAAS,CAAC,MAAK;QACb,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,EAAE;YAC1C,QAAQ,CAAC,KAAK,CAAC;QACjB;AACF,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;AAGX,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,CAAsC,KAAI;AAC/E,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QAC/B,QAAQ,CAAC,QAAQ,CAAC;AAClB,QAAA,aAAa,GAAG,QAAQ,CAAC;;AAGzB,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,cAAc,KAAK,mBAAmB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;YACvF,iBAAiB,CAAC,IAAI,CAAC;QACzB;IACF,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;;AAGxD,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAmB,KAAI;QACvD,CAAC,EAAE,cAAc,EAAE;AACnB,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAChB,YAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACxB,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;YAChD,iBAAiB,CAAC,KAAK,CAAC;QAC1B;IACF,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;;AAGhC,IAAA,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,UAA0B,KAAI;AACxE,QAAA,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;AAC1B,QAAA,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;AACjC,QAAA,kBAAkB,GAAG,UAAU,CAAC;QAChC,SAAS,CAAC,oBAAoB,CAAC;YAC7B,UAAU;YACV,QAAQ,EAAE,CAAC;YACX,KAAK;AACN,SAAA,CAAC;QACF,iBAAiB,CAAC,KAAK,CAAC;;AAGxB,QAAA,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;AAC9B,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;;AAGnE,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,OAAoB,KAAI;AAC9D,QAAA,cAAc,GAAG,OAAO,CAAC;QACzB,SAAS,CAAC,iBAAiB,CAAC;YAC1B,OAAO;AACP,YAAA,QAAQ,EAAE,CAAC;YACX,KAAK;AACN,SAAA,CAAC;QACF,iBAAiB,CAAC,KAAK,CAAC;IAC1B,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;;AAGtC,IAAA,MAAM,uBAAuB,GAAG,WAAW,CAAC,CAAC,MAAoB,KAAI;AACnE,QAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AACtB,QAAA,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B,QAAA,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC;QACxC,iBAAiB,CAAC,KAAK,CAAC;AACxB,QAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;IAC1B,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;;AAGxC,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,YAAY,CAAC,IAAI,CAAC;QAClB,iBAAiB,CAAC,IAAI,CAAC;AACvB,QAAA,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACpC,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;;AAGtB,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAK;QAClC,YAAY,CAAC,KAAK,CAAC;;QAEnB,UAAU,CAAC,MAAK;YACd,iBAAiB,CAAC,KAAK,CAAC;AACxB,YAAA,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC;QACrC,CAAC,EAAE,GAAG,CAAC;AACT,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;;AAGtB,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,QAAQ,CAAC,EAAE,CAAC;AACZ,QAAA,aAAa,GAAG,EAAE,CAAC;AACnB,QAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;AAC3B,IAAA,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;;AAGnB,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAsB,KAAI;QAC3D,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;gBAChD,iBAAiB,CAAC,IAAI,CAAC;YACzB;YACA;QACF;AAEA,QAAA,QAAQ,CAAC,CAAC,GAAG;AACX,YAAA,KAAK,WAAW;gBACd,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,WAAW,CAAC,OAAO,EAAE,YAAY,IAAI;gBACrC;AACF,YAAA,KAAK,SAAS;gBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,WAAW,CAAC,OAAO,EAAE,gBAAgB,IAAI;gBACzC;AACF,YAAA,KAAK,OAAO;gBACV,CAAC,CAAC,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,IAAI,IAAI,EAAE,KAAK,CAAC,EAAE;AACxD,oBAAA,WAAW,CAAC,OAAO,EAAE,YAAY,IAAI;gBACvC;qBAAO;AACL,oBAAA,YAAY,EAAE;gBAChB;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,CAAC,CAAC,cAAc,EAAE;gBAClB,iBAAiB,CAAC,KAAK,CAAC;AACxB,gBAAA,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE;gBACxB;;AAEN,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;;AAGlC,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;QAC9B,KAAK,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;QACtC,IAAI,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE;AACpC,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,QAAQ,EAAE,MAAM,KAAK;AACrB,QAAA,QAAQ,EAAE,CAAC,QAAgB,KAAI;YAC7B,QAAQ,CAAC,QAAQ,CAAC;AAClB,YAAA,aAAa,GAAG,QAAQ,CAAC;QAC3B,CAAC;AACD,QAAA,YAAY,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC;AAC3C,QAAA,aAAa,EAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC;QAC7C,YAAY,EAAE,MAAM,WAAW,CAAC,OAAO,EAAE,YAAY,IAAI;QACzD,gBAAgB,EAAE,MAAM,WAAW,CAAC,OAAO,EAAE,gBAAgB,IAAI;QACjE,aAAa,EAAE,MAAM,WAAW,CAAC,OAAO,EAAE,YAAY,IAAI;KAC3D,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;;IAGxC,MAAM,cAAc,GAAG,MAAK;AAC1B,QAAA,MAAM,WAAW,GAAG;YAClB,KAAK;AACL,YAAA,MAAM,EAAE,cAAc;YACtB,cAAc;YACd,cAAc;YACd,UAAU;YACV,kBAAkB;YAClB,UAAU;AACV,YAAA,kBAAkB,EAAE,sBAAsB;AAC1C,YAAA,mBAAmB,EAAE,uBAAuB;AAC5C,YAAA,OAAO,EAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC;YACvC,aAAa;SACd;QAED,QAAQ,OAAO;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,QACE,KAAA,CAAA,aAAA,CAAC,oBAAoB,EAAA,EACnB,GAAG,EAAE,WAAiD,EAAA,GAClD,WAAW,EACf,8BAA8B,EAAE,8BAA8B,EAC9D,iBAAiB,EAAA,IAAA,EACjB,KAAK,EAAE,aAAa,IAAI,MAAM,EAC9B,SAAS,EAAE,iBAAiB,IAAI,OAAO,EAAA,CACvC;AAGN,YAAA,KAAK,WAAW;AACd,gBAAA,QACE,KAAA,CAAA,aAAA,CAAC,iBAAiB,IAChB,GAAG,EAAE,WAA8C,EAAA,GAC/C,WAAW,EACf,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAA,IAAA,EACZ,UAAU,QACV,gBAAgB,EAAE,CAAC,CAAC,YAAY,EAChC,cAAc,EAAE,kBAAkB,EAClC,KAAK,EAAE,aAAa,IAAI,OAAO,EAC/B,SAAS,EAAE,iBAAiB,IAAI,OAAO,EAAA,CACvC;AAGN,YAAA,KAAK,SAAS;gBACZ,QACE,KAAA,CAAA,aAAA,CAAC,wBAAwB,EAAA,EACvB,GAAG,EAAE,WAAqD,EAAA,GACtD,WAAW,EACf,cAAc,EAAE,CAAC,EACjB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,aAAa,IAAI,MAAM,EAAA,CAC9B;AAGN,YAAA,KAAK,SAAS;AACd,YAAA;AACE,gBAAA,QACE,KAAA,CAAA,aAAA,CAAC,wBAAwB,EAAA,EACvB,GAAG,EAAE,WAAqD,EAAA,GACtD,WAAW,EACf,KAAK,EAAE,aAAa,IAAI,MAAM,EAAA,CAC9B;;AAGV,IAAA,CAAC;IAED,QACE,6BACE,SAAS,EAAE,IAAI,CAAC,qCAAqC,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1E,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE,EAAA;QAEtC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAE,YAAY,EAAA;AAC1B,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;oBACL,GAAG,MAAM,CAAC,YAAY;AACtB,oBAAA,IAAI,SAAS,GAAG,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC;AACjD,iBAAA,EAAA;AAED,gBAAA,KAAA,CAAA,aAAA,CAACA,YAAU,EAAA,IAAA,CAAG;AACd,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAC,KAAK,EAClB,WAAW,EAAC,KAAK,EACjB,cAAc,EAAC,KAAK,EACpB,UAAU,EAAE,KAAK,EAAA,YAAA,EACL,SAAS,EAAA,eAAA,EACN,cAAc,mBACf,SAAS,EAAA,mBAAA,EACL,MAAM,EACxB,IAAI,EAAC,UAAU,EACf,SAAS,EAAE,UAAU,CAAC,KAAK,EAC3B,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,UAAU,EAAE,EAAA,CACzC;gBACD,eAAe,IAAI,KAAK,KACvB,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,UAAU,CAAC,WAAW,EACjC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA,YAAA,EACd,cAAc,EAAA;oBAEzB,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,CAAG,CACN,CACV;gBACA,gBAAgB,KACf,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,UAAU,CAAC,MAAM,EAC5B,KAAK,EAAE,MAAM,CAAC,YAAY,IAEzB,gBAAgB,CACV,CACV,CACG,CACD;QAGP,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAA,EAChC,cAAc,EAAE,CACb,CACF;AAEV,CAAC;;ACjhBH;;AAEG;AAYH;AACA;AACA;AAEA;;;AAGG;AACI,MAAM,cAAc,GAAG,CAAC,GAAQ,EAAE,IAAY,KAAS;AAC5D,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;AACnC,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,KAAI;AAC7C,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;AAC/D,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC;IACrB,CAAC,EAAE,GAAG,CAAC;AACT,CAAC;AAED;;AAEG;AACI,MAAM,iBAAiB,GAAG,CAC/B,IAAS,EACT,OAAA,GAAkC,EAAE,KAAK,EAAE,OAAO,EAAE,KAClD;IACF,OAAO;QACL,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;AAChD,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;QACtE,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,EAAE;AAC9E,QAAA,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS;AACrF,QAAA,WAAW,EAAE,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;AACxF,QAAA,IAAI,EAAE,IAAI;KACX;AACH;AAEA;;AAEG;AACI,MAAM,cAAc,GAAG,CAC5B,IAAS,EACT,OAAA,GAA+B,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KACzD;IACF,OAAO;AACL,QAAA,EAAE,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,EAAE;QAClE,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;AAChD,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;AACtE,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;AACtE,QAAA,YAAY,EAAE,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS;AAC3F,QAAA,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS;AAChE,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;AACtE,QAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;AAC/E,QAAA,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS;AACzE,QAAA,WAAW,EAAE,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;AACxF,QAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;AAC/E,QAAA,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS;AAC5E,QAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;AAC/E,QAAA,IAAI,EAAE,IAAI;KACX;AACH;AAEA;;AAEG;AACI,MAAM,eAAe,GAAG,CAC7B,IAAS,EACT,OAAA,GAAgC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAC1D;IACF,OAAO;AACL,QAAA,EAAE,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE;QAChD,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;AAChD,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;AACtE,QAAA,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS;AACnE,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;AACtE,QAAA,IAAI,EAAE,IAAI;KACX;AACH;AAEA;;AAEG;AACI,MAAM,YAAY,GAAG,CAC1B,IAAS,EACT,OAAA,GAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,KAC3C;IACF,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;QAC5D,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;AAC9C,QAAA,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS;AACnE,QAAA,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS;AACtE,QAAA,IAAI,EAAE,IAAI;KACX;AACH;AAEA;AACA;AACA;AAEA;;AAEG;AACI,MAAM,WAAW,GAAG,CACzB,KAAkC,EAClC,MAAA,GAAwF,EAAE,KAChF;AACV,IAAA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,EAAE;AAEpD,IAAA,MAAM,EACJ,QAAQ,GAAG,GAAG,EACd,gBAAgB,GAAG,QAAQ,EAC3B,aAAa,GAAG,CAAC,EAClB,GAAG,MAAM;AAEV,IAAA,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;IACjE,IAAI,KAAK,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AAEpC,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE;AAC9C,QAAA,qBAAqB,EAAE,aAAa;AACpC,QAAA,qBAAqB,EAAE,aAAa;AACrC,KAAA,CAAC;IAEF,OAAO,gBAAgB,KAAK;AAC1B,UAAE,CAAA,EAAG,QAAQ,CAAA,EAAG,SAAS,CAAA;AACzB,UAAE,CAAA,EAAG,SAAS,CAAA,EAAG,QAAQ,EAAE;AAC/B;AAYA;;AAEG;AACI,MAAM,iBAAiB,GAAG,CAC/B,KAAyB,EACzB,YAAgC,KACV;IACtB,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,KAAK;AAAE,QAAA,OAAO,SAAS;AACtE,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,IAAI,YAAY,IAAI,GAAG,CAAC;AAClE,CAAC;AAED;AACA;AACA;AAEA;;AAEG;AACI,MAAM,UAAU,GAAG,CAAC,IAAY,KAAY;AACjD,IAAA,MAAM,GAAG,GAA2B;AAClC,QAAA,GAAG,EAAE,OAAO;AACZ,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,GAAG,EAAE,QAAQ;AACb,QAAA,GAAG,EAAE,OAAO;KACb;AACD,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;AAEG;AACI,MAAM,aAAa,GAAG,CAC3B,IAAY,EACZ,KAAa,EACb,OAAA,GAII,EAAE,KACI;AACV,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC;AAE5C,IAAA,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO;IACvD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAGjE,MAAM,SAAS,GAAG;AAChB,UAAE,CAAA,QAAA,EAAW,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA;UAChH,EAAE;AACN,IAAA,MAAM,SAAS,GAAG,SAAS,GAAG,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,CAAG,GAAG,EAAE;AAE1D,IAAA,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAC7B,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,UAAU,CAAC,YAAY,CAAC,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,EACjD,CAAA,CAAA,EAAI,GAAG,CAAA,EAAG,SAAS,CAAA,EAAG,SAAS,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,CAAG,CAC9C;AACH;AAcA;AACA;AACA;AAEA;;AAEG;AACI,MAAMK,sBAAoB,GAAG,CAClC,KAA0B,EAC1B,MAAA,GAAiB,SAAS,KACA;IAC1B,MAAM,IAAI,GAA2B,EAAE;IAEvC,IAAI,KAAK,CAAC,YAAY;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,QAAA,CAAU,CAAC,GAAG,KAAK,CAAC,YAAY;IACxE,IAAI,KAAK,CAAC,eAAe;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,WAAA,CAAa,CAAC,GAAG,KAAK,CAAC,eAAe;IACjF,IAAI,KAAK,CAAC,YAAY;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,aAAA,CAAe,CAAC,GAAG,KAAK,CAAC,YAAY;IAC7E,IAAI,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,aAAA,CAAe,CAAC,GAAG,KAAK,CAAC,SAAS;IACvE,IAAI,KAAK,CAAC,kBAAkB;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,eAAA,CAAiB,CAAC,GAAG,KAAK,CAAC,kBAAkB;IAC3F,IAAI,KAAK,CAAC,WAAW;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,aAAA,CAAe,CAAC,GAAG,KAAK,CAAC,WAAW;IAC3E,IAAI,KAAK,CAAC,UAAU;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,SAAA,CAAW,CAAC,GAAG,KAAK,CAAC,UAAU;IACrE,IAAI,KAAK,CAAC,cAAc;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,aAAA,CAAe,CAAC,GAAG,KAAK,CAAC,cAAc;IACjF,IAAI,KAAK,CAAC,YAAY;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,QAAA,CAAU,CAAC,GAAG,KAAK,CAAC,YAAY;IACxE,IAAI,KAAK,CAAC,UAAU;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,MAAA,CAAQ,CAAC,GAAG,KAAK,CAAC,UAAU;IAClE,IAAI,KAAK,CAAC,UAAU;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,YAAA,CAAc,CAAC,GAAG,KAAK,CAAC,UAAU;IACxE,IAAI,KAAK,CAAC,QAAQ;QAAE,IAAI,CAAC,CAAA,EAAA,EAAK,MAAM,CAAA,UAAA,CAAY,CAAC,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAC,QAAQ,CAAA,EAAA,CAAI,GAAG,KAAK,CAAC,QAAQ;IAC/H,IAAI,KAAK,CAAC,YAAY;QAAE,IAAI,CAAC,CAAA,EAAA,EAAK,MAAM,CAAA,cAAA,CAAgB,CAAC,GAAG,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAC,YAAY,CAAA,EAAA,CAAI,GAAG,KAAK,CAAC,YAAY;IACnJ,IAAI,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,KAAK,MAAM,CAAA,WAAA,CAAa,CAAC,GAAG,KAAK,CAAC,SAAS;;AAGrE,IAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAC1D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA,EAAA,EAAK,GAAG,EAAE,CAAC,GAAG,KAAK;AACvD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAED;;AAEG;AACI,MAAM,EAAE,GAAG,CAAC,GAAG,OAA8C,KAAY;IAC9E,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED;;AAEG;AACI,MAAM,WAAW,GAAG,CAAC,GAAG,MAAqC,KAAmB;AACrF,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAyHD;AACA;AACA;AAEA,MAAM,mBAAmB,GAAG,yBAAyB;AACrD,MAAM,mBAAmB,GAAG,EAAE;AAEvB,MAAM,iBAAiB,GAAG,CAAC,OAAgB,KAAc;AAC9D,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,GAAG,mBAAmB;QAC/E,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACxC,QAAA,OAAO,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;IACzC;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,EAAE;IACX;AACF;MAEa,eAAe,GAAG,CAAC,KAAa,EAAE,OAAgB,KAAc;AAC3E,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,GAAG,mBAAmB;AAC/E,QAAA,IAAI,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACzC,QAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;AAC5C,QAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC;AACjD,QAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACnD,QAAA,OAAO,QAAQ;IACjB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,EAAE;IACX;AACF;MAEa,kBAAkB,GAAG,CAAC,KAAa,EAAE,OAAgB,KAAc;AAC9E,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,GAAG,mBAAmB;AAC/E,QAAA,IAAI,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACzC,QAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;AAC5C,QAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACnD,QAAA,OAAO,QAAQ;IACjB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,EAAE;IACX;AACF;AAEO,MAAM,mBAAmB,GAAG,CAAC,OAAgB,KAAU;AAC5D,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,GAAG,mBAAmB;AAC/E,QAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;IAC9B;AAAE,IAAA,MAAM;;IAER;AACF;AA+CA;;AAEG;AACI,MAAM,sBAAsB,GAAG,CAAC,OAAoB,EAAE,SAAsB,KAAU;AAC3F,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE;AACnD,IAAA,MAAM,aAAa,GAAG,SAAS,CAAC,qBAAqB,EAAE;IAEvD,IAAI,WAAW,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE;AACvC,QAAA,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChE;SAAO,IAAI,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE;AACpD,QAAA,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAC9D;AACF,CAAC;AAYD;;;AAGG;AACH,MAAM,gBAAgB,CAAA;AAKpB,IAAA,WAAA,CAAY,UAAuD,EAAE,EAAA;AAJ7D,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA2B;QAKhD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;IAClD;AAEA;;AAEG;IACH,WAAW,CAAC,KAAa,EAAE,OAA6B,EAAA;QACtD,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AAClD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,eAAe;;AAGpC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO;AACnC,aAAA,IAAI;AACJ,aAAA,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI;AAC3D,aAAA,GAAG,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;aAC7C,IAAI,CAAC,GAAG,CAAC;AAEZ,QAAA,OAAO,UAAU,GAAG,CAAA,EAAG,eAAe,CAAA,EAAA,EAAK,UAAU,CAAA,CAAE,GAAG,eAAe;IAC3E;AAEA;;AAEG;AACH,IAAA,GAAG,CAAI,GAAW,EAAA;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AAEvB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE;;AAErC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACtB,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,KAAK,CAAC,IAAS;IACxB;AAEA;;AAEG;AACH,IAAA,GAAG,CAAI,GAAW,EAAE,IAAO,EAAE,KAAc,EAAA;;QAEzC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;AAChD,YAAA,IAAI,SAAS;AAAE,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,IAAI;AACJ,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU;AAC9B,SAAA,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,GAAW,EAAA;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;IAC/B;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE;AACrC,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;YACxB;QACF;IACF;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,OAAO;AACL,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB;IACH;AACD;AAED;AACA,IAAI,sBAAsB,GAA4B,IAAI;AAE1D;;AAEG;AACI,MAAM,mBAAmB,GAAG,CAAC,OAAqD,KAAsB;IAC7G,IAAI,CAAC,sBAAsB,EAAE;AAC3B,QAAA,sBAAsB,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC;IACxD;AACA,IAAA,OAAO,sBAAsB;AAC/B;AAEA;;AAEG;AACI,MAAM,sBAAsB,GAAG,CAAC,OAAqD,KAAsB;AAChH,IAAA,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC;AACtC;AAEA;;AAEG;AACI,MAAM,qBAAqB,GAAG,MAAW;IAC9C,sBAAsB,EAAE,KAAK,EAAE;AACjC;;AC5nBA;;;;AAIG;AAKH;AACA;AACA;AAEO,MAAM,WAAW,GAAG;AACzB,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,EAAE,EAAE,IAAI;;AAKV;AACA;AACA;AAEO,MAAM,YAAY,GAAG;AAC1B,IAAA,EAAE,EAAE,CAAA,mBAAA,EAAsB,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA,GAAA,CAAK;IACjD,EAAE,EAAE,CAAA,mBAAA,EAAsB,WAAW,CAAC,EAAE,CAAA,oBAAA,EAAuB,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA,GAAA,CAAK;IACtF,EAAE,EAAE,CAAA,mBAAA,EAAsB,WAAW,CAAC,EAAE,CAAA,oBAAA,EAAuB,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA,GAAA,CAAK;IACtF,EAAE,EAAE,CAAA,mBAAA,EAAsB,WAAW,CAAC,EAAE,CAAA,oBAAA,EAAuB,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA,GAAA,CAAK;AACtF,IAAA,EAAE,EAAE,CAAA,mBAAA,EAAsB,WAAW,CAAC,EAAE,CAAA,GAAA,CAAK;AAC7C,IAAA,MAAM,EAAE,CAAA,mBAAA,EAAsB,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA,GAAA,CAAK;IACrD,MAAM,EAAE,CAAA,mBAAA,EAAsB,WAAW,CAAC,EAAE,CAAA,oBAAA,EAAuB,WAAW,CAAC,EAAE,GAAG,CAAC,CAAA,GAAA,CAAK;AAC1F,IAAA,OAAO,EAAE,CAAA,mBAAA,EAAsB,WAAW,CAAC,EAAE,CAAA,GAAA,CAAK;AAClD,IAAA,KAAK,EAAE,4CAA4C;AACnD,IAAA,KAAK,EAAE,2CAA2C;;AAGpD;AACA;AACA;AAEO,MAAM,YAAY,GAAG;;AAE1B,IAAA,OAAO,EAAE,EAAE;;AAEX,IAAA,WAAW,EAAE,EAAE;;AAEf,IAAA,KAAK,EAAE,EAAE;;AAqJJ,MAAM,aAAa,GAAG,MAAsB;AACjD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB;AAClD,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,KAAK,EAAE,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;AAC/D,QAAA,MAAM,EAAE,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG;AAChE,QAAA,UAAU,EAAE,IAAI;AACjB,KAAA,CAAC;IAEF,SAAS,CAAC,MAAK;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;AAEnC,QAAA,MAAM,aAAa,GAAG,CAAC,KAAa,KAAgB;AAClD,YAAA,IAAI,KAAK,GAAG,WAAW,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI;AACvC,YAAA,IAAI,KAAK,GAAG,WAAW,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI;AACvC,YAAA,IAAI,KAAK,GAAG,WAAW,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI;AACvC,YAAA,IAAI,KAAK,GAAG,WAAW,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI;AACvC,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;QAED,MAAM,WAAW,GAAG,MAAK;AACvB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU;AAC/B,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW;AACjC,YAAA,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC;YACvC,MAAM,OAAO,GAAG,cAAc,IAAI,MAAM,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC;AAExE,YAAA,QAAQ,CAAC;AACP,gBAAA,QAAQ,EAAE,KAAK,GAAG,WAAW,CAAC,EAAE;gBAChC,QAAQ,EAAE,KAAK,IAAI,WAAW,CAAC,EAAE,IAAI,KAAK,GAAG,WAAW,CAAC,EAAE;AAC3D,gBAAA,SAAS,EAAE,KAAK,IAAI,WAAW,CAAC,EAAE;gBAClC,OAAO;gBACP,KAAK;gBACL,MAAM;gBACN,UAAU;AACX,aAAA,CAAC;AACJ,QAAA,CAAC;AAED,QAAA,WAAW,EAAE;AACb,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC;QAC9C,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC;IAChE,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,OAAO,KAAK;AACd;;ACpPA;;AAEG;AAMH;AACA;AACA;AAEO,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4PlC;AAED;;AAEG;AACH,IAAIC,gBAAc,GAAG,KAAK;AAEnB,MAAM,4BAA4B,GAAG,MAAW;AACrD,IAAA,IAAIA,gBAAc;QAAE;IACpB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE;IAErC,MAAM,OAAO,GAAG,oCAAoC;AACpD,IAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;QACpCA,gBAAc,GAAG,IAAI;QACrB;IACF;IAEA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,IAAA,KAAK,CAAC,EAAE,GAAG,OAAO;AAClB,IAAA,KAAK,CAAC,WAAW,GAAG,mBAAmB;AACvC,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAChCA,gBAAc,GAAG,IAAI;AACvB;AAEA;;AAEG;AACI,MAAM,yBAAyB,GAAG,MAAW;IAClD,SAAS,CAAC,MAAK;AACb,QAAA,4BAA4B,EAAE;IAChC,CAAC,EAAE,EAAE,CAAC;AACR;;ACvSA;;;;;;;;;AASG;AA0BH;AACA;AACA;AAEA,MAAMC,cAAY,GAAG,CAAC,KAAA,GAAa,EAAE,EAAE,QAAA,GAAoB,KAAK,MAAM;AACpE,IAAA,IAAI,EAAE;AACJ,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,KAAK,EAAE,sCAAsC;QAC7C,YAAY,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM;AACxC,QAAA,SAAS,EAAE,mEAAmE;AAC9E,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,mEAAmE;AAC/E,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,MAAM,EAAE,IAAI;;QAEZ,IAAI,QAAQ,IAAI;AACd,YAAA,QAAQ,EAAE,OAAgB;AAC1B,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,YAAY,EAAE,eAAe;SAC9B,CAAC;AACH,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ,GAAG,QAAiB,GAAG,KAAc;QAC5D,SAAS,EAAE,QAAQ,GAAG,qBAAqB,GAAG,OAAO;AACrD,QAAA,SAAS,EAAE,MAAe;AAC3B,KAAA;AACD,IAAA,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;QACnC,WAAW,EAAE,QAAQ,GAAG,MAAM,GAAG,gDAAgD;QACjF,YAAY,EAAE,QAAQ,GAAG,gDAAgD,GAAG,MAAM;AAClF,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,OAAO,EAAE,OAAO;AACjB,KAAA;AACD,IAAA,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS;AACnC,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,OAAO,EAAE,OAAO;AACjB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,OAAO;AACjB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,QAAQ;AACxB,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW;AAC7C,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;QAC5B,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM;AAC/B,QAAA,SAAS,EAAE,QAAQ,GAAG,CAAA,EAAG,YAAY,CAAC,OAAO,CAAA,EAAA,CAAI,GAAG,MAAM;AAC1D,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,oBAAoB,EAAE;AACpB,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACzB,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,oBAAoB,EAAE;AACpB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,SAAS,EAAE,QAAQ;AACpB,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,eAAe,EAAE,uCAAuC;AACxD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAChC,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,8BAA8B;AACrC,QAAA,cAAc,EAAE,MAAM;AACtB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,SAAS,EAAE;AACT,YAAA,KAAK,EAAE,oCAAoC;AAC3C,YAAA,cAAc,EAAE,WAAW;AAC5B,SAAA;AACF,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;QACf,mBAAmB,EAAE,QAAQ,GAAG,gBAAgB,GAAG,gBAAgB;AACnE,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,OAAO,EAAE,gBAAgB;AAC1B,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,SAAS,EAAE,4BAA4B;AACxC,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,SAAS,EAAE,6BAA6B;AACxC,QAAA,SAAS,EAAE,kBAAkB;AAC9B,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,WAAW,EAAE,GAAG;AAChB,QAAA,SAAS,EAAE,SAAkB;AAC7B,QAAA,eAAe,EAAE,qCAAqC;AACtD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,YAAY,EAAE,MAAM;AACrB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,8BAA8B;AACrC,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,eAAe,EAAE,CAAC;AAClB,QAAA,eAAe,EAAE,UAAmB;AACpC,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,kBAAkB,EAAE;AAClB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,aAAa,EAAE,KAAK;AACrB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,gCAAgC;AACvC,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,8BAA8B;AACtC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,OAAO,EAAE,UAAU;AACpB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,8BAA8B;AACrC,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,6CAA6C;AACrD,QAAA,cAAc,EAAE,8BAA8B;AAC9C,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,mCAAmC;AAC/C,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,uCAAuC;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACX,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,MAAM,EAAE,6CAA6C;AACrD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,WAAW;AACxB,KAAA;AACF,CAAA,CAAC;AAEF;AACA;AACA;AAEA,MAAMP,YAAU,GAAG,OACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA;IAC5I,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAA,CAAG;AAChC,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,OAAO,EAAA,CAAG,CAC1C,CACP;AAED,MAAMC,WAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA;IAC5I,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAA,CAAG;AACjC,IAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,kBAAkB,EAAA,CAAG,CAClC,CACP;AAED,MAAMG,cAAY,GAAG,OACnB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAA;IAC5I,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,8BAA8B,EAAA,CAAG;AAClD,IAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,iBAAiB,EAAA,CAAG,CACjC,CACP;AAQD;AACA;AACA;AAEA,MAAM,WAAW,GAAiD,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAI;IACtF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACpC,IAAA,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,GAAG;AAEjC,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEG,cAAY,EAAE,CAAC,aAAa,EAAA;AACtC,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAEA,cAAY,EAAE,CAAC,KAAK,EAAA;AAC7B,YAAA,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AACrB,YAAA,OAAO,IAAI,GAAG;AACd,YAAA,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAC1C;QACL,KAAK,KAAK,SAAS,KAClB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAEA,cAAY,EAAE,CAAC,WAAW,EAAA;;YAAI,KAAK,CAAC,cAAc,EAAE;gBAAS,CAC3E,CACG;AAEV,CAAC;AAmBM,MAAM,cAAc,GAAG,UAAU,CACtC,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG,EAAA;AAChC,IAAA,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,EAAE,EAChB,QAAQ,GAAG,EAAE,EACb,UAAU,GAAG,EAAE,EACf,cAAc,GAAG,EAAE,EACnB,gBAAgB,GAAG,EAAE,EACrB,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,KAAK,EACjB,gBAAgB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EACrC,aAAa,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC5C,cAAc,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC7C,cAAc,GAAG,EAAE,EACnB,KAAK,GAAG,EAAE,EACV,eAAe,GAAG,IAAI,EACtB,iBAAiB,EACjB,WAAW,GAAG,EAAE,EAChB,SAAS,GAAG,KAAK,EACjB,KAAK,GAAG,OAAO,EACf,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,IAAI,EACb,SAAS,EACT,KAAK,EACL,UAAU,GAAG,EAAE,EACf,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACX,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,aAAa,EACb,WAAW,GACZ,GAAG,KAAK;;AAGT,IAAA,yBAAyB,EAAE;;AAG3B,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE;AAClC,IAAA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,UAAU;IAEzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAMA,cAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9E,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;;AAGzE,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MACnC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAC5D,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC;;AAGD,IAAA,MAAM,eAAe,GAAG,OAAO,CAAC,MAAK;QACnC,IAAI,SAAS,KAAK,KAAK,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACpD,YAAA,OAAO,QAAQ;QACjB;AACA,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC;AACtD,QAAA,OAAO,GAAG,EAAE,QAAQ,IAAI,QAAQ;IAClC,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAEvC,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAChC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAC1D,CAAC,eAAe,EAAE,aAAa,CAAC,CACjC;AAED,IAA4B,OAAO,CAAC,MAClC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EACvD,CAAC,UAAU,EAAE,cAAc,CAAC;;AAI9B,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAC5B,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAC5D,CAAC,cAAc,CAAC,CACjB;;AAGD,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,KAAK,GAAsD,EAAE;QACnE,IAAI,GAAG,GAAG,CAAC;AAEX,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AACpC,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AACvD,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAG;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AAC3D,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;;AAGhD,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACxC,QAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,QAAQ,CAAC,MAAM;YAAE;AACvD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;AACrC,YAAA,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;QAClD;IACF,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;;AAG9D,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,KAAK,EAAE,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE;AAC1C,QAAA,KAAK,EAAE,MAAM,OAAO,IAAI;AACzB,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;;IAGzE,SAAS,CAAC,MAAK;QACb,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE;AAC5C,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,EAAA,CAAI,CAAgB;YACnG,IAAI,QAAQ,EAAE;AACZ,gBAAA,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;YACxD;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAEjB,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,YAAY,GAAGF,sBAAoB,CAAC,KAAK,CAAC;AAChD,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AACjE,IAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;AACtE,IAAA,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC;AAEjD,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,SAAS,EAAA,YAAA,EACH,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EACpE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX;YACE,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK;YAChC,SAAS,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS;YACzC;SACD,EACD,YAAmB,EACnB,KAAK,CACN,EACD,QAAQ,EAAE,EAAE,EAAA;QAGZ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;;;;;;SASP,CAAS;QAET,MAAM;AAEN,QAAA,OAAO,IACN,aAAa,GAAG,aAAa,EAAE,IAC7B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,CAAI;AAC9B,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,cAAA,CAAyB,CACrB,CACP,KAED,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;YAEG,YAAY,CAAC,MAAM,GAAG,CAAC,KACtB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;AACV,oBAAA,OAAO,EAAE,MAAM;AACf,oBAAA,GAAG,EAAE,KAAK;oBACV,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW;AACxC,oBAAA,SAAS,EAAE,MAAM;AACjB,oBAAA,iBAAiB,EAAE,KAAK;AACxB,oBAAA,iBAAiB,EAAE,OAAO;AAC1B,oBAAA,iBAAiB,EAAE,sCAAsC;AACzD,oBAAA,UAAU,EAAE,sCAAsC;AAClD,oBAAA,uBAAuB,EAAE,OAAO;AACjC,iBAAA,EAAA;AACC,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,EACnC,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,UAAU;AACnB,wBAAA,WAAW,EAAE,CAAC;AACd,wBAAA,WAAW,EAAE,MAAM;wBACnB,UAAU,EAAE,SAAS,KAAK,KAAK,GAAG,sCAAsC,GAAG,oCAAoC;wBAC/G,KAAK,EAAE,SAAS,KAAK,KAAK,GAAG,oCAAoC,GAAG,sCAAsC;AAC1G,wBAAA,YAAY,EAAE,MAAM;AACpB,wBAAA,QAAQ,EAAE,MAAM;AAChB,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,UAAU,EAAE,QAAQ;AACpB,wBAAA,SAAS,EAAE,MAAM;wBACjB,SAAS,EAAE,SAAS,KAAK,KAAK,GAAG,MAAM,GAAG,2BAA2B;AACrE,wBAAA,UAAU,EAAE,gBAAgB;qBAC7B,EAAA,EAAA,KAAA,CAGM;AACR,gBAAA,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAC/B,gCACE,GAAG,EAAE,GAAG,CAAC,EAAE,EACX,OAAO,EAAE,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,EACpC,KAAK,EAAE;AACL,wBAAA,OAAO,EAAE,UAAU;AACnB,wBAAA,WAAW,EAAE,CAAC;AACd,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,UAAU,EAAE,SAAS,KAAK,GAAG,CAAC,EAAE,GAAG,iCAAiC,GAAG,oCAAoC;AAC3G,wBAAA,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,EAAE,GAAG,yCAAyC,GAAG,sCAAsC;AAChH,wBAAA,YAAY,EAAE,MAAM;AACpB,wBAAA,QAAQ,EAAE,MAAM;AAChB,wBAAA,UAAU,EAAE,SAAS,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG;AAC5C,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,UAAU,EAAE,QAAQ;AACpB,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,SAAS,EAAE,SAAS,KAAK,GAAG,CAAC,EAAE,GAAG,+BAA+B,GAAG,2BAA2B;AAC/F,wBAAA,UAAU,EAAE,gBAAgB;AAC7B,qBAAA,EAAA;AAEA,oBAAA,GAAG,CAAC,KAAK;;AAAG,oBAAA,GAAG,CAAC,OAAO,GAAG,CAAA,CAAA,EAAI,GAAG,CAAC,OAAO,CAAA,CAAA,CAAG,GAAG,EAAE,CAC3C,CACV,CAAC,CACE,CACP;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AAExB,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AAE1B,oBAAA,UAAU,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA;AAC7B,4BAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,aAAoB,EAAA,EAAA,iBAAA,CAAwB;4BAChE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,OAAO,EAAE,gBAAgB,EAAA,EAAA,WAAA,CAGlB,CACL;AACL,wBAAA,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AACxC,4BAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,GAAG;4BACpC,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,OAAA,EAAU,CAAC,CAAA,CAAE,EAAA,YAAA,EACN,GAAG,EACf,IAAI,EAAC,QAAQ,mBACE,QAAQ,EACvB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,cAAc,EACrB,QAAQ,GAAG,MAAM,CAAC,oBAAoB,GAAG,SAAS,CACnD,EACD,OAAO,EAAE,MAAM,aAAa,GAAG,CAAC,CAAC,EACjC,YAAY,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC,EAAA;AAEvC,gCAAA,KAAA,CAAA,aAAA,CAACJ,WAAS,EAAA,IAAA,CAAG;AACb,gCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAA;oCAClC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,eAAe,EAAA,EAAG,CAAC,CAAO,CACzC,CACF;wBAEV,CAAC,CAAC,CACE,CACP;AAGA,oBAAA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA,EAAA,mBAAA,CAAyB;AACvD,wBAAA,gBAA6B,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AACzD,4BAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAI,CAAS,CAAC,KAAK;AAC/D,4BAAA,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,GAAG,GAAG;AAC1C,4BAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,OAAO;AACxC,4BAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,SAAA,EAAY,UAAU,CAAA,CAAE,EAAA,YAAA,EACjB,OAAO,EACnB,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,QAAQ,EACvB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,cAAc,EACrB,QAAQ,GAAG,MAAM,CAAC,oBAAoB,GAAG,SAAS,CACnD,EACD,OAAO,EAAE,MAAM,kBAAkB,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,EAC/D,YAAY,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC,EAAA;AAE3C,gCAAA,KAAA,CAAA,aAAA,CAACG,cAAY,EAAA,IAAA,CAAG;AAChB,gCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAA;oCAClC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,eAAe,EAAA,EAAG,UAAU,CAAO,CAClD,CACF;wBAEV,CAAC,CAAC,CACE,CACP;oBAGA,oBAAoB,CAAC,MAAM,GAAG,CAAC,KAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACvB,wBAAA,KAAK,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA,EAAA,aAAA,CAAmB;wBAC5D,oBAAoB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,KAAI;AAC5C,4BAAA,MAAM,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,GAAG,GAAG,GAAG;AAC7D,4BAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,OAAO;AACxC,4BAAA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,EAAE;AAC9C,4BAAA,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC;AAEnC,4BAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,UAAU,CAAC,EAAE,IAAI,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE,EAAA,YAAA,EAC7B,OAAO,EACnB,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,QAAQ,EACvB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,cAAc,EACrB,QAAQ,GAAG,MAAM,CAAC,oBAAoB,GAAG,SAAS,CACnD,EACD,OAAO,EAAE,MAAM,kBAAkB,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EACzD,YAAY,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC,EAAA;AAE3C,gCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA;oCAC/B,KAAA,CAAA,aAAA,CAACJ,YAAU,OAAG,CACV;AACN,gCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAA;AAClC,oCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,eAAe,EAC7B,uBAAuB,EAAE;AACvB,4CAAA,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;yCAC1E,EAAA,CACD;oCACD,eAAe,IAAI,aAAa,KAC/B,6BAAK,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAA;AAClC,wCAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,oBAAoB,EAAA;;4CAClC,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAC7F,CACH,CACP,CACG;gCACL,UAAU,CAAC,KAAK,KACf,8BAAM,KAAK,EAAE,MAAM,CAAC,cAAc,IAC/B,UAAU,CAAC,KAAK,CAAC,cAAc,EAAE,CAC7B,CACR,CACG;wBAEV,CAAC,CAAC,CACE,CACP;AAGA,oBAAA,KAAK,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,KACrD,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,IAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA;;wBACK,KAAK;AAC5B,wBAAA,IAAA,CAAA,CACP,CACF,CACG;AAGL,gBAAA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;AAC5B,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA;AAC/B,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA,EAAA,oBAAA,CAA2B;AAC5D,wBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,OAAc,EAC5B,OAAO,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,eAGpC,CACA;oBACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAC5B,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,MAC9C,6BACE,GAAG,EAAE,OAAO,CAAC,EAAE,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,WAAW,EAClB,cAAc,KAAK,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS,CACpE,EACD,OAAO,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAClD,YAAY,EAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,EACjD,YAAY,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAA;wBAE1C,OAAO,CAAC,KAAK,IACZ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,KAAK,EAAE,MAAM,CAAC,YAAY,EAC1B,OAAO,EAAC,MAAM,EAAA,CACd,KAEF,6BAAK,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAA;AACrG,4BAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAA,EAAA,cAAA,CAAW,CACrF,CACP;wBACD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAG,OAAO,CAAC,KAAK,CAAO;wBACrD,OAAO,CAAC,KAAK,KAAK,SAAS,KAC1B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA;4BAC7B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,kBAAkB,EAAA,EACnC,cAAc,CAAC,QAAQ,IAAI,GAAG,CAC1B;AACN,4BAAA,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE;AAC1B,gCAAA,QAAQ,EAAE,EAAE;gCACZ,aAAa,EAAE,cAAc,CAAC;AAC/B,6BAAA,CAAC,CACE,CACP;wBACA,OAAO,CAAC,MAAM,KACb,oBAAC,WAAW,EAAA,EACV,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAC1C,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,EAAA,CAC9E,CACH,CACG,CACP,CAAC,CACE,CACF,CACP,CACG,CACH,CACJ;AAGA,QAAA,MAAM,KAAK,SAAS,GAAG,MAAM,IAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA;AACvB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA;AACzB,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;AACjC,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;gBACjC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,aAAA,CAAwB;AACxB,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;gBACjC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,WAAA,CAAsB;AACtB,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,KAAA,CAAY;AACnC,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,UAAA,CAAqB,CACjB;AACL,YAAA,oBAAoB,CAAC,MAAM,GAAG,CAAC,KAC9B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;AAAO,gBAAA,oBAAoB,CAAC,MAAM;AAAoB,gBAAA,cAAA,CAAA,CACvD,CACG,CACP,CACG;AAEV,CAAC;;ACp0BH;;;;;;;;;AASG;AAuBH;AACA;AACA;AAEA,MAAMO,cAAY,GAAG,CAAC,QAAA,GAAoB,KAAK,MAAM;AACnD,IAAA,IAAI,EAAE;QACJ,QAAQ,EAAE,QAAQ,GAAG,OAAgB,GAAG,UAAmB;QAC3D,GAAG,EAAE,QAAQ,GAAG,CAAC,GAAG,MAAM;AAC1B,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,QAAQ,GAAG,CAAC,GAAG,MAAM;QAC7B,SAAS,EAAE,QAAQ,GAAG,CAAC,GAAG,KAAK;AAC/B,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,KAAK,EAAE,sCAAsC;QAC7C,YAAY,EAAE,QAAQ,GAAG,GAAG,GAAG,MAAM;QACrC,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,6BAA6B;AAC5D,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,mEAAmE;QAC/E,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM;AACpC,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AACjC,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,SAAS,EAAE,MAAe;AAC3B,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW;AAC7C,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACzB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,UAAU,EAAE,GAAG;AAChB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,GAAG;AAChB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,8BAA8B;AACrC,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE,eAAe;AAC3B,QAAA,UAAU,EAAE,QAAiB;AAC9B,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,8BAA8B;AACrC,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE,iCAAiC;AAC9C,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,MAAM,EAAE,OAAO;AAChB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,OAAO;AACvB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,KAAK,EAAE,iCAAiC;AACxC,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,MAAM;AACnB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,eAAe,EAAE,qCAAqC;AACtD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,sCAAsC;AACnD,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,WAAW,EAAE,2CAA2C;AACxD,QAAA,SAAS,EAAE,2BAA2B;AACvC,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,iCAAiC;AACxC,QAAA,UAAU,EAAE,kBAAkB;AAC/B,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,cAAc,EAAE,iCAAiC;AACjD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,mCAAmC;AAC/C,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACF,CAAA,CAAC;AAEF;AACA;AACA;AAEA,MAAMP,YAAU,GAAG,OACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAA;IACzD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,wMAAwM,EAAC,IAAI,EAAC,cAAc,EAAA,CAAE,CAClO,CACP;AAED,MAAMC,WAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAA;IACzD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,uMAAuM,EAAC,IAAI,EAAC,cAAc,EAAA,CAAE,CACjO,CACP;AAED,MAAMG,cAAY,GAAG,OACnB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAA;IACzD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,yEAAyE,EAAC,IAAI,EAAC,cAAc,EAAA,CAAE,CACnG,CACP;AAQD,MAAMI,WAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;IACzD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,eAAe,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,mBAAmB,EAAA,CAAE,CACrG,CACP;AAuBM,MAAM,cAAc,GAAG,UAAU,CACtC,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG,EAAA;IAChC,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,EAAE,EAChB,cAAc,GAAG,EAAE,EACnB,gBAAgB,GAAG,EAAE,EACrB,gBAAgB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EACrC,KAAK,GAAG,EAAE,EACV,gBAAgB,GAAG,IAAI,EACvB,gBAAgB,GAAG,mBAAmB,EACtC,gBAAgB,GAAG,IAAI,EACvB,eAAe,GAAG,KAAK,EACvB,qBAAqB,GAAG,IAAI,EAC5B,KAAK,GAAG,MAAM,EACd,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,IAAI,EACb,SAAS,EACT,KAAK,EACL,UAAU,GAAG,EAAE,EACf,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,OAAO,EACP,cAAc,EACd,MAAM,EACN,MAAM,EACN,aAAa,EACb,WAAW,GACZ,GAAG,KAAK;;AAGT,IAAA,yBAAyB,EAAE;;AAG3B,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE;AAClC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU;AAE/B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAMD,cAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAChE,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;;AAGjE,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MACnC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAC5D,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC;AAED,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAC5B,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACxE,CAAC,cAAc,CAAC,CACjB;AAED,IAAA,MAAM,eAAe,GAAG,OAAO,CAAC,MAC7B,gBAA0B,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACrF,CAAC,gBAAgB,CAAC,CACnB;;AAGD,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,KAAK,GAAuD,EAAE;AAEpE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACpE,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1E;aAAO;AACL,YAAA,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAChG;AAEA,QAAA,OAAO,KAAK;IACd,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC;;AAGjE,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACxC,QAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;AACpC,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACnB,YAAA,IAAI,KAAK;AAAE,gBAAA,cAAc,GAAG,KAAK,CAAC;YAClC;QACF;AACA,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACtD,YAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B;aAAO;AACL,YAAA,kBAAkB,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC;QAC7E;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;;AAGrF,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,KAAK,EAAE,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE;AAC1C,QAAA,KAAK,EAAE,MAAM,OAAO,IAAI;AACzB,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;;IAGzE,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,CAAC,EAAE,CAAC;AACpB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;IAGX,SAAS,CAAC,MAAK;QACb,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE;AAC5C,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,EAAA,CAAI,CAAgB;YACnG,IAAI,QAAQ,EAAE;AACZ,gBAAA,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;YACxD;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAEjB,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,YAAY,GAAGF,sBAAoB,CAAC,KAAK,CAAC;AAChD,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AACjE,IAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;IAErE,MAAM,UAAU,GAAG,CACjB,IAAiD,EACjD,KAAa,EACb,WAAmB,KACjB;AACF,QAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,WAAW;AAC5C,QAAA,MAAM,SAAS,GAAG,YAAY,KAAK,WAAW;AAC9C,QAAA,MAAM,UAAU,GAAG,QAAQ,IAAI,SAAS;QAExC,QACE,4BACE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,EAAA,YAAA,EAC9B,WAAW,EACvB,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,QAAQ,EACvB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,QAAQ,IAAI,SAAS,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CACtD,EACD,OAAO,EAAE,MAAK;AACZ,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACtD,oBAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC7B;qBAAO;AACL,oBAAA,kBAAkB,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC;gBACvE;AACF,YAAA,CAAC,EACD,YAAY,EAAE,MAAK;gBACjB,eAAe,CAAC,WAAW,CAAC;gBAC5B,cAAc,CAAC,WAAW,CAAC;YAC7B,CAAC,EACD,YAAY,EAAE,MAAM,eAAe,CAAC,EAAE,CAAC,EAAA;AAEvC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA,EACxB,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,oBAACJ,WAAS,EAAA,IAAA,CAAG;gBACtC,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,KAAA,CAAA,aAAA,CAACG,cAAY,EAAA,IAAA,CAAG;oBAC3C,KAAA,CAAA,aAAA,CAACJ,YAAU,OAAG,CACX;AACN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;AAC5B,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,QAAQ,EACtB,uBAAuB,EAAE;AACvB,wBAAA,MAAM,EAAE;AACN,8BAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;8BAC7C,IAAI,CAAC;qBACV,EAAA,CACD;AACF,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAA;AAC9D,oBAAA,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,qBAAqB,KAChD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA;AAC1B,wBAAA,KAAA,CAAA,aAAA,CAACI,cAAY,EAAA,IAAA,CAAG;mCAEX,CACR;AACA,oBAAA,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,gBAAgB,KACzC,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,SAAS,EAChB,UAAU,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS,CACjD,EACD,OAAO,EAAE,CAAC,CAAC,KAAI;4BACb,CAAC,CAAC,eAAe,EAAE;AACnB,4BAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9B,wBAAA,CAAC,gBACW,CAAA,OAAA,EAAU,IAAI,CAAC,KAAK,CAAA,CAAE,aAG3B,CACV;AACD,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,UAAU,EACjB,UAAU,GAAG,MAAM,CAAC,iBAAiB,GAAG,SAAS,CAClD,EAAA;AAED,wBAAA,KAAA,CAAA,aAAA,CAACI,WAAS,EAAA,IAAA,CAAG,CACR,CACH,CACF,CACH;AAET,IAAA,CAAC;IAED,IAAI,WAAW,GAAG,CAAC;IAEnB,QACE,6BACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,SAAS,EAAA,YAAA,EACH,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EACpE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EACpC,YAAmB,EACnB,KAAK,CACN,EACD,QAAQ,EAAE,EAAE,EAAA;QAEZ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;SAIP,CAAS;QAET,MAAM;AAEN,QAAA,OAAO,IACN,aAAa,GAAG,aAAa,EAAE,IAC7B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,CAAI,CAC1B,CACP,KAED,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,MAAM,CAAC,IAAI,EAAA;AAEnB,gBAAA,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;oBACG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;wBAC5B,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;wBACzC,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC;AAC7C,wBAAA,WAAW,EAAE;AACb,wBAAA,OAAO,EAAE;AACX,oBAAA,CAAC,CAAC;oBACD,YAAY,IAAI,6BAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,CAAI,CAC9C,CACJ;AAGA,gBAAA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;oBACG,CAAC,UAAU,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAA,mBAAA,CAAyB;oBACvE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;wBAC9B,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;wBAC3C,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC;AAC7C,wBAAA,WAAW,EAAE;AACb,wBAAA,OAAO,EAAE;oBACX,CAAC,CAAC,CACD,CACJ;AAGA,gBAAA,KAAK,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,KACvC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AAClC,oBAAA,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE;oBAC5D,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC;AAC7C,oBAAA,WAAW,EAAE;AACb,oBAAA,OAAO,EAAE;AACX,gBAAA,CAAC,CAAC,CACH;AAGA,gBAAA,KAAK,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,KACrD,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,IAC9B,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA;;oBACA,KAAK;AACvB,oBAAA,IAAA,CAAA,CACN,CACF,CACE;AAGJ,YAAA,CAAC,gBAAgB,IAAI,eAAe,MACnC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA,EACtB,gBAAgB,KACf,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,YAAY,EACnB,UAAU,KAAK,QAAQ,GAAG,MAAM,CAAC,iBAAiB,GAAG,SAAS,CAC/D,EACD,YAAY,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,EAC3C,YAAY,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,EACvC,OAAO,EAAE,MAAM,cAAc,GAAG,KAAK,KAAK,WAAW,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAA,EAAA,QAAA,CAGzF;AACT,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,YAAY,EACnB,UAAU,KAAK,OAAO,GAAG,MAAM,CAAC,iBAAiB,GAAG,SAAS,CAC9D,EACD,YAAY,EAAE,MAAM,aAAa,CAAC,OAAO,CAAC,EAC1C,YAAY,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,EACvC,OAAO,EAAE,MAAM,cAAc,GAAG,KAAK,KAAK,WAAW,IAAI,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAA,EAE/F,gBAAgB,CACV,CACR,CACJ,CACG,CACP,CACA,CACJ;QAEA,MAAM,CACH;AAEV,CAAC;;AC/lBH;;;;;;;;;AASG;AA0BH;AACA;AACA;AAEA,MAAMD,cAAY,GAAG,OAAO;AAC1B,IAAA,IAAI,EAAE;AACJ,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,SAAS,EAAE,6BAA6B;AACxC,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,mEAAmE;AAC/E,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,gBAAgB;AACzB,QAAA,YAAY,EAAE,gDAAgD;AAC/D,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,YAAY,EAAE,MAAM;AACrB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,cAAc,EAAE,MAAe;AAC/B,QAAA,eAAe,EAAE,MAAe;AACjC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,WAAW,EAAE,MAAM;AACpB,KAAA;AACD,IAAA,kBAAkB,EAAE;AAClB,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,oCAAoC;AAC5C,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,OAAgB;AAC5B,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,SAAS,EAAE,MAAe;AAC3B,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,QAAQ,EAAE,MAAe;AAC1B,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,WAAW,EAAE,MAAM;AACpB,KAAA;AACD,IAAA,oBAAoB,EAAE;AACpB,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,KAAK,EAAE,oCAAoC;AAC5C,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,mBAAmB,EAAE,uCAAuC;AAC5D,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,UAAU,EAAE,mCAAmC;AAChD,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,SAAS,EAAE,aAAa;AACxB,QAAA,SAAS,EAAE,6BAA6B;AACzC,KAAA;AACD,IAAA,qBAAqB,EAAE;AACrB,QAAA,QAAQ,EAAE,UAAmB;QAC7B,aAAa,EAAE,MAAM;AACrB,QAAA,QAAQ,EAAE,QAAQ;AACnB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,SAAS,EAAE,OAAgB;AAC5B,KAAA;AACD,IAAA,uBAAuB,EAAE;AACvB,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,eAAe,EAAE,qCAAqC;AACtD,QAAA,KAAK,EAAE,oCAAoC;AAC5C,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,OAAO,EAAE,gBAAgB;AACzB,QAAA,UAAU,EAAE,uDAAuD;AACnE,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE,eAAe;AAC5B,KAAA;AACD,IAAA,qBAAqB,EAAE;AACrB,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,OAAO,EAAE,MAAM;AAChB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,mCAAmC;AAC1C,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,eAAe,EAAE,CAAC;AAClB,QAAA,eAAe,EAAE,UAAmB;AACpC,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,mCAAmC;AAC3C,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,UAAU,EAAE,WAAW;AACxB,KAAA;AACD,IAAA,qBAAqB,EAAE;AACrB,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,SAAS,EAAE,UAAU;AACtB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,mCAAmC;AAC1C,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACX,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,cAAc,EAAE,iCAAiC;AACjD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,mCAAmC;AAC/C,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,KAAK,EAAE,uCAAuC;AAC/C,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAChC,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,kBAAkB;AAC/B,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACF,CAAA,CAAC;AAEF;AACA;AACA;AAEA,MAAMP,YAAU,GAAG,OACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,8MAA8M,EAAA,CAAE,CACpN,CACP;AAED,MAAM,SAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,gLAAgL,EAAA,CAAE,CACtL,CACP;AAED,MAAMI,cAAY,GAAG,OACnB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,yEAAyE,EAAA,CAAE,CAC/E,CACP;AAED,MAAM,SAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;IAC/F,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAA,CAAE;IACxD,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,KAAK,EAAC,CAAC,EAAC,KAAK,EAAA,CAAE;AACnC,IAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,kBAAkB,EAAA,CAAE,CACjC,CACP;AAqBM,MAAM,iBAAiB,GAAG,UAAU,CACzC,SAAS,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAA;AACnC,IAAA,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,EAAE,EAChB,QAAQ,GAAG,EAAE,EACb,UAAU,GAAG,EAAE,EACf,gBAAgB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EACrC,aAAa,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC5C,cAAc,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC7C,cAAc,GAAG,EAAE,EACnB,KAAK,GAAG,EAAE,EACV,cAAc,GAAG,IAAI,EACrB,cAAc,EAAE,qBAAqB,EACrC,SAAS;IACT,gBAAgB,GAAG,IAAI,EACvB,WAAW,GAAG,CAAC,EACf,KAAK,GAAG,OAAO,EACf,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,IAAI,EACb,SAAS,EACT,KAAK,EACL,UAAU,GAAG,EAAE,EACf,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACX,aAAa,EACb,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,aAAa,EACb,WAAW,GACZ,GAAG,KAAK;;AAGT,IAAA,yBAAyB,EAAE;;AAG3B,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE;AAClC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU;AAE/B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAMG,cAAY,EAAE,EAAE,EAAE,CAAC;AAChD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IACzE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IAC3E,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC;AACtE,IAAA,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,qBAAqB,IAAI,IAAI,CAAC;IAClG,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;IAG3D,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,SAAS,GAAG,SAAS,IAAI,qBAAqB;AACpD,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;AAC3B,YAAA,iBAAiB,CAAC,SAAS,KAAK,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;QAC3D;AACF,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;;AAGtC,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MACnC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAC5D,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC;AAED,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EACnD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1B;AAED,IAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAClC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EACvD,CAAC,UAAU,EAAE,cAAc,CAAC,CAC7B;;AAGD,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7E,IAAA,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAEjC,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACxC,QAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,IAAI,WAAW,IAAI,CAAC,IAAI,oBAAoB,CAAC,WAAW,CAAC,EAAE;YACzD,kBAAkB,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC;QAC3E;IACF,CAAC,EAAE,CAAC,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;;AAG3D,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,KAAK,EAAE,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE;AAC1C,QAAA,KAAK,EAAE,MAAM,OAAO,IAAI;AACzB,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;;IAGzE,SAAS,CAAC,MAAK;QACb,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE;AAC5C,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,EAAA,CAAI,CAAgB;YACnG,IAAI,QAAQ,EAAE;AACZ,gBAAA,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;YACxD;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAEjB,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,YAAY,GAAGF,sBAAoB,CAAC,KAAK,CAAC;AAChD,IAAA,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,GAAG,CAAC;;;IAIrD,MAAM,eAAe,GAAG,iBAAiB;IAEzC,QACE,6BACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,SAAS,EAAA,YAAA,EACH,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EACvE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,EAAE,KAAK,EAAE,MAAM,EAAE,EACjB,YAAmB,EACnB,KAAK,CACN,EACD,QAAQ,EAAE,EAAE,EAAA;QAEZ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;;;;SAOP,CAAS;QAET,MAAM,KAAK,KAAK,KACf,6BAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA;AACvB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AAC3B,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,WAAW,IAC5B,KAAK,GAAG,IAAI,KAAK,CAAA,CAAA,CAAG,GAAG,SAAS,CAC5B;gBACN,iBAAiB,CAAC,MAAM,GAAG,CAAC,KAC3B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;AAC5B,oBAAA,iBAAiB,CAAC,MAAM;AACpB,oBAAA,SAAA,CAAA,CACR,CACG;YAEL,cAAc,KACb,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAC,mBAAmB,EAAA;AAChE,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,YAAY,EACnB,CAAC,cAAc,GAAG,MAAM,CAAC,kBAAkB,GAAG,SAAS,EACvD,eAAe,KAAK,KAAK,IAAI,cAAc,GAAG,MAAM,CAAC,iBAAiB,GAAG,SAAS,CACnF,EACD,OAAO,EAAE,MAAK;wBACZ,iBAAiB,CAAC,IAAI,CAAC;AACvB,wBAAA,WAAW,GAAG,KAAK,CAAC;oBACtB,CAAC,EACD,YAAY,EAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,EAC7C,YAAY,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,EAAA,EAAA,KAAA,CAGrC;AACR,gBAAA,mBAAmB,CAAC,GAAG,CAAC,GAAG,KAC1B,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,GAAG,CAAC,EAAE,EACX,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,YAAY,EACnB,cAAc,KAAK,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,kBAAkB,GAAG,SAAS,EACjE,eAAe,KAAK,GAAG,CAAC,EAAE,IAAI,cAAc,KAAK,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,iBAAiB,GAAG,SAAS,CAC/F,EACD,OAAO,EAAE,MAAK;AACZ,wBAAA,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEzB,wBAAA,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC;oBACvB,CAAC,EACD,YAAY,EAAE,MAAM,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAC9C,YAAY,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,EAAA;oBAE3C,GAAG,CAAC,IAAI,KACP,6BAAK,GAAG,EAAE,GAAG,CAAC,IAAc,EAAE,GAAG,EAAC,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,CAAI,CACpE;AACA,oBAAA,GAAG,CAAC,KAAK;oBACT,GAAG,CAAC,KAAK,IAAI,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;;AAAQ,wBAAA,GAAG,CAAC,KAAK;AAAS,wBAAA,GAAA,CAAA,CACjC,CACV,CAAC,CACE,CACP,CACG,CACP,CAAC;AAEF,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,EAAA,EACzC,OAAO,IACN,aAAa,GAAG,aAAa,EAAE,IAC7B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,CAAI,CAC1B,CACP,KAED,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;YAEG,oBAAoB,CAAC,MAAM,GAAG,CAAC,KAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA,EAC9B,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAC3C,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,EAAA,YAAA,EACJ,GAAG,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,cAAc,EACrB,WAAW,KAAK,GAAG,GAAG,MAAM,CAAC,oBAAoB,GAAG,SAAS,EAC7D,iBAAiB,KAAK,GAAG,IAAI,WAAW,KAAK,GAAG,GAAG,MAAM,CAAC,mBAAmB,GAAG,SAAS,CAC1F,EACD,OAAO,EAAE,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAChD,YAAY,EAAE,MAAK;oBACjB,oBAAoB,CAAC,GAAG,CAAC;oBACzB,cAAc,CAAC,GAAG,CAAC;gBACrB,CAAC,EACD,YAAY,EAAE,MAAM,oBAAoB,CAAC,EAAE,CAAC,EAAA;AAE5C,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,cAAc,EAC5B,uBAAuB,EAAE;AACvB,wBAAA,MAAM,EAAE;AACN,8BAAE,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;8BAC/C,CAAC,CAAC;AACP,qBAAA,EAAA,CACD,CACK,CACV,CAAC,CACE,CACP;AAGA,YAAA,eAAe,CAAC,MAAM,GAAG,CAAC,KACzB,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA;AAC7B,oBAAA,KAAA,CAAA,aAAA,CAACD,cAAY,EAAA,IAAA,CAAG;AAEZ,oBAAA,eAAA,CAAA;AACN,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;wBACL,GAAG,MAAM,CAAC,YAAY;wBACtB,mBAAmB,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,MAAA,CAAQ;AACnD,qBAAA,EAAA,EAEA,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,MAC7C,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,CAAC,EAAE,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,WAAW,EAClB,cAAc,KAAK,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS,CACpE,EACD,OAAO,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAClD,YAAY,EAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,EACjD,YAAY,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAA;AAE3C,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,qBAAqB,EAAA;AACrC,wBAAA,OAAO,CAAC,KAAK,IACZ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,KAAK,EAAE,MAAM,CAAC,YAAY,EAC1B,OAAO,EAAC,MAAM,EAAA,CACd,KAEF,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,uBAAuB,EAAA;4BACxC,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,CAAG,CACT,CACP;AAGA,wBAAA,cAAc,KACb,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,cAAc,EACrB,cAAc,KAAK,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,qBAAqB,GAAG,SAAS,CACzE,EACD,OAAO,EAAE,CAAC,CAAC,KAAI;gCACb,CAAC,CAAC,eAAe,EAAE;AACnB,gCAAA,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;AAC/B,4BAAA,CAAC,gBACU,MAAM,EAAA;4BAEjB,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,CAAG,CACN,CACV;AAGA,wBAAA,gBAAgB,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,KAC9C,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,cAAc,EACrB,cAAc,KAAK,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,qBAAqB,GAAG,SAAS,CACzE,EAAA;4BAED,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,mBAAmB,EAAA,EAAG,OAAO,CAAC,KAAK,CAAO;4BAC7D,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,mBAAmB,EAAA,EACnC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE;gCAC1B,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI;6BAC1D,CAAC,CACE,CACF,CACP,CACG;oBAGL,CAAC,gBAAgB,KAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;wBAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAG,OAAO,CAAC,KAAK,CAAO;AACrD,wBAAA,OAAO,CAAC,KAAK,KAAK,SAAS,KAC1B,6BAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAC5B,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE;4BAC1B,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI;yBAC1D,CAAC,CACE,CACP,CACG,CACP,CACG,CACP,CAAC,CACE,CACL,CACJ;AAGA,YAAA,CAAC,OAAO,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,KAC5E,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,IAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA;AACtB,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA;oBAC1B,KAAA,CAAA,aAAA,CAACJ,YAAU,OAAG,CACV;AACN,gBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;;oBAAwB,KAAK;AAAM,oBAAA,IAAA,CAAA;AACnC,gBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAA,EAAA,kCAAA,CAE5C,CACA,CACP,CACF,CACA,CACJ,CACG;QAEL,MAAM,KAAK,SAAS,GAAG,MAAM,IAC5B,eAAe,CAAC,MAAM,GAAG,CAAC,KACxB,6BAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA;YACvB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAA;AAC/E,gBAAA,eAAe,CAAC,MAAM;AAClB,gBAAA,cAAA,CAAA;YACP,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,UAAU,EACjB,cAAc,GAAG,MAAM,CAAC,eAAe,GAAG,SAAS,CACpD,EACD,OAAO,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,EACtC,YAAY,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAC3C,YAAY,EAAE,MAAM,iBAAiB,CAAC,KAAK,CAAC,EAAA,EAAA,aAAA,CAGrC,CACL,CACP,CACF,CACG;AAEV,CAAC;;ACluBH;;;;;;;;;AASG;AA0BH;AACA;AACA;AAEA,MAAMO,cAAY,GAAG,OAAO;AAC1B,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,OAAgB;AAC1B,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,eAAe,EAAE,oBAAoB;AACrC,QAAA,cAAc,EAAE,WAAW;AAC3B,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,YAAY;AACxB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,MAAM,EAAE,IAAI;AACb,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,eAAe,EAAE,sDAAsD;AACvE,QAAA,YAAY,EAAE,oCAAoC;AAClD,QAAA,SAAS,EAAE,uEAAuE;AAClF,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,6FAA6F;AACzG,QAAA,QAAQ,EAAE,gCAAgC;AAC1C,QAAA,cAAc,EAAE,YAAY;AAC7B,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,YAAY,EAAE,wDAAwD;AACvE,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,SAAS;AACtB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,uCAAuC;AAC/C,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,eAAe,EAAE,8CAA8C;AAC/D,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,4BAA4B;AACzC,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,SAAS,EAAE,OAAO;AACnB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,QAAQ,EAAE,OAAO;AAClB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,UAAU,EAAE,wDAAwD;AACpE,QAAA,eAAe,EAAE,+CAA+C;AAChE,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AACjC,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,OAAO;AACjB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,OAAO;AACvB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,uBAAuB;AACnC,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,eAAe,EAAE,qCAAqC;AACtD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,eAAe,EAAE,uBAAuB;AACxC,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,SAAS,EAAE,OAAgB;AAC3B,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACzB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACxB,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,kBAAkB,EAAE;AAClB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,OAAO,EAAE,GAAG;AACb,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE,eAAe;AAC5B,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,OAAO,EAAE,GAAG;AACb,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AAChC,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACzB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,SAAS,EAAE,SAAkB;AAC7B,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,SAAS,EAAE,2BAA2B;AACvC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,iCAAiC;AACzC,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,SAAS,EAAE,MAAM;AAClB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,WAAW;AACxB,KAAA;AACD,IAAA,oBAAoB,EAAE;AACpB,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,sBAAsB,EAAE;AACtB,QAAA,eAAe,EAAE,qCAAqC;AACtD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,SAAS,EAAE,wDAAwD;AACnE,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,eAAe,EAAE,+CAA+C;AAChE,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,uCAAuC;AAC/C,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACX,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,cAAc,EAAE,iCAAiC;AACjD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,mCAAmC;AAC/C,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACF,CAAA,CAAC;AAEF;AACA;AACA;AAEA,MAAMP,YAAU,GAAG,OACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,kHAAkH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAE,CAC9J,CACP;AAUD,MAAM,YAAY,GAAG,OACnB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,qGAAqG,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAE,CACjJ,CACP;AAED,MAAM,YAAY,GAAG,OACnB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,yMAAyM,EAAA,CAAE,CAC/M,CACP;AAED,MAAMC,WAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,oHAAoH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAE,CAChK,CACP;AAyBM,MAAM,iBAAiB,GAAG,UAAU,CACzC,SAAS,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAA;IACnC,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,EAAE,EAChB,QAAQ,GAAG,EAAE,EACb,cAAc,GAAG,EAAE,EACnB,gBAAgB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EACrC,aAAa,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC5C,cAAc,GAAG,EAAE,EACnB,KAAK,GAAG,EAAE,EACV,WAAW,GAAG,IAAI,EAClB,SAAS,GAAG,IAAI,EAChB,WAAW,GAAG,WAAW,EACzB,aAAa,GAAG,IAAI,EACpB,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,OAAO,EACf,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,IAAI,EACb,SAAS,EACT,KAAK,EACL,UAAU,GAAG,EAAE,EACf,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,MAAM,EACN,MAAM,EACN,aAAa,EACb,WAAW,GACZ,GAAG,KAAK;;AAGT,IAAA,yBAAyB,EAAE;;AAG3B,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE;AAClC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU;AAE/B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAMM,cAAY,EAAE,EAAE,EAAE,CAAC;AAChD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;AACjD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC;IAC5C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;;AAGlD,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MACnC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAC5D,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC;AAED,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EACnD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1B;AAED,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAC5B,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACxE,CAAC,cAAc,CAAC,CACjB;;AAGD,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,KAAK,GASN,EAAE;;AAGP,QAAA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;YACvB,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,IAAI,EAAE,MAAM;AACb,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACtC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;gBAC/B,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,QAAQ;oBACd,EAAE,EAAE,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE;AACnB,oBAAA,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,KAAA,CAAA,aAAA,CAACN,WAAS,EAAA,IAAA,CAAG;AACnB,oBAAA,IAAI,EAAE,CAAC;AACR,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;;QAGA,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;YACtC,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE;gBAC/B,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,KAAA,CAAA,aAAA,CAAC,YAAY,EAAA,IAAA,CAAG;AACtB,gBAAA,IAAI,EAAE,CAAC;AACR,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;YACnC,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ,EAAE,CAAC,CAAC,KAAK;gBACjB,IAAI,EAAE,KAAA,CAAA,aAAA,CAAC,YAAY,EAAA,IAAA,CAAG;gBACtB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,CAAC,CAAC,KAAe;AACxB,gBAAA,IAAI,EAAE,CAAC;AACR,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;;AAG5E,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACxC,QAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;AACpC,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;;YAEnB,IAAI,KAAK,CAAC,IAAI,EAAE;AAAE,gBAAA,cAAc,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAChD;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI;gBACtB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1B;AACF,YAAA,KAAK,YAAY;gBACf,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;gBACjD;AACF,YAAA,KAAK,SAAS;gBACZ,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;gBAC7C;;AAEN,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;;AAGrG,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,KAAK,EAAE,MAAM,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;AACvC,QAAA,KAAK,EAAE,MAAM,OAAO,IAAI;AACzB,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;;IAGnF,SAAS,CAAC,MAAK;QACb,IAAI,OAAO,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC,EAAE;AACvC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,EAAA,CAAI,CAAgB;YAC9F,IAAI,QAAQ,EAAE;AACZ,gBAAA,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC;YACnD;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;;IAGjB,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,CAAC,EAAE,CAAC;AACpB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,YAAY,GAAGI,sBAAoB,CAAC,KAAK,CAAC;AAChD,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;IAExC,MAAM,OAAO,IACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EACvE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,EAAE,EACjD,YAAmB,EACnB,KAAK,CACN,EAAA;QAED,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;SAIP,CAAS;AAGV,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,eAAe,EAAA;AAChC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;gBAC3B,KAAA,CAAA,aAAA,CAACL,YAAU,OAAG,CACV;YACN,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,QAAe,EACpB,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,KAAK,EACnB,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,QAAQ,EAAE,CAAC,CAAC,KAAK,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACjD,SAAS,EAAE,CAAC,CAAC,KAAI;AACf,oBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;wBACzB,CAAC,CAAC,cAAc,EAAE;AAClB,wBAAA,YAAY,EAAE;oBAChB;AAAO,yBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;wBAC9B,CAAC,CAAC,cAAc,EAAE;AAClB,wBAAA,gBAAgB,EAAE;oBACpB;AAAO,yBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;wBAC5B,CAAC,CAAC,cAAc,EAAE;AAClB,wBAAA,YAAY,EAAE;oBAChB;AAAO,yBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;wBAC7B,OAAO,IAAI;oBACb;gBACF,CAAC,EACD,SAAS,EAAA,IAAA,EAAA,CACT;AACD,YAAA,aAAa,KACZ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA;AACzB,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;gBACjC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,GAAA,CAAU,CAC7B,CACP,CACG;QAEL,MAAM;AAGP,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AAExB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,SAAS,EAAE,IAC7D,OAAO,IACN,aAAa,GAAG,aAAa,EAAE,IAC7B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,GAAI,CAC1B,CACP,IACC,QAAQ,CAAC,MAAM,KAAK,CAAC,IACvB,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,IAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA;;gBACL,KAAK;AAClB,gBAAA,IAAA,CAAA,CACP,KAED,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;gBAEG,OAAO,CAAC,MAAM,GAAG,CAAC,KACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAA,SAAA,CAAe;AAC7C,oBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;wBACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAClC,wBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,GAAG;AACpC,wBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAA,YAAA,EACA,GAAG,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CACzC,EACD,OAAO,EAAE,MAAK;gCACZ,cAAc,CAAC,GAAG,CAAC;AACnB,gCAAA,YAAY,EAAE;4BAChB,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC,EAAA;4BAEvC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,WAAW,CACrB,MAAM,CAAC,QAAQ,EACf,QAAQ,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,CAC7C,EAAA,EACE,IAAI,CAAC,IAAI,CACN;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;AAC5B,gCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,WAAW,CACrB,MAAM,CAAC,SAAS,EAChB,QAAQ,GAAG,MAAM,CAAC,eAAe,GAAG,SAAS,CAC9C,EAAA,EACE,IAAI,CAAC,KAAK,CACP,CACF,CACF;oBAEV,CAAC,CAAC,CACE,CACP;AAGA,gBAAA,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,KACjC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAA,QAAA,CAAc;AAC5C,oBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;wBACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAClC,wBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,GAAG;AACpC,wBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAA,YAAA,EACA,GAAG,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CACzC,EACD,OAAO,EAAE,MAAK;gCACZ,cAAc,CAAC,GAAG,CAAC;AACnB,gCAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;4BAC5B,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC,EAAA;4BAEvC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,WAAW,CACrB,MAAM,CAAC,QAAQ,EACf,QAAQ,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,CAC7C,EAAA,EACE,IAAI,CAAC,IAAI,CACN;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;AAC5B,gCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,WAAW,CACrB,MAAM,CAAC,SAAS,EAChB,QAAQ,GAAG,MAAM,CAAC,eAAe,GAAG,SAAS,CAC9C,EAAA,EACE,IAAI,CAAC,KAAK,CACP,CACF,CACF;oBAEV,CAAC,CAAC,CACE,CACP;gBAGA,oBAAoB,CAAC,MAAM,GAAG,CAAC,KAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAA,aAAA,CAAmB;AACjD,oBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;wBAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAClC,wBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,GAAG;AACpC,wBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAA,YAAA,EACA,GAAG,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CACzC,EACD,OAAO,EAAE,MAAK;gCACZ,cAAc,CAAC,GAAG,CAAC;gCACnB,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;4BAC3C,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC,EAAA;4BAEvC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,WAAW,CACrB,MAAM,CAAC,QAAQ,EACf,QAAQ,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,CAC7C,EAAA,EACE,IAAI,CAAC,IAAI,CACN;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;gCAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,SAAS,EAChB,QAAQ,GAAG,MAAM,CAAC,eAAe,GAAG,SAAS,CAC9C,EACD,uBAAuB,EAAE;AACvB,wCAAA,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;qCAC3D,EAAA,CACD,CACE,CACF;oBAEV,CAAC,CAAC,CACE,CACP;gBAGA,iBAAiB,CAAC,MAAM,GAAG,CAAC,KAC3B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAA,UAAA,CAAgB;AAC9C,oBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;wBACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAClC,wBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,GAAG;AACpC,wBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAA,YAAA,EACA,GAAG,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CACzC,EACD,OAAO,EAAE,MAAK;gCACZ,cAAc,CAAC,GAAG,CAAC;gCACnB,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;4BACvC,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC,EAAA;4BAEvC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,WAAW,CACrB,MAAM,CAAC,QAAQ,EACf,QAAQ,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,CAC7C,EAAA,EACE,IAAI,CAAC,KAAK,IACT,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAC,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA,CAAI,KAE5D,IAAI,CAAC,IAAI,CACV,CACG;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;gCAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,WAAW,CACrB,MAAM,CAAC,SAAS,EAChB,QAAQ,GAAG,MAAM,CAAC,eAAe,GAAG,SAAS,CAC9C,EAAA,EACE,IAAI,CAAC,KAAK,CACP;AACL,gCAAA,IAAI,CAAC,QAAQ,KACZ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,WAAW,CACrB,MAAM,CAAC,YAAY,EACnB,QAAQ,GAAG,MAAM,CAAC,kBAAkB,GAAG,SAAS,CACjD,EAAA,EACE,IAAI,CAAC,QAAQ,CACV,CACP,CACG;4BACL,IAAI,CAAC,KAAK,KAAK,SAAS,KACvB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,WAAW,CACtB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,iBAAiB,EACxB,QAAQ,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAC/C,IACE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CAC1D,CACR,CACG;AAEV,oBAAA,CAAC,CAAC,CACE,CACP,CACA,CACJ,CACG;AAGL,YAAA,WAAW,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,KACzD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA;AAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA;oBAC9B,UAAU,CAAC,KAAK,KACf,6BAAK,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAC,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,CAAI,CAClE;oBACD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAG,UAAU,CAAC,KAAK,CAAO;AACxD,oBAAA,UAAU,CAAC,QAAQ,KAClB,6BAAK,KAAK,EAAE,MAAM,CAAC,eAAe,EAAA,EAAG,UAAU,CAAC,QAAQ,CAAO,CAChE;AACA,oBAAA,UAAU,CAAC,KAAK,KAAK,SAAS,KAC7B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAC5B,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,CACjE,CACP;AACD,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA;AAC/B,wBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAClE,OAAO,EAAE,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAA,EAAA,cAAA,CAG3D,CACL,CACF,CACF,CACP,CACG;AAGL,QAAA,MAAM,KAAK,SAAS,GAAG,MAAM,IAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA;AACvB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA;AAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA;AAC9B,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;AACjC,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;AAE5B,oBAAA,UAAA,CAAA;AACP,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA;AAC9B,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;AAE5B,oBAAA,QAAA,CAAA;AACP,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA;AAC9B,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,KAAA,CAAY;4BAE9B,CACH;AACN,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;AAAO,gBAAA,QAAQ,CAAC,MAAM;2BAAgB,CAClC,CACP,CACG,CACP;IAED,IAAI,SAAS,EAAE;AACb,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EACpC,OAAO,EAAE,CAAC,CAAC,KAAI;AACb,gBAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa;oBAAE,OAAO,IAAI;AAC/C,YAAA,CAAC,EAAA,EAEA,OAAO,CACJ;IAEV;AAEA,IAAA,OAAO,OAAO;AAChB,CAAC;;AC53BH;;;;;;;;;AASG;AA2BH;AACA;AACA;AAEA,MAAMO,cAAY,GAAG,CAAC,QAAA,GAAoB,KAAK,MAAM;AACnD,IAAA,IAAI,EAAE;QACJ,QAAQ,EAAE,QAAQ,GAAG,OAAgB,GAAG,UAAmB;QAC3D,GAAG,EAAE,QAAQ,GAAG,CAAC,GAAG,MAAM;AAC1B,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,QAAQ,GAAG,CAAC,GAAG,MAAM;QAC7B,SAAS,EAAE,QAAQ,GAAG,CAAC,GAAG,KAAK;AAC/B,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,KAAK,EAAE,sCAAsC;QAC7C,YAAY,EAAE,QAAQ,GAAG,CAAC,GAAG,MAAM;QACnC,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,gCAAgC;AAC/D,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,mEAAmE;QAC/E,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM;AACpC,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AACjC,KAAA;AACD,IAAA,MAAM,EAAE;QACN,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM;AACnC,QAAA,aAAa,EAAE,QAAiB;QAChC,mBAAmB,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS;QACjD,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO;AACtC,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,SAAS,EAAE,MAAe;AAC3B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,eAAe,EAAE,oCAAoC;QACrD,WAAW,EAAE,QAAQ,GAAG,MAAM,GAAG,gDAAgD;QACjF,YAAY,EAAE,QAAQ,GAAG,gDAAgD,GAAG,MAAM;AAClF,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AACjC,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,eAAe,EAAE,sCAAsC;QACvD,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM;AACnC,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AAChC,QAAA,QAAQ,EAAE,QAAQ;AACnB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,SAAS,EAAE,MAAe;AAC3B,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,gBAAgB;AACzB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,YAAY,EAAE,gDAAgD;AAC/D,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,qCAAqC;AAC5C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,OAAO;AACvB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,cAAc,EAAE,WAAW;AAC3B,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW;AAC7C,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,gBAAgB;AAC5B,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,oBAAoB,EAAE;AACpB,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,iBAAiB,EAAE;AACjB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,UAAU,EAAE,GAAG;AAChB,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,qCAAqC;AAC5C,QAAA,SAAS,EAAE,KAAK;AACjB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,oCAAoC;AAC3C,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE,eAAe;AAC5B,KAAA;AACD,IAAA,sBAAsB,EAAE;AACtB,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,mBAAmB,EAAE,gBAAgB;AACrC,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,SAAS,EAAE,gDAAgD;AAC5D,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,wBAAwB;AACrC,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,qCAAqC;AAC7C,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,YAAY,EAAE,MAAM;AACrB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,WAAW,EAAE,GAAG;AAChB,QAAA,SAAS,EAAE,OAAgB;AAC3B,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,eAAe,EAAE,qCAAqC;AACvD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,UAAU,EAAE,GAAG;AAChB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,qCAAqC;AAC5C,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,QAAQ;AACxB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,YAAY,EAAE,MAAM;AACrB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,oCAAoC;AAC3C,QAAA,cAAc,EAAE,cAAc;AAC/B,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,+BAA+B;AACtC,QAAA,eAAe,EAAE,qCAAqC;AACtD,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,KAAK,EAAE,oCAAoC;AAC3C,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,OAAO;AACtB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,wBAAwB;AACrC,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,eAAe,EAAE,wCAAwC;AACzD,QAAA,KAAK,EAAE,oCAAoC;AAC5C,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,cAAc,EAAE,MAAe;AAChC,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,eAAe;AAC5B,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,OAAO,EAAE,GAAG;AACb,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,SAAS,EAAE,OAAgB;AAC3B,QAAA,eAAe,EAAE,qCAAqC;AACtD,QAAA,YAAY,EAAE,MAAM;AACrB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACzB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,sCAAsC;AAC9C,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,qCAAqC;AAC7C,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,cAAc,EAAE,WAAW;AAC3B,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,KAAK,EAAE,qCAAqC;AAC7C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,cAAc,EAAE,sCAAsC;AACtD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,mCAAmC;AAC/C,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,qCAAqC;AAC7C,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,cAAc,EAAE,WAAW;AAC3B,QAAA,mBAAmB,EAAE,sCAAsC;AAC5D,KAAA;AACF,CAAA,CAAC;AAEF;AACA;AACA;AAEA,MAAMP,YAAU,GAAG,OACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAA;AACjG,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,sMAAsM,EAAA,CAAE,CAC5M,CACP;AAED,MAAM,SAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAA;AACjE,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,0IAA0I,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAE,CACtL,CACP;AAmBM,MAAM,eAAe,GAAG,UAAU,CACvC,SAAS,eAAe,CAAC,KAAK,EAAE,GAAG,EAAA;AACjC,IAAA,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,EAAE,EAChB,QAAQ,GAAG,EAAE,EACb,UAAU,GAAG,EAAE,EACf,gBAAgB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EACrC,aAAa,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC5C,cAAc,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC7C,cAAc,GAAG,EAAE,EACnB,KAAK,GAAG,EAAE,EACV,eAAe,GAAG,IAAI,EACtB,eAAe,GAAG,IAAI,EACtB,aAAa,GAAG,IAAI,EACpB,aAAa,GAAG,WAAW,EAC3B,gBAAgB,GAAG,IAAI,EACvB,KAAK,GAAG,MAAM,EACd,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,IAAI,EACb,SAAS,EACT,KAAK,EACL,UAAU,GAAG,EAAE,EACf,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,EACN,aAAa,EACb,WAAW,GACZ,GAAG,KAAK;;AAGT,IAAA,yBAAyB,EAAE;;AAG3B,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE;AAClC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU;AAE/B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAMO,cAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAChE,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IACzE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IAC/E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAGzD,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MACnC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAC5D,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC;AAED,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EACnD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1B;AAED,IAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAClC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EACvD,CAAC,UAAU,EAAE,cAAc,CAAC,CAC7B;;AAGD,IAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;AAGnD,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7E,IAAA,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAEjC,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACxC,QAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,IAAI,WAAW,IAAI,CAAC,IAAI,oBAAoB,CAAC,WAAW,CAAC,EAAE;YACzD,kBAAkB,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC;QAC3E;IACF,CAAC,EAAE,CAAC,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;;AAG3D,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,KAAK,EAAE,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE;AAC1C,QAAA,KAAK,EAAE,MAAM,OAAO,IAAI;AACzB,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;;IAGzE,SAAS,CAAC,MAAK;QACb,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE;AAC5C,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,EAAA,CAAI,CAAgB;YACnG,IAAI,QAAQ,EAAE;AACZ,gBAAA,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;YACxD;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAEjB,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,YAAY,GAAGF,sBAAoB,CAAC,KAAK,CAAC;IAChD,MAAM,YAAY,GAAG;UACjB,iBAAiB,CAAC,WAAW,CAAC,KAAe,EAAE,WAAW,CAAC,YAAsB;UACjF,SAAS;AAEb,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,SAAS,EAAA,YAAA,EACH,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EACrE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX;YACE,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK;YAChC,SAAS,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS;YACzC;SACD,EACD,YAAmB,EACnB,KAAK,CACN,EACD,QAAQ,EAAE,EAAE,EAAA;QAEZ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;;;;;;SASP,CAAS;QAET,MAAM;AAEN,QAAA,OAAO,IACN,aAAa,GAAG,aAAa,EAAE,IAC7B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,CAAI,CAC1B,CACP,KAED,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA;AAEvB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA;AAE1B,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAA,aAAA,CAAoB;wBACnD,oBAAoB,CAAC,MAAM,GAAG,CAAC,KAC9B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,OAAO,EAAE,MAAM,SAAS,GAAG,aAAa,CAAC,EAAA,EAAA,UAAA,CAGpC,CACR,CACG;AACL,oBAAA,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,GAAG,KAAI;AACxD,wBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,GAAG;AACpC,wBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,EAAA,YAAA,EACb,GAAG,EACf,IAAI,EAAC,QAAQ,EAAA,eAAA,EACE,QAAQ,EACvB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,cAAc,EACrB,QAAQ,GAAG,MAAM,CAAC,oBAAoB,GAAG,SAAS,CACnD,EACD,OAAO,EAAE,MAAM,kBAAkB,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EACzD,YAAY,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC,EAAA;AAEvC,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA;gCAC/B,KAAA,CAAA,aAAA,CAACL,YAAU,OAAG,CACV;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAA;AAClC,gCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,eAAe,EAC7B,uBAAuB,EAAE;AACvB,wCAAA,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;qCAC/D,EAAA,CACD;gCACD,UAAU,CAAC,KAAK,KACf,6BAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA;AAC9B,oCAAA,UAAU,CAAC,KAAK;AACb,oCAAA,UAAA,CAAA,CACP,CACG;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,eAAe,EACtB,QAAQ,GAAG,MAAM,CAAC,sBAAsB,GAAG,SAAS,CACrD,EAAA;AAED,gCAAA,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,CAAG,CACT,CACF;AAEV,oBAAA,CAAC,CAAC;AAGD,oBAAA,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KACzC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,IAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAA;;wBAC5C,KAAK;AACtB,wBAAA,IAAA,CAAA,CACP,CACF,CACG;AAGL,gBAAA,eAAe,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,KAChD,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,kBAAoB,CAChD;AACN,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,eAAe,EAAA,EAC/B,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KACtC,6BACE,GAAG,EAAE,GAAG,CAAC,EAAE,EACX,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,cAAc,EACrB,iBAAiB,KAAK,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,mBAAmB,GAAG,SAAS,CACtE,EACD,OAAO,EAAE,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,EACpC,YAAY,EAAE,MAAM,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,EAChD,YAAY,EAAE,MAAM,oBAAoB,CAAC,IAAI,CAAC,EAAA;wBAE9C,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA,EAAG,GAAG,CAAC,KAAK,CAAO;wBACnD,GAAG,CAAC,KAAK,KACR,6BAAK,KAAK,EAAE,MAAM,CAAC,eAAe,EAAA;AAC/B,4BAAA,GAAG,CAAC,KAAK;AACN,4BAAA,WAAA,CAAA,CACP,CACG,CACP,CAAC,CACE,CACL,CACJ,CACG;AAGN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;gBAE1B,eAAe,IAAI,WAAW,KAC7B,6BAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;oBAC3B,WAAW,CAAC,KAAK,KAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,WAAW,CAAC,KAAK,EACtB,GAAG,EAAE,WAAW,CAAC,KAAK,EACtB,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,OAAO,EAAC,MAAM,EAAA,CACd,CACH;AACA,oBAAA,WAAW,CAAC,KAAK,KAChB,6BAAK,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA,EAAG,WAAW,CAAC,KAAK,CAAO,CACxD;oBACD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA,EAAG,WAAW,CAAC,KAAK,CAAO;AACvD,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;wBAC5B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA,EAC1B,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE;4BAC9B,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,IAAI;AAC9D,yBAAA,CAAC,CACG;AACN,wBAAA,gBAAgB,IAAI,WAAW,CAAC,YAAY,KAC3C,8BAAM,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAA,EACjC,WAAW,CAAC,WAAW,CAAC,YAAY,EAAE;4BACrC,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,IAAI;AAC9D,yBAAA,CAAC,CACG,CACR;AACA,wBAAA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA;;4BAAI,YAAY;AAAS,4BAAA,GAAA,CAAA,CAC1D,CACG;AACL,oBAAA,aAAa,KACZ,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,UAAU,EACjB,aAAa,GAAG,MAAM,CAAC,eAAe,GAAG,SAAS,CACnD,EACD,OAAO,EAAE,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,EAC9C,YAAY,EAAE,MAAM,gBAAgB,CAAC,IAAI,CAAC,EAC1C,YAAY,EAAE,MAAM,gBAAgB,CAAC,KAAK,CAAC,EAAA,EAE1C,aAAa,CACP,CACV,CACG,CACP;AAGA,gBAAA,aAAa,CAAC,MAAM,GAAG,CAAC,KACvB,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,EAAA,EAAA,eAAA,CAEtD;AACN,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA,EAC9B,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,MAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,CAAC,EAAE,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,WAAW,EAClB,cAAc,KAAK,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS,CACpE,EACD,OAAO,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,EACtD,YAAY,EAAE,MAAM,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,EACjD,YAAY,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAA;AAE1C,wBAAA,OAAO,CAAC,KAAK,IACZ,6BACE,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,GAAG,EAAE,OAAO,CAAC,KAAK,EAClB,KAAK,EAAE,MAAM,CAAC,YAAY,EAC1B,OAAO,EAAC,MAAM,GACd,KAEF,6BAAK,KAAK,EAAE,MAAM,CAAC,YAAY,GAAI,CACpC;wBACD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAG,OAAO,CAAC,KAAK,CAAO;AACrD,wBAAA,OAAO,CAAC,KAAK,KAAK,SAAS,KAC1B,6BAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAC5B,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE;4BAC1B,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI;yBAC1D,CAAC,CACE,CACP,CACG,CACP,CAAC,CACE,CACL,CACJ,CACG,CACF,CACP;AAGA,QAAA,MAAM,KAAK,SAAS,GAAG,MAAM,IAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA;AACvB,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;;gBACQ,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA,OAAA,CAAsB;;gBAAY,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAA,cAAA,CAAmB;AACtD,gBAAA,cAAA,CAAA;YACP,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,OAAO,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,uBAGjC,CACH,CACP,CACG;AAEV,CAAC;;ACntBH;;;;;;;;;AASG;AAwBH;AACA;AACA;AAEA,MAAMO,cAAY,GAAG,OAAO;AAC1B,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,OAAgB;AAC1B,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,eAAe,EAAE,oBAAoB;AACrC,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE,oBAAoB;AACjC,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,QAAQ,EAAE,OAAgB;AAC1B,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,SAAS,EAAE,iCAAiC;AAC5C,QAAA,UAAU,EAAE,0FAA0F;AACtG,QAAA,QAAQ,EAAE,gCAAgC;AAC1C,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,SAAS,EAAE,eAAe;AAC1B,QAAA,UAAU,EAAE,gDAAgD;AAC5D,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,aAAa,EAAE,QAAiB;AACjC,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,SAAS,EAAE,kBAAkB;AAC9B,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,MAAM,EAAE,MAAM;AACf,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,YAAY,EAAE,gDAAgD;AAC/D,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,UAAU,EAAE,aAAa;AACzB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,mCAAmC;AAC1C,QAAA,OAAO,EAAE,MAAM;AAChB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,iCAAiC;AACxC,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,kBAAkB,EAAE,SAAS;AAC7B,QAAA,uBAAuB,EAAE,OAAgB;AAC1C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,OAAO;AACjB,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAChC,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,OAAO;AACvB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,iCAAiC;AACxC,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,wBAAwB;QACpC,SAAS,EAAE,MAAM;AACjB,QAAA,KAAK,EAAE,mCAAmC;AAC3C,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,mCAAmC;AAC3C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,OAAgB;AAC3B,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,mCAAmC;AAC1C,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACzB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACzB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,SAAS,EAAE,MAAe;AAC1B,QAAA,cAAc,EAAE,aAAa;AAC7B,QAAA,uBAAuB,EAAE,OAAgB;AAC1C,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,eAAe,EAAE,OAAO;AACxB,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,SAAS,EAAE,OAAgB;AAC3B,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,mCAAmC;AAC1C,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,UAAU,EAAE,QAAiB;AAC7B,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,YAAY,EAAE,UAAU;AACzB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,mCAAmC;AAC3C,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,aAAa,EAAE,+CAA+C;AAC9D,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,eAAe,EAAE,iCAAiC;AAClD,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,MAAM,EAAE,SAAS;AAClB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,KAAK,EAAE,wCAAwC;AAChD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,cAAc,EAAE,iCAAiC;AACjD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,mCAAmC;AAC/C,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,aAAa;AACrB,QAAA,KAAK,EAAE,uCAAuC;AAC/C,KAAA;AACF,CAAA,CAAC;AAEF;AACA;AACA;AAEA,MAAM,UAAU,GAAG,OACjB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAA;IACxE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAA,CAAE;AAC/B,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,mBAAmB,EAAA,CAAE,CACzB,CACP;AAED,MAAM,SAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAA;IACxE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAA,CAAE;AAChC,IAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,kBAAkB,EAAA,CAAE,CACjC,CACP;AAED,MAAM,YAAY,GAAG,OACnB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAA;IACxE,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,8BAA8B,EAAA,CAAE;AACjD,IAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,iBAAiB,EAAA,CAAE,CAChC,CACP;AAED,MAAM,WAAW,GAAG,OAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AAC/F,IAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,gBAAgB,EAAA,CAAE,CAC/B,CACP;AAED,MAAM,WAAW,GAAG,OAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AAC/F,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,6BAA6B,EAAA,CAAE,CACnC,CACP;AAuBM,MAAM,mBAAmB,GAAG,UAAU,CAC3C,SAAS,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAA;AACrC,IAAA,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,EAAE,EAChB,QAAQ,GAAG,EAAE,EACb,cAAc,GAAG,EAAE,EACnB,gBAAgB,GAAG,EAAE,EACrB,gBAAgB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EACrC,aAAa,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC5C,cAAc,GAAG,EAAE,EACnB,KAAK,GAAG,EAAE,EACV,eAAe,GAAG,IAAI,EACtB,UAAU,GAAG,IAAI,EACjB,UAAU,GAAG,QAAQ,EACrB,cAAc,GAAG,IAAI,EACrB,cAAc,GAAG,IAAI,EACrB,gBAAgB,GAAG,QAAQ,EAC3B,gBAAgB,GAAG,IAAI,EACvB,KAAK,GAAG,MAAM,EACd,SAAS,GAAG,MAAM,EAClB,MAAM,GAAG,IAAI,EACb,SAAS,EACT,KAAK,EACL,UAAU,GAAG,EAAE,EACf,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,MAAM,EACN,MAAM,EACN,aAAa,EACb,WAAW,GACZ,GAAG,KAAK;;AAGT,IAAA,yBAAyB,EAAE;AAE3B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAMA,cAAY,EAAE,EAAE,EAAE,CAAC;AAChD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;;AAG5B,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MACnC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAC5D,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC;AAED,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EACnD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1B;AAED,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAC5B,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACxE,CAAC,cAAc,CAAC,CACjB;AAED,IAAA,MAAM,eAAe,GAAG,OAAO,CAAC,MAC7B,gBAA0B,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACrF,CAAC,gBAAgB,CAAC,CACnB;;;AAID,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,KAAK,GAAuC,EAAE;QACpD,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACnE,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACvE,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9E,QAAA,OAAO,KAAK;IACd,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC;AAE1D,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACxC,QAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,IAAI,QAAQ,CAAC,MAAM,EAAE;;YAErD,IAAI,UAAU,CAAC,IAAI,EAAE;AAAE,gBAAA,cAAc,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAC1D;QACF;AACA,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACtD,YAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;YACrC,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QACnD;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;;AAG1F,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,KAAK,EAAE,MAAM,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;AACvC,QAAA,KAAK,EAAE,MAAM,OAAO,IAAI;AACzB,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;;IAGnF,SAAS,CAAC,MAAK;QACb,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE;AAC5C,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,EAAA,CAAI,CAAgB;YACnG,IAAI,QAAQ,EAAE;AACZ,gBAAA,sBAAsB,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;YACxD;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;;AAGjB,IAAA,MAAM,eAAe,GAAG,CAAC,CAAmB,KAAI;AAC9C,QAAA,IAAI,CAAC,cAAc;YAAE;QACrB,aAAa,CAAC,IAAI,CAAC;QACnB,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AAC3C,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,CAAC,CAAmB,KAAI;AACzC,QAAA,IAAI,CAAC,UAAU;YAAE;AACjB,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO;AACxD,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,QAAQ,CAAC,MAAM,CAAC;QAClB;AACF,IAAA,CAAC;IAED,MAAM,aAAa,GAAG,MAAK;AACzB,QAAA,IAAI,CAAC,UAAU;YAAE;QACjB,aAAa,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,KAAK,GAAG,GAAG,EAAE;YACf,OAAO,IAAI;QACb;QACA,QAAQ,CAAC,CAAC,CAAC;AACb,IAAA,CAAC;;IAGD,SAAS,CAAC,MAAK;QACb,aAAa,CAAC,KAAK,CAAC;AACtB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,YAAY,GAAGF,sBAAoB,CAAC,KAAK,CAAC;IAChD,MAAM,UAAU,GAAG,CAAC,UAAU,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;IAC1D,MAAM,YAAY,GAAG,CAAC,UAAU,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;AAC9D,IAAA,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC;AAEjD,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AAEE,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;gBACL,GAAG,MAAM,CAAC,OAAO;AACjB,gBAAA,OAAO,EAAE,UAAU,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;aAC5C,EACD,OAAO,EAAE,OAAO,EAAA,CAChB;QAGF,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EACjE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX;gBACE,SAAS;gBACT,MAAM;gBACN,SAAS,EAAE,UAAU,GAAG,CAAA,WAAA,EAAc,KAAK,CAAA,GAAA,CAAK,GAAG,eAAe;AACnE,aAAA,EACD,YAAmB,EACnB,KAAK,CACN,EACD,YAAY,EAAE,eAAe,EAC7B,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,aAAa,EAAA;YAEzB,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;WAIP,CAAS;AAGT,YAAA,cAAc,KACb,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AAC3B,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,CAAI,CAC1B,CACP;AAGA,YAAA,CAAC,eAAe,IAAI,MAAM,MACzB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,MAAM,IACtB,MAAM,KACL,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA;AAChE,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,eAAe,EAAA;AAChC,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;wBAC3B,KAAA,CAAA,aAAA,CAAC,UAAU,OAAG,CACV;AACN,oBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,QAAe,EACpB,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,WAAW,EACvB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9C,SAAS,EAAE,CAAC,CAAC,KAAI;AACf,4BAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;gCACrB,CAAC,CAAC,cAAc,EAAE;AAClB,gCAAA,IAAI,WAAW,IAAI,CAAC,EAAE;AACpB,oCAAA,YAAY,EAAE;gCAChB;AAAO,qCAAA,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE;AAC5B,oCAAA,cAAc,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;gCACrC;4BACF;AAAO,iCAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;gCAChC,CAAC,CAAC,cAAc,EAAE;AAClB,gCAAA,YAAY,EAAE;4BAChB;AAAO,iCAAA,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;gCAC9B,CAAC,CAAC,cAAc,EAAE;AAClB,gCAAA,gBAAgB,EAAE;4BACpB;AAAO,iCAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;gCAC7B,OAAO,IAAI;4BACb;wBACF,CAAC,EACD,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,SAAS,EAAA,IAAA,EAAA,CACT,CACE;AACL,gBAAA,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,IAC9C,UAAU,CACJ,CACV,CACG,CACP,CACG,CACP;YAGD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,EACvB,OAAO,IACN,aAAa,GAAG,aAAa,EAAE,IAC7B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,CAAI,CAC1B,CACP,KAED,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AAEG,gBAAA,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAA,QAAA,CAAe;wBAC/C,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAA,EAAA,OAAA,CAEhD,CACL;oBACL,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MACxB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,OAAA,EAAU,CAAC,EAAE,EAAA,YAAA,EACN,GAAG,EACf,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,WAAW,KAAK,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CACpD,EACD,OAAO,EAAE,MAAK;AACZ,4BAAA,aAAa,GAAG,CAAC,CAAC;4BAClB,aAAa,CAAC,CAAC,CAAC;wBAClB,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,GAAG,CAAC,EAAA;AAEvC,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA;4BACzB,KAAA,CAAA,aAAA,CAAC,SAAS,OAAG,CACT;AACN,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;4BAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA,EAAG,CAAC,CAAO,CACnC;AACN,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AAC3B,4BAAA,KAAA,CAAA,aAAA,CAAC,WAAW,EAAA,IAAA,CAAG,CACX,CACF,CACP,CAAC,CACE,CACP;AAGA,gBAAA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,eAAiB,CAC7C;oBACL,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AAC9B,wBAAA,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,GAAG,GAAG;AAC5C,wBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE,EAAA,YAAA,EACR,SAAS,EACrB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,WAAW,KAAK,SAAS,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CAC1D,EACD,OAAO,EAAE,MAAK;AACZ,gCAAA,aAAa,GAAG,CAAC,CAAC;gCAClB,aAAa,CAAC,CAAC,CAAC;4BAClB,CAAC,EACD,YAAY,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,EAAA;AAE7C,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA;gCACzB,KAAA,CAAA,aAAA,CAAC,YAAY,OAAG,CACZ;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;gCAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA,EAAG,CAAC,CAAO,CACnC;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AAC3B,gCAAA,KAAA,CAAA,aAAA,CAAC,WAAW,EAAA,IAAA,CAAG,CACX,CACF;oBAEV,CAAC,CAAC,CACE,CACP;AAGA,gBAAA,UAAU,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,KAC5C,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,kBAAoB,CAChD;oBACL,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;wBACnC,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,GAAG,GAAG;wBACrE,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,EAAA,YAAA,EACJ,SAAS,EACrB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,WAAW,KAAK,SAAS,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CAC1D,EACD,OAAO,EAAE,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAChD,YAAY,EAAE,MAAM,cAAc,CAAC,SAAS,CAAC,EAAA;AAE7C,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA;gCACzB,KAAA,CAAA,aAAA,CAAC,UAAU,OAAG,CACV;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;AAC5B,gCAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,uBAAuB,EAAE;AACvB,wCAAA,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;qCAC7D,EAAA,CACD;gCACD,CAAC,CAAC,KAAK,KACN,6BAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA;AAC5B,oCAAA,CAAC,CAAC,KAAK;AACJ,oCAAA,UAAA,CAAA,CACP,CACG;AACN,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AAC3B,gCAAA,KAAA,CAAA,aAAA,CAAC,WAAW,EAAA,IAAA,CAAG,CACX,CACF;oBAEV,CAAC,CAAC,CACE,CACP;AAGA,gBAAA,YAAY,KACX,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA;AACxB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,aAAa,EAAA;AAC9B,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,YAAY,eAAiB,CAC7C;oBACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA,EAC9B,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MACxC,6BACE,GAAG,EAAE,CAAC,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,OAAO,EAAE,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAA;AAE3C,wBAAA,CAAC,CAAC,KAAK,IACN,6BACE,GAAG,EAAE,CAAC,CAAC,KAAK,EACZ,GAAG,EAAE,CAAC,CAAC,KAAK,EACZ,KAAK,EAAE,MAAM,CAAC,YAAY,EAC1B,OAAO,EAAC,MAAM,GACd,KAEF,6BAAK,KAAK,EAAE,MAAM,CAAC,YAAY,GAAI,CACpC;wBACD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAG,CAAC,CAAC,KAAK,CAAO;AAC/C,wBAAA,CAAC,CAAC,KAAK,KAAK,SAAS,KACpB,6BAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAC5B,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE;4BACpB,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI;AACpD,yBAAA,CAAC,CACE,CACP,CACG,CACP,CAAC,CACE,CACF,CACP;AAGA,gBAAA,UAAU,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,KAC1D,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,IACnC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA;AACtB,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA;wBAC1B,KAAA,CAAA,aAAA,CAAC,UAAU,OAAG,CACV;AACN,oBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;;wBAAoB,UAAU;AAAM,wBAAA,IAAA,CAAA,CAChC,CACP,CACF,CACA,CACJ,CACG;YAGL,MAAM,KAAK,SAAS,GAAG,MAAM,IAC5B,gBAAgB,IAAI,UAAU,KAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA;AACvB,gBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,OAAO,EAAE,MAAM,cAAc,GAAG,UAAU,CAAC,EAAA;oBAE1C,gBAAgB;;oBAAI,UAAU;AACxB,oBAAA,IAAA,CAAA,CACL,CACP,CACF,CACG,CACL;AAEP,CAAC;;AC1wBH;;;;;;;;AAQG;AAyBH;AACA;AACA;AAEA,MAAME,cAAY,GAAG,OAAO;AAC1B,IAAA,IAAI,EAAE;AACJ,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,MAAM,EAAE,gDAAgD;AACxD,QAAA,UAAU,EAAE,gEAAgE;AAC5E,QAAA,QAAQ,EAAE,gCAAgC;AAC1C,QAAA,aAAa,EAAE,SAAS;AACzB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,sDAAsD;AAClE,QAAA,YAAY,EAAE,gDAAgD;AAC9D,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,KAAK,EAAE,mCAAmC;AAC3C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,YAAY,EAAE,MAAM;AACrB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,mCAAmC;AAC1C,QAAA,WAAW,EAAE,MAAM;AACpB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,oCAAoC;AAC3C,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,mCAAmC;AAC3C,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,qCAAqC;AAC5C,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,UAAU,EAAE,GAAG;AAChB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,oCAAoC;AAC3C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,OAAO;AACtB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,eAAe,EAAE,sCAAsC;AACxD,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,UAAU,EAAE,6BAA6B;AACzC,QAAA,YAAY,EAAE,gDAAgD;AAC9D,QAAA,GAAG,EAAE,MAAM;AACX,QAAA,KAAK,EAAE,mCAAmC;AAC3C,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA,eAAe,EAAE,kCAAkC;AACnD,QAAA,KAAK,EAAE,mCAAmC;AAC3C,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,SAAS,EAAE,OAAgB;AAC3B,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,mCAAmC;AAC1C,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,qCAAqC;AAC7C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,KAAK,EAAE,oCAAoC;AAC3C,QAAA,aAAa,EAAE,WAAoB;AACnC,QAAA,aAAa,EAAE,QAAQ;AACvB,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,YAAY,EAAE,gDAAgD;AAC/D,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,eAAe;AAC/B,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,oCAAoC;AAC3C,QAAA,SAAS,EAAE,gDAAgD;AAC5D,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,GAAG,EAAE,MAAM;AACZ,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,MAAM,EAAE,6CAA6C;AACrD,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,WAAW;AACxB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,qCAAqC;AAC5C,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,SAAS,EAAE,QAAiB;AAC5B,QAAA,KAAK,EAAE,qCAAqC;AAC5C,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,eAAe,EAAE,sCAAsC;AACvD,QAAA,OAAO,EAAE,OAAO;AACjB,KAAA;AACF,CAAA,CAAC;AAiBK,MAAM,eAAe,GAAG,UAAU,CACvC,SAAS,eAAe,CAAC,KAAK,EAAE,GAAG,EAAA;IACjC,MAAM,EACJ,KAAK,EACL,MAAM,GAAG,IAAI,EACb,OAAO,GAAG,KAAK,EACf,WAAW,GAAG,EAAE,EAChB,QAAQ,GAAG,EAAE,EACb,cAAc,GAAG,EAAE,EACnB,gBAAgB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EACrC,aAAa,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAC5C,cAAc,GAAG,EAAE,EACnB,KAAK,GAAG,EAAE,EACV,WAAW,GAAG,KAAK,EACnB,cAAc,GAAG,KAAK,EACtB,mBAAmB,GAAG,IAAI,EAC1B,KAAK,GAAG,MAAM,EACd,SAAS,GAAG,OAAO,EACnB,MAAM,GAAG,IAAI,EACb,SAAS,EACT,KAAK,EACL,UAAU,GAAG,EAAE,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,MAAM,EACN,MAAM,EACN,aAAa,EACb,WAAW,GACZ,GAAG,KAAK;;AAGT,IAAA,yBAAyB,EAAE;;AAG3B,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE;AAClC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU;AAE/B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAMA,cAAY,EAAE,EAAE,EAAE,CAAC;AAChD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;AACjD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC;IAC5C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;;AAGlD,IAAA,MAAM,oBAAoB,GAAG,OAAO,CAAC,MACnC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAC5D,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC;AAED,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EACnD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1B;AAED,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAC5B,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACxE,CAAC,cAAc,CAAC,CACjB;;AAGD,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,KAAK,GAAuC,EAAE;QAEpD,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACtC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACrE;QAEA,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAExE,QAAA,OAAO,KAAK;IACd,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;;AAGnE,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjE,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErB,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;AACxC,QAAA,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;AACpC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,KAAK;AAAE,gBAAA,cAAc,GAAG,KAAK,CAAC;YAClC;QACF;AAEA,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1B;AACF,YAAA,KAAK,YAAY;gBACf,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;gBACjD;AACF,YAAA,KAAK,SAAS;gBACZ,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;gBAC7C;;AAEN,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;;AAGrG,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;AAC9B,QAAA,cAAc,EAAE,MAAM,WAAW;QACjC,cAAc;QACd,YAAY;QACZ,YAAY;QACZ,gBAAgB;QAChB,KAAK,EAAE,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE;AAC1C,QAAA,KAAK,EAAE,MAAM,OAAO,IAAI;AACzB,KAAA,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;;IAGzE,SAAS,CAAC,MAAK;QACb,IAAI,OAAO,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC,EAAE;AACvC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA,aAAA,EAAgB,WAAW,CAAA,EAAA,CAAI,CAAgB;YAC9F,IAAI,QAAQ,EAAE;AACZ,gBAAA,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC;YACnD;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;;IAGjB,SAAS,CAAC,MAAK;AACb,QAAA,cAAc,CAAC,EAAE,CAAC;AACpB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;AAExB,IAAA,MAAM,YAAY,GAAGF,sBAAoB,CAAC,KAAK,CAAC;IAChD,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;IAErD,IAAI,WAAW,GAAG,CAAC;IAEnB,QACE,6BACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,SAAS,EAAA,YAAA,EACH,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,EACrE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,EAAE,KAAK,EAAE,MAAM,EAAE,EACjB,YAAmB,EACnB,KAAK,CACN,EACD,QAAQ,EAAE,EAAE,EAAA;QAEZ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ;;;;;SAKP,CAAS;QAET,MAAM;AAEP,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,EAAA,EACvD,OAAO,IACN,aAAa,GAAG,aAAa,EAAE,IAC7B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,EAAA,YAAA,CAAkB,CAC7C,IACC,QAAQ,CAAC,MAAM,KAAK,CAAC,IACvB,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,IAC9B,6BAAK,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA,EACrB,KAAK,GAAG,mBAAmB,KAAK,CAAA,CAAA,CAAG,GAAG,wBAAwB,CAC3D,CACP,KAED,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AAEG,YAAA,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;gBACG,mBAAmB,KAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,EAAA,QAAA,CAAc,CACzC;gBACA,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AAC5B,oBAAA,MAAM,OAAO,GAAG,WAAW,EAAE;AAC7B,oBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,OAAO;AACxC,oBAAA,MAAM,MAAM,GAAG,GAAG,KAAK,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAE5G,oBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAA,OAAA,EAAU,CAAC,CAAA,CAAE,EAAA,YAAA,EACN,OAAO,EACnB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,EACxC,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,SAAS,CACrC,EACD,OAAO,EAAE,MAAM,aAAa,GAAG,CAAC,CAAC,EACjC,YAAY,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC,EAAA;AAE1C,wBAAA,WAAW,KACV,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA,EAAG,OAAO,GAAG,CAAC,CAAQ,CACpD;AACD,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;4BAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA,EAAG,CAAC,CAAO,CACnC;AACL,wBAAA,cAAc,KACb,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA,EAAA,QAAA,CAAe,CAC5C,CACG;gBAEV,CAAC,CAAC,CACD,CACJ;AAGA,YAAA,oBAAoB,CAAC,MAAM,GAAG,CAAC,KAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACG,gBAAA,mBAAmB,KAAK,UAAU,IAAI,KAAK,CAAC,KAC3C,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,kBAAmB,CAC9C;gBACA,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AACnC,oBAAA,MAAM,OAAO,GAAG,WAAW,EAAE;AAC7B,oBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,OAAO;AACxC,oBAAA,MAAM,MAAM,GAAG,GAAG,KAAK,oBAAoB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM;AAEnF,oBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE,EAAA,YAAA,EACpB,OAAO,EACnB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,IAAI,EACX,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,EACxC,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,SAAS,CACrC,EACD,OAAO,EAAE,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAChD,YAAY,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC,EAAA;AAE1C,wBAAA,WAAW,KACV,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,SAAS,EAAA,EAAG,OAAO,GAAG,CAAC,CAAQ,CACpD;AACD,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA;AAC5B,4BAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,MAAM,CAAC,SAAS,EACvB,uBAAuB,EAAE;AACvB,oCAAA,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;iCACtD,EAAA,CACD;4BACD,CAAC,CAAC,KAAK,KACN,6BAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA;AACxB,gCAAA,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE;AACrB,gCAAA,UAAA,CAAA,CACP,CACG;AACL,wBAAA,cAAc,KACb,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA,EAAA,QAAA,CAAe,CAC5C,CACG;gBAEV,CAAC,CAAC,CACD,CACJ;AAGA,YAAA,iBAAiB,CAAC,MAAM,GAAG,CAAC,KAC3B,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;gBACG,mBAAmB,KAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,OAAO,EAAA,EAAA,UAAA,CAAgB,CAC3C;AACA,gBAAA,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AAC5C,oBAAA,MAAM,OAAO,GAAG,WAAW,EAAE;AAC7B,oBAAA,MAAM,QAAQ,GAAG,WAAW,KAAK,OAAO;oBAExC,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAA,YAAA,EACG,OAAO,EACnB,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,UAAU,EACjB,QAAQ,GAAG,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAC/C,EACD,OAAO,EAAE,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAC5C,YAAY,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC,EAAA;wBAE1C,CAAC,CAAC,KAAK,KACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,CAAC,CAAC,KAAK,EACZ,GAAG,EAAE,CAAC,CAAC,KAAK,EACZ,KAAK,EAAE,MAAM,CAAC,YAAY,EAC1B,OAAO,EAAC,MAAM,EAAA,CACd,CACH;AACD,wBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA;4BAC/B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAAG,CAAC,CAAC,KAAK,CAAO;AAC/C,4BAAA,CAAC,CAAC,KAAK,KAAK,SAAS,KACpB,6BAAK,KAAK,EAAE,MAAM,CAAC,YAAY,EAAA,EAC5B,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE;gCACpB,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI;6BACpD,CAAC,CACE,CACP,CACG;AACL,wBAAA,cAAc,KACb,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAA,EAAA,SAAA,CAAgB,CAC7C,CACG;AAEV,gBAAA,CAAC,CAAC,CACD,CACJ,CACA,CACJ,CACG;AAGL,QAAA,MAAM,KAAK,SAAS,GAAG,MAAM,IAC5B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,MAAM,EAAA;AACvB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AAC3B,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;AAAM,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;;AAAC,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;AAAgB,oBAAA,WAAA,CAAA;AACzF,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;AAAM,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,QAAA,CAAU;AAAc,oBAAA,SAAA,CAAA;AACrD,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;AAAM,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,MAAM,CAAC,GAAG,EAAA,EAAA,KAAA,CAAY;6BAAa,CAClD;AACN,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA;AAAO,gBAAA,QAAQ,CAAC,MAAM;2BAAgB,CAClC,CACP,CACG;AAEV,CAAC;;AC7gBH;;;;;;;;;;;;;;;;;;;AAmBG;AA6CH;AACA;AACA;AAEA,SAAS,YAAY,CAAC,KAAwF,EAAA;IAC5G,IAAI,CAAC,KAAK,EAAE;QACV,OAAO;AACL,YAAA,sBAAsB,EAAE,SAAS;AACjC,YAAA,wBAAwB,EAAE,SAAS;AACnC,YAAA,uBAAuB,EAAE,SAAS;AAClC,YAAA,oBAAoB,EAAE,SAAS;AAC/B,YAAA,wBAAwB,EAAE,SAAS;AACnC,YAAA,0BAA0B,EAAE,SAAS;AACrC,YAAA,yBAAyB,EAAE,SAAS;AACpC,YAAA,wBAAwB,EAAE,SAAS;AACnC,YAAA,mBAAmB,EAAE,MAAM;AAC3B,YAAA,2BAA2B,EAAE,SAAS;AACtC,YAAA,wBAAwB,EAAE,SAAS;AACnC,YAAA,gBAAgB,EAAE,SAAS;AAC3B,YAAA,uBAAuB,EAAE,mEAAmE;SAC7F;IACH;IACA,MAAM,CAAC,GAAG,KAAY;AACtB,IAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE;IAC7B,OAAO;QACL,sBAAsB,EAAE,CAAC,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU,IAAI,SAAS;QAC3E,wBAAwB,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,SAAS;QACrE,uBAAuB,EAAE,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,IAAI,SAAS;QAClE,oBAAoB,EAAE,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,IAAI,SAAS;QAC/D,wBAAwB,EAAE,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS;QACjE,0BAA0B,EAAE,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS;AAC5E,QAAA,yBAAyB,EAAE,CAAC,CAAC,kBAAkB,IAAI,SAAS;QAC5D,wBAAwB,EAAE,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS;QACrE,mBAAmB,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM;AAC/D,QAAA,2BAA2B,EAAE,CAAC,CAAC,kBAAkB,IAAI,SAAS;AAC9D,QAAA,wBAAwB,EAAE,CAAC,CAAC,gBAAgB,IAAI,SAAS;QACzD,gBAAgB,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS;AAC/D,QAAA,uBAAuB,EAAE,CAAC,CAAC,UAAU,IAAI,mEAAmE;KAC7G;AACH;AAEA,SAAS,qBAAqB,CAAC,KAAwF,EAAA;AACrH,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,SAAS;IAC5B,MAAM,CAAC,GAAG,KAAY;AACtB,IAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE;IAC7B,OAAO;AACL,QAAA,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU;AACvD,QAAA,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI;AACrC,QAAA,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK;AAC5C,QAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM;AAC3C,QAAA,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK;AACxC,QAAA,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO;AAC9C,QAAA,kBAAkB,EAAE,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,IAAI;QACvD,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB;AACH;AAoHA;AACA;AACA;AAEA,MAAM,iBAAiB,GAA8E;AACnG,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,OAAO,EAAE,eAAe;AACxB,IAAA,cAAc,EAAE,mBAAmB;AACnC,IAAA,OAAO,EAAE,eAAe;CACzB;AAED;AACA;AACA;AAEA,MAAM,YAAY,GAAG,CAAC,QAAiB,MAAM;AAC3C,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,UAAmB;AAC7B,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,UAAU,EAAE,+FAA+F;AAC5G,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,eAAe,EAAE,oCAAoC;AACrD,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,WAAW,EAAE,OAAO;AACpB,QAAA,WAAW,EAAE,sCAAsC;QACnD,YAAY,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM;AACvC,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,sCAAsC;AAClD,QAAA,SAAS,EAAE,4BAA4B;AACxC,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,WAAW,EAAE,8BAA8B;AAC3C,QAAA,SAAS,EAAE,8DAA8D;AAC1E,KAAA;AACD,IAAA,UAAU,EAAE;QACV,OAAO,EAAE,QAAQ,GAAG,eAAe,GAAG,eAAe;AACrD,QAAA,KAAK,EAAE,wCAAwC;AAC/C,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,QAAQ,GAAG,iBAAiB,GAAG,kBAAkB;QAC1D,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM;AACpC,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,eAAe,EAAE,aAAa;AAC9B,QAAA,KAAK,EAAE,sCAAsC;AAC7C,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,QAAQ,EAAE,CAAC;AACX,QAAA,gBAAgB,EAAE,MAAe;AAClC,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,OAAO,EAAE,UAAU;AACnB,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,uCAAuC;AAC9C,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,OAAO,EAAE,MAAM;AACf,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,cAAc,EAAE,QAAQ;AACxB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,UAAU,EAAE,aAAa;AAC1B,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,WAAW,EAAE,OAAO;AACpB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,cAAc,EAAE,MAAM;AACtB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,SAAS,EAAE,mCAAmC;AAC9C,QAAA,WAAW,EAAE,MAAM;AACnB,QAAA,UAAU,EAAE,CAAC;AACd,KAAA;AACF,CAAA,CAAC;AAEF;AACA;AACA;AAEO,MAAM,mBAAmB,GAAG,UAAU,CAC3C,SAAS,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAA;IACrC,MAAM,EACJ,MAAM,EACN,OAAO,GAAG,QAAQ,EAClB,iBAAiB,GAAG,IAAI,EACxB,WAAW,GAAG,WAAW,EACzB,YAAY,GAAG,EAAE,EACjB,KAAK,EACL,cAAc,GAAG,CAAC,EAClB,cAAc,GAAG,CAAC,EAClB,UAAU,GAAG,GAAG,EAChB,8BAA8B,GAAG,IAAI,EACrC,iBAAiB,GAAG,IAAI,EACxB,YAAY,EACZ,aAAa,EACb,oBAAoB,GAAG,IAAI,EAC3B,iBAAiB,GAAG,EAAE,EACtB,YAAY,GAAG,IAAI,EACnB,mBAAmB,GAAG,IAAI,EAC1B,eAAe,GAAG,IAAI,EACtB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,WAAW,EACX,SAAS,EACT,KAAK,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,GAAG,OAAO,EAC3B,MAAM,GAAG,IAAI,EACb,WAAW,GAAG,IAAI,EAClB,UAAU,GAAG,KAAK,EAClB,YAAY,GAAG,GAAG,GACnB,GAAG,KAAK;;AAGT,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE;AACxC,IAAA,MAAM,cAAc,GAAG,KAAK,IAAI,aAAa,CAAC,KAAK;;IAGnD,MAAM,SAAS,GAAG,uBAAuB,CAAC;QACxC,MAAM;AACN,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,aAAa,EAAE,eAAe,EAAE,IAAI,IAAI,aAAa;AACrD,QAAA,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,IAAI,IAAI;AAC3D,QAAA,WAAW,EAAE,eAAe,EAAE,qBAAqB,IAAI,IAAI;AAC5D,KAAA,CAAC;;AAGF,IAAA,yBAAyB,EAAE;;IAG3B,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe;AACrC,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,CAAC;AAC9C,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YACjD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;AACpC,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;;AAGpB,IAAA,MAAM,UAAU,GAAG,aAAa,EAAE;AAClC,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU;;AAG/B,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAK;AACjC,QAAA,IAAI,iBAAiB,IAAI,QAAQ,IAAI,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,WAAW,EAAE;AAC1F,YAAA,OAAO,cAAc;QACvB;AACA,QAAA,OAAO,OAAO;IAChB,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;;IAG1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC3C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC;IACzD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC;IACnD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC;IACvD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC;IAC3C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC;IACnE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC;IAC/D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAS,KAAK,CAAC;;AAGzD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC;AAC/C,IAAA,MAAM,WAAW,GAAG,MAAM,CAAc,IAAI,CAAC;AAC7C,IAAA,MAAM,WAAW,GAAG,MAAM,CAAwB,IAAI,CAAC;AACvD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC;;AAGjD,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAK;AACzB,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AAC7B,QAAA,OAAO,mBAAmB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IACjF,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;;AAG3C,IAAA,MAAM,YAAY,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;;AAGxD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;;IAGhE,SAAS,CAAC,MAAK;QACb,IAAI,oBAAoB,EAAE;AACxB,YAAA,MAAM,SAAS,GAAG,iBAAiB,EAAE;YACrC,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAC1D;AACF,IAAA,CAAC,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;;;;IAM7C,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,WAAmB,KAAI;AACjE,QAAA,IAAI,CAAC,MAAM;YAAE;;AAEb,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,cAAc,EAAE;YACjE,cAAc,CAAC,EAAE,CAAC;YAClB,WAAW,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,EAAE,CAAC;YACX;QACF;;AAGA,QAAA,MAAM,YAAY,GAAG;YACnB,cAAc;YACd,8BAA8B;YAC9B,iBAAiB;AACjB,YAAA,YAAY,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SACzD;QACD,MAAM,QAAQ,GAAG,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC;;AAG9D,QAAA,IAAI,KAAK,IAAI,QAAQ,EAAE;YACrB,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAM,QAAQ,CAAC;YAC/C,IAAI,cAAc,EAAE;AAClB,gBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,WAAW,CAAC;gBACzD,eAAe,CAAC,cAAc,CAAC;gBAC/B;YACF;QACF;QAEA,UAAU,CAAC,IAAI,CAAC;AAEhB,QAAA,IAAI;;;YAGF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,GAAG,WAAW,EAAE;AAC1D,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,gCAAgC,EAAE,8BAA8B;AAChE,gBAAA,kBAAkB,EAAE,iBAAiB;AACrC,gBAAA,aAAa,EAAE,YAAY;AAC3B,gBAAA,cAAc,EAAE,aAAa;gBAC7B,kBAAkB,EAAE,IAAI;AACzB,aAAA,CAAC;;AAGF,YAAA,IAAI,KAAK,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACjC,gBAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,WAAW,CAAC;YACjE;;YAGA,eAAe,CAAC,QAAQ,CAAC;;AAGzB,YAAA,IAAI,eAAe,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAC3D,MAAM,IAAI,GAAG,QAAe;gBAC5B,SAAS,CAAC,eAAe,CAAC;AACxB,oBAAA,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM;wBACrD,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE;AAC9B,wBAAA,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE;wBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;AACzB,qBAAA,CAAC,CAAC;AACH,oBAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,iBAAiB,IAAI,IAAI,CAAC,UAAU,EAAE,oBAAoB,IAAI,EAAE;AAC3F,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,IAAI,EAAE;AACrD,oBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,IAAI,EAAE;AAC7C,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,iBAAA,CAAC;YACJ;QAEF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC;YAC5D,cAAc,CAAC,EAAE,CAAC;YAClB,WAAW,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,EAAE,CAAC;QACb;gBAAU;YACR,UAAU,CAAC,KAAK,CAAC;QACnB;IACF,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;;AAG/J,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,QAAa,KAAI;;QAEpD,IAAI,IAAI,GAAU,EAAE;QACpB,IAAI,UAAU,GAAQ,EAAE;AAExB,QAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE;AAC7C,YAAA,cAAc,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW;AACvC,YAAA,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO;AAC/B,YAAA,aAAa,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU;AACrC,YAAA,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI;AAC1B,SAAA,CAAC;;QAGF,IAAI,QAAQ,EAAE,WAAW,IAAI,QAAQ,EAAE,UAAU,EAAE;AACjD,YAAA,IAAI,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE;AACjC,YAAA,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE;QACxC;;AAEK,aAAA,IAAI,QAAQ,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;YACzC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE;;YAEhD,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE;QAC7D;;AAEK,aAAA,IAAI,QAAQ,EAAE,IAAI,EAAE;YACvB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;AAC/B,YAAA,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE;QACvF;;AAEK,aAAA,IAAI,QAAQ,EAAE,IAAI,EAAE;AACvB,YAAA,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE;YAC1B,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,wBAAwB,IAAI,EAAE;QAC7E;;AAEK,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAChC,IAAI,GAAG,QAAQ;QACjB;;QAGA,cAAc,CAAC,IAAI,CAAC;;AAGpB,QAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,aAAa,IAAI,EAAE;QACvD,OAAO,CAAC,gBAAgB,CAAC;;AAGzB,QAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC/D,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3C;aAAO;YACL,WAAW,CAAC,UAAU,CAAC,iBAAiB,IAAI,UAAU,CAAC,oBAAoB,IAAI,EAAE,CAAC;QACpF;;AAGA,QAAA,aAAa,CAAC,UAAU,CAAC,kBAAkB,IAAI,EAAE,CAAC;;QAGlD,mBAAmB,CAAC,UAAU,CAAC,iBAAiB,IAAI,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;AAElF,QAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE;YACtC,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,IAAI,EAAE,gBAAgB,CAAC,MAAM;YAC7B,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACpD,YAAA,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AACvC,SAAA,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC;;;;AAMN,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,CAAsC,KAAI;AAC/E,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;AAE/B,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,QAAQ,CAAC,QAAQ,CAAC;QACpB;AAEA,QAAA,aAAa,GAAG,QAAQ,CAAC;QACzB,YAAY,CAAC,KAAK,CAAC;;AAGnB,QAAA,IAAI,WAAW,CAAC,OAAO,EAAE;AACvB,YAAA,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;QACnC;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,cAAc,EAAE;YACrC,SAAS,CAAC,IAAI,CAAC;AACf,YAAA,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,MAAK;gBACpC,gBAAgB,CAAC,QAAQ,CAAC;YAC5B,CAAC,EAAE,UAAU,CAAC;QAChB;AAAO,aAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,KAAK,oBAAoB,IAAI,mBAAmB,CAAC,EAAE;YACjF,SAAS,CAAC,IAAI,CAAC;YACf,cAAc,CAAC,EAAE,CAAC;QACpB;aAAO;YACL,SAAS,CAAC,KAAK,CAAC;QAClB;AACF,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;AAEnH,IAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAK;QACxC,YAAY,CAAC,IAAI,CAAC;QAClB,SAAS,CAAC,IAAI,CAAC;;QAGf,IAAI,eAAe,EAAE;AACnB,YAAA,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC;QAC3C;;AAGA,QAAA,IAAI,YAAY,CAAC,MAAM,IAAI,cAAc,EAAE;AACzC,YAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,gBAAgB,CAAC,YAAY,CAAC;QAC9D;aAAO;YACL,gBAAgB,CAAC,EAAE,CAAC;QACtB;AACF,IAAA,CAAC,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;AAEpG,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,MAAK;QACvC,YAAY,CAAC,KAAK,CAAC;;QAEnB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBAC3D,SAAS,CAAC,KAAK,CAAC;YAClB;QACF,CAAC,EAAE,GAAG,CAAC;IACT,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAsB,KAAI;AAC3D,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YACtB,SAAS,CAAC,KAAK,CAAC;AAChB,YAAA,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE;QAC1B;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YAC5B,CAAC,CAAC,cAAc,EAAE;;AAElB,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,cAAc,IAAI,IAAI,EAAE;AACjE,YAAA,IAAI,WAAW,IAAI,CAAC,IAAI,MAAM,EAAE;;AAE9B,gBAAA,WAAW,CAAC,OAAO,EAAE,YAAY,IAAI;YACvC;AAAO,iBAAA,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE;;AAE9B,gBAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;gBAC/B,IAAI,oBAAoB,EAAE;AACxB,oBAAA,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;oBACpC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBACpE;;gBAEA,IAAI,eAAe,EAAE;oBACnB,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;gBACzD;gBACA,SAAS,CAAC,KAAK,CAAC;YAClB;QACF;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YACvD,CAAC,CAAC,cAAc,EAAE;;AAElB,YAAA,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;gBACpE,SAAS,CAAC,IAAI,CAAC;YACjB;AACA,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;AACzB,gBAAA,WAAW,CAAC,OAAO,EAAE,YAAY,IAAI;YACvC;iBAAO;AACL,gBAAA,WAAW,CAAC,OAAO,EAAE,gBAAgB,IAAI;YAC3C;QACF;IACF,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAEpJ,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,UAAe,EAAE,KAAa,KAAI;AAC5E,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,IAAI,EAAE;AAE7E,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,QAAQ,CAAC,IAAI,CAAC;QAChB;AAEA,QAAA,aAAa,GAAG,IAAI,CAAC;AACrB,QAAA,kBAAkB,GAAG,UAAU,EAAE,KAAK,CAAC;AAEvC,QAAA,IAAI,oBAAoB,IAAI,IAAI,EAAE;YAChC,eAAe,CAAC,IAAI,CAAC;YACrB,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACpE;;QAGA,IAAI,eAAe,EAAE;YACnB,SAAS,CAAC,oBAAoB,CAAC;AAC7B,gBAAA,UAAU,EAAE;AACV,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,EAAE;oBAC9C,UAAU,EAAE,UAAU,CAAC,UAAU;AAClC,iBAAA;AACD,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,KAAK,EAAE,YAAY;gBACnB,gBAAgB,EAAE,WAAW,CAAC,MAAM;AACrC,aAAA,CAAC;YACF,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC;QACrD;AAEA,QAAA,QAAQ,GAAG,IAAI,CAAC;QAChB,SAAS,CAAC,KAAK,CAAC;IAClB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAE/J,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,OAAY,EAAE,KAAa,KAAI;AACrE,QAAA,cAAc,GAAG,OAAO,EAAE,KAAK,CAAC;;QAGhC,IAAI,eAAe,EAAE;YACnB,SAAS,CAAC,iBAAiB,CAAC;AAC1B,gBAAA,OAAO,EAAE;AACP,oBAAA,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,QAAQ;AAClC,oBAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,EAAE;AACxC,oBAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI;oBACpC,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;AACrB,iBAAA;AACD,gBAAA,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,SAAS,KAAK,KAAK,GAAG,cAAc,GAAG,UAAU;gBAC1D,KAAK,EAAE,SAAS,KAAK,KAAK,GAAG,SAAS,GAAG,SAAS;AAClD,gBAAA,KAAK,EAAE,YAAY;AACpB,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAEzE,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,QAAa,EAAE,KAAa,KAAI;AACvE,QAAA,eAAe,GAAG,QAAQ,EAAE,KAAK,CAAC;;QAGlC,IAAI,eAAe,EAAE;YACnB,SAAS,CAAC,kBAAkB,CAAC;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,EAAE;gBACtD,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,EAAE,YAAY,CAAC;QAClB;IACF,CAAC,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAE/D,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,KAAa,KAAI;AACpD,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC;QAC7C,YAAY,CAAC,KAAK,CAAC;AACnB,QAAA,WAAW,GAAG,KAAK,CAAC;;QAGpB,IAAI,eAAe,EAAE;AACnB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC;YAC1C,IAAI,GAAG,EAAE;gBACP,SAAS,CAAC,cAAc,CAAC;oBACvB,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,EAAE,YAAY,CAAC;YAClB;QACF;AACF,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAEjE,IAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,IAAY,KAAI;AACrD,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,QAAQ,CAAC,IAAI,CAAC;QAChB;AACA,QAAA,aAAa,GAAG,IAAI,CAAC;QACrB,gBAAgB,CAAC,IAAI,CAAC;;QAGtB,IAAI,eAAe,EAAE;YACnB,SAAS,CAAC,sBAAsB,CAAC;AAC/B,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;AAExE,IAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,IAAY,KAAI;QACtD,kBAAkB,CAAC,IAAI,CAAC;QACxB,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AACpE,IAAA,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAEvB,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;AACnC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,QAAQ,CAAC,EAAE,CAAC;QACd;AACA,QAAA,aAAa,GAAG,EAAE,CAAC;QACnB,cAAc,CAAC,EAAE,CAAC;QAClB,WAAW,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,EAAE,CAAC;AACX,QAAA,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;AAC3B,IAAA,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAE1B,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAK;QACnC,SAAS,CAAC,KAAK,CAAC;;QAEhB,IAAI,eAAe,EAAE;AACnB,YAAA,SAAS,CAAC,kBAAkB,CAAC,YAAY,CAAC;QAC5C;IACF,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;;;;AAM9C,IAAA,mBAAmB,CAAC,GAAG,EAAE,OAAO;QAC9B,KAAK,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;QACtC,IAAI,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE;AACpC,QAAA,KAAK,EAAE,WAAW;AAClB,QAAA,QAAQ,EAAE,MAAM,YAAY;AAC5B,QAAA,QAAQ,EAAE,CAAC,CAAC,KAAI;AACd,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,QAAQ,CAAC,CAAC,CAAC;YACb;AACA,YAAA,aAAa,GAAG,CAAC,CAAC;QACpB,CAAC;AACD,QAAA,YAAY,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC;AACnC,QAAA,aAAa,EAAE,MAAM,SAAS,CAAC,KAAK,CAAC;AACrC,QAAA,OAAO,EAAE,MAAM,gBAAgB,CAAC,YAAY,CAAC;AAC7C,QAAA,UAAU,EAAE,MAAM,KAAK,EAAE,KAAK,EAAE;QAChC,aAAa,EAAE,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI;AAC/C,KAAA,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;;;;IAM/E,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,aAAa,CAAC,IAAI,cAAc;;AAG5E,IAAA,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAK;AACtC,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAE1F,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,QAAQ,CAAC;QAClB;AAEA,QAAA,IAAI,SAAS,KAAK,KAAK,EAAE;;YAEvB,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE;AAChD,YAAA,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,GAAG,QAAQ;QAClE;;AAGA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC;AAC9C,QAAA,IAAI,GAAG,EAAE,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,CAAC;YACjF,OAAO,GAAG,CAAC,QAAQ;QACrB;;AAGA,QAAA,OAAO,QAAQ;IACjB,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE/B,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,EACrD,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAAA;AAG3C,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE,WAAW,CAChB,MAAM,CAAC,YAAY,EACnB,SAAS,GAAG,MAAM,CAAC,mBAAmB,GAAG,SAAS,CACnD,EAAA;AAED,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,UAAU,EAAA;AAC3B,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAA;AACjE,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAC,SAAS,EAAC,CAAC,EAAC,kHAAkH,EAAC,QAAQ,EAAC,SAAS,EAAA,CAAE,CAC9J,CACF;AAEN,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,YAAY,EAAC,KAAK,EAClB,WAAW,EAAC,KAAK,EACjB,cAAc,EAAC,KAAK,EACpB,UAAU,EAAE,KAAK,EAAA,YAAA,EACN,QAAQ,EAAA,eAAA,EACJ,MAAM,EAAA,eAAA,EACP,SAAS,EAAA,CACvB;AAED,YAAA,OAAO,IAAI,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,MAAM,CAAC,cAAc,EAAA,CAAI;YAEhD,YAAY,IAAI,CAAC,OAAO,KACvB,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,CAAC,WAAW,EAAA,YAAA,EACd,cAAc,EAAA,EAAA,QAAA,CAGlB,CACV,CACG;AAGL,QAAA,MAAM,KACL,KAAA,CAAA,aAAA,CAAC,iBAAiB,EAAA,EAChB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAC3E,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAC5E,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,IAAI,EAClB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,qBAAqB,CAAC,cAAc,CAAC,IAAK,cAAsC,EACvF,KAAK,EAAE,aAAa,IAAI,MAAM,EAC9B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE;AACT,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,IAAI,IAAI;AACrE,gBAAA,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,IAAI,IAAI;AAC/D,gBAAA,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,IAAI,IAAI;AAC3D,gBAAA,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,IAAI,IAAI;AACjE,gBAAA,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,IAAI,IAAI;AAC3D,gBAAA,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,IAAI,IAAI;AAC7D,gBAAA,IAAI,EAAE,eAAe,EAAE,IAAI,IAAI,aAAa;AAC7C,aAAA,EACD,kBAAkB,EAAE,sBAAsB,EAC1C,cAAc,EAAE,kBAAkB,EAClC,eAAe,EAAE,mBAAmB,EACpC,WAAW,EAAE,eAAe,EAC5B,aAAa,EAAE,iBAAiB,EAChC,cAAc,EAAE,kBAAkB,EAClC,OAAO,EAAE,WAAW,EAAA,CACpB,CACH,CACG;AAEV,CAAC;;AC38BH;;;;;AAKG;AAEH;AACA;AACA;AA6EO,MAAM,0BAA0B,GAAG;AACxC,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,MAAM,EAAE,cAAc;AACtB,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,OAAO,EAAE,eAAe;AACxB,IAAA,cAAc,EAAE,mBAAmB;AACnC,IAAA,OAAO,EAAE,eAAe;;;AC7F1B;;;;AAIG;AAoBI,MAAM,gBAAgB,GAAG,CAAC,EAC/B,MAAM,EACN,SAAS,GAAG,IAAI,GACQ,KAA4B;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC;IACtD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC;IAElE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,OAAsB,KAAI;QAC1D,UAAU,CAAC,IAAI,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;AAEd,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE;QAC7B,GAAG,CAAC,OAAO,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAEpE,QAAA,IAAI;YACF,MAAM,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO;AACrC,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE;YAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;AAExD,YAAA,GAAG,CAAC,IAAI,CAAC,oCAAoC,EAAE;gBAC7C,KAAK;gBACL,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;AAC5E,gBAAA,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO;AAChC,aAAA,CAAC;YAEF,UAAU,CAAC,QAAQ,CAAC;;AAGpB,YAAA,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAE;AAC5B,gBAAA,UAAU,CAAC,QAAQ,CAAC,OAAwB,CAAC;YAC/C;AAEA,YAAA,OAAO,QAAQ;QACjB;QAAE,OAAO,GAAG,EAAE;YACZ,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjE,YAAA,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE;gBAC3C,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;AACnB,aAAA,CAAC;YACF,QAAQ,CAAC,KAAK,CAAC;YACf,UAAU,CAAC,IAAI,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC;AAChB,YAAA,OAAO,IAAI;QACb;gBAAU;YACR,UAAU,CAAC,KAAK,CAAC;QACnB;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEZ,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACpC,UAAU,CAAC,IAAI,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC;QACd,UAAU,CAAC,IAAI,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;QACL,MAAM;QACN,OAAO;QACP,OAAO;QACP,KAAK;QACL,OAAO;QACP,YAAY;KACb;AACH;;ACzFA;;;;AAIG;AAkBI,MAAM,YAAY,GAAG,CAAC,EAC3B,MAAM,EACN,OAAO,GAAG,IAAI,GACM,KAAwB;AAC5C,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,OAC7B,SAAiB,EACjB,OAAuC,EACvC,OAAgD,KAC9C;AACF,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAmC;AACnD,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,GAAG,OAAO;aACX;YAED,MAAM,MAAM,CAAC,UAAU,GAAG,YAAY,EAAE,OAAO,CAAC;QAClD;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC;QAC1C;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErB,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,OAC7B,QAAgB,EAChB,MAAW,EACX,OAAgD,EAChD,QAAiB,KACf;AACF,QAAA,IAAI,CAAC,OAAO;YAAE;QAEd,MAAM,UAAU,CAAC,eAAe,EAAE;AAChC,YAAA,eAAe,EAAE,QAAQ;AACzB,YAAA,QAAQ,EAAE;AACR,gBAAA,MAAM,EAAE,MAAM;gBACd,IAAI,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5C,aAAA;SACF,EAAE,OAAO,CAAC;AACb,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAEzB,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,OAClC,QAAgB,EAChB,MAAW,EACX,KAAc,EACd,QAAiB,EACjB,OAAgD,KAC9C;AACF,QAAA,IAAI,CAAC,OAAO;YAAE;QAEd,MAAM,UAAU,CAAC,YAAY,EAAE;AAC7B,YAAA,eAAe,EAAE,QAAQ;AACzB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE;AACR,gBAAA,MAAM,EAAE,MAAM;AACf,aAAA;SACF,EAAE,OAAO,CAAC;AACb,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEzB,MAAM,UAAU,GAAG,WAAW,CAAC,OAC7B,MAAoE,EACpE,OAAuB,KACrB;AACF,QAAA,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE;AAErC,QAAA,IAAI;YACF,MAAM,MAAM,CAAC,WAAW,GAAG,MAAM,EAAE,OAAO,CAAC;QAC7C;QAAE,OAAO,GAAG,EAAE;AACZ,YAAA,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;QACjD;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErB,OAAO;QACL,UAAU;QACV,UAAU;QACV,eAAe;QACf,UAAU;KACX;AACH;;ACpGA;;;;;AAKG;AAuDH;;AAEG;AACH,SAAS,YAAY,CAAC,KAAa,EAAA;AACjC,IAAA,MAAM,QAAQ,GAA+C;AAC3D,QAAA,EAAE,OAAO,EAAE,+BAA+B,EAAE,MAAM,EAAE,UAAU,EAAE;AAChE,QAAA,EAAE,OAAO,EAAE,sCAAsC,EAAE,MAAM,EAAE,QAAQ,EAAE;AACrE,QAAA,EAAE,OAAO,EAAE,0BAA0B,EAAE,MAAM,EAAE,SAAS,EAAE;AAC1D,QAAA,EAAE,OAAO,EAAE,gCAAgC,EAAE,MAAM,EAAE,eAAe,EAAE;AACtE,QAAA,EAAE,OAAO,EAAE,qDAAqD,EAAE,MAAM,EAAE,iBAAiB,EAAE;AAC7F,QAAA,EAAE,OAAO,EAAE,+BAA+B,EAAE,MAAM,EAAE,gBAAgB,EAAE;AACtE,QAAA,EAAE,OAAO,EAAE,iCAAiC,EAAE,MAAM,EAAE,eAAe,EAAE;AACvE,QAAA,EAAE,OAAO,EAAE,qDAAqD,EAAE,MAAM,EAAE,kBAAkB,EAAE;AAC9F,QAAA,EAAE,OAAO,EAAE,sCAAsC,EAAE,MAAM,EAAE,iBAAiB,EAAE;KAC/E;IAED,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,QAAQ,EAAE;AAC1C,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACvB,YAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE;QACpC;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACH,SAAS,mBAAmB,CAAC,CAAS,EAAE,CAAS,EAAA;IAC/C,MAAM,MAAM,GAAe,EAAE;AAE7B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,QAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjB;AACA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAClB;AAEA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AACvC,gBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACrC;iBAAO;gBACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACrB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EACxB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EACpB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CACrB;YACH;QACF;IACF;IAEA,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnC;AAEA;;AAEG;AACH,SAAS,eAAe,CACtB,KAAa,EACb,UAAoB,EACpB,cAAsB,CAAC,EAAA;IAEvB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,MAAM,WAAW,GAAa,EAAE;AAEhC,IAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE;AAErB,QAAA,UAAU,CAAC,OAAO,CAAC,QAAQ,IAAG;YAC5B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;AAClE,YAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,WAAW,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACzE,gBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;gBACjE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpC,oBAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC7B;YACF;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;IAEF,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAChC;AAEA;;AAEG;AACH,SAAS,WAAW,CAAC,KAAa,EAAA;AAChC,IAAA,MAAM,UAAU,GAA6B;AAC3C,QAAA,KAAK,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC;AAC5C,QAAA,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC;AACtC,QAAA,EAAE,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC;AACzC,QAAA,UAAU,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC;AAC/C,QAAA,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC;AACxC,QAAA,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC;AAC/B,QAAA,KAAK,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC;AACvC,QAAA,KAAK,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,CAAC;AAC9C,QAAA,IAAI,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC;KAC9C;AAED,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE;IACtC,MAAM,QAAQ,GAAa,EAAE;AAE7B,IAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAI;AACtD,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAG;AACrB,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,oBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpB;AACF,YAAA,CAAC,CAAC;QACJ;AACF,IAAA,CAAC,CAAC;IAEF,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7B;SAEgB,mBAAmB,CACjC,KAAa,EACb,UAAmC,EAAE,EAAA;AAErC,IAAA,MAAM,EACJ,cAAc,GAAG,CAAC,EAClB,cAAc,GAAG,EAAE,EACnB,UAAU,GAAG,GAAG,EAChB,qBAAqB,GAAG,IAAI,EAC5B,oBAAoB,GAAG,IAAI,EAC3B,qBAAqB,GAAG,IAAI,EAC5B,eAAe,GAAG,IAAI,EACtB,WAAW,GACZ,GAAG,OAAO;AAEX,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE;IAC3C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC;IACrE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC;IACzE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;IAC5D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC;AAC1D,IAAA,MAAM,aAAa,GAAG,MAAM,CAAuC,IAAI,CAAC;;AAGxE,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;QAC/B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ;QAC/D,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;QAChE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS;AAChE,QAAA,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY;KACpE,EAAE,EAAE,CAAC;IAEN,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAS,KAAgC;QAC/E,MAAM,OAAO,GAAsB,EAAE;;QAGrC,IAAI,qBAAqB,EAAE;AACzB,YAAA,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;YAC9B,IAAI,MAAM,EAAE;AACV,gBAAA,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC;iBAAO;gBACL,iBAAiB,CAAC,IAAI,CAAC;YACzB;QACF;;QAGA,IAAI,qBAAqB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;YAC1C,MAAM,iBAAiB,GAAG,eAAe,CAAC,CAAC,EAAE,UAAU,CAAC;YACxD,cAAc,CAAC,iBAAiB,CAAC;AAEjC,YAAA,iBAAiB,CAAC,OAAO,CAAC,UAAU,IAAG;gBACrC,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE,GAAG;AACf,oBAAA,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;AAC/B,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;;QAGA,IAAI,oBAAoB,EAAE;AACxB,YAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,CAAC;YACvC,aAAa,CAAC,gBAAgB,CAAC;AAE/B,YAAA,gBAAgB,CAAC,OAAO,CAAC,GAAG,IAAG;gBAC7B,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,IAAI,EAAE,GAAG;AACT,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,GAAG;AACf,oBAAA,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE;AAChC,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;QACJ;;QAGA,OAAO,CAAC,OAAO,CAAC;AACd,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,UAAU,EAAE,GAAG;AAChB,SAAA,CAAC;;AAGF,QAAA,IAAI,WAAW,EAAE,cAAc,EAAE;AAC/B,YAAA,WAAW,CAAC;iBACT,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AAChE,iBAAA,KAAK,CAAC,CAAC,EAAE,CAAC;iBACV,OAAO,CAAC,CAAC,IAAG;gBACX,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,GAAG;AAChB,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;QACN;QAEA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;AACzC,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IAEjH,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAS,KAAgC;AACjF,QAAA,IAAI,CAAC,CAAC,MAAM,GAAG,cAAc,EAAE;AAC7B,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,YAAY,CAAC,CAAC,CAAC;AACxB,IAAA,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;;IAGlC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,aAAa,CAAC,OAAO,EAAE;AACzB,YAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;QACrC;AAEA,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE;YACjC,cAAc,CAAC,EAAE,CAAC;YAClB,cAAc,CAAC,EAAE,CAAC;YAClB,aAAa,CAAC,EAAE,CAAC;YACjB,iBAAiB,CAAC,IAAI,CAAC;YACvB;QACF;QAEA,UAAU,CAAC,IAAI,CAAC;AAEhB,QAAA,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,YAAW;AAC5C,YAAA,IAAI;AACF,gBAAA,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC;gBACzC,cAAc,CAAC,OAAO,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC;YAChB;YAAE,OAAO,GAAG,EAAE;gBACZ,QAAQ,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7D,cAAc,CAAC,EAAE,CAAC;YACpB;oBAAU;gBACR,UAAU,CAAC,KAAK,CAAC;YACnB;QACF,CAAC,EAAE,UAAU,CAAC;AAEd,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,aAAa,CAAC,OAAO,EAAE;AACzB,gBAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC;YACrC;AACF,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AAErD,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAK;QAC7B,cAAc,CAAC,EAAE,CAAC;QAClB,cAAc,CAAC,EAAE,CAAC;QAClB,aAAa,CAAC,EAAE,CAAC;QACjB,iBAAiB,CAAC,IAAI,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;QACL,WAAW;QACX,OAAO;QACP,KAAK;QACL,cAAc;QACd,WAAW;QACX,UAAU;QACV,cAAc;QACd,KAAK;KACN;AACH;;AChVA;;;;;;;AAOG;AAmCH;AACA,MAAM,gBAAgB,GAAG;;AAEvB,IAAA,KAAK,EAAE;QACL,EAAE,OAAO,EAAE,+BAA+B,EAAE,QAAQ,EAAE,IAAa,EAAE,KAAK,EAAE,OAAO,EAAE;QACrF,EAAE,OAAO,EAAE,mCAAmC,EAAE,QAAQ,EAAE,GAAY,EAAE,KAAK,EAAE,OAAO,EAAE;QACxF,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,IAAa,EAAE,KAAK,EAAE,OAAO,EAAE;QACpF,EAAE,OAAO,EAAE,mCAAmC,EAAE,QAAQ,EAAE,GAAY,EAAE,KAAK,EAAE,OAAO,EAAE;QACxF,EAAE,OAAO,EAAE,iDAAiD,EAAE,QAAQ,EAAE,OAAgB,EAAE,KAAK,EAAE,OAAO,EAAE;QAC1G,EAAE,OAAO,EAAE,8DAA8D,EAAE,QAAQ,EAAE,OAAgB,EAAE,KAAK,EAAE,OAAO,EAAE;QACvH,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAa,EAAE,KAAK,EAAE,OAAO,EAAE;AAC7E,KAAA;;AAGD,IAAA,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;;AAGpJ,IAAA,KAAK,EAAE;AACL,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,OAAO,EAAE,GAAG;AACZ,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,OAAO,EAAE,GAAG;AACZ,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;;AAGD,IAAA,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;;AAGxC,IAAA,OAAO,EAAE;QACP,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAa,EAAE;QAC9E,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAa,EAAE;AACvE,QAAA,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAa,EAAE;AAClF,KAAA;;AAGD,IAAA,YAAY,EAAE;QACZ,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;QAC3D,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;QAC1D,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1D,KAAA;CACF;AAEK,SAAU,yBAAyB,CACvC,OAAA,GAAyC,EAAE,EAAA;AAS3C,IAAA,MAAM,EACJ,aAAa,GAAG,EAAE,EAClB,aAAa,GAAG,EAAE,EAClB,SAAS,GAAG,KAAK,EACjB,cAAc,GAAG,GAAG,GACrB,GAAG,OAAO;AAEX,IAAA,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE;;AAGxF,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO;AAC9B,QAAA,GAAG,gBAAgB;AACnB,QAAA,MAAM,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,QAAA,KAAK,EAAE,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;AACpE,KAAA,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AAEpB,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,KAAa,KAA2B;QACjE,MAAM,OAAO,GAAmB,EAAE;QAClC,IAAI,YAAY,GAAG,KAAK;;AAGxB,QAAA,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE;YACzC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;YAC/C,IAAI,KAAK,EAAE;gBACT,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;;oBAEjD,OAAO,CAAC,IAAI,CAAC;AACX,wBAAA,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,OAAO;AACrC,wBAAA,KAAK,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;AACtB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AACtB,qBAAA,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC;AACX,wBAAA,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,OAAO;AACrC,wBAAA,KAAK,EAAE,CAAA,EAAA,EAAK,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;AACtB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AACtB,qBAAA,CAAC;gBACJ;AAAO,qBAAA,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACnB,OAAO,CAAC,IAAI,CAAC;AACX,wBAAA,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,OAAO;wBACrC,KAAK,EAAE,CAAA,EAAG,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;wBAC5C,QAAQ,EAAE,YAAY,CAAC,QAAe;AACtC,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AACtB,qBAAA,CAAC;gBACJ;AACA,gBAAA,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAClD,gBAAA,MAAM;YACR;QACF;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,CAAA,IAAA,EAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3E,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5C,IAAI,YAAY,EAAE;AAChB,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3B,gBAAA,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE;gBACzF,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,KAAK,EAAE,aAAa,CAAC,KAAK,IAAI,OAAO;AACrC,oBAAA,KAAK,EAAE,eAAe;AACtB,oBAAA,QAAQ,EAAE,GAAG;AACb,oBAAA,UAAU,EAAE,GAAG;AACf,oBAAA,WAAW,EAAE,KAAK;AACnB,iBAAA,CAAC;AACF,gBAAA,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,KAAK,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC;AAC9E,YAAA,CAAC,CAAC;QACJ;;QAGA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClD,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE;YAC/C,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,CAAA,GAAA,EAAM,QAAQ,CAAA,GAAA,CAAK,EAAE,IAAI,CAAC;AACvD,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACzB,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,KAAK,EAAE,aAAa,CAAC,IAAI,IAAI,MAAM;AACnC,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,QAAQ,EAAE,GAAG;AACb,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,WAAW,EAAE,QAAQ;AACtB,iBAAA,CAAC;gBACF,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;AACnD,gBAAA,MAAM;YACR;QACF;;AAGA,QAAA,KAAK,MAAM,aAAa,IAAI,QAAQ,CAAC,OAAO,EAAE;AAC5C,YAAA,IAAI,OAAO,IAAI,aAAa,EAAE;gBAC5B,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBACrC,OAAO,CAAC,IAAI,CAAC;AACX,wBAAA,KAAK,EAAE,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,KAAK;wBAClD,KAAK,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAA,EAAG,aAAa,CAAC,KAAK,CAAA,CAAE;wBACxD,QAAQ,EAAE,aAAa,CAAC,QAAQ;AAChC,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC3D,qBAAA,CAAC;oBACF,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC;gBACjE;YACF;iBAAO;gBACL,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;AAChD,gBAAA,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACrB,OAAO,CAAC,IAAI,CAAC;AACX,wBAAA,KAAK,EAAE,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,KAAK;wBAClD,KAAK,EAAE,CAAA,EAAG,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;wBAC7C,QAAQ,EAAE,aAAa,CAAC,QAAQ;AAChC,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AACtB,qBAAA,CAAC;AACF,oBAAA,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;gBACpD;YACF;QACF;;AAGA,QAAA,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,YAAY,EAAE;YAChD,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACpC,OAAO,CAAC,IAAI,CAAC;oBACX,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK;oBAC9D,KAAK,EAAE,YAAY,CAAC,KAAK;AACzB,oBAAA,QAAQ,EAAE,GAAG;AACb,oBAAA,UAAU,EAAE,GAAG;AACf,oBAAA,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC1D,iBAAA,CAAC;gBACF,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC;YAChE;QACF;;AAGA,QAAA,YAAY,GAAG;AACZ,aAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,aAAA,IAAI,EAAE;QAET,OAAO;YACL,YAAY;YACZ,OAAO;AACP,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;SAC/B;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAE5C,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,OAAuB,KAAI;AAC3D,QAAA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;YACvB,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;AAClD,QAAA,CAAC,CAAC;;AAEF,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAI1B,IAAA,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;AAEnB,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAa,KAA2B;AACzE,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;AAE3B,QAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,YAAA,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;;AAE5B,YAAA,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,EAAE;AACjC,gBAAA,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC;YACrC;QACF;AAEA,QAAA,OAAO,MAAM;IACf,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEnC,OAAO;QACL,KAAK;QACL,YAAY;QACZ,aAAa;KACd;AACH;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,OAAuB,EAAA;AACzD,IAAA,OAAO;AACJ,SAAA,GAAG,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,EAAA,EAAK,CAAC,CAAC,KAAK,EAAE;SACjC,IAAI,CAAC,IAAI,CAAC;AACf;;AC9RA;;AAEG;AAII,MAAM,SAAS,GAAU;AAC9B,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,UAAU,EAAE,4FAA4F;AACxG,QAAA,QAAQ,EAAE;AACR,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA;AACF,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,QAAQ;AAChB,KAAA;AACD,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,4DAA4D;AACnE,QAAA,MAAM,EAAE,4DAA4D;AACpE,QAAA,KAAK,EAAE,8DAA8D;AACtE,KAAA;;;ACnCH;;AAEG;AAII,MAAM,YAAY,GAAU;AACjC,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,UAAU,EAAE,4FAA4F;AACxG,QAAA,QAAQ,EAAE;AACR,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,UAAU;AAClB,SAAA;AACF,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;AACD,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,OAAO,EAAE;AACP,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,KAAK,EAAE,MAAM;AACd,KAAA;;;ACnCH;;;;;;;;AAQG;AAwEH;AACA;AACA;AAEO,MAAM,mBAAmB,GAA8B;;AAE5D,IAAA,sBAAsB,EAAE,SAAS;AACjC,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,uBAAuB,EAAE,SAAS;AAClC,IAAA,oBAAoB,EAAE,SAAS;AAC/B,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,0BAA0B,EAAE,SAAS;AACrC,IAAA,yBAAyB,EAAE,SAAS;AACpC,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,mBAAmB,EAAE,SAAS;AAC9B,IAAA,yBAAyB,EAAE,SAAS;AACpC,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,mBAAmB,EAAE,SAAS;AAC9B,IAAA,mBAAmB,EAAE,SAAS;AAC9B,IAAA,iBAAiB,EAAE,SAAS;;AAG5B,IAAA,uBAAuB,EAAE,4FAA4F;AACrH,IAAA,wBAAwB,EAAE,MAAM;AAChC,IAAA,wBAAwB,EAAE,MAAM;AAChC,IAAA,0BAA0B,EAAE,MAAM;AAClC,IAAA,wBAAwB,EAAE,MAAM;AAChC,IAAA,8BAA8B,EAAE,KAAK;AACrC,IAAA,8BAA8B,EAAE,KAAK;AACrC,IAAA,gCAAgC,EAAE,KAAK;AACvC,IAAA,4BAA4B,EAAE,KAAK;AACnC,IAAA,6BAA6B,EAAE,MAAM;AACrC,IAAA,8BAA8B,EAAE,KAAK;AACrC,IAAA,+BAA+B,EAAE,MAAM;;AAGvC,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,sBAAsB,EAAE,MAAM;AAC9B,IAAA,sBAAsB,EAAE,MAAM;AAC9B,IAAA,sBAAsB,EAAE,MAAM;;AAG9B,IAAA,4BAA4B,EAAE,KAAK;AACnC,IAAA,yBAAyB,EAAE,KAAK;AAChC,IAAA,4BAA4B,EAAE,KAAK;AACnC,IAAA,4BAA4B,EAAE,MAAM;AACpC,IAAA,8BAA8B,EAAE,QAAQ;;AAGxC,IAAA,qBAAqB,EAAE,iCAAiC;AACxD,IAAA,kBAAkB,EAAE,iEAAiE;AACrF,IAAA,qBAAqB,EAAE,uEAAuE;AAC9F,IAAA,qBAAqB,EAAE,yEAAyE;AAChG,IAAA,qBAAqB,EAAE,2EAA2E;;AAGlG,IAAA,2BAA2B,EAAE,YAAY;AACzC,IAAA,6BAA6B,EAAE,YAAY;AAC3C,IAAA,2BAA2B,EAAE,YAAY;;AAGzC,IAAA,sBAAsB,EAAE,MAAM;AAC9B,IAAA,mBAAmB,EAAE,MAAM;AAC3B,IAAA,qBAAqB,EAAE,MAAM;;AAGxB,MAAM,kBAAkB,GAA8B;AAC3D,IAAA,GAAG,mBAAmB;;AAEtB,IAAA,sBAAsB,EAAE,SAAS;AACjC,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,uBAAuB,EAAE,SAAS;AAClC,IAAA,oBAAoB,EAAE,SAAS;AAC/B,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,0BAA0B,EAAE,SAAS;AACrC,IAAA,yBAAyB,EAAE,SAAS;AACpC,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,mBAAmB,EAAE,SAAS;AAC9B,IAAA,yBAAyB,EAAE,SAAS;AACpC,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,wBAAwB,EAAE,SAAS;;AAEnC,IAAA,qBAAqB,EAAE,gCAAgC;AACvD,IAAA,kBAAkB,EAAE,gEAAgE;AACpF,IAAA,qBAAqB,EAAE,sEAAsE;AAC7F,IAAA,qBAAqB,EAAE,wEAAwE;AAC/F,IAAA,qBAAqB,EAAE,0EAA0E;;AAG5F,MAAM,qBAAqB,GAA8B;AAC9D,IAAA,GAAG,mBAAmB;;AAEtB,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,qBAAqB,EAAE,MAAM;AAC7B,IAAA,kBAAkB,EAAE,iCAAiC;AACrD,IAAA,qBAAqB,EAAE,iCAAiC;AACxD,IAAA,qBAAqB,EAAE,iCAAiC;AACxD,IAAA,qBAAqB,EAAE,iCAAiC;AACxD,IAAA,4BAA4B,EAAE,KAAK;AACnC,IAAA,yBAAyB,EAAE,KAAK;AAChC,IAAA,4BAA4B,EAAE,KAAK;AACnC,IAAA,4BAA4B,EAAE,KAAK;;AAGrC;AACO,MAAM,YAAY,GAAG;AAC1B,IAAA,IAAI,EAAE;AACJ,QAAA,mBAAmB,EAAE,SAAS;AAC9B,QAAA,yBAAyB,EAAE,SAAS;AACpC,QAAA,wBAAwB,EAAE,SAAS;AACpC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,mBAAmB,EAAE,SAAS;AAC9B,QAAA,yBAAyB,EAAE,SAAS;AACpC,QAAA,wBAAwB,EAAE,SAAS;AACpC,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,mBAAmB,EAAE,SAAS;AAC9B,QAAA,yBAAyB,EAAE,SAAS;AACpC,QAAA,wBAAwB,EAAE,SAAS;AACpC,KAAA;AACD,IAAA,GAAG,EAAE;AACH,QAAA,mBAAmB,EAAE,SAAS;AAC9B,QAAA,yBAAyB,EAAE,SAAS;AACpC,QAAA,wBAAwB,EAAE,SAAS;AACpC,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,mBAAmB,EAAE,SAAS;AAC9B,QAAA,yBAAyB,EAAE,SAAS;AACpC,QAAA,wBAAwB,EAAE,SAAS;AACpC,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,mBAAmB,EAAE,SAAS;AAC9B,QAAA,yBAAyB,EAAE,SAAS;AACpC,QAAA,wBAAwB,EAAE,SAAS;AACpC,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,mBAAmB,EAAE,SAAS;AAC9B,QAAA,yBAAyB,EAAE,SAAS;AACpC,QAAA,wBAAwB,EAAE,SAAS;AACpC,KAAA;;AAGH;AACA;AACA;AAEA;;AAEG;AACG,SAAU,oBAAoB,CAAC,SAA6C,EAAA;AAChF,IAAA,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS;AAC5B,SAAA,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,KAAK,GAAG;SACzC,IAAI,CAAC,IAAI,CAAC;AACf;AAgBA;;AAEG;AACG,SAAU,sBAAsB,CACpC,SAAA,GAA0C,OAAO,EACjD,SAAA,GAAgD,EAAE,EAClD,UAAsC,EAAA;AAEtC,IAAA,MAAM,aAAa,GAAG;AACpB,QAAA,KAAK,EAAE,mBAAmB;AAC1B,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,OAAO,EAAE,qBAAqB;KAC/B,CAAC,SAAS,CAAC;AAEZ,IAAA,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE;IAEjE,OAAO;AACL,QAAA,GAAG,aAAa;AAChB,QAAA,GAAG,cAAc;AACjB,QAAA,GAAG,SAAS;KACb;AACH;AAuEA;AACA;AACA;AAEA;;AAEG;AACG,SAAU,6BAA6B,CAAC,KAAA,GAAmC,mBAAmB,EAAA;IAClG,OAAO;;;QAGD,oBAAoB,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiQhC;AACH;AAEA;AACA;AACA;AAEA,IAAI,cAAc,GAAG,KAAK;AAE1B;;AAEG;SACa,uBAAuB,CACrC,QAAmC,mBAAmB,EACtD,QAAiB,KAAK,EAAA;IAEtB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE;IACrC,IAAI,cAAc,IAAI,CAAC,KAAK;QAAE;IAE9B,MAAM,OAAO,GAAG,4BAA4B;IAC5C,IAAI,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAA4B;IAE9E,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC9C,QAAA,YAAY,CAAC,EAAE,GAAG,OAAO;AACzB,QAAA,YAAY,CAAC,IAAI,GAAG,UAAU;AAC9B,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;IACzC;AAEA,IAAA,YAAY,CAAC,WAAW,GAAG,6BAA6B,CAAC,KAAK,CAAC;IAC/D,cAAc,GAAG,IAAI;AACvB;AAEA;;AAEG;AACG,SAAU,uBAAuB,CAAC,KAAgC,EAAA;AACtE,IAAA,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC;AACtC;;;;","x_google_ignoreList":[6]}