@cocoar/ui-components 0.1.0-beta.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cocoar-ui-components.mjs","sources":["../../../../libs/ui-components/src/lib/coar-icon/core-icons.ts","../../../../libs/ui-components/src/lib/coar-icon/coar-icon.service.ts","../../../../libs/ui-components/src/lib/coar-icon/coar-icon.component.ts","../../../../libs/ui-components/src/lib/forms/coar-control-value-accessor.ts","../../../../libs/ui-components/src/lib/coar-text-input/coar-text-input.component.ts","../../../../libs/ui-components/src/lib/coar-text-input/coar-text-input.component.html","../../../../libs/ui-components/src/lib/services/locale.service.ts","../../../../libs/ui-components/src/lib/coar-number-input/coar-number-input.component.ts","../../../../libs/ui-components/src/lib/coar-number-input/coar-number-input.component.html","../../../../libs/ui-components/src/lib/coar-password-input/coar-password-input.component.ts","../../../../libs/ui-components/src/lib/coar-password-input/coar-password-input.component.html","../../../../libs/ui-components/src/lib/coar-checkbox/coar-checkbox.component.ts","../../../../libs/ui-components/src/lib/coar-checkbox/coar-checkbox.component.html","../../../../libs/ui-components/src/lib/coar-scrollbar/coar-scrollbar.directive.ts","../../../../libs/ui-components/src/lib/coar-select/coar-select-base.ts","../../../../libs/ui-components/src/lib/coar-select/coar-single-select.component.ts","../../../../libs/ui-components/src/lib/coar-select/coar-single-select.component.html","../../../../libs/ui-components/src/lib/coar-select/coar-multi-select.component.ts","../../../../libs/ui-components/src/lib/coar-select/coar-multi-select.component.html","../../../../libs/ui-components/src/lib/coar-select/coar-tag-select.component.ts","../../../../libs/ui-components/src/lib/coar-select/coar-tag-select.component.html","../../../../libs/ui-components/src/lib/coar-tabs/coar-tab.component.ts","../../../../libs/ui-components/src/lib/coar-tabs/coar-tab-group.component.ts","../../../../libs/ui-components/src/lib/coar-tabs/coar-tab-group.component.html","../../../../libs/ui-components/src/lib/coar-button/coar-button.component.ts","../../../../libs/ui-components/src/lib/coar-button/coar-button.component.html","../../../../libs/ui-components/src/lib/coar-code-block/coar-code-block.component.ts","../../../../libs/ui-components/src/lib/coar-code-block/coar-code-block.component.html","../../../../libs/ui-components/src/lib/coar-card/coar-card.component.ts","../../../../libs/ui-components/src/lib/coar-card/coar-card.component.html","../../../../libs/ui-components/src/lib/coar-note/coar-note.component.ts","../../../../libs/ui-components/src/lib/coar-note/coar-note.component.html","../../../../libs/ui-components/src/lib/coar-badge/coar-badge.component.ts","../../../../libs/ui-components/src/lib/coar-badge/coar-badge.component.html","../../../../libs/ui-components/src/lib/coar-tag/coar-tag.component.ts","../../../../libs/ui-components/src/lib/coar-tag/coar-tag.component.html","../../../../libs/ui-components/src/lib/coar-divider/coar-divider.component.ts","../../../../libs/ui-components/src/lib/coar-divider/coar-divider.component.html","../../../../libs/ui-components/src/lib/coar-popover/coar-popover-group.service.ts","../../../../libs/ui-components/src/lib/coar-popover/coar-popover.component.ts","../../../../libs/ui-components/src/lib/coar-popover/coar-popover.component.html","../../../../libs/ui-components/src/lib/coar-tooltip/coar-tooltip.service.ts","../../../../libs/ui-components/src/lib/coar-tooltip/coar-tooltip-overlay.component.ts","../../../../libs/ui-components/src/lib/coar-tooltip/coar-tooltip-overlay.component.html","../../../../libs/ui-components/src/lib/coar-tooltip/coar-tooltip.directive.ts","../../../../libs/ui-components/src/lib/coar-label/coar-label.component.ts","../../../../libs/ui-components/src/lib/coar-table/coar-table.component.ts","../../../../libs/ui-components/src/lib/coar-date-picker/coar-date-picker.component.ts","../../../../libs/ui-components/src/lib/coar-date-picker/coar-date-picker.component.html","../../../../libs/ui-components/src/cocoar-ui-components.ts"],"sourcesContent":["/**\n * Built-in icon registry.\n *\n * ⚠️ DO NOT EDIT THIS FILE MANUALLY\n *\n * This file is auto-generated from /assets/icons/*.svg files.\n * To add new icons:\n * 1. Add SVG files to /assets/icons/\n * 2. Run: npm run build:icons\n * 3. Commit the generated file\n *\n * Icons are inlined as strings for maximum portability.\n *\n * Generated: 2026-01-03T10:25:22.816Z\n * Source: C:\\git\\cocoar\\cocoar-ui\\assets\\icons\n */\n\nexport const CORE_ICONS = {\n 'add-list': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m10 18h-7c-.6 0-1-.4-1-1s.4-1 1-1h7c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m21 17h-6c-.6 0-1-.4-1-1s.4-1 1-1h6c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m18 20c-.6 0-1-.4-1-1v-6c0-.6.4-1 1-1s1 .4 1 1v6c0 .6-.4 1-1 1z\"/></g><g><path d=\"m14 13h-11c-.6 0-1-.4-1-1s.4-1 1-1h11c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g><g><path d=\"m14 8h-11c-.6 0-1-.4-1-1s.4-1 1-1h11c.6 0 1 .4 1 1s-.4 1-1 1z\"/></g></svg>`,\n 'add-user': `<svg fill=\"none\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m17 6c0 2.76142-2.2386 5-5 5-2.76142 0-5-2.23858-5-5s2.23858-5 5-5c2.7614 0 5 2.23858 5 5zm-5 4c2.2091 0 4-1.79086 4-4s-1.7909-4-4-4c-2.20914 0-4 1.79086-4 4s1.79086 4 4 4zm-2 3c-3.86599 0-7 3.134-7 7 0 1.6569 1.34315 3 3 3h6.5c.2761 0 .5-.2239.5-.5s-.2239-.5-.5-.5h-6.5c-1.10457 0-2-.8954-2-2 0-3.3137 2.68629-6 6-6h4.5c.2761 0 .5-.2239.5-.5 0-.2762-.2239-.5-.5-.5zm9 2c.2761 0 .5.2239.5.5v3h3c.2761 0 .5.2239.5.5s-.2239.5-.5.5h-3v3c0 .2761-.2239.5-.5.5s-.5-.2239-.5-.5v-3h-3c-.2761 0-.5-.2239-.5-.5s.2239-.5.5-.5h3v-3c0-.2761.2239-.5.5-.5z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'add': `<svg height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"_03_Login\" data-name=\"03 Login\"><path d=\"m256 512a25 25 0 0 1 -25-25v-462a25 25 0 0 1 50 0v462a25 25 0 0 1 -25 25z\"/><path d=\"m487 281h-462a25 25 0 0 1 0-50h462a25 25 0 0 1 0 50z\"/></g></svg>`,\n 'arrow-right': `<svg id=\"Layer_2\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 2\"><path d=\"m22.707 11.293-7-7a1 1 0 0 0 -1.414 1.414l5.293 5.293h-17.586a1 1 0 0 0 0 2h17.586l-5.293 5.293a1 1 0 1 0 1.414 1.414l7-7a1 1 0 0 0 0-1.414z\"/></svg>`,\n 'back': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m9 14c-.3 0-.5-.1-.7-.3l-4-4c-.4-.4-.4-1 0-1.4l4-4c.4-.4 1-.4 1.4 0s.4 1 0 1.4l-3.3 3.3 3.3 3.3c.4.4.4 1 0 1.4-.2.2-.4.3-.7.3z\"/><path d=\"m14 19h-7c-.6 0-1-.4-1-1s.4-1 1-1h7c2.3 0 4-1.5 4-3.5s-1.7-3.5-4-3.5h-9c-.6 0-1-.4-1-1s.4-1 1-1h9c3.4 0 6 2.4 6 5.5s-2.6 5.5-6 5.5z\"/></svg>`,\n 'bin': `<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M436,60h-75V45c0-24.813-20.187-45-45-45H196c-24.813,0-45,20.187-45,45v15H76c-24.813,0-45,20.187-45,45 c0,19.928,13.025,36.861,31.005,42.761L88.76,470.736C90.687,493.875,110.385,512,133.604,512h244.792 c23.22,0,42.918-18.125,44.846-41.271l26.753-322.969C467.975,141.861,481,124.928,481,105C481,80.187,460.813,60,436,60z M181,45 c0-8.271,6.729-15,15-15h120c8.271,0,15,6.729,15,15v15H181V45z M393.344,468.246c-0.643,7.712-7.208,13.754-14.948,13.754 H133.604c-7.739,0-14.305-6.042-14.946-13.747L92.294,150h327.412L393.344,468.246z M436,120H76c-8.271,0-15-6.729-15-15 s6.729-15,15-15h360c8.271,0,15,6.729,15,15S444.271,120,436,120z\"/></g></g><g><g><path d=\"M195.971,436.071l-15-242c-0.513-8.269-7.67-14.558-15.899-14.043c-8.269,0.513-14.556,7.631-14.044,15.899l15,242.001 c0.493,7.953,7.097,14.072,14.957,14.072C189.672,452,196.504,444.684,195.971,436.071z\"/></g></g><g><g><path d=\"M256,180c-8.284,0-15,6.716-15,15v242c0,8.284,6.716,15,15,15s15-6.716,15-15V195C271,186.716,264.284,180,256,180z\"/></g></g><g><g><path d=\"M346.927,180.029c-8.25-0.513-15.387,5.774-15.899,14.043l-15,242c-0.511,8.268,5.776,15.386,14.044,15.899 c8.273,0.512,15.387-5.778,15.899-14.043l15-242C361.483,187.659,355.196,180.541,346.927,180.029z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'calendar': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"512\" height=\"512\"><g id=\"_01_align_center\" data-name=\"01 align center\"><path d=\"M21,2H18V0H16V2H8V0H6V2H3A3,3,0,0,0,0,5V24H24V5A3,3,0,0,0,21,2ZM2,5A1,1,0,0,1,3,4H21a1,1,0,0,1,1,1V8H2ZM2,22V10H22V22Z\"/><rect x=\"15\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"11\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"7\" y=\"13\" width=\"2\" height=\"2\"/><rect x=\"15\" y=\"17\" width=\"2\" height=\"2\"/><rect x=\"11\" y=\"17\" width=\"2\" height=\"2\"/><rect x=\"7\" y=\"17\" width=\"2\" height=\"2\"/></g></svg>`,\n 'caret-right': `<svg height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m190.06 414 163.12-139.78a24 24 0 0 0 0-36.44l-163.12-139.78c-15.57-13.34-39.62-2.28-39.62 18.22v279.6c0 20.5 24.05 31.56 39.62 18.18z\"/></svg>`,\n 'chat': `<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 60 60\" style=\"enable-background:new 0 0 60 60;\" xml:space=\"preserve\"><g><path d=\"M10,25.465h13c0.553,0,1-0.448,1-1s-0.447-1-1-1H10c-0.553,0-1,0.448-1,1S9.447,25.465,10,25.465z\"/><path d=\"M36,29.465H10c-0.553,0-1,0.448-1,1s0.447,1,1,1h26c0.553,0,1-0.448,1-1S36.553,29.465,36,29.465z\"/><path d=\"M36,35.465H10c-0.553,0-1,0.448-1,1s0.447,1,1,1h26c0.553,0,1-0.448,1-1S36.553,35.465,36,35.465z\"/><path d=\"M54.072,2.535L19.93,2.465c-3.27,0-5.93,2.66-5.93,5.93v5.124l-8.07,0.017c-3.27,0-5.93,2.66-5.93,5.93v21.141 c0,3.27,2.66,5.929,5.93,5.929H12v10c0,0.413,0.254,0.784,0.64,0.933c0.117,0.045,0.239,0.067,0.36,0.067 c0.276,0,0.547-0.115,0.74-0.327l9.704-10.675l16.626-0.068c3.27,0,5.93-2.66,5.93-5.929v-0.113l5.26,5.786 c0.193,0.212,0.464,0.327,0.74,0.327c0.121,0,0.243-0.022,0.36-0.067c0.386-0.149,0.64-0.52,0.64-0.933v-10h1.07 c3.27,0,5.93-2.66,5.93-5.929V8.465C60,5.196,57.341,2.536,54.072,2.535z M44,40.536c0,2.167-1.763,3.929-3.934,3.929l-17.07,0.07 c-0.28,0.001-0.548,0.12-0.736,0.327L14,53.949v-8.414c0-0.552-0.447-1-1-1H5.93c-2.167,0-3.93-1.763-3.93-3.929V19.465 c0-2.167,1.763-3.93,3.932-3.93l9.068-0.019c0,0,0,0,0,0c0.001,0,0.001,0,0.002,0l25.068-0.052c2.167,0,3.93,1.763,3.93,3.93 v18.441V40.536z M58,29.606c0,2.167-1.763,3.929-3.93,3.929H52c-0.553,0-1,0.448-1,1v8.414l-5-5.5V19.395 c0-3.27-2.66-5.93-5.932-5.93L16,13.514v-5.12c0-2.167,1.763-3.93,3.928-3.93l34.141,0.07c0.001,0,0.001,0,0.002,0 c2.167,0,3.93,1.763,3.93,3.93V29.606z\"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'check': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M497.36,69.995c-7.532-7.545-19.753-7.558-27.285-0.032L238.582,300.845l-83.522-90.713 c-7.217-7.834-19.419-8.342-27.266-1.126c-7.841,7.217-8.343,19.425-1.126,27.266l97.126,105.481 c3.557,3.866,8.535,6.111,13.784,6.22c0.141,0.006,0.277,0.006,0.412,0.006c5.101,0,10.008-2.026,13.623-5.628L497.322,97.286 C504.873,89.761,504.886,77.54,497.36,69.995z\"/></g></g><g><g><path d=\"M492.703,236.703c-10.658,0-19.296,8.638-19.296,19.297c0,119.883-97.524,217.407-217.407,217.407 c-119.876,0-217.407-97.524-217.407-217.407c0-119.876,97.531-217.407,217.407-217.407c10.658,0,19.297-8.638,19.297-19.296 C275.297,8.638,266.658,0,256,0C114.84,0,0,114.84,0,256c0,141.154,114.84,256,256,256c141.154,0,256-114.846,256-256 C512,245.342,503.362,236.703,492.703,236.703z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'chevron-down': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"></polyline></svg>`,\n 'chevron-left': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>`,\n 'chevron-right': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>`,\n 'chevrons-left': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"11 17 6 12 11 7\"></polyline><polyline points=\"18 17 13 12 18 7\"></polyline></svg>`,\n 'chevrons-right': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"13 17 18 12 13 7\"></polyline><polyline points=\"6 17 11 12 6 7\"></polyline></svg>`,\n 'clipboard': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 438.891 438.891\" style=\"enable-background:new 0 0 438.891 438.891;\" xml:space=\"preserve\"><g><g><g><path d=\"M347.968,57.503h-39.706V39.74c0-5.747-6.269-8.359-12.016-8.359h-30.824c-7.314-20.898-25.6-31.347-46.498-31.347 c-20.668-0.777-39.467,11.896-46.498,31.347h-30.302c-5.747,0-11.494,2.612-11.494,8.359v17.763H90.923 c-23.53,0.251-42.78,18.813-43.886,42.318v299.363c0,22.988,20.898,39.706,43.886,39.706h257.045 c22.988,0,43.886-16.718,43.886-39.706V99.822C390.748,76.316,371.498,57.754,347.968,57.503z M151.527,52.279h28.735 c5.016-0.612,9.045-4.428,9.927-9.404c3.094-13.474,14.915-23.146,28.735-23.51c13.692,0.415,25.335,10.117,28.212,23.51 c0.937,5.148,5.232,9.013,10.449,9.404h29.78v41.796H151.527V52.279z M370.956,399.185c0,11.494-11.494,18.808-22.988,18.808 H90.923c-11.494,0-22.988-7.314-22.988-18.808V99.822c1.066-11.964,10.978-21.201,22.988-21.42h39.706v26.645 c0.552,5.854,5.622,10.233,11.494,9.927h154.122c5.98,0.327,11.209-3.992,12.016-9.927V78.401h39.706 c12.009,0.22,21.922,9.456,22.988,21.42V399.185z\"/><path d=\"M179.217,233.569c-3.919-4.131-10.425-4.364-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.363-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,233.962,179.427,233.761,179.217,233.569z\"/><path d=\"M329.16,256.034H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,256.034,329.16,256.034z\"/><path d=\"M179.217,149.977c-3.919-4.131-10.425-4.364-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.364-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,150.37,179.427,150.169,179.217,149.977z\"/><path d=\"M329.16,172.442H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,172.442,329.16,172.442z\"/><path d=\"M179.217,317.16c-3.919-4.131-10.425-4.363-14.629-0.522l-33.437,31.869l-14.106-14.629 c-3.919-4.131-10.425-4.363-14.629-0.522c-4.047,4.24-4.047,10.911,0,15.151l21.42,21.943c1.854,2.076,4.532,3.224,7.314,3.135 c2.756-0.039,5.385-1.166,7.314-3.135l40.751-38.661c4.04-3.706,4.31-9.986,0.603-14.025 C179.628,317.554,179.427,317.353,179.217,317.16z\"/><path d=\"M329.16,339.626H208.997c-5.771,0-10.449,4.678-10.449,10.449s4.678,10.449,10.449,10.449H329.16 c5.771,0,10.449-4.678,10.449-10.449S334.931,339.626,329.16,339.626z\"/></g></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'close': `<svg id=\"Capa_1\" enable-background=\"new 0 0 320.591 320.591\" height=\"512\" viewBox=\"0 0 320.591 320.591\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"close_1_\"><path d=\"m30.391 318.583c-7.86.457-15.59-2.156-21.56-7.288-11.774-11.844-11.774-30.973 0-42.817l257.812-257.813c12.246-11.459 31.462-10.822 42.921 1.424 10.362 11.074 10.966 28.095 1.414 39.875l-259.331 259.331c-5.893 5.058-13.499 7.666-21.256 7.288z\"/><path d=\"m287.9 318.583c-7.966-.034-15.601-3.196-21.257-8.806l-257.813-257.814c-10.908-12.738-9.425-31.908 3.313-42.817 11.369-9.736 28.136-9.736 39.504 0l259.331 257.813c12.243 11.462 12.876 30.679 1.414 42.922-.456.487-.927.958-1.414 1.414-6.35 5.522-14.707 8.161-23.078 7.288z\"/></g></g></svg>`,\n 'comments': `<svg id=\"Capa_1\" enable-background=\"new 0 0 512 512\" height=\"512\" viewBox=\"0 0 512 512\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m480.052 369.741c49.476-69.417 41.913-164.522-25.665-226.473-30.877-28.305-70.24-45.926-112.761-50.847-.265-.326-.536-.649-.833-.958-36.991-38.425-90.135-60.463-145.805-60.463-105.939 0-194.988 78.933-194.988 180 0 35.435 11.007 69.404 31.916 98.741l-29.209 91.706c-1.836 5.764-.03 12.065 4.579 15.982 4.617 3.924 11.13 4.678 16.511 1.941l88.827-45.167c18.242 7.855 37.586 13.009 57.618 15.354 38.642 40.636 92.073 61.443 146.738 61.443 28.416 0 56.729-5.791 82.36-16.798l88.831 45.169c2.151 1.094 4.48 1.629 6.795 1.629 10.123 0 17.38-9.865 14.295-19.553zm-361.374-25.72c-4.201-1.995-9.088-1.929-13.233.179l-63.267 32.17 20.66-64.866c1.504-4.723.579-9.883-2.473-13.788-19.866-25.43-30.367-55.415-30.367-86.716 0-82.71 74.014-150 164.99-150 36.636 0 71.905 11.099 100.514 31.086-96.348 9.688-173.51 84.942-173.51 178.914 0 29.228 7.492 57.366 21.617 82.576-8.552-2.547-16.881-5.732-24.931-9.555zm287.845 60.178c-4.085-2.077-8.976-2.202-13.233-.178-23.385 11.108-49.772 16.979-76.31 16.979-90.976 0-164.99-67.29-164.99-150s74.014-150 164.99-150 164.99 67.29 164.99 150c0 31.301-10.501 61.286-30.368 86.715-3.051 3.905-3.976 9.065-2.473 13.788l20.66 64.866z\"/><circle cx=\"255.984\" cy=\"271\" r=\"15\"/><circle cx=\"315.981\" cy=\"271\" r=\"15\"/><circle cx=\"375.977\" cy=\"271\" r=\"15\"/></svg>`,\n 'copy': `<svg height=\"682.66669pt\" viewBox=\"-21 -21 682.66669 682.66669\" width=\"682.66669pt\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m565 640h-340c-41.359375 0-75-33.640625-75-75v-340c0-41.359375 33.640625-75 75-75h340c41.359375 0 75 33.640625 75 75v340c0 41.359375-33.640625 75-75 75zm-340-440c-13.785156 0-25 11.214844-25 25v340c0 13.785156 11.214844 25 25 25h340c13.785156 0 25-11.214844 25-25v-340c0-13.785156-11.214844-25-25-25zm-125 240h-25c-13.785156 0-25-11.214844-25-25v-340c0-13.785156 11.214844-25 25-25h340c13.785156 0 25 11.214844 25 25v23.75h50v-23.75c0-41.359375-33.640625-75-75-75h-340c-41.359375 0-75 33.640625-75 75v340c0 41.359375 33.640625 75 75 75h25zm0 0\"/></svg>`,\n 'customers': `<svg id=\"Capa_1\" enable-background=\"new 0 0 183.729 183.729\" height=\"512\" viewBox=\"0 0 183.729 183.729\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"Line_1_\"><path d=\"m4.213 137.816h33.391v41.739c0 2.305 1.869 4.174 4.174 4.174h100.174c2.305 0 4.174-1.869 4.174-4.174v-41.739h33.391c2.305 0 4.174-1.869 4.174-4.174v-59.394c0-8.692-5.388-16.474-13.523-19.534l-12.021-4.55c11.569-11.249 11.827-29.747.578-41.316s-29.747-11.827-41.316-.578c-5.676 5.52-8.869 13.107-8.848 21.024-10.503-5.284-22.888-5.284-33.391 0 .042-16.136-13.005-29.251-29.141-29.294s-29.252 13.004-29.295 29.14c-.021 7.917 3.172 15.504 8.848 21.024l-12.021 4.55c-8.135 3.059-13.522 10.841-13.522 19.534v59.395c0 2.305 1.868 4.173 4.174 4.173zm41.739-19.325c.003-4.574 2.499-8.782 6.511-10.977l15.903-8.64 18.198 76.508h-40.612zm61.314-21.579-11.228 47.082v-35.395c0-2.305-1.869-4.174-4.174-4.174s-4.174 1.869-4.174 4.174v35.395l-11.227-47.082c9.785 4.452 21.018 4.452 30.803 0zm30.512 78.47h-40.612l18.198-76.508 15.903 8.64c4.012 2.195 6.509 6.404 6.511 10.977zm29.217-112.696c4.977 1.759 8.315 6.45 8.348 11.729v55.054h-29.217v-10.977c-.033-7.612-4.208-14.602-10.894-18.24l-18.032-9.81c7.797-7.122 12.236-17.197 12.23-27.757-.004-1.86-.158-3.716-.459-5.551 2.849.901 5.819 1.365 8.807 1.377 4.101.003 8.155-.865 11.896-2.546zm-50.087-33.391c0-11.526 9.344-20.87 20.87-20.87s20.87 9.344 20.87 20.87-9.344 20.87-20.87 20.87c-4.418-.045-8.706-1.508-12.23-4.174-1.899-3.887-4.454-7.417-7.555-10.435-.699-2.015-1.066-4.129-1.085-6.261zm4.174 33.391c0 16.136-13.081 29.217-29.217 29.217s-29.218-13.081-29.218-29.217 13.081-29.217 29.217-29.217 29.218 13.081 29.218 29.217zm-96-33.391c0-11.526 9.344-20.87 20.87-20.87s20.87 9.344 20.87 20.87c-.001 2.188-.368 4.361-1.085 6.428-3.085 2.967-5.64 6.44-7.555 10.268-3.524 2.666-7.811 4.129-12.23 4.174-11.526-.001-20.87-9.344-20.87-20.87zm-16.696 44.953c.102-5.217 3.428-9.823 8.348-11.562l17.53-6.553c3.688 1.595 7.668 2.405 11.687 2.379 2.988-.012 5.958-.477 8.807-1.377-.301 1.835-.455 3.692-.459 5.551.017 10.531 4.454 20.571 12.23 27.673l-18.031 9.892c-6.686 3.638-10.861 10.628-10.894 18.24v10.977h-29.218z\"/></g></g></svg>`,\n 'employee': `<svg id=\"Layer_1\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\"><path d=\"m44.585 14.585c0-6.939-5.646-12.585-12.585-12.585s-12.585 5.646-12.585 12.585 5.646 12.585 12.585 12.585 12.585-5.646 12.585-12.585zm-23.17 0c0-5.837 4.749-10.585 10.585-10.585s10.585 4.748 10.585 10.585-4.749 10.585-10.585 10.585-10.585-4.748-10.585-10.585z\"/><path d=\"m36.468 28.62s-.003 0-.005 0c-.073 0-.143-.011-.216-.011h-8.492c-.073 0-.143.01-.215.011-.003 0-.006 0-.01 0-9.353.122-16.926 7.758-16.926 17.139v15.241c0 .553.448 1 1 1h40.793c.552 0 1-.447 1-1v-15.241c0-9.382-7.575-17.019-16.929-17.139zm-4.468 7.477h1.306l4.436 18.002-5.741 5.515-5.741-5.515 4.436-18.002h1.306zm0-2h-1.432l-1.507-3.488h5.879l-1.507 3.488h-1.432zm-19.397 11.662c0-8.066 6.341-14.661 14.298-15.107l1.959 4.533-4.681 18.996c-.085.347.021.713.278.96l5.059 4.859h-16.913zm38.794 14.241h-16.913l5.059-4.859c.257-.247.364-.613.278-.96l-4.681-18.996 1.959-4.533c7.956.446 14.298 7.042 14.298 15.107z\"/></svg>`,\n 'eye-closed': `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\" fill=\"none\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.26408 6.66615C1.57529 6.4126 2.03769 6.45387 2.29687 6.75831C4.01035 8.77104 7.1184 11.2826 12 11.2826C16.8815 11.2826 19.9895 8.77106 21.703 6.75833C21.9622 6.45389 22.4246 6.41263 22.7358 6.66617C23.047 6.91972 23.0892 7.37206 22.83 7.67651C22.3016 8.29723 21.6469 8.96667 20.8577 9.60857C20.9001 9.65503 20.937 9.7077 20.9669 9.7661L22.9224 13.5921C23.1035 13.9465 22.9567 14.3774 22.5945 14.5546C22.2322 14.7318 21.7917 14.5881 21.6106 14.2338L19.6856 10.4674C18.4652 11.2689 16.9983 11.959 15.2651 12.3565L16.1412 16.6418C16.2206 17.0303 15.9631 17.4082 15.5659 17.4859C15.1688 17.5636 14.7825 17.3117 14.703 16.9232L13.8209 12.6086C13.2402 12.6793 12.6334 12.7173 12 12.7173C11.3665 12.7173 10.7597 12.6793 10.1789 12.6086L9.29684 16.9232C9.21741 17.3117 8.83107 17.5636 8.43393 17.4859C8.03679 17.4082 7.77924 17.0303 7.85866 16.6418L8.73478 12.3564C7.30485 12.0285 6.0562 11.5014 4.97768 10.8769L2.32003 14.3434C2.07703 14.6603 1.61738 14.7246 1.29337 14.4869C0.96937 14.2491 0.903705 13.7995 1.14671 13.4825L3.75501 10.0804C2.6858 9.30207 1.8295 8.45132 1.16987 7.67649C0.910686 7.37204 0.952866 6.9197 1.26408 6.66615Z\" fill=\"black\"/></svg>`,\n 'eye-off': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"></path><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"></line></svg>`,\n 'eye-open': `<svg clip-rule=\"evenodd\" fill-rule=\"evenodd\" height=\"512\" stroke-linejoin=\"round\" stroke-miterlimit=\"2\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Icon\"><path d=\"m12 10.75c-2.346 0-4.25 1.904-4.25 4.25s1.904 4.25 4.25 4.25 4.25-1.904 4.25-4.25-1.904-4.25-4.25-4.25zm0 1.5c1.518 0 2.75 1.232 2.75 2.75s-1.232 2.75-2.75 2.75-2.75-1.232-2.75-2.75 1.232-2.75 2.75-2.75z\"/><path d=\"m22.53 12.97s-.604-.604-1.514-1.515c-4.98-4.979-13.052-4.979-18.032 0-.91.911-1.514 1.515-1.514 1.515-.293.292-.293.768 0 1.06.292.293.768.293 1.06 0 0 0 .604-.604 1.515-1.514 4.393-4.394 11.517-4.394 15.91 0 .911.91 1.515 1.514 1.515 1.514.292.293.768.293 1.06 0 .293-.292.293-.768 0-1.06z\"/><path d=\"m18.85 6.867-1.5 2.598c-.206.358-.083.817.275 1.024s.818.084 1.025-.274l1.5-2.598c.206-.359.083-.818-.275-1.025s-.818-.084-1.025.275z\"/><path d=\"m11.25 5.5v3c0 .414.336.75.75.75s.75-.336.75-.75v-3c0-.414-.336-.75-.75-.75s-.75.336-.75.75z\"/><path d=\"m3.85 7.617 1.5 2.598c.207.358.667.481 1.025.274s.481-.666.275-1.024l-1.5-2.598c-.207-.359-.667-.482-1.025-.275s-.481.666-.275 1.025z\"/></g></svg>`,\n 'eye': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path><circle cx=\"12\" cy=\"12\" r=\"3\"></circle></svg>`,\n 'important-1': `<svg id=\"Layer_1\" enable-background=\"new 0 0 100 100\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m53.6308289 62.660614h-7.3402634c-2.3325844 0-4.2989349-1.739502-4.5834389-4.0546722l-6.2579918-50.924778c-.3383217-2.7531052 1.8096237-5.1811638 4.5834389-5.1811638h19.9348373c2.7766304 0 4.9254341 2.4327488 4.5825768 5.1881289l-6.3365822 50.924778c-.287693 2.3120809-2.2526665 4.0477071-4.5825767 4.0477071z\"/><path d=\"m63.6071815 83.8928223c0 7.4706039-6.1365699 13.6071777-13.6071815 13.6071777s-13.6071815-6.1365738-13.6071815-13.6071777c0-7.4706116 6.13657-13.6071777 13.6071815-13.6071777s13.6071815 6.1365585 13.6071815 13.6071777\"/></svg>`,\n 'important': `<svg id=\"Layer_1\" viewBox=\"0 0 64 64\" xmlns=\"http://www.w3.org/2000/svg\" data-name=\"Layer 1\"><path d=\"m46.0722656 25.6606445c-.390625.390625-.390625 1.0239258 0 1.4140625 1.3154297 1.315918 2.0400391 3.0649414 2.0400391 4.925293s-.7246094 3.609375-2.0400391 4.925293c-.390625.3901367-.390625 1.0234375 0 1.4140625.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c1.6933594-1.6933594 2.6259766-3.9448242 2.6259766-6.3393555s-.9326172-4.6459961-2.6259766-6.3393555c-.390625-.390625-1.0234375-.390625-1.4140625 0z\"/><path d=\"m50.9248047 20.8085938c-.390625.390625-.390625 1.0234375 0 1.4140625 5.390625 5.3911133 5.390625 14.1635742 0 19.5546875-.390625.390625-.390625 1.0234375 0 1.4140625.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c6.1708984-6.1708984 6.1708984-16.2119141 0-22.3828125-.390625-.390625-1.0234375-.390625-1.4140625 0z\"/><path d=\"m17.9277344 25.6606445c-.390625-.390625-1.0234375-.390625-1.4140625 0-1.6933594 1.6933594-2.6259766 3.9448242-2.6259766 6.3393555s.9326172 4.6459961 2.6259766 6.3393555c.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c.390625-.390625.390625-1.0239258 0-1.4140625-1.3154297-1.315918-2.0400391-3.0649414-2.0400391-4.925293s.7246094-3.609375 2.0400391-4.925293c.390625-.3901367.390625-1.0234375 0-1.4140625z\"/><path d=\"m13.0751953 20.8085938c-.390625-.390625-1.0234375-.390625-1.4140625 0-6.1708984 6.1708984-6.1708984 16.2119141 0 22.3828125.1953125.1953125.4511719.2929688.7070312.2929688s.5117188-.0976562.7070312-.2929688c.390625-.390625.390625-1.0234375 0-1.4140625-5.390625-5.3911133-5.390625-14.1635742 0-19.5546875.390625-.390625.390625-1.0234375 0-1.4140625z\"/><path d=\"m39.2626953 2h-14.5253906c-.2744141 0-.5361328.112793-.7255859.3115234-.1884766.1987305-.2871094.4663086-.2734375.7402344l2.0253906 38.9492188c.0283203.5317383.4667969.9482422.9990234.9482422h10.4746094c.5322266 0 .9707031-.4165039.9990234-.9482422l2.0253907-38.9492188c.0136719-.2739258-.0849609-.5415039-.2734375-.7402344-.1894531-.1987305-.4511719-.3115234-.7255859-.3115234zm-2.9746094 38.9492188h-8.5761719l-1.9208984-36.9492188h12.4179688l-1.9208984 36.9492188z\"/><path d=\"m32 47.3198242c-4.046875 0-7.3398438 3.2924805-7.3398438 7.3398438s3.2929688 7.340332 7.3398438 7.340332 7.3398438-3.2929688 7.3398438-7.340332-3.2929688-7.3398438-7.3398438-7.3398438zm0 12.6801758c-2.9443359 0-5.3398438-2.3955078-5.3398438-5.340332 0-2.9443359 2.3955078-5.3398438 5.3398438-5.3398438s5.3398438 2.3955078 5.3398438 5.3398438c0 2.9448242-2.3955078 5.340332-5.3398438 5.340332z\"/></svg>`,\n 'key': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M463.743,48.257c-64.343-64.343-169.037-64.342-233.38,0c-43.946,43.946-59.206,108.725-40.185,167.483L4.395,401.524 C1.581,404.337,0,408.153,0,412.132v84.866C0,505.284,6.717,512,15.002,512h84.866c3.98,0,7.794-1.581,10.609-4.395l21.22-21.22 c3.241-3.242,4.823-7.787,4.293-12.341l-2.648-22.783l31.584-2.977c7.172-0.676,12.852-6.355,13.528-13.527l2.979-31.588 l22.785,2.648c4.254,0.497,8.512-0.851,11.71-3.698c3.196-2.846,5.025-6.923,5.025-11.204v-27.938h27.43 c3.949,0,7.738-1.557,10.547-4.333l37.272-36.842c58.772,19.051,123.583,3.794,167.542-40.166 C528.085,217.294,528.085,112.599,463.743,48.257z M442.527,260.421c-37.866,37.865-94.666,49.684-144.703,30.114 c-5.522-2.159-11.796-0.865-16.011,3.302l-39.593,39.136H205.95c-8.285,0-15.002,6.717-15.002,15.002v26.093l-21.28-2.473 c-4.009-0.465-8.035,0.703-11.172,3.241c-3.136,2.539-5.118,6.234-5.497,10.252l-3.253,34.489l-34.486,3.25 c-4.018,0.379-7.713,2.36-10.253,5.497c-2.539,3.136-3.708,7.164-3.242,11.172l3.582,30.804l-11.694,11.697h-63.65v-63.649 l188.097-188.097c4.214-4.214,5.535-10.523,3.364-16.073c-19.572-50.038-7.751-106.836,30.114-144.703 c52.646-52.644,138.304-52.644,190.948,0C495.17,122.118,495.17,207.777,442.527,260.421z\"/></g></g><g><g><path d=\"M421.309,90.69c-17.548-17.549-46.102-17.548-63.649,0c-17.548,17.548-17.548,46.101,0,63.649 c17.547,17.548,46.101,17.55,63.649,0C438.857,136.791,438.857,108.238,421.309,90.69z M400.093,133.123 c-5.849,5.849-15.366,5.85-21.216,0c-5.849-5.849-5.849-15.366,0-21.216c5.865-5.864,15.352-5.864,21.216,0 C405.957,117.771,405.956,127.259,400.093,133.123z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'list': `<svg viewBox=\"0 0 25 25\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Todo\"><path d=\"m20.4 12.349a.5.5 0 0 1 -.5.5h-8.612a.5.5 0 0 1 0-1h8.612a.5.5 0 0 1 .5.5zm-9.112-5.549h8.612a.5.5 0 0 0 0-1h-8.612a.5.5 0 0 0 0 1zm-2.9-2.271-2.05 2.418-.84-1.1a.5.5 0 1 0 -.795.606l1.217 1.6a.5.5 0 0 0 .385.2h.013a.5.5 0 0 0 .382-.185l2.451-2.895a.5.5 0 1 0 -.763-.647zm11.512 13.371h-8.612a.5.5 0 0 0 0 1h8.612a.5.5 0 0 0 0-1zm-10.8-5.551a2.249 2.249 0 1 1 -2.251-2.249 2.252 2.252 0 0 1 2.251 2.249zm-1 0a1.249 1.249 0 1 0 -1.251 1.251 1.25 1.25 0 0 0 1.251-1.251zm1 6.053a2.249 2.249 0 1 1 -2.249-2.249 2.251 2.251 0 0 1 2.249 2.247zm-1 0a1.249 1.249 0 1 0 -1.251 1.248 1.25 1.25 0 0 0 1.251-1.25z\"/></g></svg>`,\n 'load': `<svg id=\"Layer_1\" enable-background=\"new 0 0 24 24\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"m12 23c-6.1 0-11-4.9-11-11 0-.6.4-1 1-1s1 .4 1 1c0 5 4 9 9 9s9-4 9-9-4-9-9-9c-.6 0-1-.4-1-1s.4-1 1-1c6.1 0 11 4.9 11 11s-4.9 11-11 11z\" fill=\"rgb(0,0,0)\"/></g></svg>`,\n 'lock': `<svg viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Layer_11\" fill=\"rgb(0,0,0)\" data-name=\"Layer 11\"><path d=\"m24 11.57h-.53v-3.1a7.47 7.47 0 1 0 -14.94 0v3.1h-.53a4 4 0 0 0 -4 4v11.43a4 4 0 0 0 4 4h16a4 4 0 0 0 4-4v-11.43a4 4 0 0 0 -4-4zm-13.47-3.1a5.47 5.47 0 1 1 10.94 0v3.1h-10.94zm15.47 18.53a2 2 0 0 1 -2 2h-16a2 2 0 0 1 -2-2v-11.43a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\"/><path d=\"m16 17.926a1.948 1.948 0 0 0 -1.354 3.348v2.371a1 1 0 0 0 1 1h.708a1 1 0 0 0 1-1v-2.371a1.948 1.948 0 0 0 -1.354-3.348z\"/></g></svg>`,\n 'minus': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m18 11h-12c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z\" fill=\"rgb(0,0,0)\"/></svg>`,\n 'padlock': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><path style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" d=\"&#10;&#9;&#9;M96,437v30c0,16.569,13.431,30,30,30h300c16.569,0,30-13.431,30-30V247c0-16.569-13.431-30-30-30H126c-16.569,0-30,13.431-30,30v30&#10;&#9;&#9;\"/><rect x=\"56\" y=\"277\" style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" width=\"80\" height=\"160\"/><line style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" x1=\"136\" y1=\"357\" x2=\"56\" y2=\"357\"/><path style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" d=\"&#10;&#9;&#9;M196,217v-62c0-44.183,35.817-80,80-80h0c44.183,0,80,35.817,80,80v62h60v-62c0-77.32-62.68-140-140-140h0&#10;&#9;&#9;c-77.32,0-140,62.68-140,140v62H196z\"/><circle style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" cx=\"276\" cy=\"357\" r=\"30\"/><line style=\"fill:none;stroke:#000000;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;\" x1=\"276\" y1=\"387\" x2=\"276\" y2=\"417\"/></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'plus': `<svg fill=\"none\" height=\"512\" viewBox=\"0 0 24 24\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-rule=\"evenodd\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"><path d=\"m12.0313 4.25c.4142.00054.7496.33677.749.75098l-.0183 14.00002c-.0006.4142-.3368.7495-.751.749s-.7496-.3368-.749-.751l.0183-13.99998c.0006-.41422.3368-.74956.751-.74902z\"/><path d=\"m4.25 12c0-.4142.33579-.75.75-.75h14c.4142 0 .75.3358.75.75s-.3358.75-.75.75h-14c-.41421 0-.75-.3358-.75-.75z\"/></g></svg>`,\n 'question': `<svg id=\"Layer_1\" enable-background=\"new 0 0 64 64\" height=\"512\" viewBox=\"0 0 64 64\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><g><g id=\"LWPOLYLINE\"><g><path d=\"m31.321 38.904c-.006 0-.012 0-.018 0-1.104-.01-1.992-.913-1.982-2.018l.009-1c0-.057.003-.115.009-.172.277-2.909 2.208-4.692 3.761-6.125.526-.486 1.024-.945 1.448-1.424.517-.583 1.267-1.777.478-3.218-.909-1.664-3.129-2.135-4.854-1.74-1.802.412-2.466 1.951-2.702 2.831-.286 1.067-1.383 1.7-2.45 1.415-1.067-.286-1.7-1.383-1.415-2.45.797-2.977 2.865-5.052 5.673-5.695 3.779-.863 7.585.664 9.256 3.719 1.391 2.544 1.01 5.529-.995 7.791-.557.628-1.152 1.178-1.728 1.709-1.435 1.325-2.332 2.211-2.484 3.49l-.008.903c-.008 1.101-.902 1.984-1.998 1.984z\"/></g></g><g id=\"POINT\"><g><path d=\"m31.32 44.9c-.52 0-1.04-.21-1.41-.58-.38-.37-.59-.89-.59-1.42 0-.52.21-1.04.59-1.41.74-.74 2.08-.74 2.82 0 .38.37.59.89.59 1.41 0 .53-.21 1.04-.58 1.42-.38.37-.89.58-1.42.58z\"/></g></g><g id=\"CIRCLE_2_\"><g><path d=\"m31.923 57.997c-2.275 0-4.53-.296-6.703-.881-9.364-2.519-16.696-10.276-18.679-19.763-2.021-9.665 1.709-19.825 9.504-25.884 4.506-3.503 10.189-5.433 16.003-5.433 4.025 0 8.022.936 11.56 2.705 8.737 4.371 14.382 13.503 14.382 23.266 0 7.966-3.759 15.644-10.055 20.538-4.522 3.516-10.209 5.452-16.012 5.452zm.126-47.961c-4.929 0-9.741 1.63-13.548 4.591-6.597 5.128-9.755 13.727-8.044 21.907 1.678 8.025 7.881 14.588 15.803 16.719 1.834.493 3.74.744 5.663.744h.001c4.918 0 9.732-1.637 13.557-4.61 5.329-4.142 8.51-10.639 8.51-17.38 0-8.261-4.777-15.989-12.171-19.688-2.986-1.493-6.364-2.283-9.771-2.283z\"/></g></g></g></svg>`,\n 'settings': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M493.758,234.717h-86.347c-10.076,0-18.242,8.166-18.242,18.242c0,10.076,8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242C512,242.884,503.834,234.717,493.758,234.717z\"/></g></g><g><g><path d=\"M275.458,234.717H18.242C8.166,234.717,0,242.884,0,252.96c0,10.076,8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242C293.701,242.884,285.534,234.717,275.458,234.717z\"/></g></g><g><g><path d=\"M341.131,169.045c-46.275,0-83.914,37.646-83.914,83.914c0,46.275,37.646,83.915,83.914,83.915 c46.268,0,83.914-37.64,83.914-83.915C425.045,206.691,387.405,169.045,341.131,169.045z M341.131,300.39 c-26.153,0-47.43-21.277-47.43-47.43c0-26.153,21.277-47.43,47.43-47.43c26.153,0,47.436,21.277,47.436,47.43 C388.567,279.113,367.29,300.39,341.131,300.39z\"/></g></g><g><g><path d=\"M104.589,385.52H18.242C8.166,385.52,0,393.687,0,403.763s8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242S114.665,385.52,104.589,385.52z\"/></g></g><g><g><path d=\"M493.758,385.52H236.542c-10.076,0-18.242,8.167-18.242,18.242s8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242S503.834,385.52,493.758,385.52z\"/></g></g><g><g><path d=\"M170.869,319.848c-46.269,0-83.914,37.64-83.914,83.914s37.646,83.915,83.914,83.915s83.914-37.646,83.914-83.914 S217.138,319.848,170.869,319.848z M170.869,451.199c-26.153,0-47.43-21.277-47.43-47.43c0-26.159,21.277-47.436,47.43-47.436 c26.153,0,47.43,21.277,47.43,47.436C218.299,429.922,197.023,451.199,170.869,451.199z\"/></g></g><g><g><path d=\"M104.589,89.995H18.242C8.166,89.995,0,98.162,0,108.238s8.166,18.242,18.242,18.242h86.347 c10.076,0,18.242-8.166,18.242-18.242S114.665,89.995,104.589,89.995z\"/></g></g><g><g><path d=\"M493.758,89.995H236.542c-10.076,0-18.242,8.167-18.242,18.242s8.166,18.242,18.242,18.242h257.216 c10.076,0,18.242-8.166,18.242-18.242S503.834,89.995,493.758,89.995z\"/></g></g><g><g><path d=\"M170.869,24.323c-46.269,0-83.914,37.646-83.914,83.914c0,46.268,37.646,83.914,83.914,83.914s83.914-37.64,83.914-83.914 C254.784,61.963,217.138,24.323,170.869,24.323z M170.869,155.667c-26.153,0-47.43-21.277-47.43-47.43 c0-26.153,21.277-47.43,47.43-47.43c26.153,0,47.43,21.277,47.43,47.43C218.299,134.391,197.023,155.667,170.869,155.667z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'square-rounded-dashed': `<svg fill=\"none\" height=\"25\" viewBox=\"0 0 24 25\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path clip-rule=\"evenodd\" d=\"m11.9979 2.0271h.0042c.6824 0 1.3167 0 1.9043.00498.4142.00351.7471.34213.7436.75633s-.3422.74713-.7564.74362c-.5806-.00493-1.2089-.00493-1.8936-.00493s-1.313 0-1.8937.00493c-.41416.00351-.75278-.32942-.75629-.74362s.32941-.75282.74359-.75633c.5876-.00498 1.2219-.00498 1.9043-.00498zm-4.96054.86429c.07573.40723-.19299.79875-.60022.87449-.9433.17544-1.55071.46794-2.01557.93279-.46485.46486-.75735 1.07227-.93279 2.01557-.07574.40723-.46726.67595-.87449.60022-.40723-.07574-.67596-.46727-.60022-.8745.21113-1.13518.60236-2.05746 1.34684-2.80195.74449-.74449 1.66677-1.13572 2.80195-1.34684.40723-.07574.79876.19299.8745.60022zm9.92524 0c.0758-.40723.4673-.67596.8745-.60022 1.1352.21112 2.0575.60236 2.802 1.34684.7445.74449 1.1357 1.66677 1.3468 2.80195.0758.40723-.193.79876-.6002.8745-.4072.07573-.7987-.19299-.8745-.60022-.1754-.9433-.4679-1.55071-.9328-2.01557-.4648-.46485-1.0722-.75735-2.0155-.93279-.4073-.07574-.676-.46726-.6003-.87449zm-14.45129 6.73574c.4142.00351.74713.34213.74362.75637-.00492.5806-.00493 1.2089-.00493 1.8936s.00001 1.3131.00493 1.8937c.00351.4142-.32942.7528-.74362.7563-.41419.0036-.75282-.3294-.75633-.7436-.00498-.5876-.00498-1.2219-.00498-1.9043v-.0042c0-.6824 0-1.3167.00498-1.9043.00351-.41416.34213-.74709.75633-.74357zm18.97739 0c.4142-.00352.7528.32941.7563.74357.005.5878.005 1.2223.005 1.9048v.0039c0 .6823 0 1.3166-.005 1.9041-.0035.4142-.3421.7472-.7563.7436-.4142-.0035-.7471-.3421-.7436-.7563.0049-.5806.0049-1.209.0049-1.8937s0-1.313-.0049-1.8936c-.0035-.41424.3294-.75286.7436-.75637zm-18.87441 7.61257c.40723-.0757.79875.193.87449.6003.17544.9433.46794 1.5507.93279 2.0155.46486.4649 1.07227.7574 2.01557.9328.40723.0758.67595.4673.60022.8745-.07574.4072-.46727.676-.8745.6002-1.13518-.2111-2.05746-.6023-2.80195-1.3468s-1.13571-1.6668-1.34684-2.802c-.07574-.4072.19299-.7987.60022-.8745zm18.77141 0c.4072.0758.676.4673.6002.8745-.2111 1.1352-.6023 2.0575-1.3468 2.802s-1.6668 1.1357-2.802 1.3468c-.4072.0758-.7987-.193-.8745-.6002-.0757-.4072.193-.7987.6003-.8745.9433-.1754 1.5507-.4679 2.0155-.9328.4649-.4648.7574-1.0722.9328-2.0155.0758-.4073.4673-.676.8745-.6003zm-12.03552 4.5261c.00351-.4142.34214-.7471.75632-.7436.5806.0049 1.2089.0049 1.8935.0049.6847 0 1.313 0 1.8936-.0049.4142-.0035.7529.3294.7564.7436s-.3294.7528-.7436.7563c-.5876.005-1.2218.005-1.9041.005h-.0039c-.6824 0-1.3169 0-1.9046-.005-.4142-.0035-.74713-.3421-.74362-.7563z\" fill=\"rgb(0,0,0)\" fill-rule=\"evenodd\"/></svg>`,\n 'trash': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\"/></svg>`,\n 'user': `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/></svg>`,\n 'users': `<svg version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\" style=\"enable-background:new 0 0 512 512;\" xml:space=\"preserve\"><g><g><path d=\"M437.76,195.421c14.561-14.261,23.04-33.742,23.04-54.621c0-42.346-34.45-76.8-76.8-76.8 c-13.992,0-27.758,3.846-39.825,11.125c-4.033,2.438-5.333,7.679-2.9,11.717c2.433,4.038,7.683,5.325,11.717,2.9 c9.408-5.675,20.125-8.675,31.008-8.675c32.933,0,59.733,26.796,59.733,59.733c0,20.283-10.158,38.979-27.208,50.037 c-14.317,9.392-32.467,12.1-49.042,7.379c-4.483-1.292-9.25,1.325-10.55,5.858c-1.292,4.533,1.333,9.254,5.867,10.55 c6.9,1.975,14.033,2.975,21.2,2.975c13.418,0,26.388-3.66,37.903-10.27c43.806,15.873,73.03,57.232,73.03,104.137v42.667h-77.812 c-6.044-56.996-41.902-106.872-94.205-130.555c16.644-16.946,26.95-40.138,26.95-65.711C349.867,106.108,307.758,64,256,64 c-51.758,0-93.867,42.108-93.867,93.867c0,25.581,10.312,48.78,26.965,65.728c-17.602,7.997-33.927,19.185-47.773,32.952 c-26.543,26.619-42.695,60.784-46.529,97.588H17.067v-42.667c0-29.55,11.542-57.412,32.467-78.425 c11.519-11.446,25.543-20.178,40.643-25.666C101.694,213.96,114.625,217.6,128,217.6c7.167,0,14.3-1,21.2-2.975 c4.533-1.296,7.158-6.017,5.867-10.55c-1.3-4.533-6.067-7.146-10.55-5.858c-16.567,4.729-34.708,2.025-49.083-7.4 c-17.008-11.038-27.167-29.733-27.167-50.017c0-32.937,26.8-59.733,59.733-59.733c10.883,0,21.6,3,31.008,8.675 c4.05,2.425,9.275,1.125,11.717-2.9c2.433-4.037,1.133-9.279-2.9-11.717C155.758,67.846,141.992,64,128,64 c-42.35,0-76.8,34.454-76.8,76.8c0,20.863,8.465,40.329,22.984,54.577c-13.533,6.291-26.032,14.976-36.717,25.59 C13.308,245.233,0,277.371,0,311.467v51.2c0,4.713,3.817,8.533,8.533,8.533h85.333v68.267c0,4.713,3.817,8.533,8.533,8.533h307.2 c4.717,0,8.533-3.821,8.533-8.533V371.2h85.333c4.717,0,8.533-3.821,8.533-8.533v-51.2 C512,261.012,482.678,216.128,437.76,195.421z M179.2,157.867c0-42.346,34.45-76.8,76.8-76.8c42.35,0,76.8,34.454,76.8,76.8 s-34.45,76.8-76.8,76.8C213.65,234.667,179.2,200.212,179.2,157.867z M401.067,430.933H110.933V371.2 c0-38.692,15.083-75.129,42.45-102.579c14.417-14.34,31.895-25.463,50.634-32.659c14.895,9.947,32.767,15.771,51.983,15.771 c19.248,0,37.151-5.841,52.06-15.818c55.778,21.431,93.007,75.205,93.007,135.285V430.933z\"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>`,\n 'x': `<svg id=\"Icons\" height=\"512\" viewBox=\"0 0 64 64\" width=\"512\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m4.59 59.41a2 2 0 0 0 2.83 0l24.58-24.58 24.59 24.58a2 2 0 0 0 2.83-2.83l-24.59-24.58 24.58-24.59a2 2 0 0 0 -2.83-2.83l-24.58 24.59-24.59-24.58a2 2 0 0 0 -2.82 2.82l24.58 24.59-24.58 24.59a2 2 0 0 0 0 2.82z\"/></svg>`,\n};\n\nexport type CoreIconName = keyof typeof CORE_ICONS | (string & {});\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { catchError, shareReplay } from 'rxjs/operators';\nimport { CORE_ICONS } from './core-icons';\n\n/**\n * Service for loading and caching icons from both built-in registry and customer uploads.\n *\n * Built-in icons are stored in memory and returned immediately.\n * Customer icons are fetched from the API and cached after first request.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class CoarIconService {\n private readonly http = inject(HttpClient);\n private customerIconCache = new Map<string, Observable<string | null>>();\n\n /**\n * Get an icon by name. Handles both built-in and customer icons.\n *\n * @param name - Icon identifier (e.g., \"settings\" or \"customer:invoicePaid\")\n * @returns Observable of SVG string, or null if not found\n */\n getIcon(name: string): Observable<string | null> {\n const parsed = this.parseIconName(name);\n\n if (parsed.source === 'builtin') {\n return this.getBuiltInIcon(parsed.key);\n } else if (parsed.source === 'customer') {\n return this.getCustomerIcon(parsed.key);\n }\n\n return of(null);\n }\n\n /**\n * Parse icon name into source type and key.\n *\n * Examples:\n * - \"settings\" -> { source: \"builtin\", key: \"settings\" }\n * - \"customer:invoicePaid\" -> { source: \"customer\", key: \"invoicePaid\" }\n */\n private parseIconName(name: string): { source: 'builtin' | 'customer'; key: string } {\n if (name.startsWith('customer:')) {\n return {\n source: 'customer',\n key: name.substring(9),\n };\n }\n\n return {\n source: 'builtin',\n key: name,\n };\n }\n\n /**\n * Get a built-in icon from the in-memory registry.\n */\n private getBuiltInIcon(key: string): Observable<string | null> {\n const svg = CORE_ICONS[key as keyof typeof CORE_ICONS] || null;\n return of(svg || null);\n }\n\n /**\n * Get a customer icon from the API, with caching.\n * Uses shareReplay(1) to ensure only one network request per icon.\n */\n private getCustomerIcon(key: string): Observable<string | null> {\n const cached = this.customerIconCache.get(key);\n if (cached) {\n return cached;\n }\n\n const request$ = this.http\n .get(`/api/icons/${key}.svg`, {\n responseType: 'text',\n })\n .pipe(\n catchError(() => of(null)),\n shareReplay(1)\n );\n\n this.customerIconCache.set(key, request$);\n return request$;\n }\n\n /**\n * Clear the customer icon cache.\n * Useful when icons are updated on the server.\n */\n clearCache(): void {\n this.customerIconCache.clear();\n }\n\n /**\n * Clear a specific icon from the cache.\n */\n clearIconCache(name: string): void {\n const parsed = this.parseIconName(name);\n if (parsed.source === 'customer') {\n this.customerIconCache.delete(parsed.key);\n }\n }\n}\n","\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n Input,\n signal,\n effect,\n booleanAttribute,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { CoarIconService } from './coar-icon.service';\nimport { CoreIconName } from './core-icons';\n\nexport type CoarIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'auto';\n\n/**\n * COAR Icon Component\n *\n * Hybrid icon system supporting built-in icons and customer-uploaded SVGs.\n *\n * Usage:\n * ```html\n * <coar-icon name=\"settings\" size=\"md\"></coar-icon>\n * <coar-icon name=\"customer:invoicePaid\" size=\"lg\"></coar-icon>\n * ```\n *\n * Size tokens:\n * - xs = 12px\n * - sm = 16px\n * - md = 20px (default)\n * - lg = 24px\n * - xl = 32px\n * - auto = fills parent container (use padding on parent to control)\n */\n@Component({\n selector: 'coar-icon',\n standalone: true,\n imports: [],\n template: `\n @if(name()) { @if (sanitizedSvg(); as svg) {\n <div\n class=\"coar-icon\"\n [class]=\"isPresetSize(size()) ? 'coar-icon--' + size() : ''\"\n [class.coar-icon--spin]=\"spin()\"\n [style.transform]=\"'rotate(' + rotate() + 'deg)'\"\n [style.color]=\"color()\"\n [style.width]=\"!isPresetSize(size()) ? size() : null\"\n [style.height]=\"!isPresetSize(size()) ? size() : null\"\n [style.transition]=\"getRotateTransitionValue()\"\n [innerHTML]=\"svg\"\n ></div>\n } @else if (isLoading()) {\n <div\n class=\"coar-icon coar-icon--loading\"\n [class]=\"isPresetSize(size()) ? 'coar-icon--' + size() : ''\"\n [style.width]=\"!isPresetSize(size()) ? size() : null\"\n [style.height]=\"!isPresetSize(size()) ? size() : null\"\n ></div>\n } } @if (label()) {\n <span class=\"coar-icon__label\">{{ label() }}</span>\n } @else {\n <span class=\"coar-icon__label\">\n <ng-content></ng-content>\n </span>\n }\n `,\n styleUrl: './coar-icon.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.icon-name]': 'name()',\n },\n})\nexport class CoarIconComponent {\n private readonly iconService = inject(CoarIconService);\n private readonly sanitizer = inject(DomSanitizer);\n\n /**\n * Icon identifier.\n * Examples: \"settings\", \"user\", \"customer:invoicePaid\"\n */\n name = input<CoreIconName>();\n\n /**\n * Icon size. Defaults to 'md' (20px).\n * Can be a preset token (xs, sm, md, lg, xl, auto) or a custom CSS value (e.g., '42px', '3rem').\n */\n size = input<CoarIconSize | string>('md');\n\n /**\n * Rotation angle in degrees (0, 90, 180, 270, or any number).\n */\n rotate = input<number>(0);\n\n /**\n * Rotation transition animation.\n * - Empty/undefined: No animation\n * - Number: Duration in milliseconds (e.g., 300)\n * - String: Full CSS transition value (e.g., '0.3s ease-in-out', '500ms cubic-bezier(0.4, 0, 0.2, 1)')\n */\n rotateTransition = input<number | string>();\n\n /**\n * Enable continuous spinning animation.\n */\n spin = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Icon color. Can be any valid CSS color value.\n * Examples: 'red', '#ff0000', 'rgb(255, 0, 0)', 'var(--coar-text-semantic-error-bold)'\n * Use 'inherit' to inherit the parent element's color.\n */\n color = input<string>('inherit');\n\n /**\n * Optional text label to display next to the icon.\n */\n label = input<string | number>();\n\n /**\n * Optional fallback icon to show if the requested icon fails to load.\n * If not specified and the icon fails, nothing will be rendered.\n */\n @Input() fallback?: string;\n\n /**\n * Signal holding the sanitized SVG HTML ready for rendering.\n */\n protected sanitizedSvg = signal<SafeHtml | null>(null);\n\n /**\n * Signal indicating whether an icon is currently being loaded.\n */\n protected isLoading = signal(false);\n\n /**\n * Check if the size is a preset token (xs, sm, md, lg, xl, auto).\n */\n protected isPresetSize(size: string): boolean {\n return ['xs', 'sm', 'md', 'lg', 'xl', 'auto'].includes(size);\n }\n\n /**\n * Compute the CSS transition value for rotation.\n */\n protected getRotateTransitionValue(): string | null {\n const transition = this.rotateTransition();\n if (!transition) return null;\n\n if (typeof transition === 'number') {\n return `transform ${transition}ms ease-in-out`;\n }\n\n if (!transition.includes('transform')) {\n return `transform ${transition}`;\n }\n\n return transition;\n }\n\n constructor() {\n effect(() => {\n const iconName = this.name();\n if (!iconName) {\n this.sanitizedSvg.set(null);\n return;\n }\n\n this.loadIcon(iconName);\n });\n }\n\n /**\n * Load an icon from the service and sanitize it.\n */\n private loadIcon(name: string): void {\n this.isLoading.set(true);\n\n this.iconService.getIcon(name).subscribe({\n next: (svg) => {\n if (svg) {\n this.sanitizedSvg.set(this.sanitizer.bypassSecurityTrustHtml(svg));\n this.isLoading.set(false);\n } else {\n console.debug(`Loading customer icon: ${name}`);\n this.loadFallback();\n }\n },\n error: () => {\n console.debug(`Loading customer icon: ${name}`);\n this.loadFallback();\n },\n });\n }\n\n /**\n * Load fallback icon if available.\n */\n private loadFallback(): void {\n if (this.fallback) {\n this.iconService.getIcon(this.fallback).subscribe({\n next: (svg) => {\n if (svg) {\n this.sanitizedSvg.set(this.sanitizer.bypassSecurityTrustHtml(svg));\n } else {\n this.sanitizedSvg.set(null);\n }\n this.isLoading.set(false);\n },\n error: () => {\n this.sanitizedSvg.set(null);\n this.isLoading.set(false);\n },\n });\n } else {\n this.sanitizedSvg.set(null);\n this.isLoading.set(false);\n }\n }\n}\n","import { forwardRef, type Provider, type Type, signal } from '@angular/core';\r\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport function coarProvideValueAccessor(type: () => Type<ControlValueAccessor>): Provider {\r\n return {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(type),\r\n multi: true,\r\n };\r\n}\r\n\r\nexport abstract class CoarControlValueAccessor<T> implements ControlValueAccessor {\r\n protected readonly cvaDisabled = signal(false);\r\n\r\n protected cvaOnChange: (value: T) => void = () => undefined;\r\n protected cvaOnTouched: () => void = () => undefined;\r\n\r\n public registerOnChange(fn: (value: T) => void): void {\r\n this.cvaOnChange = fn;\r\n }\r\n\r\n public registerOnTouched(fn: () => void): void {\r\n this.cvaOnTouched = fn;\r\n }\r\n\r\n public setDisabledState(isDisabled: boolean): void {\r\n this.cvaDisabled.set(isDisabled);\r\n }\r\n\r\n public abstract writeValue(value: T | null): void;\r\n}\r\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../coar-icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../forms/coar-control-value-accessor';\n\nexport type CoarTextInputSize = 'xs' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'coar-text-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-text-input.component.html',\n styleUrl: './coar-text-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarTextInputComponent)],\n host: {\n '[class.coar-text-input--xs]': 'size() === \"xs\"',\n '[class.coar-text-input--sm]': 'size() === \"sm\"',\n '[class.coar-text-input--md]': 'size() === \"md\"',\n '[class.coar-text-input--lg]': 'size() === \"lg\"',\n '[class.coar-text-input--multiline]': 'isMultiline()',\n },\n})\nexport class CoarTextInputComponent extends CoarControlValueAccessor<string> {\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /** Current input value (two-way bindable with [(value)]) */\n value = model<string>('');\n\n /** Input size - matches button/checkbox sizes for consistent layouts */\n size = input<CoarTextInputSize>('md');\n\n /** Number of visible text rows (1 = single-line input, 2+ = textarea) */\n rows = input<number>(1);\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Text or symbol displayed before the input value */\n prefix = input<string>('');\n\n /** Text or symbol displayed after the input value */\n suffix = input<string>('');\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** HTML autocomplete attribute */\n autocomplete = input<string>('');\n\n /** Maximum character length */\n maxlength = input<number | undefined>(undefined);\n\n /** Emits when input value changes */\n valueChange = output<string>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected isFocused = signal(false);\n protected inputRef =\n viewChild<ElementRef<HTMLInputElement | HTMLTextAreaElement>>('inputElement');\n\n protected isMultiline = computed(() => this.rows() > 1);\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n protected inputId = computed(\n () => this.id() || `coar-text-input-${Math.random().toString(36).substr(2, 9)}`\n );\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n public writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n const newValue = target.value;\n this.value.set(newValue);\n this.valueChange.emit(newValue);\n this.cvaOnChange(newValue);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected onClear(): void {\n this.value.set('');\n this.valueChange.emit('');\n this.cvaOnChange('');\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n}\n","<div class=\"coar-text-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-text-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-text-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-text-input-container\"\n [class.coar-text-input-focused]=\"isFocused()\"\n [class.coar-text-input-disabled]=\"isDisabled()\"\n [class.coar-text-input-readonly]=\"readonly()\"\n [class.coar-text-input-error]=\"hasError()\"\n >\n <!-- Prefix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n }\n\n <!-- Input Element (single-line) -->\n @if (!isMultiline()) {\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-text-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n }\n\n <!-- Textarea (multiline) -->\n @if (isMultiline()) {\n <textarea\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [rows]=\"rows()\"\n class=\"coar-text-input-field coar-text-input-textarea\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n }\n\n <!-- Suffix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n }\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon\n name=\"x\"\n size=\"auto\"\n class=\"coar-text-input-clear\"\n [class.coar-text-input-clear--multiline]=\"isMultiline()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n }\n\n <!-- Suffix Actions (always visible, e.g., action buttons) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix-actions\">\n <ng-content select=\"[suffixAction]\"></ng-content>\n </span>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-text-input-message\" [class.coar-text-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n","import { Injectable, InjectionToken, signal } from '@angular/core';\n\n/** Configuration for number formatting */\nexport interface NumberFormatConfig {\n readonly decimal: string;\n readonly thousand: string;\n}\n\n/** Configuration for date formatting */\nexport interface DateFormatConfig {\n /** Date format pattern: 'dd.mm.yyyy', 'dd/mm/yyyy', 'mm/dd/yyyy', 'yyyy-mm-dd' */\n readonly pattern: 'dd.mm.yyyy' | 'dd/mm/yyyy' | 'mm/dd/yyyy' | 'yyyy-mm-dd';\n /** First day of week: 1 = Monday, 7 = Sunday */\n readonly firstDayOfWeek: 1 | 7;\n}\n\n/** Complete locale configuration */\nexport interface LocaleConfig {\n readonly number: NumberFormatConfig;\n readonly date: DateFormatConfig;\n}\n\n/**\n * Service contract for locale-aware formatting.\n * Provides formatting rules (not translations) for numbers, dates, etc.\n *\n * This handles \"how to display\" (1.000,50 vs 1,000.50),\n * not \"what text to show\" (that's translation/i18n).\n */\nexport interface ICoarLocaleService {\n /**\n * Get number format configuration for a specific locale.\n * @param locale - Optional locale identifier (e.g., 'de-AT', 'en-US'). If not provided, uses default locale.\n * @returns Number format configuration with decimal and thousand separators\n */\n getNumberFormat(locale?: string): NumberFormatConfig;\n\n /**\n * Get date format configuration for a specific locale.\n * @param locale - Optional locale identifier (e.g., 'de-AT', 'en-US'). If not provided, uses default locale.\n * @returns Date format configuration with pattern and first day of week\n */\n getDateFormat(locale?: string): DateFormatConfig;\n\n /**\n * Get the current default locale identifier.\n * @returns Current default locale (e.g., 'de-AT', 'en-US')\n */\n getDefaultLocale(): string;\n\n /**\n * Set the default locale used when no locale is explicitly specified.\n * @param locale - Locale identifier (e.g., 'de-AT', 'en-US')\n */\n setDefaultLocale(locale: string): void;\n\n /**\n * Register a custom locale configuration.\n * Useful for specialized formats (e.g., financial reports with space as thousand separator).\n * @param id - Custom locale identifier (e.g., 'custom-finance')\n * @param config - Partial locale configuration (only specify what you want to override)\n */\n registerLocale(id: string, config: Partial<LocaleConfig>): void;\n}\n\n/**\n * Injection token for the locale service.\n * Use this to inject the locale service in components.\n *\n * @example\n * ```typescript\n * private localeService = inject(COAR_LOCALE_SERVICE, { optional: true });\n * ```\n */\nexport const COAR_LOCALE_SERVICE = new InjectionToken<ICoarLocaleService>('CoarLocaleService', {\n providedIn: 'root',\n factory: () => new CoarLocaleService(),\n});\n\n/**\n * Default implementation of locale service.\n * Uses browser's Intl.NumberFormat API for standard locales,\n * with support for custom locale registration.\n */\n@Injectable()\nexport class CoarLocaleService implements ICoarLocaleService {\n private defaultLocale = signal<string>('en-US');\n private customLocales = new Map<string, LocaleConfig>();\n\n getDefaultLocale(): string {\n return this.defaultLocale();\n }\n\n setDefaultLocale(locale: string): void {\n this.defaultLocale.set(locale);\n }\n\n registerLocale(id: string, config: Partial<LocaleConfig>): void {\n const defaults = this.getDefaults(id);\n this.customLocales.set(id, {\n number: config.number ?? defaults.number,\n date: config.date ?? defaults.date,\n });\n }\n\n getNumberFormat(locale?: string): NumberFormatConfig {\n const targetLocale = locale ?? this.defaultLocale();\n\n // Check custom locales first\n if (this.customLocales.has(targetLocale)) {\n return this.customLocales.get(targetLocale)!.number;\n }\n\n // Fall back to Intl.NumberFormat\n return this.getDefaults(targetLocale).number;\n }\n\n getDateFormat(locale?: string): DateFormatConfig {\n const targetLocale = locale ?? this.defaultLocale();\n\n // Check custom locales first\n if (this.customLocales.has(targetLocale)) {\n return this.customLocales.get(targetLocale)!.date;\n }\n\n // Fall back to detected defaults\n return this.getDefaults(targetLocale).date;\n }\n\n /**\n * Extract default formatting rules from browser's Intl API\n */\n private getDefaults(locale: string): LocaleConfig {\n try {\n const formatter = new Intl.NumberFormat(locale);\n const parts = formatter.formatToParts(1000.1);\n\n return {\n number: {\n decimal: parts.find((p) => p.type === 'decimal')?.value ?? '.',\n thousand: parts.find((p) => p.type === 'group')?.value ?? ',',\n },\n date: this.detectDateFormat(locale),\n };\n } catch {\n // Fallback if locale is invalid\n return {\n number: {\n decimal: '.',\n thousand: ',',\n },\n date: {\n pattern: 'dd.mm.yyyy',\n firstDayOfWeek: 1,\n },\n };\n }\n }\n\n /**\n * Detect date format based on locale.\n *\n * Uses Intl.DateTimeFormat to determine the date order for the locale,\n * then maps to one of our supported patterns.\n */\n private detectDateFormat(locale: string): DateFormatConfig {\n try {\n // Use Intl.DateTimeFormat to get locale-specific date order\n const formatter = new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n });\n\n // Format a test date to detect the order\n const parts = formatter.formatToParts(new Date(2024, 11, 25)); // Dec 25, 2024\n const order: string[] = [];\n\n for (const part of parts) {\n if (part.type === 'day') order.push('d');\n else if (part.type === 'month') order.push('m');\n else if (part.type === 'year') order.push('y');\n }\n\n const orderStr = order.join('');\n\n // Detect separator from the formatted string\n const formatted = formatter.format(new Date(2024, 11, 25));\n const separator = formatted.match(/[.\\-/]/)?.[0] ?? '.';\n\n // Map detected order to our supported patterns\n let pattern: DateFormatConfig['pattern'];\n if (orderStr === 'mdy') {\n pattern = 'mm/dd/yyyy';\n } else if (orderStr === 'ymd') {\n pattern = 'yyyy-mm-dd';\n } else if (separator === '/') {\n pattern = 'dd/mm/yyyy';\n } else {\n pattern = 'dd.mm.yyyy';\n }\n\n // Detect first day of week (Monday vs Sunday)\n // US, Canada, Japan typically use Sunday; most others use Monday\n const sundayFirstLocales = ['en-US', 'en-CA', 'ja-JP', 'ko-KR', 'zh-TW', 'he-IL'];\n const baseLocale = locale.split('-')[0];\n const firstDayOfWeek: 1 | 7 = sundayFirstLocales.some(\n (l) => locale.startsWith(l) || (baseLocale === 'en' && locale.includes('US'))\n )\n ? 7\n : 1;\n\n return { pattern, firstDayOfWeek };\n } catch {\n // Fallback to European format\n return {\n pattern: 'dd.mm.yyyy',\n firstDayOfWeek: 1,\n };\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n effect,\n ElementRef,\n viewChild,\n HostListener,\n afterNextRender,\n DestroyRef,\n inject,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent, CoarIconSize } from '../coar-icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../forms/coar-control-value-accessor';\nimport { Maskito } from '@maskito/core';\nimport { maskitoNumberOptionsGenerator } from '@maskito/kit';\nimport {\n COAR_LOCALE_SERVICE,\n type ICoarLocaleService as _ICoarLocaleService,\n type NumberFormatConfig,\n} from '../services/locale.service';\n\nexport type CoarNumberInputSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type CoarNumberInputStepperButtons = 'none' | 'increment' | 'decrement' | 'both';\n\n/**\n * Transform function for stepperButtons input.\n * Accepts boolean (attribute pattern) or explicit string values.\n * - true | '' (attribute present) → 'both'\n * - false | 'false' → 'none'\n * - 'increment' | 'decrement' | 'both' | 'none' → validated and passed through\n */\nfunction transformStepperButtons(value: boolean | string): CoarNumberInputStepperButtons {\n // Boolean false or string 'false' → no buttons\n if (value === false || value === 'false') return 'none';\n\n // Boolean true or empty string (attribute present) → both buttons\n if (value === true || value === '' || value === 'true') return 'both';\n\n // Validate and pass through string values\n if (value === 'increment' || value === 'decrement' || value === 'both' || value === 'none') {\n return value;\n }\n\n // Invalid value → default to none\n return 'none';\n}\n\n@Component({\n selector: 'coar-number-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-number-input.component.html',\n styleUrl: './coar-number-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarNumberInputComponent)],\n host: {\n '[class.coar-number-input--xs]': 'size() === \"xs\"',\n '[class.coar-number-input--sm]': 'size() === \"sm\"',\n '[class.coar-number-input--md]': 'size() === \"md\"',\n '[class.coar-number-input--lg]': 'size() === \"lg\"',\n },\n})\nexport class CoarNumberInputComponent extends CoarControlValueAccessor<number | null> {\n private readonly destroyRef = inject(DestroyRef);\n private readonly localeService = inject(COAR_LOCALE_SERVICE, { optional: true });\n private maskitoInstance?: Maskito;\n\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /**\n * Current numeric value.\n * Using model() for two-way binding support.\n */\n value = model<number | null>(null);\n\n /** Input size - matches button/checkbox sizes for consistent layouts */\n size = input<CoarNumberInputSize>('md');\n\n /** Minimum allowed value */\n min = input<number | undefined>(undefined);\n\n /** Maximum allowed value */\n max = input<number | undefined>(undefined);\n\n /** Step increment for arrows and keyboard */\n step = input<number>(1);\n\n /** Number of decimal places to display */\n decimals = input<number>(0);\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Controls visibility of increment/decrement stepper buttons.\n * Supports both boolean attribute pattern and granular string control:\n * - No attribute → no buttons\n * - `stepperButtons` (attribute) → both buttons\n * - `stepperButtons=\"increment\"` → only increment\n * - `stepperButtons=\"decrement\"` → only decrement\n * - `stepperButtons=\"both\"` → both buttons (explicit)\n * - `stepperButtons=\"none\"` → no buttons (explicit)\n */\n stepperButtons = input<CoarNumberInputStepperButtons, boolean | string>('none', {\n transform: transformStepperButtons,\n });\n\n /** Text or symbol displayed before the input value */\n prefix = input<string>('');\n\n /** Text or symbol displayed after the input value */\n suffix = input<string>('');\n\n /**\n * Locale identifier for number formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Number format configuration (decimal and thousand separators).\n * If not provided, uses locale service default or falls back to { decimal: '.', thousand: '' }.\n */\n numberFormat = input<NumberFormatConfig>();\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Emits when input value changes */\n valueChange = output<number | null>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected displayValue = signal<string>('');\n protected isFocused = signal(false);\n protected isDragging = signal(false);\n protected dragStartX = signal(0);\n protected dragStartValue = signal(0);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value() !== null && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n protected inputId = computed(\n () => this.id() || `coar-number-input-${Math.random().toString(36).substr(2, 9)}`\n );\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n protected iconSize = computed<CoarIconSize>(() => {\n const sizeMap: Record<CoarNumberInputSize, CoarIconSize> = {\n xs: 'xs',\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n };\n return sizeMap[this.size()];\n });\n\n protected showIncrementButton = computed(() => {\n const mode = this.stepperButtons();\n return mode === 'increment' || mode === 'both';\n });\n\n protected showDecrementButton = computed(() => {\n const mode = this.stepperButtons();\n return mode === 'decrement' || mode === 'both';\n });\n\n protected canDecrement = computed(() => {\n const val = this.value();\n const minVal = this.min();\n if (val === null) return true;\n if (minVal === undefined) return true;\n return val > minVal;\n });\n\n protected canIncrement = computed(() => {\n const val = this.value();\n const maxVal = this.max();\n if (val === null) return true;\n if (maxVal === undefined) return true;\n return val < maxVal;\n });\n\n constructor() {\n super();\n // Sync displayValue when value changes from outside\n effect(() => {\n const newValue = this.value();\n this.displayValue.set(this.formatValue(newValue));\n });\n\n // Initialize Maskito for number validation\n afterNextRender(() => {\n const inputElement = this.inputRef()?.nativeElement;\n if (inputElement) {\n this.initializeMaskito(inputElement);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n });\n }\n\n /**\n * Resolve number format configuration with priority chain:\n * 1. numberFormat input (explicit config object)\n * 2. localeService.getNumberFormat(locale) (service with locale override)\n * 3. localeService.getNumberFormat() (service with default locale)\n * 4. Hardcoded fallback { decimal: '.', thousand: '' }\n */\n private resolveNumberFormat(): NumberFormatConfig {\n // Priority 1: Explicit config object\n const format = this.numberFormat();\n if (format) {\n return format;\n }\n\n // Priority 2 & 3: Locale service (with optional locale override)\n if (this.localeService) {\n return this.localeService.getNumberFormat(this.locale());\n }\n\n // Priority 4: Fallback\n return { decimal: '.', thousand: '' };\n }\n\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.resolveNumberFormat();\n\n const maskOptions = maskitoNumberOptionsGenerator({\n decimalSeparator: format.decimal,\n thousandSeparator: format.thousand,\n maximumFractionDigits: this.decimals(),\n min: this.min(),\n max: this.max(),\n });\n\n this.maskitoInstance = new Maskito(inputElement, maskOptions);\n }\n\n protected formatValue(value: number | null): string {\n if (value === null) return '';\n const format = this.resolveNumberFormat();\n // Format with locale-specific decimal separator\n const formatted = value.toFixed(this.decimals());\n // Replace period with the configured decimal separator\n return formatted.replace('.', format.decimal);\n }\n\n /**\n * Parse locale-formatted string (respects component's decimal/thousand separators).\n * Used when user types or pastes into the input field.\n */\n protected parseValue(str: string): number | null {\n if (str.trim() === '') return null;\n const format = this.resolveNumberFormat();\n // Remove thousand separators first (before converting decimal)\n const withoutThousands = format.thousand\n ? str.replace(new RegExp(`\\\\${format.thousand}`, 'g'), '')\n : str;\n // Replace locale-specific decimal separator with period for parseFloat\n const normalized = withoutThousands.replace(format.decimal, '.');\n const parsed = parseFloat(normalized);\n if (isNaN(parsed)) return null;\n return parsed;\n }\n\n protected clampValue(value: number): number {\n const minVal = this.min();\n const maxVal = this.max();\n let clamped = value;\n if (minVal !== undefined && clamped < minVal) clamped = minVal;\n if (maxVal !== undefined && clamped > maxVal) clamped = maxVal;\n return clamped;\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.displayValue.set(target.value);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.commitValue();\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected commitValue(): void {\n const parsed = this.parseValue(this.displayValue());\n if (parsed !== null) {\n const clamped = this.clampValue(parsed);\n const rounded = parseFloat(clamped.toFixed(this.decimals()));\n this.value.set(rounded);\n // Don't reformat - Maskito already has the value formatted correctly\n // this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n } else {\n this.value.set(null);\n this.displayValue.set('');\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n }\n }\n\n public writeValue(value: number | null): void {\n this.value.set(value);\n }\n\n protected onClear(): void {\n this.value.set(null);\n this.displayValue.set('');\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n protected increment(): void {\n if (this.isDisabled() || this.readonly() || !this.canIncrement()) return;\n const current = this.value() ?? 0;\n const newValue = this.clampValue(current + this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n protected decrement(): void {\n if (this.isDisabled() || this.readonly() || !this.canDecrement()) return;\n const current = this.value() ?? 0;\n const newValue = this.clampValue(current - this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.increment();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.decrement();\n }\n }\n\n // Figma-style drag to change value\n protected onDragStart(event: MouseEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n event.preventDefault();\n this.isDragging.set(true);\n this.dragStartX.set(event.clientX);\n this.dragStartValue.set(this.value() ?? 0);\n document.body.style.cursor = 'ew-resize';\n }\n\n @HostListener('document:mousemove', ['$event'])\n protected onDragMove(event: MouseEvent): void {\n if (!this.isDragging()) return;\n const deltaX = event.clientX - this.dragStartX();\n // Sensitivity: 1 step per 10 pixels\n const sensitivity = 10;\n const stepCount = Math.round(deltaX / sensitivity);\n const newValue = this.clampValue(this.dragStartValue() + stepCount * this.step());\n const rounded = parseFloat(newValue.toFixed(this.decimals()));\n this.value.set(rounded);\n this.displayValue.set(this.formatValue(rounded));\n this.valueChange.emit(rounded);\n this.cvaOnChange(rounded);\n }\n\n @HostListener('document:mouseup')\n protected onDragEnd(): void {\n if (this.isDragging()) {\n this.isDragging.set(false);\n document.body.style.cursor = '';\n }\n }\n}\n","<div class=\"coar-number-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label\n [for]=\"inputId()\"\n class=\"coar-number-input-label\"\n [class.coar-number-input-label--draggable]=\"!isDisabled() && !readonly()\"\n (mousedown)=\"onDragStart($event)\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"coar-number-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-number-input-container\"\n [class.coar-number-input-focused]=\"isFocused()\"\n [class.coar-number-input-disabled]=\"isDisabled()\"\n [class.coar-number-input-readonly]=\"readonly()\"\n [class.coar-number-input-error]=\"hasError()\"\n [class.coar-number-input-dragging]=\"isDragging()\"\n >\n <!-- Clear indicator (left side for number input) - always present to prevent CLS -->\n <coar-icon\n name=\"x\"\n size=\"auto\"\n class=\"coar-number-input-clear\"\n [class.coar-number-input-clear--hidden]=\"!showClearButton()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n\n <!-- Prefix -->\n <span class=\"coar-number-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n inputmode=\"decimal\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n class=\"coar-number-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <!-- Suffix -->\n <span class=\"coar-number-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n\n <!-- Increment/Decrement Buttons -->\n @if ((showIncrementButton() || showDecrementButton()) && !isDisabled() && !readonly()) {\n <div class=\"coar-number-input-buttons\">\n @if (showDecrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--decrement\"\n [disabled]=\"!canDecrement()\"\n aria-label=\"Decrease value\"\n (click)=\"decrement()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"minus\" [size]=\"iconSize()\"></coar-icon>\n </button>\n } @if (showIncrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--increment\"\n [disabled]=\"!canIncrement()\"\n aria-label=\"Increase value\"\n (click)=\"increment()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"plus\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-number-input-message\" [class.coar-number-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../coar-icon/coar-icon.component';\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../forms/coar-control-value-accessor';\n\nexport type CoarPasswordInputSize = 'xs' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'coar-password-input',\n standalone: true,\n imports: [FormsModule, CoarIconComponent],\n templateUrl: './coar-password-input.component.html',\n styleUrl: './coar-password-input.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarPasswordInputComponent)],\n host: {\n '[class.coar-password-input--xs]': 'size() === \"xs\"',\n '[class.coar-password-input--sm]': 'size() === \"sm\"',\n '[class.coar-password-input--md]': 'size() === \"md\"',\n '[class.coar-password-input--lg]': 'size() === \"lg\"',\n },\n})\nexport class CoarPasswordInputComponent extends CoarControlValueAccessor<string> {\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text shown when input is empty */\n placeholder = input<string>('');\n\n /**\n * Current password value.\n * Using model() for two-way binding support.\n */\n value = model<string>('');\n\n /** Input size - matches other form elements for consistent layouts */\n size = input<CoarPasswordInputSize>('md');\n\n /** Disables the input (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the input read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the input as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the input */\n error = input<string>('');\n\n /** Hint text displayed below the input */\n hint = input<string>('');\n\n /** Show clear button when input has value and is focused/hovered */\n clearable = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** HTML id attribute for the input element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** HTML autocomplete attribute for browser autofill */\n autocomplete = input<string>('current-password');\n\n /** Maximum character length */\n maxlength = input<number | undefined>(undefined);\n\n /** Emits when password value changes */\n valueChange = output<string>();\n\n /** Emits when input loses focus */\n blurred = output<FocusEvent>();\n\n /** Emits when input gains focus */\n focused = output<FocusEvent>();\n\n /** Emits when clear button is clicked */\n clear = output<void>();\n\n protected isFocused = signal(false);\n protected showPassword = signal(false);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n protected inputType = computed(() => (this.showPassword() ? 'text' : 'password'));\n protected toggleIcon = computed(() => (this.showPassword() ? 'eye-open' : 'eye-closed'));\n protected toggleAriaLabel = computed(() =>\n this.showPassword() ? 'Hide password' : 'Show password'\n );\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected showClearButton = computed(() => {\n // Show clear button when there's a value (dimmed when not focused, prominent when focused)\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n protected inputId = computed(\n () => this.id() || `coar-password-input-${Math.random().toString(36).substr(2, 9)}`\n );\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n public writeValue(value: string | null): void {\n this.value.set(value ?? '');\n }\n\n protected onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value.set(target.value);\n this.valueChange.emit(target.value);\n this.cvaOnChange(target.value);\n }\n\n protected onFocus(event: FocusEvent): void {\n this.isFocused.set(true);\n this.focused.emit(event);\n }\n\n protected onBlur(event: FocusEvent): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n this.blurred.emit(event);\n }\n\n protected onClear(): void {\n this.value.set('');\n this.valueChange.emit('');\n this.cvaOnChange('');\n this.clear.emit();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onLabelClick(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n protected togglePasswordVisibility(): void {\n if (!this.isDisabled() && !this.readonly()) {\n this.showPassword.update((v) => !v);\n }\n }\n}\n","<div class=\"coar-password-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-password-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-password-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-password-input-container\"\n [class.coar-password-input-focused]=\"isFocused()\"\n [class.coar-password-input-disabled]=\"isDisabled()\"\n [class.coar-password-input-readonly]=\"readonly()\"\n [class.coar-password-input-error]=\"hasError()\"\n >\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [type]=\"inputType()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-password-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon name=\"x\" size=\"auto\" class=\"coar-password-input-clear\" aria-hidden=\"true\" (click)=\"onClear()\" />\n }\n\n <!-- Toggle Visibility -->\n <coar-icon\n [name]=\"toggleIcon()\"\n size=\"auto\"\n class=\"coar-password-input-toggle\"\n [attr.aria-label]=\"toggleAriaLabel()\"\n aria-hidden=\"true\"\n (click)=\"togglePasswordVisibility()\"\n />\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-password-input-message\" [class.coar-password-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n signal,\n computed,\n effect,\n ElementRef,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\nimport {\n CoarControlValueAccessor,\n coarProvideValueAccessor,\n} from '../forms/coar-control-value-accessor';\n\nexport type CoarCheckboxSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type CoarCheckboxState = 'checked' | 'unchecked' | 'indeterminate';\n\n@Component({\n selector: 'coar-checkbox',\n standalone: true,\n imports: [],\n templateUrl: './coar-checkbox.component.html',\n styleUrl: './coar-checkbox.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarCheckboxComponent)],\n host: {\n '[class.coar-checkbox--xs]': 'size() === \"xs\"',\n '[class.coar-checkbox--sm]': 'size() === \"sm\"',\n '[class.coar-checkbox--md]': 'size() === \"md\"',\n '[class.coar-checkbox--lg]': 'size() === \"lg\"',\n '[class.coar-checkbox--disabled]': 'isDisabled()',\n '[class.coar-checkbox--readonly]': 'readonly()',\n '[class.coar-checkbox--error]': 'hasError()',\n },\n})\nexport class CoarCheckboxComponent extends CoarControlValueAccessor<CoarCheckboxState | undefined> {\n /** Label text displayed next to the checkbox */\n label = input<string>('');\n\n /**\n * Checkbox state: 'checked', 'unchecked', 'indeterminate', or undefined (pristine).\n * Using model() for two-way binding support.\n */\n checked = model<CoarCheckboxState | undefined>(undefined);\n\n /** Disables the checkbox (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Prevents changes but keeps normal appearance and focus */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the checkbox */\n error = input<string>('');\n\n /** Hint text displayed below the checkbox */\n hint = input<string>('');\n\n /** Checkbox size - matches input/button heights for consistent layouts */\n size = input<CoarCheckboxSize>('md');\n\n /** HTML id attribute for the checkbox element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Value submitted with form when checked */\n value = input<string>('');\n\n /** Emits when state changes: 'checked' or 'unchecked' */\n checkedChange = output<CoarCheckboxState>();\n\n protected isFocused = signal(false);\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('checkboxElement');\n\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n protected isChecked = computed(() => this.checked() === 'checked');\n protected isIndeterminate = computed(() => this.checked() === 'indeterminate');\n protected hasError = computed(() => this.error().length > 0);\n protected displayMessage = computed(() => this.error() || this.hint());\n protected inputId = computed(\n () => this.id() || `coar-checkbox-${Math.random().toString(36).substr(2, 9)}`\n );\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n constructor() {\n super();\n // Set indeterminate state on native input element\n effect(() => {\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.indeterminate = this.isIndeterminate();\n }\n });\n }\n\n public writeValue(value: CoarCheckboxState | undefined | null): void {\n this.checked.set(value ?? undefined);\n }\n\n protected onChange(event: Event): void {\n if (this.readonly()) {\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n target.checked = this.isChecked();\n return;\n }\n\n const target = event.target as HTMLInputElement;\n const newState: CoarCheckboxState = target.checked ? 'checked' : 'unchecked';\n\n this.checked.set(newState);\n this.checkedChange.emit(newState);\n this.cvaOnChange(newState);\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n protected onLabelClick(): void {\n if (!this.isDisabled()) {\n this.inputRef()?.nativeElement.click();\n }\n }\n}\n","<label class=\"coar-checkbox-wrapper\" [class.coar-checkbox-focused]=\"isFocused()\">\n <!-- Hidden native checkbox -->\n <input\n #checkboxElement\n type=\"checkbox\"\n class=\"coar-checkbox-input\"\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-readonly]=\"readonly() ? 'true' : null\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : isChecked()\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Custom checkbox visual -->\n <span class=\"coar-checkbox-box\" [class.coar-checkbox-checked]=\"isChecked()\" [class.coar-checkbox-indeterminate]=\"isIndeterminate()\">\n <!-- Checkmark icon (always rendered, visibility controlled by CSS) -->\n <svg class=\"coar-checkbox-icon coar-checkbox-icon-check\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.5 4.5L6.5 11.5L3 8\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Indeterminate icon (minus) -->\n <svg class=\"coar-checkbox-icon coar-checkbox-icon-indeterminate\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 8H12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </span>\n\n <!-- Label text -->\n @if (label()) {\n <span class=\"coar-checkbox-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-checkbox-required\">*</span>\n }\n </span>\n }\n</label>\n\n<!-- Hint/Error Message -->\n@if (displayMessage()) {\n<div [id]=\"messageId()\" class=\"coar-checkbox-message\" [class.coar-checkbox-message-error]=\"hasError()\">\n {{ displayMessage() }}\n</div>\n}\n","import {\n Directive,\n ElementRef,\n OnDestroy,\n AfterViewInit,\n NgZone,\n inject,\n input,\n effect,\n booleanAttribute,\n} from '@angular/core';\nimport { OverlayScrollbars, ClickScrollPlugin, type PartialOptions } from 'overlayscrollbars';\n\n/**\n * Theme options for the scrollbar appearance.\n * - 'dark': Dark scrollbar theme (default)\n * - 'light': Light scrollbar theme\n */\nexport type CoarScrollbarTheme = 'dark' | 'light';\n\n/**\n * Auto-hide behavior for the scrollbar.\n * - 'never': Scrollbars are always visible\n * - 'scroll': Scrollbars hide when not scrolling\n * - 'leave': Scrollbars hide when pointer leaves the element\n * - 'move': Scrollbars hide when pointer stops moving\n */\nexport type CoarScrollbarAutoHide = 'never' | 'scroll' | 'leave' | 'move';\n\n/**\n * Overflow behavior for each axis.\n * - 'hidden': Content is clipped, no scrollbar\n * - 'scroll': Always show scrollbar\n * - 'visible-hidden': Content visible but no scrollbar\n * - 'visible-scroll': Content visible with scrollbar\n */\nexport type CoarScrollbarOverflow = 'hidden' | 'scroll' | 'visible-hidden' | 'visible-scroll';\n\n/**\n * Directive that applies custom overlay scrollbars to an element.\n *\n * Uses OverlayScrollbars library to replace native scrollbars with\n * styleable overlay scrollbars while preserving native scroll behavior.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <div coarScrollbar>Scrollable content</div>\n *\n * <!-- With options -->\n * <div coarScrollbar [theme]=\"'light'\" [autoHide]=\"'scroll'\">\n * Scrollable content\n * </div>\n *\n * <!-- Horizontal only -->\n * <div coarScrollbar [overflowX]=\"'scroll'\" [overflowY]=\"'hidden'\">\n * Horizontal scrollable content\n * </div>\n * ```\n */\n@Directive({\n selector: '[coarScrollbar]',\n standalone: true,\n host: {\n // Prevents flickering during initialization\n 'data-overlayscrollbars-initialize': '',\n },\n})\nexport class CoarScrollbarDirective implements AfterViewInit, OnDestroy {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly ngZone = inject(NgZone);\n\n /** Theme for scrollbar appearance */\n readonly theme = input<CoarScrollbarTheme>('dark');\n\n /** Auto-hide behavior for scrollbars */\n readonly autoHide = input<CoarScrollbarAutoHide>('leave');\n\n /** Delay in ms before auto-hide triggers */\n readonly autoHideDelay = input<number>(400);\n\n /** Whether clicking the track scrolls to that position */\n readonly clickScroll = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Overflow behavior for x-axis */\n readonly overflowX = input<CoarScrollbarOverflow>('scroll');\n\n /** Overflow behavior for y-axis */\n readonly overflowY = input<CoarScrollbarOverflow>('scroll');\n\n /** Whether to defer initialization until browser is idle */\n readonly defer = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /**\n * Overscroll behavior to prevent scroll chaining to parent elements.\n * - 'auto': Default browser behavior (scroll chains to parent)\n * - 'contain': Prevents scroll chaining when reaching scroll boundaries\n * - 'none': Prevents scroll chaining and disables bounce effects\n */\n readonly overscrollBehavior = input<'auto' | 'contain' | 'none'>('auto');\n\n private osInstance: OverlayScrollbars | null = null;\n private initialized = false;\n\n constructor() {\n // Register the ClickScrollPlugin for click-to-scroll functionality\n OverlayScrollbars.plugin(ClickScrollPlugin);\n\n // React to input changes and update options\n effect(() => {\n // Read all inputs to track them (signals must be read to be tracked)\n this.theme();\n this.autoHide();\n this.autoHideDelay();\n this.clickScroll();\n this.overflowX();\n this.overflowY();\n\n if (this.osInstance && this.initialized) {\n this.osInstance.options(this.buildOptions());\n }\n });\n }\n\n ngAfterViewInit(): void {\n if (this.defer()) {\n // Defer initialization to browser idle time for better performance\n this.deferInitialization();\n } else {\n this.initialize();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n /**\n * Returns the OverlayScrollbars instance or null if not initialized.\n */\n getInstance(): OverlayScrollbars | null {\n return this.osInstance;\n }\n\n /**\n * Scrolls to the specified position.\n */\n scrollTo(options: { x?: number; y?: number }): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n if (options.x !== undefined) {\n viewport.scrollLeft = options.x;\n }\n if (options.y !== undefined) {\n viewport.scrollTop = options.y;\n }\n }\n }\n\n /**\n * Scrolls to the bottom of the scrollable content.\n */\n scrollToBottom(): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n viewport.scrollTop = viewport.scrollHeight;\n }\n }\n\n /**\n * Scrolls to the top of the scrollable content.\n */\n scrollToTop(): void {\n const viewport = this.osInstance?.elements().viewport;\n if (viewport) {\n viewport.scrollTop = 0;\n }\n }\n\n /**\n * Updates the scrollbar (useful after dynamic content changes).\n */\n update(): void {\n this.osInstance?.update(true);\n }\n\n private deferInitialization(): void {\n // Use requestIdleCallback if available, otherwise setTimeout\n if (typeof requestIdleCallback === 'function') {\n requestIdleCallback(() => this.initialize(), { timeout: 2000 });\n } else {\n setTimeout(() => this.initialize(), 0);\n }\n }\n\n private initialize(): void {\n // Run outside Angular zone to avoid unnecessary change detection\n this.ngZone.runOutsideAngular(() => {\n this.osInstance = OverlayScrollbars(this.elementRef.nativeElement, this.buildOptions());\n this.initialized = true;\n\n // Apply overscroll-behavior to the viewport element to prevent scroll chaining\n const overscroll = this.overscrollBehavior();\n if (overscroll !== 'auto') {\n const viewport = this.osInstance.elements().viewport;\n if (viewport) {\n viewport.style.overscrollBehavior = overscroll;\n }\n }\n });\n }\n\n private buildOptions(): PartialOptions {\n return {\n scrollbars: {\n theme: `os-theme-${this.theme()}`,\n autoHide: this.autoHide(),\n autoHideDelay: this.autoHideDelay(),\n clickScroll: this.clickScroll(),\n },\n overflow: {\n x: this.overflowX(),\n y: this.overflowY(),\n },\n };\n }\n\n private destroy(): void {\n this.osInstance?.destroy();\n this.osInstance = null;\n this.initialized = false;\n }\n}\n","import {\n signal,\n input,\n computed,\n effect,\n ElementRef,\n inject,\n booleanAttribute,\n DestroyRef,\n Directive,\n viewChild,\n} from '@angular/core';\nimport { CoarControlValueAccessor } from '../forms/coar-control-value-accessor';\nimport { CoarScrollbarDirective } from '../coar-scrollbar/coar-scrollbar.directive';\nimport { CoarSelectOption } from './coar-select-option.interface';\n\nexport type CoarSelectSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/** Dropdown position relative to the trigger */\nexport type CoarDropdownPosition = 'top' | 'bottom';\n\n/**\n * Base class providing shared functionality for all select components.\n * Handles dropdown state, keyboard navigation, and common styling.\n * Subclasses override openDropdown() to use the overlay system.\n */\n@Directive()\nexport abstract class CoarSelectBase<T> extends CoarControlValueAccessor<T> {\n protected readonly elementRef = inject(ElementRef);\n protected readonly destroyRef = inject(DestroyRef);\n\n /** Label text displayed above the select */\n label = input<string>('');\n\n /** Placeholder text shown when no option is selected */\n placeholder = input<string>('Select an option...');\n\n /** Available options to choose from */\n options = input<CoarSelectOption[]>([]);\n\n /** Select size - matches button/input heights for consistent layouts */\n size = input<CoarSelectSize>('md');\n\n /** Disables the select (greyed out, not focusable) */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Makes the select read-only (focusable but not editable) */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Marks the select as required, shows asterisk on label */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error message to display below the select */\n error = input<string>('');\n\n /** Hint text displayed below the select */\n hint = input<string>('');\n\n /** HTML id attribute for the select element */\n id = input<string>('');\n\n /** HTML name attribute for form submission */\n name = input<string>('');\n\n /** Enable search/filter functionality within the dropdown */\n searchable = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Search input placeholder when searchable is enabled */\n searchPlaceholder = input<string>('Search...');\n\n /**\n * Comparison function to match values with options.\n * Use this when value objects come from different sources (e.g., API vs form).\n *\n * @example\n * ```typescript\n * // Compare Country objects by their ID\n * compareById = (a: Country | null, b: Country | null) => a?.id === b?.id;\n * ```\n */\n compareWith = input<(o1: unknown, o2: unknown) => boolean>();\n\n /** Force dropdown position ('auto' calculates based on available space) */\n dropdownPositionPreference = input<'auto' | 'top' | 'bottom'>('auto');\n\n // ============================================================\n // View References (shared across all select components)\n // ============================================================\n\n /** Reference to the scrollbar directive for scroll control */\n protected scrollbarRef = viewChild(CoarScrollbarDirective);\n\n /** Reference to the options list container for scroll-into-view */\n protected optionsListRef = viewChild<ElementRef<HTMLDivElement>>('optionsList');\n\n /** Reference to the search input for focusing (when searchable) */\n protected searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n /** DOM id for the dropdown search input (when searchable). */\n protected searchInputId = computed(() => `${this.inputId()}-search`);\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Whether the dropdown is currently open */\n protected isOpen = signal(false);\n\n /** Whether the select is focused */\n protected isFocused = signal(false);\n\n /** Current search/filter query */\n protected searchQuery = signal('');\n\n /** Currently highlighted option index for keyboard navigation */\n protected highlightedIndex = signal(-1);\n\n /** Current dropdown position */\n protected dropdownPosition = signal<CoarDropdownPosition>('bottom');\n\n /** Combined disabled state from input and CVA */\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Whether there's an error to display */\n protected hasError = computed(() => this.error().length > 0);\n\n /** Message to display (error takes priority over hint) */\n protected displayMessage = computed(() => this.error() || this.hint());\n\n /** Generated unique ID for the select element */\n protected inputId = computed(\n () => this.id() || `coar-select-${Math.random().toString(36).substr(2, 9)}`\n );\n\n /** ID for the message element (for aria-describedby) */\n protected messageId = computed(() => `${this.inputId()}-message`);\n\n /** ID for the listbox element */\n protected listboxId = computed(() => `${this.inputId()}-listbox`);\n\n /** Filtered options based on search query */\n protected filteredOptions = computed(() => {\n const query = this.searchQuery().toLowerCase().trim();\n if (!query) return this.options();\n return this.options().filter((option) => option.label.toLowerCase().includes(query));\n });\n\n /**\n * Options for display, reversed when dropdown opens to top.\n * This ensures the first option is always nearest to the trigger.\n */\n protected displayOptions = computed(() => {\n const options = this.filteredOptions();\n if (this.dropdownPosition() === 'top') {\n // Reverse to place first option at visual bottom (nearest to trigger)\n return options.slice().reverse();\n }\n return options;\n });\n\n /**\n * Check if a display index is highlighted.\n * When reversed, converts display index to data index.\n */\n protected isHighlighted(displayIndex: number): boolean {\n const dataIndex = this.dropdownPosition() === 'top'\n ? this.filteredOptions().length - 1 - displayIndex\n : displayIndex;\n return this.highlightedIndex() === dataIndex;\n }\n\n /**\n * Set highlight from display index.\n * When reversed, converts display index to data index.\n */\n protected setHighlightFromDisplay(displayIndex: number): void {\n const dataIndex = this.dropdownPosition() === 'top'\n ? this.filteredOptions().length - 1 - displayIndex\n : displayIndex;\n this.highlightedIndex.set(dataIndex);\n }\n\n constructor() {\n super();\n\n // Reset highlighted index when options change\n effect(() => {\n this.filteredOptions();\n this.highlightedIndex.set(-1);\n });\n\n // Close dropdown on outside click (can be disabled by subclasses that render the panel outside host DOM).\n this.installOutsideClickHandler();\n }\n\n /** Toggle dropdown open/closed state */\n protected toggleDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n\n if (this.isOpen()) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n /**\n * Open the dropdown.\n * Subclasses MUST override this method to implement overlay-based dropdown.\n */\n protected openDropdown(): void {\n // Base implementation intentionally empty - always overridden by subclasses\n }\n\n /**\n * Close the dropdown.\n * Subclasses MUST override this method to implement overlay-based dropdown.\n */\n protected closeDropdown(): void {\n // Base implementation intentionally empty - always overridden by subclasses\n }\n\n /** Handle keyboard navigation */\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (!this.isOpen()) {\n event.preventDefault();\n this.openDropdown();\n // Auto-highlight first option when opening\n this.highlightFirstOption();\n } else if (this.highlightedIndex() >= 0) {\n event.preventDefault();\n this.selectHighlightedOption();\n }\n break;\n\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.closeDropdown();\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n // When opening, highlight option farthest from trigger\n if (this.dropdownPosition() === 'bottom') {\n this.highlightFirstOption();\n } else {\n // Top dropdown is visually reversed, so last index appears at visual top\n this.highlightLastOption();\n }\n } else {\n // ArrowDown always moves DOWN visually\n // Bottom dropdown: down = next index; Top dropdown (reversed): down = previous index\n if (this.dropdownPosition() === 'bottom') {\n this.highlightNextOption();\n } else {\n this.highlightPreviousOption();\n }\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (!this.isOpen()) {\n this.openDropdown();\n // When opening, highlight option nearest to trigger\n if (this.dropdownPosition() === 'top') {\n // Top dropdown is visually reversed, so first index appears at visual bottom (nearest)\n this.highlightFirstOption();\n } else {\n this.highlightLastOption();\n }\n } else {\n // ArrowUp always moves UP visually\n // Bottom dropdown: up = previous index; Top dropdown (reversed): up = next index\n if (this.dropdownPosition() === 'bottom') {\n this.highlightPreviousOption();\n } else {\n this.highlightNextOption();\n }\n }\n break;\n\n case 'Home':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightFirstOption();\n }\n break;\n\n case 'End':\n if (this.isOpen()) {\n event.preventDefault();\n this.highlightLastOption();\n }\n break;\n\n case 'Tab':\n if (this.isOpen()) {\n this.closeDropdown();\n }\n break;\n }\n }\n\n /** Move highlight to the next available option */\n protected highlightNextOption(): void {\n const options = this.filteredOptions();\n let nextIndex = this.highlightedIndex() + 1;\n\n while (nextIndex < options.length) {\n if (!options[nextIndex].disabled) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n nextIndex++;\n }\n }\n\n /** Move highlight to the previous available option */\n protected highlightPreviousOption(): void {\n const options = this.filteredOptions();\n let prevIndex = this.highlightedIndex() - 1;\n\n while (prevIndex >= 0) {\n if (!options[prevIndex].disabled) {\n this.highlightedIndex.set(prevIndex);\n this.scrollToHighlighted();\n return;\n }\n prevIndex--;\n }\n }\n\n /** Move highlight to the first available option */\n protected highlightFirstOption(): void {\n const options = this.filteredOptions();\n for (let i = 0; i < options.length; i++) {\n if (!options[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollToHighlighted();\n return;\n }\n }\n }\n\n /** Move highlight to the last available option */\n protected highlightLastOption(): void {\n const options = this.filteredOptions();\n for (let i = options.length - 1; i >= 0; i--) {\n if (!options[i].disabled) {\n this.highlightedIndex.set(i);\n this.scrollToHighlighted();\n return;\n }\n }\n }\n\n /** Scroll the highlighted option into view */\n protected scrollToHighlighted(): void {\n setTimeout(() => {\n const listEl = this.getOptionsListElement();\n const selector = this.highlightedOptionSelector;\n const highlightedEl = listEl?.querySelector(selector);\n highlightedEl?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n protected focusSearchInput(): void {\n if (!this.searchable()) return;\n\n const refEl = this.searchInputRef()?.nativeElement;\n if (refEl) {\n refEl.focus();\n return;\n }\n\n const domEl = typeof document !== 'undefined'\n ? (document.getElementById(this.searchInputId()) as HTMLInputElement | null)\n : null;\n\n domEl?.focus();\n }\n\n protected scrollOptionsToBottom(): void {\n const scrollbar = this.scrollbarRef();\n if (scrollbar) {\n scrollbar.scrollToBottom();\n return;\n }\n\n const listEl = this.getOptionsListElement();\n if (!listEl) return;\n listEl.scrollTop = listEl.scrollHeight;\n }\n\n protected getOptionsListElement(): HTMLDivElement | null {\n const refEl = this.optionsListRef()?.nativeElement;\n if (refEl) return refEl;\n\n return typeof document !== 'undefined'\n ? (document.getElementById(this.listboxId()) as HTMLDivElement | null)\n : null;\n }\n\n /**\n * CSS selector for the highlighted option element.\n * Each component defines its own selector based on its CSS class naming.\n */\n protected abstract get highlightedOptionSelector(): string;\n\n /** Handle focus event */\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n /** Handle blur event */\n protected onBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n /** Handle search input changes */\n protected onSearchInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchQuery.set(target.value);\n this.highlightedIndex.set(-1);\n }\n\n /** Whether this select should close on document clicks outside its host element. */\n protected shouldCloseOnOutsideClick(): boolean {\n return true;\n }\n\n /** Setup click outside handler to close dropdown. */\n protected installOutsideClickHandler(): void {\n if (!this.shouldCloseOnOutsideClick()) return;\n\n const handleClick = (event: MouseEvent) => {\n if (!this.isOpen()) return;\n if (this.elementRef.nativeElement.contains(event.target)) return;\n this.closeDropdown();\n };\n\n // Use setTimeout to avoid issues with the current click event\n setTimeout(() => {\n document.addEventListener('click', handleClick);\n this.destroyRef.onDestroy(() => {\n document.removeEventListener('click', handleClick);\n });\n });\n }\n\n /** Abstract method to select the currently highlighted option */\n protected abstract selectHighlightedOption(): void;\n\n /** Abstract method to get the display text for the current selection */\n abstract getDisplayText(): string;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n input,\n model,\n output,\n computed,\n inject,\n viewChild,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../coar-icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../coar-scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../forms/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport {\n CoarOverlayService,\n Overlay,\n type OverlayRef,\n type Placement,\n} from '@cocoar/ui-overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Single-select dropdown component.\n *\n * Allows selecting one option from a list with keyboard navigation,\n * search/filter support, and full forms integration.\n *\n * @example\n * ```html\n * <coar-single-select\n * label=\"Country\"\n * [options]=\"countries\"\n * [(value)]=\"selectedCountry\"\n * placeholder=\"Select a country\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-single-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-single-select.component.html',\n styleUrl: './coar-single-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarSingleSelectComponent)],\n host: {\n '[class.coar-single-select--xs]': 'size() === \"xs\"',\n '[class.coar-single-select--sm]': 'size() === \"sm\"',\n '[class.coar-single-select--md]': 'size() === \"md\"',\n '[class.coar-single-select--lg]': 'size() === \"lg\"',\n '[class.coar-single-select--disabled]': 'isDisabled()',\n '[class.coar-single-select--readonly]': 'readonly()',\n '[class.coar-single-select--error]': 'hasError()',\n '[class.coar-single-select--open]': 'isOpen()',\n },\n})\nexport class CoarSingleSelectComponent<T = unknown> extends CoarSelectBase<T | null> {\n private readonly overlayService = inject(CoarOverlayService);\n private readonly destroyRefLocal = inject(DestroyRef);\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected value (two-way bindable with [(value)]) */\n value = model<T | null>(null);\n\n /** Whether to show a clear button when a value is selected */\n clearable = input<boolean, unknown>(true, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Emits when the selected value changes */\n valueChange = output<T | null>();\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-select-option--highlighted';\n }\n\n /** The currently selected option object */\n protected selectedOption = computed(() => {\n const currentValue = this.value();\n if (currentValue === null || currentValue === undefined) return null;\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.options().find((opt) => compare(opt.value, currentValue)) ?? null;\n });\n\n /** Whether to show the clear button */\n protected showClearButton = computed(() => {\n return this.clearable() && this.value() !== null && !this.isDisabled() && !this.readonly();\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n const selected = this.selectedOption();\n return selected?.label ?? '';\n }\n\n /** Write value from forms API */\n writeValue(value: T | null): void {\n this.value.set(value);\n }\n\n /** Select an option by its value */\n selectOption(option: CoarSelectOption<T>): void {\n if (option.disabled || this.isDisabled() || this.readonly()) return;\n\n this.value.set(option.value);\n this.valueChange.emit(option.value);\n this.cvaOnChange(option.value);\n this.closeDropdown();\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const options = this.filteredOptions();\n const index = this.highlightedIndex();\n\n if (index >= 0 && index < options.length) {\n const option = options[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.selectOption(option);\n }\n }\n }\n\n /** Clear the current selection */\n protected clearSelection(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n }\n\n /** Check if an option is currently selected */\n protected isSelected(option: CoarSelectOption): boolean {\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return compare(this.value(), option.value);\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // The dropdown panel is rendered via @cocoar/ui-overlay (attached to document.body),\n // so hostElement.contains(event.target) would treat clicks inside the panel as \"outside\".\n // We rely on overlay dismissal (outsideClick) instead.\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n const spec = Overlay.define<Record<string, never>>((b) => {\n b.content((c) => c.fromTemplate(template));\n b.anchor({ kind: 'element', element: trigger });\n b.position({ placement, offset: 4, flip: false, shift: false });\n b.scroll({ strategy: 'reposition' });\n b.dismiss({ outsideClick: true, escapeKey: true });\n b.size({ mode: 'content', minWidth: 'anchor' });\n });\n\n this.isOpen.set(true);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n\n const ref = this.overlayService.open(spec, {});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRefLocal.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n\n if (this.searchable()) {\n this.searchInputRef()?.nativeElement.focus();\n }\n\n if (this.dropdownPosition() === 'top') {\n this.scrollbarRef()?.scrollToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private resolvePlacement(trigger: HTMLElement, estimatedPanelHeight: number): Placement {\n const preference = this.dropdownPositionPreference();\n if (preference === 'top') return 'top';\n if (preference === 'bottom') return 'bottom';\n\n const viewportHeight = document.documentElement?.clientHeight || window.innerHeight;\n const rect = trigger.getBoundingClientRect();\n\n const spaceBelow = Math.max(0, viewportHeight - rect.bottom);\n const spaceAbove = Math.max(0, rect.top);\n\n if (spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow) return 'top';\n return 'bottom';\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 240;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayOptions().length;\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const searchHeight = this.searchable() ? 56 : 0;\n const chromeHeight = 2;\n\n return chromeHeight + searchHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Select Trigger -->\n <div\n class=\"coar-select-trigger\"\n #trigger\n [class.coar-select-trigger--focused]=\"isFocused()\"\n [class.coar-select-trigger--disabled]=\"isDisabled()\"\n [class.coar-select-trigger--readonly]=\"readonly()\"\n [class.coar-select-trigger--error]=\"hasError()\"\n [class.coar-select-trigger--open]=\"isOpen()\"\n [id]=\"inputId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n role=\"combobox\"\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n >\n <!-- Selected Value or Placeholder -->\n <span class=\"coar-select-value\" [class.coar-select-placeholder]=\"!selectedOption()\">\n @if (selectedOption(); as option) {\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"sm\" class=\"coar-select-value-icon\" />\n }\n {{ option.label }}\n } @else {\n {{ placeholder() }}\n }\n </span>\n\n <!-- Actions -->\n <span class=\"coar-select-actions\">\n <!-- Clear Button -->\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"coar-select-clear\"\n tabindex=\"-1\"\n aria-label=\"Clear selection\"\n (click)=\"clearSelection($event)\"\n >\n <coar-icon name=\"x\" size=\"auto\" />\n </button>\n }\n\n <!-- Dropdown Arrow -->\n <coar-icon\n name=\"caret-right\"\n size=\"auto\"\n class=\"coar-select-arrow\"\n [class.coar-select-arrow--open]=\"isOpen()\"\n />\n </span>\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui-overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Search Input -->\n @if (searchable()) {\n <div class=\"coar-select-search\">\n <input\n #searchInput\n type=\"text\"\n class=\"coar-select-search-input\"\n [id]=\"searchInputId()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n }\n\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-select-option\"\n [class.coar-select-option--selected]=\"isSelected(option)\"\n [class.coar-select-option--highlighted]=\"isHighlighted(i)\"\n [class.coar-select-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n [tabindex]=\"option.disabled ? -1 : 0\"\n role=\"option\"\n (click)=\"selectOption($any(option))\"\n (keydown.enter)=\"selectOption($any(option))\"\n (mouseenter)=\"setHighlightFromDisplay(i)\"\n >\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"sm\" class=\"coar-select-option-icon\" />\n }\n <span class=\"coar-select-option-label\">{{ option.label }}</span>\n @if (isSelected(option)) {\n <coar-icon name=\"check\" size=\"sm\" class=\"coar-select-option-check\" />\n }\n </div>\n } @empty {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No results found\n } @else {\n No options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div\n [id]=\"messageId()\"\n class=\"coar-select-message\"\n [class.coar-select-message--error]=\"hasError()\"\n >\n {{ displayMessage() }}\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n computed,\n inject,\n viewChild,\n ElementRef,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../coar-icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../coar-scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../forms/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport {\n CoarOverlayService,\n Overlay,\n type OverlayRef,\n type Placement,\n} from '@cocoar/ui-overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Multi-select dropdown component.\n *\n * Allows selecting multiple options from a list with checkboxes,\n * keyboard navigation, search/filter support, and full forms integration.\n *\n * @example\n * ```html\n * <coar-multi-select\n * label=\"Skills\"\n * [options]=\"skills\"\n * [(value)]=\"selectedSkills\"\n * placeholder=\"Select skills...\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-multi-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-multi-select.component.html',\n styleUrl: './coar-multi-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarMultiSelectComponent)],\n host: {\n '[class.coar-multi-select--xs]': 'size() === \"xs\"',\n '[class.coar-multi-select--sm]': 'size() === \"sm\"',\n '[class.coar-multi-select--md]': 'size() === \"md\"',\n '[class.coar-multi-select--lg]': 'size() === \"lg\"',\n '[class.coar-multi-select--disabled]': 'isDisabled()',\n '[class.coar-multi-select--readonly]': 'readonly()',\n '[class.coar-multi-select--error]': 'hasError()',\n '[class.coar-multi-select--open]': 'isOpen()',\n },\n})\nexport class CoarMultiSelectComponent<T = unknown> extends CoarSelectBase<T[]> {\n private readonly overlayService = inject(CoarOverlayService);\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected values (two-way bindable with [(value)]) */\n value = model<T[]>([]);\n\n /** Whether to show a clear button when values are selected */\n clearable = input<boolean, unknown>(true, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Maximum number of selected items to display before showing count */\n maxDisplayItems = input<number>(3);\n\n /** Whether to show \"Select All\" option */\n showSelectAll = input<boolean, unknown>(false, {\n transform: (v: unknown) => (v === '' ? true : Boolean(v)),\n });\n\n /** Emits when the selected values change */\n valueChange = output<T[]>();\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-multi-option--highlighted';\n }\n\n /** The currently selected option objects */\n protected selectedOptions = computed(() => {\n const currentValues = this.value();\n if (!currentValues.length) return [];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.options().filter((opt) =>\n currentValues.some((val) => compare(val, opt.value))\n );\n });\n\n /** Whether to show the clear button */\n protected showClearButton = computed(() => {\n return this.clearable() && this.value().length > 0 && !this.isDisabled() && !this.readonly();\n });\n\n /** Whether all options are selected */\n protected allSelected = computed(() => {\n const enabledOptions = this.options().filter((opt) => !opt.disabled);\n return enabledOptions.length > 0 && enabledOptions.every((opt) => this.isSelected(opt));\n });\n\n /** Whether some but not all options are selected */\n protected someSelected = computed(() => {\n const enabledOptions = this.options().filter((opt) => !opt.disabled);\n const selectedCount = enabledOptions.filter((opt) => this.isSelected(opt)).length;\n return selectedCount > 0 && selectedCount < enabledOptions.length;\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n const currentValues = this.value();\n if (currentValues.length === 0) return '';\n\n const selected = this.selectedOptions();\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n\n // Get labels from matching options\n const labels = currentValues.map((val) => {\n const opt = selected.find((o) => compare(o.value, val));\n return opt?.label ?? String(val);\n });\n\n if (labels.length <= this.maxDisplayItems()) {\n return labels.join(', ');\n }\n return `${labels.length} selected`;\n }\n\n /** Write value from forms API */\n writeValue(value: T[] | null): void {\n this.value.set(value ?? []);\n }\n\n /** Toggle selection of an option */\n toggleOption(option: CoarSelectOption<T>, event?: Event): void {\n event?.stopPropagation();\n if (option.disabled || this.isDisabled() || this.readonly()) return;\n\n const currentValues = [...this.value()];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const index = currentValues.findIndex((val) => compare(val, option.value));\n\n if (index === -1) {\n currentValues.push(option.value);\n } else {\n currentValues.splice(index, 1);\n }\n\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const options = this.filteredOptions();\n const index = this.highlightedIndex();\n\n if (index >= 0 && index < options.length) {\n const option = options[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.toggleOption(option);\n }\n }\n }\n\n /** Toggle all options */\n protected toggleAll(event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled() || this.readonly()) return;\n\n if (this.allSelected()) {\n // Deselect all\n this.value.set([]);\n } else {\n // Select all non-disabled options\n const allValues = this.options()\n .filter((opt) => !opt.disabled)\n .map((opt) => opt.value as T);\n this.value.set(allValues);\n }\n\n this.valueChange.emit(this.value());\n this.cvaOnChange(this.value());\n }\n\n /** Clear all selections */\n protected clearSelection(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n this.valueChange.emit([]);\n this.cvaOnChange([]);\n }\n\n /** Check if an option is currently selected */\n protected isSelected(option: CoarSelectOption): boolean {\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.value().some((val) => compare(val, option.value));\n }\n\n /** Handle keyboard for multi-select (space toggles instead of closing) */\n protected override onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n if (event.key === ' ' && this.isOpen() && this.highlightedIndex() >= 0) {\n event.preventDefault();\n this.selectHighlightedOption();\n return;\n }\n\n if (event.key === 'Enter' && this.isOpen()) {\n event.preventDefault();\n if (this.highlightedIndex() >= 0) {\n this.selectHighlightedOption();\n } else {\n this.closeDropdown();\n }\n return;\n }\n\n super.onKeyDown(event);\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // Dropdown is rendered via @cocoar/ui-overlay (attached to document.body), so hostElement.contains()\n // would treat interactions within the panel as \"outside\".\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n const spec = Overlay.define<Record<string, never>>((b) => {\n b.content((c) => c.fromTemplate(template));\n b.anchor({ kind: 'element', element: trigger });\n b.position({ placement, offset: 4, flip: false, shift: false });\n b.scroll({ strategy: 'reposition' });\n b.dismiss({ outsideClick: true, escapeKey: true });\n b.size({ mode: 'content', minWidth: 'anchor' });\n });\n\n this.isOpen.set(true);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n\n const ref = this.overlayService.open(spec, {});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRef.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n this.focusSearchInput();\n if (this.dropdownPosition() === 'top') {\n this.scrollOptionsToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private resolvePlacement(trigger: HTMLElement, estimatedPanelHeight: number): Placement {\n const preference = this.dropdownPositionPreference();\n if (preference === 'top') return 'top';\n if (preference === 'bottom') return 'bottom';\n\n const viewportHeight = document.documentElement?.clientHeight || window.innerHeight;\n const rect = trigger.getBoundingClientRect();\n\n const spaceBelow = Math.max(0, viewportHeight - rect.bottom);\n const spaceAbove = Math.max(0, rect.top);\n\n if (spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow) return 'top';\n return 'bottom';\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 240;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayOptions().length;\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const searchHeight = this.searchable() ? 56 : 0;\n\n const selectAllHeight =\n this.showSelectAll() && !this.searchQuery()\n ? 37\n : 0;\n\n const chromeHeight = 2;\n return chromeHeight + searchHeight + selectAllHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Select Trigger -->\n <div\n class=\"coar-select-trigger\"\n #trigger\n [class.coar-select-trigger--focused]=\"isFocused()\"\n [class.coar-select-trigger--disabled]=\"isDisabled()\"\n [class.coar-select-trigger--readonly]=\"readonly()\"\n [class.coar-select-trigger--error]=\"hasError()\"\n [class.coar-select-trigger--open]=\"isOpen()\"\n [id]=\"inputId()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-controls]=\"listboxId()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n role=\"combobox\"\n (click)=\"toggleDropdown(); $event.stopPropagation()\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n >\n <!-- Selected Values or Placeholder -->\n <span class=\"coar-select-value\" [class.coar-select-placeholder]=\"!selectedOptions().length\">\n @if (selectedOptions().length) {\n {{ getDisplayText() }}\n } @else {\n {{ placeholder() }}\n }\n </span>\n\n <!-- Actions -->\n <span class=\"coar-select-actions\">\n <!-- Selection Count Badge -->\n @if (selectedOptions().length > 0) {\n <span class=\"coar-multi-count\">{{ selectedOptions().length }}</span>\n }\n\n <!-- Clear Button -->\n @if (showClearButton()) {\n <button\n type=\"button\"\n class=\"coar-select-clear\"\n tabindex=\"-1\"\n aria-label=\"Clear all selections\"\n (click)=\"clearSelection($event)\"\n >\n <coar-icon name=\"x\" size=\"auto\" />\n </button>\n }\n\n <!-- Dropdown Arrow -->\n <coar-icon\n name=\"caret-right\"\n size=\"auto\"\n class=\"coar-select-arrow\"\n [class.coar-select-arrow--open]=\"isOpen()\"\n />\n </span>\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui-overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Search Input -->\n @if (searchable()) {\n <div class=\"coar-select-search\">\n <input\n #searchInput\n type=\"text\"\n class=\"coar-select-search-input\"\n [id]=\"searchInputId()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n }\n\n <!-- Select All Option -->\n @if (showSelectAll() && !searchQuery()) {\n <div\n class=\"coar-multi-option coar-multi-option--select-all\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"allSelected()\"\n (click)=\"toggleAll($event)\"\n (keydown.enter)=\"toggleAll($event)\"\n >\n <span\n class=\"coar-multi-checkbox\"\n [class.coar-multi-checkbox--checked]=\"allSelected()\"\n [class.coar-multi-checkbox--indeterminate]=\"someSelected()\"\n >\n @if (allSelected()) {\n <coar-icon name=\"check\" size=\"auto\" />\n } @else if (someSelected()) {\n <coar-icon name=\"minus\" size=\"auto\" />\n }\n </span>\n <span class=\"coar-multi-option-label\">Select All</span>\n </div>\n <div class=\"coar-multi-divider\"></div>\n }\n\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-multi-option\"\n [class.coar-multi-option--selected]=\"isSelected(option)\"\n [class.coar-multi-option--highlighted]=\"isHighlighted(i)\"\n [class.coar-multi-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"isSelected(option)\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n [tabindex]=\"option.disabled ? -1 : 0\"\n role=\"option\"\n (click)=\"toggleOption($any(option), $event)\"\n (keydown.enter)=\"toggleOption($any(option), $event)\"\n (mouseenter)=\"setHighlightFromDisplay(i)\"\n >\n <span\n class=\"coar-multi-checkbox\"\n [class.coar-multi-checkbox--checked]=\"isSelected(option)\"\n >\n @if (isSelected(option)) {\n <coar-icon name=\"check\" size=\"auto\" />\n }\n </span>\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"sm\" class=\"coar-multi-option-icon\" />\n }\n <span class=\"coar-multi-option-label\">{{ option.label }}</span>\n </div>\n } @empty {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No results found\n } @else {\n No options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div\n [id]=\"messageId()\"\n class=\"coar-select-message\"\n [class.coar-select-message--error]=\"hasError()\"\n >\n {{ displayMessage() }}\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n output,\n computed,\n viewChild,\n ElementRef,\n booleanAttribute,\n inject,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { CoarIconComponent } from '../coar-icon/coar-icon.component';\nimport { CoarScrollbarDirective } from '../coar-scrollbar/coar-scrollbar.directive';\nimport { coarProvideValueAccessor } from '../forms/coar-control-value-accessor';\nimport { CoarSelectBase, CoarSelectSize } from './coar-select-base';\nimport { CoarSelectOption } from './coar-select-option.interface';\nimport {\n CoarOverlayService,\n Overlay,\n type OverlayRef,\n type Placement,\n} from '@cocoar/ui-overlay';\n\nexport type { CoarSelectSize };\n\n/**\n * Tag-based multi-select component.\n *\n * Displays selected items as removable tag chips with support for\n * creating new tags on-the-fly (optional), keyboard navigation,\n * and full forms integration.\n *\n * @example\n * ```html\n * <coar-tag-select\n * label=\"Tags\"\n * [options]=\"availableTags\"\n * [(value)]=\"selectedTags\"\n * [allowCreate]=\"true\"\n * placeholder=\"Add tags...\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-tag-select',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarScrollbarDirective],\n templateUrl: './coar-tag-select.component.html',\n styleUrl: './coar-tag-select.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarTagSelectComponent)],\n host: {\n '[class.coar-tag-select--xs]': 'size() === \"xs\"',\n '[class.coar-tag-select--sm]': 'size() === \"sm\"',\n '[class.coar-tag-select--md]': 'size() === \"md\"',\n '[class.coar-tag-select--lg]': 'size() === \"lg\"',\n '[class.coar-tag-select--disabled]': 'isDisabled()',\n '[class.coar-tag-select--readonly]': 'readonly()',\n '[class.coar-tag-select--error]': 'hasError()',\n '[class.coar-tag-select--open]': 'isOpen()',\n '[class.coar-tag-select--focused]': 'isFocused()',\n },\n})\nexport class CoarTagSelectComponent<T = string> extends CoarSelectBase<T[]> {\n private readonly overlayService = inject(CoarOverlayService);\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n private readonly dropdownTemplateRef = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n private overlayRef: OverlayRef | null = null;\n\n /** Current selected values (two-way bindable with [(value)]) */\n value = model<T[]>([]);\n\n /** Allow creating new tags that don't exist in options */\n allowCreate = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Maximum number of tags that can be selected (0 = unlimited) */\n maxTags = input<number>(0);\n\n /** Text shown when creating a new tag */\n createPrefix = input<string>('Create: ');\n\n /** Emits when the selected values change */\n valueChange = output<T[]>();\n\n /** Emits when a new tag is created */\n tagCreated = output<T>();\n\n /**\n * Reference to the inline search input (tag-select uses inline input, not dropdown search).\n * This is separate from the base class searchInputRef.\n */\n protected inlineInputRef = viewChild<ElementRef<HTMLInputElement>>('inlineInput');\n\n /** CSS selector for highlighted option (used by base class scrollToHighlighted) */\n protected get highlightedOptionSelector(): string {\n return '.coar-tag-option--highlighted';\n }\n\n /** The currently selected option objects */\n protected selectedOptions = computed(() => {\n const currentValues = this.value();\n if (!currentValues.length) return [];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n\n // Map values to options, creating virtual options for created tags or unknown values\n return currentValues.map((val) => {\n const existing = this.options().find((opt) => compare(opt.value, val));\n if (existing) return existing;\n\n // Created tag or value without matching option - return a virtual option\n return {\n value: val,\n label: String(val),\n } as CoarSelectOption<T>;\n });\n });\n\n /** Available options that aren't already selected */\n protected availableOptions = computed(() => {\n const selectedValues = this.value();\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n return this.filteredOptions().filter(\n (opt) => !selectedValues.some((val) => compare(val, opt.value))\n );\n });\n\n /**\n * Available options for display, reversed when dropdown opens to top.\n * This ensures the first option is always nearest to the trigger.\n */\n protected displayAvailableOptions = computed(() => {\n const options = this.availableOptions();\n if (this.dropdownPosition() === 'top') {\n // Reverse to place first option at visual bottom (nearest to trigger)\n return options.slice().reverse();\n }\n return options;\n });\n\n /**\n * Check if a display index is highlighted (for availableOptions).\n * When reversed, converts display index to data index.\n */\n protected isAvailableHighlighted(displayIndex: number): boolean {\n const dataIndex = this.dropdownPosition() === 'top'\n ? this.availableOptions().length - 1 - displayIndex\n : displayIndex;\n return this.highlightedIndex() === dataIndex;\n }\n\n /**\n * Set highlight from display index (for availableOptions).\n * When reversed, converts display index to data index.\n */\n protected setAvailableHighlightFromDisplay(displayIndex: number): void {\n const dataIndex = this.dropdownPosition() === 'top'\n ? this.availableOptions().length - 1 - displayIndex\n : displayIndex;\n this.highlightedIndex.set(dataIndex);\n }\n\n /** Whether the max tags limit has been reached */\n protected maxReached = computed(() => {\n const max = this.maxTags();\n return max > 0 && this.value().length >= max;\n });\n\n /** Whether to show the \"Create\" option */\n protected showCreateOption = computed(() => {\n const query = this.searchQuery().trim();\n if (!this.allowCreate() || !query || this.maxReached()) return false;\n\n // Check if the query matches an existing option exactly\n const exactMatch = this.options().some(\n (opt) => opt.label.toLowerCase() === query.toLowerCase()\n );\n if (exactMatch) return false;\n\n // Check if already selected\n const alreadySelected = this.value().some(\n (val) => String(val).toLowerCase() === query.toLowerCase()\n );\n return !alreadySelected;\n });\n\n /** Display text for the current selection */\n getDisplayText(): string {\n return this.selectedOptions()\n .map((opt) => opt.label)\n .join(', ');\n }\n\n /** Write value from forms API */\n writeValue(value: T[] | null): void {\n this.value.set(value ?? []);\n }\n\n /** Add a tag from an option */\n addTag(option: CoarSelectOption<T>): void {\n if (option.disabled || this.isDisabled() || this.readonly() || this.maxReached()) return;\n\n const currentValues = [...this.value()];\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const alreadySelected = currentValues.some((val) => compare(val, option.value));\n\n if (!alreadySelected) {\n currentValues.push(option.value);\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n /** Remove a tag by value */\n removeTag(tagValue: T, event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled() || this.readonly()) return;\n\n const compare = this.compareWith() ?? ((a: unknown, b: unknown) => a === b);\n const currentValues = this.value().filter((v) => !compare(v, tagValue));\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n }\n\n /** Create a new tag from the search query */\n protected createTag(): void {\n if (!this.allowCreate() || this.maxReached()) return;\n\n const query = this.searchQuery().trim();\n if (!query) return;\n\n const newValue = query as unknown as T;\n const currentValues = [...this.value()];\n\n if (!currentValues.includes(newValue)) {\n currentValues.push(newValue);\n this.value.set(currentValues);\n this.valueChange.emit(currentValues);\n this.cvaOnChange(currentValues);\n this.tagCreated.emit(newValue);\n }\n\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n /** Select the currently highlighted option */\n protected selectHighlightedOption(): void {\n const available = this.availableOptions();\n const index = this.highlightedIndex();\n\n // Check if highlighting the \"Create\" option\n if (this.showCreateOption() && index === available.length) {\n this.createTag();\n return;\n }\n\n if (index >= 0 && index < available.length) {\n const option = available[index] as CoarSelectOption<T>;\n if (!option.disabled) {\n this.addTag(option);\n }\n }\n }\n\n /** Handle keyboard for tag-select */\n protected override onKeyDown(event: KeyboardEvent): void {\n if (this.isDisabled() || this.readonly()) return;\n\n switch (event.key) {\n case 'Backspace':\n if (!this.searchQuery() && this.value().length > 0) {\n // Remove last tag\n const lastValue = this.value()[this.value().length - 1];\n this.removeTag(lastValue);\n }\n break;\n\n case 'Enter':\n event.preventDefault();\n if (this.highlightedIndex() >= 0) {\n this.selectHighlightedOption();\n } else if (this.showCreateOption()) {\n this.createTag();\n }\n break;\n\n case ',':\n case 'Tab':\n if (this.showCreateOption() && this.searchQuery().trim()) {\n event.preventDefault();\n this.createTag();\n } else if (event.key === 'Tab') {\n this.closeDropdown();\n }\n break;\n\n default:\n super.onKeyDown(event);\n }\n }\n\n /** Handle input changes */\n protected onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchQuery.set(target.value);\n this.highlightedIndex.set(-1);\n\n if (!this.isOpen() && target.value) {\n this.openDropdown();\n }\n }\n\n /** Focus the inline input */\n protected focusInput(): void {\n if (!this.isDisabled() && !this.readonly()) {\n this.inlineInputRef()?.nativeElement.focus();\n }\n }\n\n /** Handle input focus */\n protected onInputFocus(): void {\n this.isFocused.set(true);\n if (!this.maxReached()) {\n this.openDropdown();\n }\n }\n\n /** Handle input blur */\n protected onInputBlur(): void {\n this.isFocused.set(false);\n this.cvaOnTouched();\n }\n\n /** Override to calculate highlighted index including create option */\n protected override highlightNextOption(): void {\n const available = this.availableOptions();\n const maxIndex = this.showCreateOption() ? available.length : available.length - 1;\n let nextIndex = this.highlightedIndex() + 1;\n\n while (nextIndex <= maxIndex) {\n // Create option is always enabled\n if (nextIndex === available.length && this.showCreateOption()) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n\n if (nextIndex < available.length && !available[nextIndex].disabled) {\n this.highlightedIndex.set(nextIndex);\n this.scrollToHighlighted();\n return;\n }\n nextIndex++;\n }\n }\n\n /** Scroll highlighted option into view */\n protected override scrollToHighlighted(): void {\n setTimeout(() => {\n const listEl = this.getOptionsListElement();\n const highlightedEl = listEl?.querySelector('.coar-tag-option--highlighted');\n highlightedEl?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n protected override shouldCloseOnOutsideClick(): boolean {\n // Dropdown is rendered via @cocoar/ui-overlay (attached to document.body), so hostElement.contains()\n // would treat interactions within the panel as \"outside\".\n return false;\n }\n\n protected override openDropdown(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.dropdownTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n const spec = Overlay.define<Record<string, never>>((b) => {\n b.content((c) => c.fromTemplate(template));\n b.anchor({ kind: 'element', element: trigger });\n b.position({ placement, offset: 4, flip: false, shift: false });\n b.scroll({ strategy: 'reposition' });\n b.dismiss({ outsideClick: true, escapeKey: true });\n b.size({ mode: 'content', minWidth: 'anchor' });\n });\n\n this.isOpen.set(true);\n this.highlightedIndex.set(-1);\n\n const ref = this.overlayService.open(spec, {});\n this.overlayRef = ref;\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n });\n\n this.destroyRef.onDestroy(() => {\n ref.close();\n });\n\n setTimeout(() => {\n if (!this.isOpen()) return;\n if (this.dropdownPosition() === 'top') {\n this.scrollOptionsToBottom();\n }\n });\n }\n\n protected override closeDropdown(): void {\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n this.isOpen.set(false);\n this.searchQuery.set('');\n this.highlightedIndex.set(-1);\n }\n\n private resolvePlacement(trigger: HTMLElement, estimatedPanelHeight: number): Placement {\n const preference = this.dropdownPositionPreference();\n if (preference === 'top') return 'top';\n if (preference === 'bottom') return 'bottom';\n\n const viewportHeight = document.documentElement?.clientHeight || window.innerHeight;\n const rect = trigger.getBoundingClientRect();\n\n const spaceBelow = Math.max(0, viewportHeight - rect.bottom);\n const spaceAbove = Math.max(0, rect.top);\n\n if (spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow) return 'top';\n return 'bottom';\n }\n\n private estimatePanelHeight(): number {\n const maxListHeight = 200;\n const optionRowHeight = 36;\n const listPadding = 8;\n\n const optionCount = this.displayAvailableOptions().length + (this.showCreateOption() ? 1 : 0);\n const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);\n\n const chromeHeight = 2;\n return chromeHeight + listHeight;\n }\n}\n","<div class=\"coar-select-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-select-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-select-required\">*</span>\n }\n </label>\n }\n\n <!-- Tag Input Container -->\n <div\n class=\"coar-tag-container\"\n #trigger\n [class.coar-tag-container--focused]=\"isFocused()\"\n [class.coar-tag-container--disabled]=\"isDisabled()\"\n [class.coar-tag-container--readonly]=\"readonly()\"\n [class.coar-tag-container--error]=\"hasError()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n tabindex=\"0\"\n (click)=\"focusInput()\"\n (keydown.enter)=\"focusInput()\"\n >\n <!-- Selected Tags -->\n @for (option of selectedOptions(); track option.value) {\n <span class=\"coar-tag\" [class.coar-tag--disabled]=\"isDisabled()\">\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"auto\" class=\"coar-tag-icon\" />\n }\n <span class=\"coar-tag-label\">{{ option.label }}</span>\n @if (!isDisabled() && !readonly()) {\n <button\n type=\"button\"\n class=\"coar-tag-remove\"\n tabindex=\"-1\"\n aria-label=\"Remove {{ option.label }}\"\n (click)=\"removeTag($any(option.value), $event)\"\n >\n <coar-icon name=\"x\" size=\"auto\" />\n </button>\n }\n </span>\n }\n\n <!-- Inline Input -->\n @if (!maxReached()) {\n <input\n #inlineInput\n type=\"text\"\n class=\"coar-tag-input\"\n [id]=\"inputId()\"\n [placeholder]=\"selectedOptions().length ? '' : placeholder()\"\n [value]=\"searchQuery()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"listboxId()\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n />\n }\n </div>\n\n <!-- Dropdown Panel (rendered via @cocoar/ui-overlay) -->\n <ng-template #dropdownTemplate>\n <div\n class=\"coar-select-dropdown coar-select-dropdown--overlay\"\n [class.coar-select-dropdown--top]=\"dropdownPosition() === 'top'\"\n role=\"presentation\"\n >\n <!-- Options List -->\n <div\n #optionsList\n class=\"coar-select-options\"\n [id]=\"listboxId()\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n [attr.aria-label]=\"label() || 'Options'\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n @for (option of displayAvailableOptions(); track option.value; let i = $index) {\n <div\n class=\"coar-tag-option\"\n [class.coar-tag-option--highlighted]=\"isAvailableHighlighted(i)\"\n [class.coar-tag-option--disabled]=\"option.disabled\"\n [id]=\"inputId() + '-option-' + i\"\n [attr.aria-selected]=\"false\"\n [attr.aria-disabled]=\"option.disabled ? 'true' : null\"\n [tabindex]=\"option.disabled ? -1 : 0\"\n role=\"option\"\n (click)=\"addTag($any(option))\"\n (keydown.enter)=\"addTag($any(option))\"\n (mouseenter)=\"setAvailableHighlightFromDisplay(i)\"\n >\n @if (option.icon) {\n <coar-icon [name]=\"option.icon\" size=\"sm\" class=\"coar-tag-option-icon\" />\n }\n <span class=\"coar-tag-option-label\">{{ option.label }}</span>\n </div>\n }\n\n <!-- Create New Option -->\n @if (showCreateOption()) {\n <div\n class=\"coar-tag-option coar-tag-option--create\"\n [class.coar-tag-option--highlighted]=\"highlightedIndex() === availableOptions().length\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"false\"\n (click)=\"createTag()\"\n (keydown.enter)=\"createTag()\"\n (mouseenter)=\"highlightedIndex.set(availableOptions().length)\"\n >\n <coar-icon name=\"plus\" size=\"sm\" class=\"coar-tag-option-icon\" />\n <span class=\"coar-tag-option-label\">{{ createPrefix() }}{{ searchQuery() }}</span>\n </div>\n }\n\n @if (!displayAvailableOptions().length && !showCreateOption()) {\n <div class=\"coar-select-empty\">\n @if (searchQuery()) {\n No matching options\n } @else {\n No more options available\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div\n [id]=\"messageId()\"\n class=\"coar-select-message\"\n [class.coar-select-message--error]=\"hasError()\"\n >\n {{ displayMessage() }}\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n TemplateRef,\n Type,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\n\n/**\n * Loading strategy for tab content:\n * - 'lazy': Content is only rendered when tab is active (default)\n * - 'eager': Content is always rendered, hidden when inactive\n */\nexport type TabLoadingStrategy = 'eager' | 'lazy';\n\n/**\n * Content type that can be passed to a tab.\n * Either a TemplateRef (from ng-template) or a Component class.\n */\nexport type TabContent = TemplateRef<unknown> | Type<unknown>;\n\n/**\n * Individual tab definition for use within CoarTabGroup.\n *\n * The tab label is provided as content projected into the component.\n * This allows simple text, icons, badges, or any custom HTML.\n *\n * @example Simple text label\n * ```html\n * <coar-tab id=\"home\" [content]=\"homeTemplate\">Home</coar-tab>\n * ```\n *\n * @example With icon\n * ```html\n * <coar-tab id=\"settings\" [content]=\"SettingsComponent\">⚙️ Settings</coar-tab>\n * ```\n *\n * @example Rich label with badge\n * ```html\n * <coar-tab id=\"messages\" [content]=\"messagesTemplate\">\n * Messages <span class=\"badge\">5</span>\n * </coar-tab>\n * ```\n */\n@Component({\n selector: 'coar-tab',\n standalone: true,\n template: `<ng-template #labelContent><ng-content /></ng-template>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTabComponent {\n /** Unique identifier for the tab */\n id = input.required<string>();\n\n /** Whether the tab is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * The content to display in the tab panel.\n * Can be either a TemplateRef (from ng-template) or a Component class.\n */\n content = input.required<TabContent>();\n\n /**\n * Inputs to pass when content is a Component.\n * Ignored when content is a TemplateRef.\n */\n contentInputs = input<Record<string, unknown>>({});\n\n /**\n * Loading strategy for the tab content.\n * - 'lazy' (default): Content is only rendered when tab becomes active\n * - 'eager': Content is always rendered, just hidden when inactive\n */\n loadingStrategy = input<TabLoadingStrategy>('lazy');\n\n /** Template reference for the projected label content */\n labelTemplate = viewChild.required<TemplateRef<unknown>>('labelContent');\n\n /**\n * Whether the content is a Component (vs a TemplateRef)\n */\n get isComponent(): boolean {\n const c = this.content();\n return typeof c === 'function';\n }\n\n /**\n * Get content as TemplateRef (returns null if it's a component)\n */\n get templateContent(): TemplateRef<unknown> | null {\n const c = this.content();\n return typeof c === 'function' ? null : c;\n }\n\n /**\n * Get content as Component type (returns null if it's a template)\n */\n get componentContent(): Type<unknown> | null {\n const c = this.content();\n return typeof c === 'function' ? c : null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n input,\n output,\n signal,\n effect,\n AfterContentInit,\n} from '@angular/core';\nimport { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { CoarTabComponent } from './coar-tab.component';\n\n@Component({\n selector: 'coar-tab-group',\n standalone: true,\n imports: [CommonModule, NgComponentOutlet],\n templateUrl: './coar-tab-group.component.html',\n styleUrl: './coar-tab-group.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTabGroupComponent implements AfterContentInit {\n /** The currently active tab id */\n activeTab = input<string>('');\n\n /** Emits when the active tab changes */\n activeTabChange = output<string>();\n\n /** All tab components projected into this group */\n tabs = contentChildren(CoarTabComponent);\n\n /** Internal active tab state */\n protected internalActiveTab = signal<string>('');\n\n constructor() {\n effect(() => {\n const externalTab = this.activeTab();\n if (externalTab) {\n this.internalActiveTab.set(externalTab);\n }\n });\n }\n\n ngAfterContentInit(): void {\n if (!this.internalActiveTab() && this.tabs().length > 0) {\n const firstTabId = this.tabs()[0].id();\n this.internalActiveTab.set(firstTabId);\n }\n }\n\n /** Check if a tab is currently active */\n isActive(tabId: string): boolean {\n const activeId = this.internalActiveTab();\n if (activeId) {\n return activeId === tabId;\n }\n return this.tabs()[0]?.id() === tabId;\n }\n\n /**\n * Determines whether the content of a tab should be rendered.\n * - For 'eager' strategy: always render (content stays in DOM)\n * - For 'lazy' strategy: only render when active\n */\n shouldRenderContent(tab: CoarTabComponent): boolean {\n if (tab.loadingStrategy() === 'eager') {\n return true;\n }\n // Default is lazy: only render when active\n return this.isActive(tab.id());\n }\n\n /** Select a tab by its id */\n selectTab(tabId: string): void {\n const tab = this.tabs().find((t) => t.id() === tabId);\n if (tab && !tab.disabled()) {\n this.internalActiveTab.set(tabId);\n this.activeTabChange.emit(tabId);\n }\n }\n\n /** Handle keyboard navigation */\n onKeydown(event: KeyboardEvent, currentTabId: string): void {\n const tabsArray = this.tabs().filter((t) => !t.disabled());\n const currentIndex = tabsArray.findIndex((t) => t.id() === currentTabId);\n\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabsArray.length - 1;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newIndex = currentIndex < tabsArray.length - 1 ? currentIndex + 1 : 0;\n event.preventDefault();\n break;\n case 'Home':\n newIndex = 0;\n event.preventDefault();\n break;\n case 'End':\n newIndex = tabsArray.length - 1;\n event.preventDefault();\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n const newTab = tabsArray[newIndex];\n this.selectTab(newTab.id());\n const tabButton = document.querySelector(`[data-tab-id=\"${newTab.id()}\"]`) as HTMLElement;\n tabButton?.focus();\n }\n }\n}\n","<div class=\"coar-tab-group\">\n <div class=\"coar-tab-list\" role=\"tablist\">\n @for (tab of tabs(); track tab.id()) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"coar-tab-button\"\n [class.active]=\"isActive(tab.id())\"\n [class.disabled]=\"tab.disabled()\"\n [attr.aria-selected]=\"isActive(tab.id())\"\n [attr.aria-controls]=\"'panel-' + tab.id()\"\n [attr.id]=\"tab.id()\"\n [attr.data-tab-id]=\"tab.id()\"\n [attr.tabindex]=\"isActive(tab.id()) ? 0 : -1\"\n [disabled]=\"tab.disabled()\"\n (click)=\"selectTab(tab.id())\"\n (keydown)=\"onKeydown($event, tab.id())\"\n >\n <span class=\"coar-tab-label\">\n <ng-container [ngTemplateOutlet]=\"tab.labelTemplate()\" />\n </span>\n </button>\n }\n </div>\n\n <div class=\"coar-tab-content\">\n @for (tab of tabs(); track tab.id()) {\n <div\n role=\"tabpanel\"\n class=\"coar-tab-panel\"\n [class.active]=\"isActive(tab.id())\"\n [attr.id]=\"'panel-' + tab.id()\"\n [attr.aria-labelledby]=\"tab.id()\"\n [hidden]=\"!isActive(tab.id())\"\n >\n @if (shouldRenderContent(tab)) {\n <!-- Component content -->\n @if (tab.isComponent) {\n <ng-container *ngComponentOutlet=\"$any(tab.componentContent); inputs: tab.contentInputs()\" />\n }\n <!-- Template content -->\n @else if (tab.templateContent) {\n <ng-container [ngTemplateOutlet]=\"tab.templateContent\" />\n } }\n </div>\n }\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n booleanAttribute,\n} from '@angular/core';\n\nimport { CoarIconComponent, CoarIconSize } from '../coar-icon/coar-icon.component';\nimport { CoreIconName } from '../coar-icon/core-icons';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'danger' | 'ghost';\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'coar-button',\n standalone: true,\n imports: [CoarIconComponent],\n templateUrl: './coar-button.component.html',\n styleUrl: './coar-button.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-button-host]': 'true',\n '[class.coar-button--full-width]': 'fullWidth()',\n },\n})\nexport class CoarButtonComponent {\n /** Button visual variant */\n variant = input<ButtonVariant>('primary');\n\n /** Button size */\n size = input<ButtonSize>('md');\n\n /** Whether the button is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the button is in loading state */\n loading = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Button type attribute */\n type = input<'button' | 'submit' | 'reset'>('button');\n\n /** Icon to display before the label */\n iconStart = input<CoreIconName | undefined>(undefined);\n\n /** Icon to display after the label */\n iconEnd = input<CoreIconName | undefined>(undefined);\n\n /** Whether the button should take full width */\n fullWidth = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Optional aria-label applied to the underlying <button> element */\n ariaLabel = input<string>('');\n\n /** Emitted when the button is clicked (not emitted when disabled or loading) */\n clicked = output<MouseEvent>();\n\n /** Maps button size to appropriate icon size */\n protected readonly iconSize = computed<CoarIconSize>(() => {\n const sizeMap: Record<ButtonSize, CoarIconSize> = {\n xs: 'xs',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n };\n return sizeMap[this.size()];\n });\n\n protected onClick(event: MouseEvent): void {\n if (!this.disabled() && !this.loading()) {\n this.clicked.emit(event);\n }\n }\n}\n","<button\n class=\"coar-button\"\n [class.coar-button--primary]=\"variant() === 'primary'\"\n [class.coar-button--secondary]=\"variant() === 'secondary'\"\n [class.coar-button--tertiary]=\"variant() === 'tertiary'\"\n [class.coar-button--danger]=\"variant() === 'danger'\"\n [class.coar-button--ghost]=\"variant() === 'ghost'\"\n [class.coar-button--xs]=\"size() === 'xs'\"\n [class.coar-button--sm]=\"size() === 'sm'\"\n [class.coar-button--md]=\"size() === 'md'\"\n [class.coar-button--lg]=\"size() === 'lg'\"\n [class.coar-button--loading]=\"loading()\"\n [class.coar-button--loading-overlay]=\"loading() && !iconStart() && !iconEnd()\"\n [class.coar-button--disabled]=\"disabled()\"\n [class.coar-button--full-width]=\"fullWidth()\"\n [type]=\"type()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-disabled]=\"disabled() || loading()\"\n [attr.aria-busy]=\"loading()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (click)=\"onClick($event)\"\n>\n <!-- Loading Spinner: Centered overlay when no icons, inline replacement when icons exist -->\n @if (loading() && !iconStart() && !iconEnd()) {\n <!-- Overlay spinner (centered, content hidden via opacity) -->\n <span class=\"coar-button__spinner coar-button__spinner--overlay\" aria-hidden=\"true\">\n <coar-icon name=\"load\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n }\n\n <!-- Icon Start: Show spinner instead when loading -->\n @if (loading() && iconStart()) {\n <span class=\"coar-button__spinner coar-button__spinner--inline\" aria-hidden=\"true\">\n <coar-icon name=\"load\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n } @else if (iconStart()) {\n <span class=\"coar-button__icon coar-button__icon--start\" aria-hidden=\"true\">\n <coar-icon [name]=\"iconStart()\" [size]=\"iconSize()\" />\n </span>\n }\n\n <!-- Content -->\n <span class=\"coar-button__content\">\n <ng-content />\n </span>\n\n <!-- Icon End: Show spinner instead when loading (only if no iconStart) -->\n @if (loading() && !iconStart() && iconEnd()) {\n <span class=\"coar-button__spinner coar-button__spinner--inline\" aria-hidden=\"true\">\n <coar-icon name=\"load\" [size]=\"iconSize()\" [spin]=\"true\" />\n </span>\n } @else if (iconEnd()) {\n <span class=\"coar-button__icon coar-button__icon--end\" aria-hidden=\"true\">\n <coar-icon [name]=\"iconEnd()\" [size]=\"iconSize()\" />\n </span>\n }\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n Injector,\n afterNextRender,\n computed,\n input,\n signal,\n inject,\n booleanAttribute,\n} from '@angular/core';\n\nimport { CoarButtonComponent } from '../coar-button/coar-button.component';\nimport Prism from 'prismjs';\n\nimport 'prismjs/components/prism-typescript';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-scss';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-markup';\n\n@Component({\n selector: 'coar-code-block',\n standalone: true,\n imports: [CoarButtonComponent],\n templateUrl: './coar-code-block.component.html',\n styleUrl: './coar-code-block.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarCodeBlockComponent {\n private readonly injector = inject(Injector);\n /** The code to display */\n code = input.required<string>();\n\n /** Language for syntax highlighting */\n language = input<string>('html');\n\n /** Title/label for the code block */\n title = input<string>('');\n\n /** Whether the code block can be collapsed */\n collapsible = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether the code block starts collapsed */\n collapsed = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to show the copy button */\n showCopy = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether to show line numbers */\n showLineNumbers = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Maximum height before scrolling (0 = no limit) */\n maxHeight = input<number>(0);\n\n /** Internal collapsed state */\n protected isCollapsed = signal(false);\n\n /** Copy feedback state */\n protected copyFeedback = signal<'idle' | 'copied' | 'error'>('idle');\n\n /** Highlighted code HTML */\n protected highlightedCode = computed(() => {\n const code = this.code();\n const lang = this.mapLanguage(this.language());\n\n const grammar = Prism.languages[lang];\n if (grammar) {\n return Prism.highlight(code, grammar, lang);\n }\n return this.escapeHtml(code);\n });\n\n /** Highlighted code split by line for optional line-number rendering */\n protected highlightedLines = computed(() => this.highlightedCode().split('\\n'));\n\n constructor() {\n // Signal inputs can be bound after construction; apply the initial collapsed state once\n // the component has been rendered.\n afterNextRender(\n () => {\n this.isCollapsed.set(this.collapsed());\n },\n { injector: this.injector }\n );\n }\n\n /** Map common language aliases to Prism language names */\n private mapLanguage(lang: string): string {\n const langMap: Record<string, string> = {\n html: 'markup',\n xml: 'markup',\n svg: 'markup',\n ts: 'typescript',\n js: 'javascript',\n sh: 'bash',\n shell: 'bash',\n };\n return langMap[lang.toLowerCase()] || lang.toLowerCase();\n }\n\n /** Escape HTML for plain text fallback */\n private escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n }\n\n /** Toggle collapsed state */\n toggleCollapsed(): void {\n if (this.collapsible()) {\n this.isCollapsed.set(!this.isCollapsed());\n }\n }\n\n /** Copy code to clipboard */\n async copyCode(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.code());\n this.copyFeedback.set('copied');\n setTimeout(() => this.copyFeedback.set('idle'), 2000);\n } catch {\n this.copyFeedback.set('error');\n setTimeout(() => this.copyFeedback.set('idle'), 2000);\n }\n }\n\n /** Get lines for line numbers */\n get lines(): number[] {\n return this.code()\n .split('\\n')\n .map((_, i) => i + 1);\n }\n}\n","<div class=\"coar-code-block\" [class.collapsed]=\"isCollapsed()\">\n <!-- Header -->\n <div class=\"coar-code-header\">\n <div class=\"coar-code-header-left\">\n @if (collapsible()) {\n <button\n type=\"button\"\n class=\"coar-code-toggle\"\n (click)=\"toggleCollapsed()\"\n [attr.aria-expanded]=\"!isCollapsed()\"\n aria-label=\"Toggle code visibility\"\n >\n <svg class=\"coar-code-chevron\" [class.rotated]=\"!isCollapsed()\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 4L10 8L6 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n } @if (title()) {\n <span class=\"coar-code-title\">{{ title() }}</span>\n } @else {\n <span class=\"coar-code-language\">{{ language() }}</span>\n }\n </div>\n\n <div class=\"coar-code-header-right\">\n @if (showCopy()) {\n <coar-button\n size=\"xs\"\n variant=\"secondary\"\n [iconStart]=\"copyFeedback() === 'copied' ? 'check' : 'copy'\"\n (clicked)=\"copyCode()\"\n [ariaLabel]=\"copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy code'\"\n [attr.aria-label]=\"copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy code'\"\n >\n {{ copyFeedback() === 'copied' ? 'Copied!' : copyFeedback() === 'error' ? 'Failed' : 'Copy' }}\n </coar-button>\n }\n </div>\n </div>\n\n <!-- Code Content -->\n @if (!isCollapsed()) {\n <div class=\"coar-code-content\" [style.max-height]=\"maxHeight() ? maxHeight() + 'px' : null\">\n @if (showLineNumbers()) {\n <pre class=\"coar-code-pre\" aria-label=\"Code\">\n <div class=\"coar-code-lines-grid\">\n @for (line of highlightedLines(); track $index) {\n <div class=\"coar-code-line\">\n <span class=\"coar-code-line-number\">{{ $index + 1 }}</span>\n <span class=\"coar-code-line-content\" [innerHTML]=\"line || '\\u200b'\"></span>\n </div>\n }\n </div>\n </pre>\n } @else {\n <pre class=\"coar-code-pre\"><code class=\"coar-code\" [innerHTML]=\"highlightedCode()\"></code></pre>\n }\n </div>\n }\n</div>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n\nexport type CardColor = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'coar-card',\n standalone: true,\n imports: [],\n templateUrl: './coar-card.component.html',\n styleUrls: ['./coar-card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-card]': 'true',\n // Elevated (box-shadow for depth)\n '[class.coar-card--elevated]': 'elevated()',\n // Borderless (no border) - default is false, so cards have borders by default\n '[class.coar-card--borderless]': 'borderless()',\n // Colors\n '[class.coar-card--neutral]': 'color() === \"neutral\"',\n '[class.coar-card--success]': 'color() === \"success\"',\n '[class.coar-card--warning]': 'color() === \"warning\"',\n '[class.coar-card--error]': 'color() === \"error\"',\n '[class.coar-card--info]': 'color() === \"info\"',\n '[class.coar-card--accent]': 'color() === \"accent\"',\n // Padding\n '[class.coar-card--padding-none]': 'padding() === \"none\"',\n '[class.coar-card--padding-sm]': 'padding() === \"sm\"',\n '[class.coar-card--padding-md]': 'padding() === \"md\"',\n '[class.coar-card--padding-lg]': 'padding() === \"lg\"',\n },\n})\nexport class CoarCardComponent {\n /**\n * Adds a box-shadow for elevation/depth.\n * Use as boolean attribute: `<coar-card elevated>` or `[elevated]=\"true\"`\n */\n elevated = input(false, { transform: booleanAttribute });\n\n /**\n * Removes the border from the card, leaving only background color.\n * By default (false), cards have a visible border matching their color.\n * Use as boolean attribute: `<coar-card borderless>` or `[borderless]=\"true\"`\n */\n borderless = input(false, { transform: booleanAttribute });\n\n /** Card color scheme */\n color = input<CardColor>('neutral');\n\n /** Card padding size */\n padding = input<CardPadding>('md');\n}\n","<ng-content select=\"[coar-card-header]\" />\n<ng-content />\n<ng-content select=\"[coar-card-footer]\" />\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n\nexport type NoteColor = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\nexport type NotePadding = 'sm' | 'md' | 'lg';\n\n/**\n * A callout/note component for highlighting information.\n *\n * Features a colored left border and subtle background.\n * Use for tips, warnings, important information, or behavioral notes.\n *\n * @example\n * ```html\n * <coar-note color=\"info\">\n * <strong>Note:</strong> This is important information.\n * </coar-note>\n *\n * <coar-note color=\"warning\" padding=\"lg\">\n * <h4>Warning</h4>\n * <p>Be careful with this action.</p>\n * </coar-note>\n * ```\n */\n@Component({\n selector: 'coar-note',\n standalone: true,\n imports: [],\n templateUrl: './coar-note.component.html',\n styleUrls: ['./coar-note.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-note]': 'true',\n // Colors\n '[class.coar-note--neutral]': 'color() === \"neutral\"',\n '[class.coar-note--success]': 'color() === \"success\"',\n '[class.coar-note--warning]': 'color() === \"warning\"',\n '[class.coar-note--error]': 'color() === \"error\"',\n '[class.coar-note--info]': 'color() === \"info\"',\n '[class.coar-note--accent]': 'color() === \"accent\"',\n // Padding\n '[class.coar-note--padding-sm]': 'padding() === \"sm\"',\n '[class.coar-note--padding-md]': 'padding() === \"md\"',\n '[class.coar-note--padding-lg]': 'padding() === \"lg\"',\n },\n})\nexport class CoarNoteComponent {\n /**\n * Note color scheme.\n * Determines the left border color and background tint.\n * @default 'info'\n */\n color = input<NoteColor>('neutral');\n\n /**\n * Note padding size.\n * @default 'md'\n */\n padding = input<NotePadding>('md');\n}\n","<ng-content />\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n booleanAttribute,\n} from '@angular/core';\n\n\nexport type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\nexport type BadgeSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'auto';\n\n@Component({\n selector: 'coar-badge',\n standalone: true,\n imports: [],\n templateUrl: './coar-badge.component.html',\n styleUrl: './coar-badge.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.coar-badge-host]': 'true',\n '[class.coar-badge-host--auto]': 'size() === \"auto\"',\n '[class.coar-badge-host--pulse]': 'pulse()',\n },\n})\nexport class CoarBadgeComponent {\n /** Content to display in the badge (number, text, or icon) */\n content = input<string | number>('');\n\n /** Badge visual variant */\n variant = input<BadgeVariant>('primary');\n\n /** Badge size */\n size = input<BadgeSize>('md');\n\n /** Whether the badge should pulse/animate (for notifications) */\n pulse = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to show as a dot without content */\n dot = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Maximum number to display (shows \"99+\" if exceeded) */\n max = input<number | null>(null);\n\n /** Whether to show a border around the badge */\n bordered = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Computed display value */\n protected displayValue = computed(() => {\n if (this.dot()) {\n return '';\n }\n\n const content = this.content();\n const max = this.max();\n\n if (typeof content === 'number' && max !== null && content > max) {\n return `${max}+`;\n }\n\n return String(content);\n });\n}\n","<span\n class=\"coar-badge\"\n [class.coar-badge--primary]=\"variant() === 'primary'\"\n [class.coar-badge--secondary]=\"variant() === 'secondary'\"\n [class.coar-badge--success]=\"variant() === 'success'\"\n [class.coar-badge--warning]=\"variant() === 'warning'\"\n [class.coar-badge--error]=\"variant() === 'error'\"\n [class.coar-badge--info]=\"variant() === 'info'\"\n [class.coar-badge--xs]=\"size() === 'xs'\"\n [class.coar-badge--sm]=\"size() === 'sm'\"\n [class.coar-badge--md]=\"size() === 'md'\"\n [class.coar-badge--lg]=\"size() === 'lg'\"\n [class.coar-badge--xl]=\"size() === 'xl'\"\n [class.coar-badge--auto]=\"size() === 'auto'\"\n [class.coar-badge--dot]=\"dot()\"\n [class.coar-badge--bordered]=\"bordered()\"\n role=\"status\"\n [attr.aria-label]=\"displayValue() || 'status indicator'\"\n>\n @if (!dot() && displayValue()) {\n <span class=\"coar-badge__content\">{{ displayValue() }}</span>\n }\n</span>\n","import { ChangeDetectionStrategy, Component, input, output, booleanAttribute } from '@angular/core';\n\n/**\n * Tag color variants - mirrors CardColor for visual consistency.\n * Tags are the \"little brother\" of Cards with the same color system.\n */\nexport type TagColor = 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'accent';\n\n/**\n * Tag size variants.\n * - sm: Compact tags for dense UIs (10px font)\n * - md: Default size (12px font)\n * - lg: Larger tags for emphasis (14px font)\n */\nexport type TagSize = 'sm' | 'md' | 'lg';\n\n/**\n * CoarTagComponent\n *\n * A compact label component for categorizing, labeling, or marking content.\n * Shares the same color system as CoarCard for visual consistency.\n *\n * Unlike badges (pill-shaped, for counts/notifications), tags use\n * slight rounding and support interactive features like closing.\n *\n * @example\n * ```html\n * <coar-tag>Default</coar-tag>\n * <coar-tag color=\"success\">Published</coar-tag>\n * <coar-tag color=\"warning\" closable (closed)=\"onRemove()\">Draft</coar-tag>\n * ```\n */\n@Component({\n selector: 'coar-tag',\n standalone: true,\n templateUrl: './coar-tag.component.html',\n styleUrl: './coar-tag.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'coar-tag',\n // Size\n '[class.coar-tag--sm]': 'size() === \"sm\"',\n '[class.coar-tag--md]': 'size() === \"md\"',\n '[class.coar-tag--lg]': 'size() === \"lg\"',\n // Elevated (box-shadow for depth)\n '[class.coar-tag--elevated]': 'elevated()',\n // Borderless (no border)\n '[class.coar-tag--borderless]': 'borderless()',\n // Colors\n '[class.coar-tag--neutral]': 'color() === \"neutral\"',\n '[class.coar-tag--success]': 'color() === \"success\"',\n '[class.coar-tag--warning]': 'color() === \"warning\"',\n '[class.coar-tag--error]': 'color() === \"error\"',\n '[class.coar-tag--info]': 'color() === \"info\"',\n '[class.coar-tag--accent]': 'color() === \"accent\"',\n },\n})\nexport class CoarTagComponent {\n /**\n * Adds a box-shadow for elevation/depth.\n * Use as boolean attribute: `<coar-tag elevated>` or `[elevated]=\"true\"`\n */\n elevated = input(false, { transform: booleanAttribute });\n\n /**\n * Removes the border from the tag, leaving only background color.\n * By default (false), tags have a visible border matching their color.\n * Use as boolean attribute: `<coar-tag borderless>` or `[borderless]=\"true\"`\n */\n borderless = input(false, { transform: booleanAttribute });\n\n /** Tag color scheme - matches Card colors */\n color = input<TagColor>('neutral');\n\n /** Tag size */\n size = input<TagSize>('md');\n\n /** Whether the tag can be closed/removed */\n closable = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Emitted when the close button is clicked */\n closed = output<void>();\n\n /** Handle close button click */\n protected onClose(event: MouseEvent): void {\n event.stopPropagation();\n this.closed.emit();\n }\n}\n","<span class=\"coar-tag__content\">\n <ng-content />\n</span>\n@if (closable()) {\n<button type=\"button\" class=\"coar-tag__close\" aria-label=\"Remove tag\" (click)=\"onClose($event)\">\n <svg class=\"coar-tag__close-icon\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4L12 12M12 4L4 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n</button>\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Content alignment options for the divider.\n * - 'center': Content is centered with lines on both sides (default)\n * - 'left': Content is aligned left with line on the right\n * - 'right': Content is aligned right with line on the left\n */\nexport type DividerAlign = 'left' | 'center' | 'right';\n\n/**\n * Visual style variants for the divider line.\n * - 'subtle': Light, unobtrusive divider (default)\n * - 'strong': More prominent divider\n */\nexport type DividerVariant = 'subtle' | 'strong';\n\n/**\n * A flexible divider component for visually separating content sections.\n *\n * Supports optional content (text, icons, etc.) via ng-content that can be\n * aligned left, center, or right. When content is present, the divider line\n * splits around it.\n *\n * @example\n * <!-- Simple divider -->\n * <coar-divider />\n *\n * @example\n * <!-- Divider with centered text -->\n * <coar-divider>OR</coar-divider>\n *\n * @example\n * <!-- Divider with left-aligned content -->\n * <coar-divider align=\"left\">Section Title</coar-divider>\n */\n@Component({\n selector: 'coar-divider',\n standalone: true,\n templateUrl: './coar-divider.component.html',\n styleUrl: './coar-divider.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'separator',\n '[attr.aria-orientation]': '\"horizontal\"',\n '[class.coar-divider]': 'true',\n '[class.coar-divider--subtle]': 'variant() === \"subtle\"',\n '[class.coar-divider--strong]': 'variant() === \"strong\"',\n '[class.coar-divider--left]': 'align() === \"left\"',\n '[class.coar-divider--center]': 'align() === \"center\"',\n '[class.coar-divider--right]': 'align() === \"right\"',\n },\n})\nexport class CoarDividerComponent {\n /** Content alignment when ng-content is provided */\n align = input<DividerAlign>('center');\n\n /** Visual style variant */\n variant = input<DividerVariant>('subtle');\n\n /** Width of the divider as a percentage (0-100) */\n width = input<number>(90);\n\n /** Spacing above the divider in pixels */\n spacingTop = input<number>(0);\n\n /** Spacing below the divider in pixels */\n spacingBottom = input<number>(0);\n}\n","<div class=\"coar-divider__container\" [style.width.%]=\"width()\" [style.margin-top.px]=\"spacingTop()\" [style.margin-bottom.px]=\"spacingBottom()\">\n <div class=\"coar-divider__line coar-divider__line--before\"></div>\n <div class=\"coar-divider__content\">\n <ng-content />\n </div>\n <div class=\"coar-divider__line coar-divider__line--after\"></div>\n</div>\n","import { Injectable } from '@angular/core';\n\n/**\n * Local coordination for popovers inside the same container (e.g. a date picker panel).\n *\n * Provided by a parent component to ensure only one popover in that scope is open at a time.\n */\n@Injectable()\nexport class CoarPopoverGroupService {\n private activeId: string | null = null;\n private activeClose: (() => void) | null = null;\n\n requestOpen(id: string, close: () => void): void {\n if (this.activeId && this.activeId !== id) {\n this.activeClose?.();\n }\n\n this.activeId = id;\n this.activeClose = close;\n }\n\n notifyClosed(id: string): void {\n if (this.activeId === id) {\n this.activeId = null;\n this.activeClose = null;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n HostListener,\n effect,\n inject,\n input,\n signal,\n viewChild,\n booleanAttribute,\n TemplateRef,\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { fromEvent, filter } from 'rxjs';\n\nimport { CoarOverlayService, Overlay } from '@cocoar/ui-overlay';\nimport { CoarScrollbarDirective } from '../coar-scrollbar/coar-scrollbar.directive';\nimport { CoarPopoverGroupService } from './coar-popover-group.service';\n\n/**\n * A lightweight, hover/focus popover for rich tooltip-like content.\n *\n * Uses the overlay system for positioning with automatic placement and viewport clamping.\n */\n@Component({\n selector: 'coar-popover',\n standalone: true,\n imports: [CoarScrollbarDirective],\n templateUrl: './coar-popover.component.html',\n styleUrl: './coar-popover.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarPopoverComponent {\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly popoverGroup = inject(CoarPopoverGroupService, { optional: true });\n private readonly overlayService = inject(CoarOverlayService);\n\n private static nextId = 0;\n private readonly popoverId = `coar-popover-${CoarPopoverComponent.nextId++}`;\n protected readonly panelId = `${this.popoverId}-panel`;\n\n private overlayRef: import('@cocoar/ui-overlay').OverlayRef | null = null;\n protected readonly isOpen = signal(false);\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.close();\n });\n }\n\n /** Disable popover behavior (still renders trigger content). */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Enable hover/focus behavior (desktop-friendly). Default: false */\n openOnHover = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Enable click/tap behavior (touch-friendly). Default: false */\n openOnClick = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the panel should receive pointer events. Default: true */\n interactive = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When a concrete placement is set, fall back to best-fit when it doesn't fit. Default: false */\n fallbackToBestFit = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the panel should be clamped into the viewport. Default: true */\n clampToViewport = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When true, the popover is \"pinned\" open via click and won't close on hover out. */\n protected readonly pinnedByClick = signal(false);\n\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private readonly hoveringTrigger = signal(false);\n private readonly hoveringPanel = signal(false);\n\n private readonly closeOnDisable = effect(() => {\n if (this.disabled()) {\n this.close();\n }\n });\n\n private readonly syncClampToViewport = effect(() => {\n // Applied when opening the overlay.\n void this.clampToViewport();\n });\n\n private readonly syncFallbackToBestFit = effect(() => {\n // Relevant for concrete placements; popover uses best-fit placement list.\n void this.fallbackToBestFit();\n });\n\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n\n private readonly panelTemplateRef = viewChild<TemplateRef<unknown>>('panelTemplate');\n\n private getAnchorElement(): HTMLElement | null {\n const triggerContainer = this.triggerRef()?.nativeElement ?? null;\n if (!triggerContainer) return null;\n\n // Prefer anchoring to the projected trigger element so positioning stays tied\n // to the interactive target rather than a full-width wrapper.\n return (\n triggerContainer.querySelector('[coarPopoverTrigger], [coarpopovertrigger]') ??\n triggerContainer\n );\n }\n\n private readonly closeOnDocumentClick = fromEvent<MouseEvent>(document, 'click')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter(() => this.isOpen()),\n filter(() => this.openOnClick()),\n filter(() => this.pinnedByClick()),\n filter((event) => {\n const target = event.target as Node | null;\n if (!target) return false;\n\n const trigger = this.getAnchorElement();\n if (trigger && trigger.contains(target)) return false;\n\n const panel = document.getElementById(this.panelId);\n if (panel && panel.contains(target)) return false;\n\n return true;\n })\n )\n .subscribe(() => this.close());\n\n private openInternal(source: 'hover' | 'click'): void {\n if (this.disabled()) return;\n\n const trigger = this.getAnchorElement();\n if (!trigger) return;\n\n if (this.overlayRef) {\n if (source === 'click') {\n this.pinnedByClick.set(true);\n }\n return;\n }\n\n const template = this.panelTemplateRef();\n if (!template) return;\n\n // Scope-level coordination (e.g. date picker): opening one closes others.\n this.popoverGroup?.requestOpen(this.popoverId, () => this.close());\n\n if (source === 'click') {\n this.pinnedByClick.set(true);\n } else {\n this.pinnedByClick.set(false);\n }\n\n const spec = Overlay.define<Record<string, never>>((b) => {\n b.content((c) => c.fromTemplate(template));\n b.anchor({ kind: 'element', element: trigger });\n b.position({\n placement: ['bottom', 'top', 'right', 'left'],\n offset: 6,\n flip: false,\n shift: this.clampToViewport(),\n });\n b.scroll({ strategy: 'reposition' });\n b.dismiss({ outsideClick: false, escapeKey: true });\n b.size({ mode: 'content' });\n b.a11y({ role: 'tooltip' });\n });\n\n const ref = this.overlayService.open(spec, {});\n this.overlayRef = ref;\n this.isOpen.set(true);\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.pinnedByClick.set(false);\n this.popoverGroup?.notifyClosed(this.popoverId);\n });\n }\n\n onMouseEnter(): void {\n if (!this.openOnHover()) return;\n this.hoveringTrigger.set(true);\n this.clearCloseTimer();\n this.openInternal('hover');\n }\n\n onMouseLeave(): void {\n if (!this.openOnHover()) return;\n if (this.pinnedByClick()) return;\n this.hoveringTrigger.set(false);\n this.scheduleHoverClose();\n }\n\n onPanelMouseEnter(): void {\n if (!this.openOnHover()) return;\n this.hoveringPanel.set(true);\n this.clearCloseTimer();\n }\n\n onPanelMouseLeave(): void {\n if (!this.openOnHover()) return;\n if (this.pinnedByClick()) return;\n this.hoveringPanel.set(false);\n this.scheduleHoverClose();\n }\n\n onFocusIn(): void {\n if (!this.openOnHover()) return;\n this.openInternal('hover');\n }\n\n onPanelFocusIn(): void {\n if (!this.openOnHover()) return;\n this.openInternal('hover');\n }\n\n onTriggerClick(event: MouseEvent): void {\n if (!this.openOnClick()) return;\n if (this.disabled()) return;\n\n // Prevent the global document click handler from immediately closing.\n event.stopPropagation();\n\n if (!this.isOpen()) {\n this.openInternal('click');\n return;\n }\n\n // If opened via hover, treat click as \"pin\". If already pinned, toggle closed.\n if (!this.pinnedByClick()) {\n this.pinnedByClick.set(true);\n return;\n }\n\n this.close();\n }\n\n @HostListener('click', ['$event'])\n onHostClick(event: MouseEvent): void {\n if (!this.openOnClick()) return;\n\n const target = event.target as HTMLElement | null;\n if (!target) return;\n\n // Only toggle when the click originated from the projected trigger.\n if (!target.closest('[coarPopoverTrigger]')) return;\n\n this.onTriggerClick(event);\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.pinnedByClick.set(false);\n this.clearCloseTimer();\n\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n\n this.isOpen.set(false);\n this.popoverGroup?.notifyClosed(this.popoverId);\n }\n\n onFocusOut(event: FocusEvent): void {\n if (this.pinnedByClick()) return;\n\n const nextTarget = event.relatedTarget as Node | null;\n\n // Close only when focus fully leaves the popover (trigger + panel).\n const trigger = this.triggerRef()?.nativeElement ?? null;\n const panel = document.getElementById(this.panelId);\n if (\n (trigger && nextTarget && trigger.contains(nextTarget)) ||\n (panel && nextTarget && panel.contains(nextTarget))\n ) {\n return;\n }\n\n this.close();\n }\n\n onPanelFocusOut(event: FocusEvent): void {\n this.onFocusOut(event);\n }\n\n private scheduleHoverClose(): void {\n this.clearCloseTimer();\n this.closeTimer = setTimeout(() => {\n if (this.pinnedByClick()) return;\n if (this.hoveringTrigger() || this.hoveringPanel()) return;\n this.close();\n }, 80);\n }\n\n private clearCloseTimer(): void {\n if (!this.closeTimer) return;\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n}\n","<div\n class=\"coar-popover\"\n (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n>\n <span\n #trigger\n class=\"coar-popover-trigger\"\n >\n <ng-content select=\"[coarPopoverTrigger]\"></ng-content>\n </span>\n\n <ng-template #panelTemplate>\n <div\n class=\"coar-popover-panel coar-popover-panel--overlay\"\n [attr.id]=\"panelId\"\n [style.pointer-events]=\"interactive() ? 'auto' : 'none'\"\n role=\"tooltip\"\n (mouseenter)=\"onPanelMouseEnter()\"\n (mouseleave)=\"onPanelMouseLeave()\"\n (focusin)=\"onPanelFocusIn()\"\n (focusout)=\"onPanelFocusOut($event)\"\n >\n <div\n class=\"coar-popover-content\"\n coarScrollbar\n [overflowX]=\"'hidden'\"\n [autoHide]=\"'never'\"\n [overscrollBehavior]=\"'contain'\"\n [defer]=\"false\"\n >\n <ng-content select=\"[coarPopoverContent]\"></ng-content>\n </div>\n </div>\n </ng-template>\n</div>\n","import { Injectable } from '@angular/core';\n\ntype TooltipOpenReason = 'hover' | 'focus';\n\ninterface ActiveTooltip {\n id: string;\n closeImmediate: () => void;\n closeOnHoverLost: () => void;\n trigger: HTMLElement;\n reason: TooltipOpenReason;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CoarTooltipService {\n private active: ActiveTooltip | null = null;\n\n private trackingCleanup: (() => void) | null = null;\n\n requestOpen(\n id: string,\n closeImmediate: () => void,\n closeOnHoverLost: () => void,\n trigger: HTMLElement,\n reason: TooltipOpenReason\n ): void {\n const previous = this.active;\n\n if (previous && previous.id !== id) {\n previous.closeImmediate();\n }\n\n this.active = { id, closeImmediate, closeOnHoverLost, trigger, reason };\n\n if (reason === 'hover') {\n this.ensurePointerTracking();\n } else {\n this.stopPointerTracking();\n }\n }\n\n notifyClosed(id: string): void {\n if (this.active?.id !== id) return;\n this.active = null;\n this.stopPointerTracking();\n }\n\n private ensurePointerTracking(): void {\n if (this.trackingCleanup) return;\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\n\n const capture = true;\n\n const closeIfHoverLost = (): void => {\n if (!this.active) return;\n if (this.active.reason !== 'hover') return;\n this.active.closeImmediate();\n };\n\n const onPointerMove = (event: PointerEvent | MouseEvent): void => {\n if (!this.active) return;\n if (this.active.reason !== 'hover') return;\n\n // Prefer hit-testing when available, but fall back to geometry checks for environments\n // that don't implement elementFromPoint (e.g. certain test runners).\n if (typeof document.elementFromPoint === 'function') {\n const el = document.elementFromPoint(event.clientX, event.clientY);\n if (el && this.active.trigger.contains(el)) return;\n this.active.closeOnHoverLost();\n return;\n }\n\n const rect = this.active.trigger.getBoundingClientRect();\n const withinX = event.clientX >= rect.left && event.clientX <= rect.right;\n const withinY = event.clientY >= rect.top && event.clientY <= rect.bottom;\n\n if (withinX && withinY) return;\n this.active.closeOnHoverLost();\n };\n\n const onScroll = (): void => closeIfHoverLost();\n const onBlur = (): void => closeIfHoverLost();\n const onVisibilityChange = (): void => {\n if (document.hidden) {\n closeIfHoverLost();\n }\n };\n\n document.addEventListener('pointermove', onPointerMove, { capture, passive: true });\n window.addEventListener('scroll', onScroll, { capture, passive: true });\n window.addEventListener('blur', onBlur);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n this.trackingCleanup = () => {\n document.removeEventListener('pointermove', onPointerMove, capture);\n window.removeEventListener('scroll', onScroll, capture);\n window.removeEventListener('blur', onBlur);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n this.trackingCleanup = null;\n };\n }\n\n private stopPointerTracking(): void {\n this.trackingCleanup?.();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Injector,\n TemplateRef,\n Type,\n computed,\n input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type CoarTooltipOverlayContent = string | TemplateRef<unknown> | Type<unknown>;\n\n@Component({\n selector: 'coar-tooltip-overlay',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './coar-tooltip-overlay.component.html',\n styleUrl: './coar-tooltip-overlay.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CoarTooltipOverlayComponent {\n readonly tooltipId = input<string>('');\n\n readonly content = input<CoarTooltipOverlayContent | null>(null);\n\n /** Context passed to template content via ngTemplateOutletContext. */\n readonly context = input<object | null>(null);\n\n /** Injector for dynamic component content via NgComponentOutlet. */\n readonly contentInjector = input<Injector | null>(null);\n\n @HostBinding('attr.id')\n protected get hostId(): string | null {\n return this.tooltipId() ? this.tooltipId() : null;\n }\n\n @HostBinding('attr.role')\n protected readonly role = 'tooltip';\n\n protected readonly kind = computed<'text' | 'template' | 'component' | 'none'>(() => {\n const value = this.content();\n if (value == null) return 'none';\n if (typeof value === 'string') return 'text';\n if (value instanceof TemplateRef) return 'template';\n return 'component';\n });\n\n protected readonly text = computed(() => {\n const value = this.content();\n return typeof value === 'string' ? value : '';\n });\n\n protected readonly templateRef = computed(() => {\n const value = this.content();\n return value instanceof TemplateRef ? value : null;\n });\n\n protected readonly componentType = computed<Type<unknown> | null>(() => {\n const value = this.content();\n if (value == null) return null;\n if (typeof value === 'string') return null;\n if (value instanceof TemplateRef) return null;\n return value as Type<unknown>;\n });\n}\n","@if (kind() === 'text') {\n <span class=\"coar-tooltip-text\">{{ text() }}</span>\n} @else if (kind() === 'template') {\n <ng-container\n [ngTemplateOutlet]=\"templateRef()\"\n [ngTemplateOutletContext]=\"context() ?? {}\"\n />\n} @else if (kind() === 'component') {\n <ng-container\n *ngComponentOutlet=\"componentType(); injector: (contentInjector() ?? undefined)\"\n />\n}\n","import {\n DestroyRef,\n Directive,\n ElementRef,\n Injector,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\n\nimport { CoarOverlayService, Overlay, type OverlayRef, type Placement } from '@cocoar/ui-overlay';\n\nimport { CoarTooltipService } from './coar-tooltip.service';\nimport { CoarTooltipOverlayComponent, type CoarTooltipOverlayContent } from './coar-tooltip-overlay.component';\n\n/** Tooltip placement preference - all 12 standard placements plus 'auto' for best-fit */\ntype TooltipPlacement =\n | 'auto'\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end';\n\n@Directive({\n selector: '[coarTooltip]',\n exportAs: 'coarTooltip',\n standalone: true,\n host: {\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class CoarTooltipDirective {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n private readonly overlayService = inject(CoarOverlayService);\n private readonly tooltipService = inject(CoarTooltipService);\n\n /** Tooltip content (string, TemplateRef, or Component type). */\n readonly coarTooltip = input<CoarTooltipOverlayContent | null>(null);\n\n /** Optional context for TemplateRef tooltips. */\n readonly coarTooltipContext = input<object | null>(null);\n\n /** Disable tooltip behavior. */\n readonly coarTooltipDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Placement preference. Default: 'top'. Use 'auto' for best-fit. */\n readonly coarTooltipPlacement = input<TooltipPlacement>('top');\n\n /** Delay (ms) before opening on hover/focus. Default: 0 */\n readonly coarTooltipOpenDelay = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Delay (ms) before closing on leave/blur. Default: 0 */\n readonly coarTooltipCloseDelay = input<number, unknown>(0, { transform: numberAttribute });\n\n /** Whether the tooltip should be clamped into the viewport. Default: true */\n readonly coarTooltipClampToViewport = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** When placement is explicit (not auto), fall back to best-fit when it doesn't fit. Default: false */\n readonly coarTooltipFallbackToBestFit = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n private readonly tooltipId = `coar-tooltip-${cryptoRandomId()}`;\n\n private overlayRef: OverlayRef | null = null;\n\n private openTimerId: number | null = null;\n private closeTimerId: number | null = null;\n\n private openReason: 'hover' | 'focus' | null = null;\n\n private readonly hasContent = computed(() => {\n const value = this.coarTooltip();\n return value != null && value !== '';\n });\n\n constructor() {\n effect(() => {\n if (this.coarTooltipDisabled()) {\n this.close(true);\n }\n\n // Track these inputs so updates are observed; if an overlay is open,\n // we re-open to apply content/config changes predictably.\n this.coarTooltip();\n this.coarTooltipContext();\n this.coarTooltipPlacement();\n this.coarTooltipClampToViewport();\n this.coarTooltipFallbackToBestFit();\n\n const currentOpenReason = this.openReason;\n const hasOpenOverlay = this.overlayRef != null;\n\n // When the tooltip is open and config changes, re-open to apply changes.\n // CoarOverlayService does not support updating spec/content in-place.\n if (!this.coarTooltipDisabled() && hasOpenOverlay && currentOpenReason && this.hasContent()) {\n this.close(true);\n Promise.resolve().then(() => this.openInternal(currentOpenReason));\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.clearTimers();\n this.close(true);\n });\n }\n\n private clearTimers(): void {\n if (this.openTimerId != null) {\n window.clearTimeout(this.openTimerId);\n this.openTimerId = null;\n }\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n }\n\n private openInternal(reason: 'hover' | 'focus'): void {\n if (this.coarTooltipDisabled()) return;\n if (!this.hasContent()) return;\n\n const trigger = this.elementRef.nativeElement;\n\n // Ensure only one tooltip at a time across the app.\n this.tooltipService.requestOpen(\n this.tooltipId,\n () => this.close(true),\n () => this.scheduleClose('hover'),\n trigger,\n reason\n );\n\n this.openReason = reason;\n\n if (this.overlayRef) {\n this.overlayRef.updatePosition();\n trigger.setAttribute('aria-describedby', this.tooltipId);\n return;\n }\n\n const content = this.coarTooltip();\n if (!content) return;\n\n const position = this.resolveOverlayPosition();\n const spec = Overlay.define<{\n tooltipId: string;\n content: CoarTooltipOverlayContent;\n context: object | null;\n contentInjector: Injector;\n }>((b) => {\n b.content((c) => c.fromComponent(CoarTooltipOverlayComponent));\n b.anchor({ kind: 'element', element: trigger });\n b.position(position);\n b.scroll({ strategy: 'reposition' });\n b.dismiss({ outsideClick: false, escapeKey: true });\n b.size({ mode: 'content' });\n b.a11y({ role: 'tooltip' });\n });\n\n const ref = this.overlayService.open(spec, {\n tooltipId: this.tooltipId,\n content,\n context: this.coarTooltipContext(),\n contentInjector: this.injector,\n });\n\n this.overlayRef = ref;\n\n trigger.setAttribute('aria-describedby', this.tooltipId);\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.openReason = null;\n trigger.removeAttribute('aria-describedby');\n this.tooltipService.notifyClosed(this.tooltipId);\n });\n }\n\n private resolveOverlayPosition(): {\n placement: Placement | readonly Placement[];\n offset: number;\n flip: boolean;\n shift: boolean;\n } {\n const preference = this.coarTooltipPlacement();\n const clampToViewport = this.coarTooltipClampToViewport();\n const fallbackToBestFit = this.coarTooltipFallbackToBestFit();\n\n if (preference === 'auto') {\n return {\n placement: ['top', 'bottom', 'left', 'right'] as const,\n offset: 6,\n flip: false,\n shift: clampToViewport,\n };\n }\n\n const requested = toOverlayPlacement(preference);\n\n if (fallbackToBestFit) {\n const candidates = ['top', 'bottom', 'left', 'right'] as const;\n const rest = candidates.filter((p) => p !== requested);\n\n return {\n placement: [requested, ...rest],\n offset: 6,\n flip: true,\n shift: clampToViewport,\n };\n }\n\n return {\n placement: requested,\n offset: 6,\n flip: false,\n shift: clampToViewport,\n };\n }\n\n private scheduleOpen(reason: 'hover' | 'focus'): void {\n this.clearTimers();\n\n const delay = Math.max(0, Number(this.coarTooltipOpenDelay()) || 0);\n if (delay === 0) {\n this.openInternal(reason);\n return;\n }\n\n this.openTimerId = window.setTimeout(() => {\n this.openTimerId = null;\n this.openInternal(reason);\n }, delay);\n }\n\n private scheduleClose(reason: 'hover' | 'focus'): void {\n if (this.openTimerId != null) {\n window.clearTimeout(this.openTimerId);\n this.openTimerId = null;\n }\n\n if (this.openReason !== reason) return;\n\n const delay = Math.max(0, Number(this.coarTooltipCloseDelay()) || 0);\n if (delay === 0) {\n this.close(true);\n return;\n }\n\n if (this.closeTimerId != null) return;\n\n this.closeTimerId = window.setTimeout(() => {\n this.closeTimerId = null;\n this.close(true);\n }, delay);\n }\n\n onMouseEnter(): void {\n if (this.coarTooltipDisabled()) return;\n\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n\n this.scheduleOpen('hover');\n }\n\n onMouseLeave(): void {\n this.scheduleClose('hover');\n }\n\n onFocusIn(): void {\n if (this.coarTooltipDisabled()) return;\n\n if (this.closeTimerId != null) {\n window.clearTimeout(this.closeTimerId);\n this.closeTimerId = null;\n }\n\n this.scheduleOpen('focus');\n }\n\n onFocusOut(event: FocusEvent): void {\n const nextTarget = event.relatedTarget as Node | null;\n if (nextTarget && this.elementRef.nativeElement.contains(nextTarget)) {\n return;\n }\n\n this.scheduleClose('focus');\n }\n\n close(immediate = false): void {\n if (immediate) {\n this.clearTimers();\n }\n\n this.openReason = null;\n\n const trigger = this.elementRef.nativeElement;\n trigger.removeAttribute('aria-describedby');\n\n const ref = this.overlayRef;\n if (!ref) return;\n\n this.overlayRef = null;\n ref.close();\n this.tooltipService.notifyClosed(this.tooltipId);\n }\n\n open(): void {\n const trigger = this.elementRef.nativeElement;\n const active = (typeof document !== 'undefined' ? document.activeElement : null) as Element | null;\n const reason: 'hover' | 'focus' = active && trigger.contains(active) ? 'focus' : 'hover';\n this.clearTimers();\n this.openInternal(reason);\n }\n\n toggle(): void {\n if (this.overlayRef) {\n this.close(true);\n return;\n }\n this.open();\n }\n}\n\nfunction toOverlayPlacement(preference: Exclude<TooltipPlacement, 'auto'>): Placement {\n // Now that overlay supports all 12 placements, pass them through directly\n return preference as Placement;\n}\n\nfunction cryptoRandomId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n input,\n ViewEncapsulation,\n booleanAttribute,\n} from '@angular/core';\n\n/**\n * Available sizes for the label component.\n * Matches the component size system used by buttons and inputs.\n */\nexport type CoarLabelSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/**\n * Standalone label component for consistent form labeling across the design system.\n *\n * @example\n * ```html\n * <coar-label size=\"sm\" [required]=\"true\">Email Address</coar-label>\n * <coar-text-input size=\"sm\" placeholder=\"your@email.com\" />\n * ```\n */\n@Component({\n selector: 'coar-label',\n standalone: true,\n template: `\n @if (text()) {\n {{ text() }}\n } @else {\n <ng-content></ng-content>\n } @if (required()) {\n <span class=\"coar-label-required\" aria-hidden=\"true\">*</span>\n }\n `,\n styleUrl: './coar-label.component.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'coar-label',\n },\n})\nexport class CoarLabelComponent {\n /**\n * Size of the label. Should match the size of the associated input/form element.\n * @default 'md'\n */\n readonly size = input<CoarLabelSize>('md');\n\n /**\n * Whether to show a required indicator (*) after the label text.\n * @default false\n */\n readonly required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * The ID of the form element this label is associated with.\n * Sets the 'for' attribute for accessibility.\n */\n readonly for = input<string | undefined>(undefined);\n\n readonly text = input<string>('');\n\n @HostBinding('class.coar-label--xs')\n get isXs(): boolean {\n return this.size() === 'xs';\n }\n\n @HostBinding('class.coar-label--sm')\n get isSm(): boolean {\n return this.size() === 'sm';\n }\n\n @HostBinding('class.coar-label--md')\n get isMd(): boolean {\n return this.size() === 'md';\n }\n\n @HostBinding('class.coar-label--lg')\n get isLg(): boolean {\n return this.size() === 'lg';\n }\n\n @HostBinding('attr.for')\n get forAttr(): string | null {\n return this.for() ?? null;\n }\n}\n","import { Component, input, ChangeDetectionStrategy, booleanAttribute } from '@angular/core';\n\nexport type CoarTableVariant = 'default' | 'plain' | 'bordered';\n\n/**\n * A simple table component that provides consistent styling.\n *\n * Default styling uses alternating row colors (zebra stripes) for readability.\n * Use 'plain' variant for no stripes, or 'bordered' for full cell borders.\n *\n * Usage:\n * ```html\n * <coar-table>\n * <thead>\n * <tr>\n * <th>Property</th>\n * <th>Type</th>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <td><code>name</code></td>\n * <td><code>string</code></td>\n * </tr>\n * </tbody>\n * </coar-table>\n * ```\n */\n@Component({\n selector: 'coar-table',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"coar-table-wrapper\">\n <table class=\"coar-table\">\n <ng-content />\n </table>\n </div>\n `,\n styleUrl: './coar-table.component.css',\n host: {\n '[class.coar-table--plain]': 'variant() === \"plain\"',\n '[class.coar-table--bordered]': 'variant() === \"bordered\"',\n '[class.coar-table--compact]': 'compact()',\n '[class.coar-table--hover]': 'hover()',\n },\n})\nexport class CoarTableComponent {\n /** Visual variant of the table: default (zebra stripes), plain (no stripes), bordered (cell borders) */\n variant = input<CoarTableVariant>('default');\n\n /** Whether to use compact padding */\n compact = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether rows should highlight on hover */\n hover = input<boolean, unknown>(true, { transform: booleanAttribute });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n booleanAttribute,\n DestroyRef,\n afterNextRender,\n TemplateRef,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Temporal } from '@js-temporal/polyfill';\nimport { Maskito } from '@maskito/core';\nimport { maskitoDateOptionsGenerator } from '@maskito/kit';\nimport { CoarIconComponent } from '../coar-icon/coar-icon.component';\nimport { CoarPopoverComponent } from '../coar-popover/coar-popover.component';\nimport { CoarPopoverGroupService } from '../coar-popover/coar-popover-group.service';\nimport { coarProvideValueAccessor, CoarControlValueAccessor } from '../forms/coar-control-value-accessor';\nimport { COAR_LOCALE_SERVICE, type DateFormatConfig } from '../services/locale.service';\nimport {\n CoarOverlayService,\n Overlay,\n type OverlayRef,\n type Placement,\n} from '@cocoar/ui-overlay';\n\nexport type CoarDatePickerSize = 'xs' | 'sm' | 'md' | 'lg';\n\n/**\n * Represents a date marker for highlighting special dates (holidays, events, etc.)\n * Supports single dates or date ranges.\n */\nexport interface CoarDateMarker {\n /** Start date of the marker (or single date if no endDate) */\n startDate: Temporal.PlainDate;\n /** Optional end date for date ranges (inclusive) */\n endDate?: Temporal.PlainDate;\n /** Description shown as tooltip on hover */\n description: string;\n /** Optional custom CSS class for styling different marker types */\n cssClass?: string;\n}\n\n/**\n * Generate localized weekday names using Intl.DateTimeFormat.\n * Uses a reference week (Jan 2024 starts on Monday) for consistent day mapping.\n */\nfunction getLocalizedWeekdays(locale: string, firstDayOfWeek: 1 | 7): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' });\n // Jan 1, 2024 is a Monday - use this as reference for day mapping\n const weekdays: string[] = [];\n for (let i = 0; i < 7; i++) {\n // Start from Monday (Jan 1) and go through the week\n const date = new Date(2024, 0, 1 + i);\n weekdays.push(formatter.format(date));\n }\n // weekdays is now [Mon, Tue, Wed, Thu, Fri, Sat, Sun]\n if (firstDayOfWeek === 7) {\n // Rotate to start with Sunday\n const sunday = weekdays.pop();\n if (sunday) {\n weekdays.unshift(sunday);\n }\n }\n return weekdays;\n}\n\n/**\n * Date picker component using Temporal API.\n *\n * Supports Temporal.PlainDate values for timezone-independent date selection.\n * Uses ISO string format internally for forms compatibility.\n *\n * @example\n * ```html\n * <coar-date-picker\n * label=\"Birth Date\"\n * [(value)]=\"birthDate\"\n * placeholder=\"Select date...\"\n * />\n * ```\n */\n@Component({\n selector: 'coar-date-picker',\n standalone: true,\n imports: [FormsModule, CoarIconComponent, CoarPopoverComponent],\n templateUrl: './coar-date-picker.component.html',\n styleUrl: './coar-date-picker.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [coarProvideValueAccessor(() => CoarDatePickerComponent), CoarPopoverGroupService],\n host: {\n '[class.coar-date-picker--xs]': 'size() === \"xs\"',\n '[class.coar-date-picker--sm]': 'size() === \"sm\"',\n '[class.coar-date-picker--md]': 'size() === \"md\"',\n '[class.coar-date-picker--lg]': 'size() === \"lg\"',\n '[class.coar-date-picker--disabled]': 'isDisabled()',\n '[class.coar-date-picker--readonly]': 'readonly()',\n '[class.coar-date-picker--error]': 'hasError()',\n '[class.coar-date-picker--open]': 'isOpen()',\n '(document:keydown)': 'onDocumentKeydown($event)',\n },\n})\nexport class CoarDatePickerComponent extends CoarControlValueAccessor<Temporal.PlainDate | null> {\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly localeService = inject(COAR_LOCALE_SERVICE, { optional: true });\n private readonly overlayService = inject(CoarOverlayService);\n\n private overlayRef: OverlayRef | null = null;\n\n // ============================================================\n // Inputs\n // ============================================================\n\n /** Label text displayed above the input */\n label = input<string>('');\n\n /** Placeholder text when no date is selected */\n placeholder = input<string>('Select date...');\n\n /** Size variant */\n size = input<CoarDatePickerSize>('md');\n\n /** Whether the picker is readonly */\n readonly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the picker is disabled */\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether the field is required */\n required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Error state */\n error = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Helper or error message */\n message = input<string>('');\n\n /** Minimum selectable date */\n min = input<Temporal.PlainDate | null>(null);\n\n /** Maximum selectable date */\n max = input<Temporal.PlainDate | null>(null);\n\n /**\n * Locale identifier for date formatting (e.g., 'de-AT', 'en-US').\n * Uses global locale service default if not specified.\n */\n locale = input<string>();\n\n /**\n * Date format configuration (pattern and first day of week).\n * If not provided, uses locale service default or falls back to European format.\n */\n dateFormatConfig = input<DateFormatConfig>();\n\n /** Whether to show a \"Today\" button */\n showTodayButton = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether to show week numbers */\n showWeekNumbers = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Whether to highlight weekend days (Saturday/Sunday) with a subtle background */\n highlightWeekends = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Date markers for highlighting special dates (holidays, events, etc.) */\n markers = input<CoarDateMarker[]>([]);\n\n // ============================================================\n // Marker Popover Rendering\n // ============================================================\n\n /** Maximum number of lines shown in the marker popover (including \"+N\" line). */\n protected readonly markerPopoverMaxLines = 5;\n\n /**\n * Visible markers before switching to \"+N other events\".\n * With a max of 5 lines, we show 4 markers + one summary line.\n */\n protected readonly markerPopoverVisibleMarkers = 4;\n\n protected getVisibleMarkers(markers: CoarDateMarker[]): CoarDateMarker[] {\n if (markers.length <= this.markerPopoverMaxLines) {\n return markers;\n }\n return markers.slice(0, this.markerPopoverVisibleMarkers);\n }\n\n protected getHiddenMarkerCount(markers: CoarDateMarker[]): number {\n if (markers.length <= this.markerPopoverMaxLines) {\n return 0;\n }\n return Math.max(0, markers.length - this.markerPopoverVisibleMarkers);\n }\n\n // ============================================================\n // Model & Outputs\n // ============================================================\n\n /** Current selected date (two-way bindable with [(value)]) */\n value = model<Temporal.PlainDate | null>(null);\n\n /** Emitted when the selected date changes */\n valueChange = output<Temporal.PlainDate | null>();\n\n /** Emitted when the picker opens */\n opened = output<void>();\n\n /** Emitted when the picker closes */\n closed = output<void>();\n\n // ============================================================\n // Internal State\n // ============================================================\n\n /** Unique ID counter for component instances */\n private static nextId = 0;\n\n /** Unique ID for this component instance */\n private readonly uid = `coar-date-picker-${CoarDatePickerComponent.nextId++}`;\n\n /** Maskito instance for input masking */\n private maskitoInstance?: Maskito;\n\n /** ID for the label element */\n protected labelId = computed(() => `${this.uid}-label`);\n\n /** ID for the input element */\n protected inputId = computed(() => `${this.uid}-input`);\n\n /** ID for the calendar dropdown */\n protected calendarId = computed(() => `${this.uid}-calendar`);\n\n /** Whether the calendar dropdown is open */\n protected isOpen = signal(false);\n\n /** Calendar dropdown position (chosen before opening) */\n protected calendarPosition = signal<'top' | 'bottom'>('bottom');\n\n /** Currently viewed month/year in the calendar */\n protected viewDate = signal<Temporal.PlainYearMonth>(\n Temporal.Now.plainDateISO().toPlainYearMonth()\n );\n\n /** Focused date in the calendar (for keyboard navigation) */\n protected focusedDate = signal<Temporal.PlainDate | null>(null);\n\n /** Display value for the input field */\n protected displayValue = signal('');\n\n /** Days of week header (localized based on locale and firstDayOfWeek) */\n protected daysOfWeek = computed(() =>\n getLocalizedWeekdays(this.effectiveLocale(), this.firstDayOfWeek())\n );\n\n /** Reference to the input element */\n protected inputRef = viewChild<ElementRef<HTMLInputElement>>('dateInput');\n\n /** Reference to the trigger element */\n protected triggerRef = viewChild<ElementRef<HTMLElement>>('trigger');\n\n /** Reference to the calendar template (rendered via @cocoar/ui-overlay) */\n protected calendarTemplateRef = viewChild<TemplateRef<unknown>>('calendarTemplate');\n\n // ============================================================\n // Computed Values\n // ============================================================\n\n /**\n * Effective date format configuration.\n * Priority: input dateFormatConfig > locale service > fallback\n */\n protected effectiveDateFormat = computed((): DateFormatConfig => {\n // 1. Direct config input takes highest priority\n const directConfig = this.dateFormatConfig();\n if (directConfig) {\n return directConfig;\n }\n\n // 2. Use locale service if available\n if (this.localeService) {\n return this.localeService.getDateFormat(this.locale());\n }\n\n // 3. Fallback to European format\n return {\n pattern: 'dd.mm.yyyy',\n firstDayOfWeek: 1,\n };\n });\n\n /** Get the date format pattern */\n protected dateFormat = computed(() => this.effectiveDateFormat().pattern);\n\n /** Get the first day of week */\n protected firstDayOfWeek = computed(() => this.effectiveDateFormat().firstDayOfWeek);\n\n /** Get the separator character for the current date format */\n protected separator = computed(() => {\n const format = this.dateFormat();\n if (format.includes('.')) return '.';\n if (format.includes('/')) return '/';\n return '-';\n });\n\n /** Get placeholder text based on date format */\n protected inputPlaceholder = computed(() => {\n return this.dateFormat().toUpperCase();\n });\n\n /**\n * Effective locale for calendar month/year display.\n * Priority: input locale > locale service default > browser locale\n */\n protected effectiveLocale = computed(() => {\n return this.locale() ?? this.localeService?.getDefaultLocale() ?? navigator.language;\n });\n\n /** Whether the picker has an error state */\n protected hasError = computed(() => this.error());\n\n /** Whether the picker is disabled */\n protected isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n\n /** Calendar grid for current view month */\n protected calendarDays = computed(() => {\n const viewMonth = this.viewDate();\n const firstDay = viewMonth.toPlainDate({ day: 1 });\n const daysInMonth = viewMonth.daysInMonth;\n\n // Find what day of week the month starts on (1 = Monday, 7 = Sunday in Temporal)\n const startDayOfWeek = firstDay.dayOfWeek;\n const firstDayOfWeekSetting = this.firstDayOfWeek();\n\n // Calculate days from previous month to show\n // If firstDayOfWeek is 1 (Monday): offset from Monday\n // If firstDayOfWeek is 7 (Sunday): offset from Sunday\n let daysFromPrevMonth: number;\n if (firstDayOfWeekSetting === 1) {\n // Monday first: Monday=0, Tuesday=1, ..., Sunday=6\n daysFromPrevMonth = (startDayOfWeek - 1 + 7) % 7;\n } else {\n // Sunday first: Sunday=0, Monday=1, ..., Saturday=6\n // Temporal uses: Sunday=7, so we convert\n daysFromPrevMonth = startDayOfWeek % 7;\n }\n\n const days: CalendarDay[] = [];\n\n // Previous month days\n if (daysFromPrevMonth > 0) {\n const prevMonth = viewMonth.subtract({ months: 1 });\n const prevMonthDays = prevMonth.daysInMonth;\n for (let i = daysFromPrevMonth - 1; i >= 0; i--) {\n const day = prevMonth.toPlainDate({ day: prevMonthDays - i });\n days.push(this.createCalendarDay(day, true));\n }\n }\n\n // Current month days\n for (let d = 1; d <= daysInMonth; d++) {\n const day = viewMonth.toPlainDate({ day: d });\n days.push(this.createCalendarDay(day, false));\n }\n\n // Next month days to fill the grid (6 rows * 7 days = 42)\n const remainingDays = 42 - days.length;\n const nextMonth = viewMonth.add({ months: 1 });\n for (let d = 1; d <= remainingDays; d++) {\n const day = nextMonth.toPlainDate({ day: d });\n days.push(this.createCalendarDay(day, true));\n }\n\n return days;\n });\n\n /** Month name for calendar header */\n protected viewMonth = computed(() => {\n const viewMonth = this.viewDate();\n const formatter = new Intl.DateTimeFormat(this.effectiveLocale(), {\n month: 'long',\n });\n const jsDate = new Date(viewMonth.year, viewMonth.month - 1, 1);\n return formatter.format(jsDate);\n });\n\n /** Year for calendar header */\n protected viewYear = computed(() => {\n return this.viewDate().year;\n });\n\n /** Week numbers for each row (6 rows) */\n protected weekNumbers = computed(() => {\n const days = this.calendarDays();\n const weeks: number[] = [];\n\n // Get the first day of each week (every 7 days)\n for (let i = 0; i < 6; i++) {\n const firstDayOfWeek = days[i * 7];\n if (firstDayOfWeek) {\n // weekOfYear may be undefined in some Temporal implementations\n const weekNum = firstDayOfWeek.date.weekOfYear ?? this.calculateISOWeek(firstDayOfWeek.date);\n weeks.push(weekNum);\n }\n }\n\n return weeks;\n });\n\n /** Today's date */\n protected today = Temporal.Now.plainDateISO();\n\n // ============================================================\n // Constructor & Lifecycle\n // ============================================================\n\n constructor() {\n super();\n\n // Sync view date and display value with selected value\n effect(() => {\n const val = this.value();\n if (val) {\n this.displayValue.set(this.formatDateForDisplay(val));\n if (!this.isOpen()) {\n this.viewDate.set(val.toPlainYearMonth());\n }\n } else {\n this.displayValue.set('');\n }\n });\n\n // Initialize Maskito after render\n afterNextRender(() => {\n const inputElement = this.inputRef()?.nativeElement;\n if (inputElement) {\n this.initializeMaskito(inputElement);\n }\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.maskitoInstance?.destroy();\n this.overlayRef?.close();\n this.overlayRef = null;\n });\n }\n\n // ============================================================\n // Public Methods\n // ============================================================\n\n /** Open the calendar dropdown */\n openCalendar(): void {\n if (this.isDisabled() || this.readonly()) return;\n if (this.overlayRef) return;\n\n const trigger = this.triggerRef()?.nativeElement;\n const template = this.calendarTemplateRef();\n if (!trigger || !template) return;\n\n const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());\n this.calendarPosition.set(placement === 'top' ? 'top' : 'bottom');\n\n const spec = Overlay.define<Record<string, never>>((b) => {\n b.content((c) => c.fromTemplate(template));\n b.anchor({ kind: 'element', element: trigger });\n b.position({ placement, offset: 4, flip: false, shift: false });\n b.scroll({ strategy: 'reposition' });\n b.dismiss({ outsideClick: true, escapeKey: true });\n b.size({ mode: 'content' });\n });\n\n const ref = this.overlayService.open(spec, {});\n this.overlayRef = ref;\n\n this.isOpen.set(true);\n\n // Set initial focus date\n const current = this.value() ?? this.today;\n this.focusedDate.set(current);\n this.viewDate.set(current.toPlainYearMonth());\n\n this.opened.emit();\n\n ref.afterClosed$.subscribe(() => {\n if (this.overlayRef !== ref) return;\n this.overlayRef = null;\n this.isOpen.set(false);\n this.focusedDate.set(null);\n this.closed.emit();\n });\n }\n\n /** Close the calendar dropdown */\n closeCalendar(): void {\n if (!this.isOpen()) return;\n\n const ref = this.overlayRef;\n this.overlayRef = null;\n ref?.close();\n\n this.isOpen.set(false);\n this.focusedDate.set(null);\n this.closed.emit();\n }\n\n /** Toggle the calendar dropdown */\n toggleCalendar(): void {\n if (this.isOpen()) {\n this.closeCalendar();\n } else {\n this.openCalendar();\n }\n }\n\n /** Select a date */\n selectDate(date: Temporal.PlainDate): void {\n if (this.isDateDisabled(date)) return;\n\n this.value.set(date);\n this.valueChange.emit(date);\n this.cvaOnChange(date);\n // Move keyboard focus to selected date\n this.focusedDate.set(date);\n // Calendar stays open - closes via click outside, Tab, or Escape\n }\n\n /** Select today's date */\n selectToday(): void {\n this.selectDate(this.today);\n }\n\n /** Clear the selected date */\n clearDate(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.valueChange.emit(null);\n this.cvaOnChange(null);\n }\n\n /** Navigate to previous month */\n previousMonth(): void {\n this.viewDate.update((d) => d.subtract({ months: 1 }));\n }\n\n /** Navigate to next month */\n nextMonth(): void {\n this.viewDate.update((d) => d.add({ months: 1 }));\n }\n\n /** Navigate to previous year */\n previousYear(): void {\n this.viewDate.update((d) => d.subtract({ years: 1 }));\n }\n\n /** Navigate to next year */\n nextYear(): void {\n this.viewDate.update((d) => d.add({ years: 1 }));\n }\n\n /** Go to today's month */\n goToToday(): void {\n this.viewDate.set(this.today.toPlainYearMonth());\n this.focusedDate.set(this.today);\n }\n\n // ============================================================\n // CVA Methods\n // ============================================================\n\n writeValue(value: Temporal.PlainDate | string | null): void {\n if (value === null || value === undefined) {\n this.value.set(null);\n } else if (typeof value === 'string') {\n // Parse ISO string\n try {\n this.value.set(Temporal.PlainDate.from(value));\n } catch {\n this.value.set(null);\n }\n } else {\n this.value.set(value);\n }\n }\n\n // ============================================================\n // Event Handlers\n // ============================================================\n\n protected onTriggerClick(): void {\n this.toggleCalendar();\n }\n\n protected onDocumentKeydown(event: KeyboardEvent): void {\n if (!this.isOpen()) return;\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n this.closeCalendar();\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const focused = this.focusedDate();\n if (focused) {\n this.selectDate(focused);\n }\n break;\n }\n case 'ArrowLeft':\n event.preventDefault();\n this.moveFocus(-1, 'day');\n break;\n case 'ArrowRight':\n event.preventDefault();\n this.moveFocus(1, 'day');\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.moveFocus(-7, 'day');\n break;\n case 'ArrowDown':\n event.preventDefault();\n this.moveFocus(7, 'day');\n break;\n case 'PageUp':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(-1, 'year');\n } else {\n this.moveFocus(-1, 'month');\n }\n break;\n case 'PageDown':\n event.preventDefault();\n if (event.shiftKey) {\n this.moveFocus(1, 'year');\n } else {\n this.moveFocus(1, 'month');\n }\n break;\n case 'Home':\n event.preventDefault();\n this.goToToday();\n break;\n }\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown') {\n event.preventDefault();\n this.openCalendar();\n }\n }\n\n private resolvePlacement(trigger: HTMLElement, estimatedPanelHeight: number): Placement {\n const viewportHeight = document.documentElement?.clientHeight || window.innerHeight;\n const rect = trigger.getBoundingClientRect();\n\n const spaceBelow = Math.max(0, viewportHeight - rect.bottom);\n const spaceAbove = Math.max(0, rect.top);\n\n if (spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow) return 'top';\n return 'bottom';\n }\n\n private estimatePanelHeight(): number {\n const headerHeight = 56;\n const weekdayHeight = 28;\n const gridHeight = 6 * 36;\n const footerHeight = this.showTodayButton() ? 48 : 0;\n const padding = 32;\n const border = 2;\n\n return headerHeight + weekdayHeight + gridHeight + footerHeight + padding + border;\n }\n\n /**\n * Handle input changes from typed or pasted date values.\n *\n * Parses the masked input and updates the value if valid.\n * Invalid or incomplete dates do not update the model.\n */\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const text = input.value;\n\n // Update display value signal (for syncing)\n this.displayValue.set(text);\n\n // Try to parse the date\n const parsed = this.parseDateFromInput(text);\n if (parsed) {\n this.value.set(parsed);\n this.viewDate.set(parsed.toPlainYearMonth());\n this.cvaOnTouched();\n this.valueChange.emit(parsed);\n }\n }\n\n /**\n * Handle blur on the input field.\n *\n * If the input contains an invalid date, reset to the current value.\n */\n protected onInputBlur(): void {\n this.cvaOnTouched();\n\n const currentText = this.displayValue();\n const parsed = this.parseDateFromInput(currentText);\n\n if (!parsed && currentText.length > 0) {\n // Invalid date entered - reset to current value or clear\n const val = this.value();\n if (val) {\n this.displayValue.set(this.formatDateForDisplay(val));\n } else {\n this.displayValue.set('');\n }\n }\n }\n\n // ============================================================\n // Private Helpers\n // ============================================================\n\n /**\n * Initialize Maskito for date input masking.\n *\n * Uses maskitoDateOptionsGenerator with the configured date format\n * to provide automatic formatting and validation while typing.\n */\n private initializeMaskito(inputElement: HTMLInputElement): void {\n const format = this.dateFormat();\n const separator = this.separator();\n\n // Convert our format to Maskito's mode format\n const modeMap: Record<DateFormatConfig['pattern'], 'dd/mm/yyyy' | 'mm/dd/yyyy' | 'yyyy/mm/dd'> = {\n 'dd.mm.yyyy': 'dd/mm/yyyy',\n 'dd/mm/yyyy': 'dd/mm/yyyy',\n 'mm/dd/yyyy': 'mm/dd/yyyy',\n 'yyyy-mm-dd': 'yyyy/mm/dd',\n };\n\n const minDate = this.min();\n const maxDate = this.max();\n\n const options = maskitoDateOptionsGenerator({\n mode: modeMap[format],\n separator,\n min: minDate ? this.temporalToDate(minDate) : undefined,\n max: maxDate ? this.temporalToDate(maxDate) : undefined,\n });\n\n this.maskitoInstance = new Maskito(inputElement, options);\n }\n\n /**\n * Convert Temporal.PlainDate to native Date for Maskito compatibility.\n */\n private temporalToDate(temporal: Temporal.PlainDate): Date {\n return new Date(temporal.year, temporal.month - 1, temporal.day);\n }\n\n /**\n * Calculate ISO week number for a date.\n * ISO weeks start on Monday and week 1 contains the first Thursday of the year.\n */\n private calculateISOWeek(date: Temporal.PlainDate): number {\n const jsDate = this.temporalToDate(date);\n const dayOfWeek = jsDate.getDay() || 7; // Convert Sunday (0) to 7\n // Set to nearest Thursday (ISO week date algorithm)\n jsDate.setDate(jsDate.getDate() + 4 - dayOfWeek);\n const yearStart = new Date(jsDate.getFullYear(), 0, 1);\n // Calculate full weeks to nearest Thursday\n return Math.ceil(((jsDate.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n }\n\n /**\n * Format a Temporal.PlainDate for display according to the configured format.\n */\n private formatDateForDisplay(date: Temporal.PlainDate): string {\n const format = this.dateFormat();\n const sep = this.separator();\n const day = String(date.day).padStart(2, '0');\n const month = String(date.month).padStart(2, '0');\n const year = String(date.year);\n\n switch (format) {\n case 'dd.mm.yyyy':\n case 'dd/mm/yyyy':\n return `${day}${sep}${month}${sep}${year}`;\n case 'mm/dd/yyyy':\n return `${month}${sep}${day}${sep}${year}`;\n case 'yyyy-mm-dd':\n return `${year}${sep}${month}${sep}${day}`;\n default:\n return `${day}${sep}${month}${sep}${year}`;\n }\n }\n\n /**\n * Parse a date string in the configured format to Temporal.PlainDate.\n * Returns null if the string is incomplete or invalid.\n */\n private parseDateFromInput(text: string): Temporal.PlainDate | null {\n if (!text) return null;\n\n const sep = this.separator();\n const parts = text.split(sep);\n if (parts.length !== 3) return null;\n\n // Check all parts are complete numbers\n if (parts.some(p => p.length === 0 || !/^\\d+$/.test(p))) return null;\n\n const format = this.dateFormat();\n let year: number, month: number, day: number;\n\n try {\n switch (format) {\n case 'dd.mm.yyyy':\n case 'dd/mm/yyyy':\n day = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n year = parseInt(parts[2], 10);\n break;\n case 'mm/dd/yyyy':\n month = parseInt(parts[0], 10);\n day = parseInt(parts[1], 10);\n year = parseInt(parts[2], 10);\n break;\n case 'yyyy-mm-dd':\n year = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n day = parseInt(parts[2], 10);\n break;\n default:\n return null;\n }\n\n // Validate ranges before creating Temporal.PlainDate\n if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31) {\n return null;\n }\n\n const date = Temporal.PlainDate.from({ year, month, day });\n\n // Check against min/max bounds\n const minDate = this.min();\n const maxDate = this.max();\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) {\n return null;\n }\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) {\n return null;\n }\n\n return date;\n } catch {\n // Invalid date (e.g., Feb 30)\n return null;\n }\n }\n\n private createCalendarDay(date: Temporal.PlainDate, isOutsideMonth: boolean): CalendarDay {\n const selected = this.value();\n const focused = this.focusedDate();\n // Temporal dayOfWeek: 1=Monday ... 6=Saturday, 7=Sunday\n const dayOfWeek = date.dayOfWeek;\n\n const markers = this.getMarkersForDate(date);\n\n return {\n date,\n day: date.day,\n isOutsideMonth,\n isToday: Temporal.PlainDate.compare(date, this.today) === 0,\n isSelected: selected ? Temporal.PlainDate.compare(date, selected) === 0 : false,\n isFocused: focused ? Temporal.PlainDate.compare(date, focused) === 0 : false,\n isDisabled: this.isDateDisabled(date),\n isWeekend: dayOfWeek === 6 || dayOfWeek === 7,\n markers,\n markerCssClass: markers[0]?.cssClass ?? null,\n };\n }\n\n /**\n * Find all markers that apply to the given date.\n * Checks if date falls within any marker's range.\n */\n private getMarkersForDate(date: Temporal.PlainDate): CoarDateMarker[] {\n const markers = this.markers();\n const matches: CoarDateMarker[] = [];\n for (const marker of markers) {\n const start = marker.startDate;\n const end = marker.endDate ?? marker.startDate;\n\n // Check if date is within marker range (inclusive)\n if (\n Temporal.PlainDate.compare(date, start) >= 0 &&\n Temporal.PlainDate.compare(date, end) <= 0\n ) {\n matches.push(marker);\n }\n }\n return matches;\n }\n\n private isDateDisabled(date: Temporal.PlainDate): boolean {\n const minDate = this.min();\n const maxDate = this.max();\n\n if (minDate && Temporal.PlainDate.compare(date, minDate) < 0) {\n return true;\n }\n if (maxDate && Temporal.PlainDate.compare(date, maxDate) > 0) {\n return true;\n }\n return false;\n }\n\n private moveFocus(amount: number, unit: 'day' | 'month' | 'year'): void {\n const current = this.focusedDate() ?? this.value() ?? this.today;\n let newDate: Temporal.PlainDate;\n\n switch (unit) {\n case 'day':\n newDate = current.add({ days: amount });\n break;\n case 'month':\n newDate = current.add({ months: amount });\n break;\n case 'year':\n newDate = current.add({ years: amount });\n break;\n }\n\n // Check bounds\n const minDate = this.min();\n const maxDate = this.max();\n if (minDate && Temporal.PlainDate.compare(newDate, minDate) < 0) {\n newDate = minDate;\n }\n if (maxDate && Temporal.PlainDate.compare(newDate, maxDate) > 0) {\n newDate = maxDate;\n }\n\n this.focusedDate.set(newDate);\n this.viewDate.set(newDate.toPlainYearMonth());\n }\n}\n\n/** Internal type for calendar day rendering */\ninterface CalendarDay {\n date: Temporal.PlainDate;\n day: number;\n isOutsideMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isFocused: boolean;\n isDisabled: boolean;\n isWeekend: boolean;\n /** Markers applied to this date (if any) */\n markers: CoarDateMarker[];\n /** Optional CSS class from the first marker for styling */\n markerCssClass: string | null;\n}\n","<div\n class=\"coar-date-picker-wrapper\"\n>\n <!-- Label -->\n @if (label()) {\n <span class=\"coar-date-picker-label\" [attr.id]=\"labelId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-date-picker-required\" aria-hidden=\"true\">*</span>\n }\n </span>\n }\n\n <!-- Trigger -->\n <div\n #trigger\n class=\"coar-date-picker-trigger\"\n [class.coar-date-picker-trigger--disabled]=\"isDisabled()\"\n [class.coar-date-picker-trigger--readonly]=\"readonly()\"\n [class.coar-date-picker-trigger--error]=\"hasError()\"\n [class.coar-date-picker-trigger--open]=\"isOpen()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-controls]=\"isOpen() ? calendarId() : null\"\n role=\"combobox\"\n >\n <!-- Clear Button (left side) - always present to prevent CLS -->\n <coar-icon\n name=\"x\"\n size=\"auto\"\n class=\"coar-date-picker-clear\"\n [class.coar-date-picker-clear--hidden]=\"!value() || isDisabled() || readonly()\"\n aria-hidden=\"true\"\n (click)=\"clearDate($event)\"\n />\n\n <!-- Date Input -->\n <input\n #dateInput\n type=\"text\"\n class=\"coar-date-picker-input\"\n [attr.id]=\"inputId()\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder() || inputPlaceholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [attr.aria-labelledby]=\"label() ? labelId() : null\"\n [attr.aria-invalid]=\"hasError()\"\n autocomplete=\"off\"\n (input)=\"onInputChange($event)\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onTriggerKeydown($event)\"\n />\n\n <!-- Calendar Icon (right side) -->\n <button\n type=\"button\"\n class=\"coar-date-picker-calendar-btn\"\n aria-label=\"Open calendar\"\n [disabled]=\"isDisabled() || readonly()\"\n (click)=\"onTriggerClick()\"\n >\n <coar-icon name=\"calendar\" size=\"sm\" />\n </button>\n </div>\n\n <!-- Calendar Dropdown (rendered via @cocoar/ui-overlay) -->\n <ng-template #calendarTemplate>\n <div\n class=\"coar-date-picker-calendar coar-date-picker-calendar--overlay\"\n [class.coar-date-picker-calendar--top]=\"calendarPosition() === 'top'\"\n [attr.id]=\"calendarId()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Calendar\"\n >\n <!-- Calendar Header -->\n <div class=\"coar-date-picker-header\">\n <button\n type=\"button\"\n class=\"coar-date-picker-nav\"\n aria-label=\"Previous year\"\n (click)=\"previousYear()\"\n >\n <coar-icon name=\"chevrons-left\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"coar-date-picker-nav\"\n aria-label=\"Previous month\"\n (click)=\"previousMonth()\"\n >\n <coar-icon name=\"chevron-left\" size=\"sm\" />\n </button>\n\n <span class=\"coar-date-picker-month-year\">\n <span class=\"coar-date-picker-month\">{{ viewMonth() }}</span>\n <span class=\"coar-date-picker-year\">{{ viewYear() }}</span>\n </span>\n\n <button\n type=\"button\"\n class=\"coar-date-picker-nav coar-date-picker-nav--next\"\n aria-label=\"Next month\"\n (click)=\"nextMonth()\"\n >\n <coar-icon name=\"chevron-right\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"coar-date-picker-nav coar-date-picker-nav--next\"\n aria-label=\"Next year\"\n (click)=\"nextYear()\"\n >\n <coar-icon name=\"chevrons-right\" size=\"sm\" />\n </button>\n </div>\n\n <!-- Days of Week Header -->\n <div class=\"coar-date-picker-weekdays\" [class.coar-date-picker-weekdays--with-weeks]=\"showWeekNumbers()\">\n @if (showWeekNumbers()) {\n <span class=\"coar-date-picker-week-spacer\"></span>\n }\n @for (day of daysOfWeek(); track day) {\n <span class=\"coar-date-picker-weekday\">{{ day }}</span>\n }\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"coar-date-picker-grid\" [class.coar-date-picker-grid--with-weeks]=\"showWeekNumbers()\" role=\"grid\">\n @for (day of calendarDays(); track day.date.toString(); let i = $index) {\n <!-- Week number at start of each row -->\n @if (showWeekNumbers() && i % 7 === 0) {\n <span class=\"coar-date-picker-week-number\">{{ weekNumbers()[i / 7] }}</span>\n }\n <coar-popover\n [disabled]=\"day.isDisabled || day.markers.length === 0\"\n [openOnClick]=\"true\"\n [openOnHover]=\"true\"\n [interactive]=\"false\"\n >\n <button\n coarPopoverTrigger\n type=\"button\"\n class=\"coar-date-picker-day\"\n [class.coar-date-picker-day--outside]=\"day.isOutsideMonth\"\n [class.coar-date-picker-day--today]=\"day.isToday\"\n [class.coar-date-picker-day--selected]=\"day.isSelected\"\n [class.coar-date-picker-day--focused]=\"day.isFocused\"\n [class.coar-date-picker-day--disabled]=\"day.isDisabled\"\n [class.coar-date-picker-day--weekend]=\"highlightWeekends() && day.isWeekend\"\n [class.coar-date-picker-day--marked]=\"day.markers.length > 0\"\n [class]=\"day.markerCssClass\"\n [disabled]=\"day.isDisabled\"\n [attr.aria-selected]=\"day.isSelected\"\n [attr.aria-current]=\"day.isToday ? 'date' : null\"\n [attr.tabindex]=\"day.isFocused ? 0 : -1\"\n (click)=\"selectDate(day.date)\"\n >\n {{ day.day }}\n </button>\n\n @if (day.markers.length > 0) {\n <div coarPopoverContent class=\"coar-date-picker-marker-popover\">\n <div class=\"coar-date-picker-marker-popover__list\">\n @for (marker of getVisibleMarkers(day.markers); track marker.description) {\n <div class=\"coar-date-picker-marker-popover__item\">\n {{ marker.description }}\n </div>\n }\n\n @if (getHiddenMarkerCount(day.markers) > 0) {\n <div class=\"coar-date-picker-marker-popover__more\">\n +{{ getHiddenMarkerCount(day.markers) }} other events\n </div>\n }\n </div>\n </div>\n }\n </coar-popover>\n }\n </div>\n\n <!-- Footer with Today Button -->\n @if (showTodayButton()) {\n <div class=\"coar-date-picker-footer\">\n <button\n type=\"button\"\n class=\"coar-date-picker-today\"\n (click)=\"selectToday()\"\n >\n Today\n </button>\n </div>\n }\n </div>\n </ng-template>\n\n <!-- Helper/Error Message -->\n @if (message()) {\n <span\n class=\"coar-date-picker-message\"\n [class.coar-date-picker-message--error]=\"hasError()\"\n >\n {{ message() }}\n </span>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;AAeG;AAEI,MAAM,UAAU,GAAG;AACxB,IAAA,UAAU,EAAE,CAAA,2hBAAA,CAA6hB;AACziB,IAAA,UAAU,EAAE,CAAA,wsBAAA,CAA0sB;AACttB,IAAA,KAAK,EAAE,CAAA,6RAAA,CAA+R;AACtS,IAAA,aAAa,EAAE,CAAA,oRAAA,CAAsR;AACrS,IAAA,MAAM,EAAE,CAAA,0YAAA,CAA4Y;AACpZ,IAAA,KAAK,EAAE,CAAA,0hDAAA,CAA4hD;AACniD,IAAA,UAAU,EAAE,CAAA,ghBAAA,CAAkhB;AAC9hB,IAAA,aAAa,EAAE,CAAA,+OAAA,CAAiP;AAChQ,IAAA,MAAM,EAAE,CAAA,4vDAAA,CAA8vD;AACtwD,IAAA,OAAO,EAAE,CAAA,qkCAAA,CAAukC;AAChlC,IAAA,cAAc,EAAE,CAAA,wOAAA,CAA0O;AAC1P,IAAA,cAAc,EAAE,CAAA,yOAAA,CAA2O;AAC3P,IAAA,eAAe,EAAE,CAAA,wOAAA,CAA0O;AAC3P,IAAA,eAAe,EAAE,CAAA,wRAAA,CAA0R;AAC3S,IAAA,gBAAgB,EAAE,CAAA,uRAAA,CAAyR;AAC3S,IAAA,WAAW,EAAE,CAAA,+yFAAA,CAAizF;AAC9zF,IAAA,OAAO,EAAE,CAAA,gtBAAA,CAAktB;AAC3tB,IAAA,UAAU,EAAE,CAAA,84CAAA,CAAg5C;AAC55C,IAAA,MAAM,EAAE,CAAA,wqBAAA,CAA0qB;AAClrB,IAAA,WAAW,EAAE,CAAA,qmEAAA,CAAumE;AACpnE,IAAA,UAAU,EAAE,CAAA,g+BAAA,CAAk+B;AAC9+B,IAAA,YAAY,EAAE,CAAA,mxCAAA,CAAqxC;AACnyC,IAAA,SAAS,EAAE,CAAA,qZAAA,CAAuZ;AACla,IAAA,UAAU,EAAE,CAAA,ilCAAA,CAAmlC;AAC/lC,IAAA,KAAK,EAAE,CAAA,yQAAA,CAA2Q;AAClR,IAAA,aAAa,EAAE,CAAA,2pBAAA,CAA6pB;AAC5qB,IAAA,WAAW,EAAE,CAAA,gjFAAA,CAAkjF;AAC/jF,IAAA,KAAK,EAAE,CAAA,82DAAA,CAAg3D;AACv3D,IAAA,MAAM,EAAE,CAAA,yrBAAA,CAA2rB;AACnsB,IAAA,MAAM,EAAE,CAAA,qTAAA,CAAuT;AAC/T,IAAA,MAAM,EAAE,CAAA,ihBAAA,CAAmhB;AAC3hB,IAAA,OAAO,EAAE,CAAA,yMAAA,CAA2M;AACpN,IAAA,SAAS,EAAE,CAAA,6+CAAA,CAA++C;AAC1/C,IAAA,MAAM,EAAE,CAAA,sdAAA,CAAwd;AAChe,IAAA,UAAU,EAAE,CAAA,+iDAAA,CAAijD;AAC7jD,IAAA,UAAU,EAAE,CAAA,mgFAAA,CAAqgF;AACjhF,IAAA,uBAAuB,EAAE,CAAA,0gFAAA,CAA4gF;AACriF,IAAA,OAAO,EAAE,CAAA,+KAAA,CAAiL;AAC1L,IAAA,MAAM,EAAE,CAAA,+MAAA,CAAiN;AACzN,IAAA,OAAO,EAAE,CAAA,61EAAA,CAA+1E;AACx2E,IAAA,GAAG,EAAE,CAAA,gUAAA,CAAkU;;;ACpDzU;;;;;AAKG;MAIU,eAAe,CAAA;AACT,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAClC,IAAA,iBAAiB,GAAG,IAAI,GAAG,EAAqC;AAExE;;;;;AAKG;AACH,IAAA,OAAO,CAAC,IAAY,EAAA;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAEvC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;QACxC;AAAO,aAAA,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YACvC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;QACzC;AAEA,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC;IACjB;AAEA;;;;;;AAMG;AACK,IAAA,aAAa,CAAC,IAAY,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YAChC,OAAO;AACL,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;aACvB;QACH;QAEA,OAAO;AACL,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,GAAG,EAAE,IAAI;SACV;IACH;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,GAAW,EAAA;QAChC,MAAM,GAAG,GAAG,UAAU,CAAC,GAA8B,CAAC,IAAI,IAAI;AAC9D,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;IACxB;AAEA;;;AAGG;AACK,IAAA,eAAe,CAAC,GAAW,EAAA;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QAC9C,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA,GAAG,CAAC,CAAA,WAAA,EAAc,GAAG,CAAA,IAAA,CAAM,EAAE;AAC5B,YAAA,YAAY,EAAE,MAAM;SACrB;AACA,aAAA,IAAI,CACH,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,EAC1B,WAAW,CAAC,CAAC,CAAC,CACf;QAEH,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACzC,QAAA,OAAO,QAAQ;IACjB;AAEA;;;AAGG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;IAChC;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,IAAY,EAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE;YAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3C;IACF;uGA1FW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACGD;;;;;;;;;;;;;;;;;;AAkBG;MAuCU,iBAAiB,CAAA;AACX,IAAA,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC;AACrC,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAEjD;;;AAGG;IACH,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgB;AAE5B;;;AAGG;AACH,IAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,gDAAC;AAEzC;;AAEG;AACH,IAAA,MAAM,GAAG,KAAK,CAAS,CAAC,kDAAC;AAEzB;;;;;AAKG;IACH,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAmB;AAE3C;;AAEG;IACH,IAAI,GAAG,KAAK,CAAmB,KAAK,iDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEtE;;;;AAIG;AACH,IAAA,KAAK,GAAG,KAAK,CAAS,SAAS,iDAAC;AAEhC;;AAEG;IACH,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAmB;AAEhC;;;AAGG;AACM,IAAA,QAAQ;AAEjB;;AAEG;AACO,IAAA,YAAY,GAAG,MAAM,CAAkB,IAAI,wDAAC;AAEtD;;AAEG;AACO,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AAEnC;;AAEG;AACO,IAAA,YAAY,CAAC,IAAY,EAAA;AACjC,QAAA,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9D;AAEA;;AAEG;IACO,wBAAwB,GAAA;AAChC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC1C,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI;AAE5B,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,OAAO,CAAA,UAAA,EAAa,UAAU,CAAA,cAAA,CAAgB;QAChD;QAEA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACrC,OAAO,CAAA,UAAA,EAAa,UAAU,CAAA,CAAE;QAClC;AAEA,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;YAC5B,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC3B;YACF;AAEA,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACzB,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACK,IAAA,QAAQ,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAExB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,GAAG,EAAE;AACP,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;AAClE,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3B;qBAAO;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAA,CAAE,CAAC;oBAC/C,IAAI,CAAC,YAAY,EAAE;gBACrB;YACF,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAA,CAAE,CAAC;gBAC/C,IAAI,CAAC,YAAY,EAAE;YACrB,CAAC;AACF,SAAA,CAAC;IACJ;AAEA;;AAEG;IACK,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AAChD,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAI;oBACZ,IAAI,GAAG,EAAE;AACP,wBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;oBACpE;yBAAO;AACL,wBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC7B;AACA,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3B,CAAC;gBACD,KAAK,EAAE,MAAK;AACV,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3B,CAAC;AACF,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACF;uGAjJW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlClB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qxCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtC7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EACD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BT,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,kBAAkB,EAAE,QAAQ;AAC7B,qBAAA,EAAA,MAAA,EAAA,CAAA,qxCAAA,CAAA,EAAA;;sBAoDA;;;ACzHG,SAAU,wBAAwB,CAAC,IAAsC,EAAA;IAC7E,OAAO;AACL,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC;AAC7B,QAAA,KAAK,EAAE,IAAI;KACZ;AACH;MAEsB,wBAAwB,CAAA;AACzB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;AAEpC,IAAA,WAAW,GAAuB,MAAM,SAAS;AACjD,IAAA,YAAY,GAAe,MAAM,SAAS;AAE7C,IAAA,gBAAgB,CAAC,EAAsB,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACvB;AAEO,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;IACxB;AAEO,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;AAGD;;ACQK,MAAO,sBAAuB,SAAQ,wBAAgC,CAAA;;AAE1E,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;;AAG/B,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,IAAI,GAAG,KAAK,CAAoB,IAAI,gDAAC;;AAGrC,IAAA,IAAI,GAAG,KAAK,CAAS,CAAC,gDAAC;;IAGvB,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;IAGxB,SAAS,GAAG,KAAK,CAAmB,IAAI,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,MAAM,GAAG,KAAK,CAAS,EAAE,kDAAC;;AAG1B,IAAA,MAAM,GAAG,KAAK,CAAS,EAAE,kDAAC;;AAG1B,IAAA,EAAE,GAAG,KAAK,CAAS,EAAE,8CAAC;;AAGtB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;AAGxB,IAAA,YAAY,GAAG,KAAK,CAAS,EAAE,wDAAC;;AAGhC,IAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,qDAAC;;IAGhD,WAAW,GAAG,MAAM,EAAU;;IAG9B,OAAO,GAAG,MAAM,EAAc;;IAG9B,OAAO,GAAG,MAAM,EAAc;;IAG9B,KAAK,GAAG,MAAM,EAAQ;AAEZ,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,QAAQ,GAChB,SAAS,CAAqD,cAAc,oDAAC;AAErE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,uDAAC;AAE7C,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,sDAAC;AAElE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;;QAExC,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC9F,IAAA,CAAC,2DAAC;AAEQ,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,oDAAC;AAClD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,0DAAC;AAC5D,IAAA,OAAO,GAAG,QAAQ,CAC1B,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAA,gBAAA,EAAmB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE,mDAChF;AACS,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU,qDAAC;AAE1D,IAAA,UAAU,CAAC,KAAoB,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAgD;AACrE,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC5B;AAEU,IAAA,OAAO,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AAEU,IAAA,MAAM,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QACjB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;IAEU,YAAY,GAAA;QACpB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;uGArHW,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,kCAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EATtB,CAAC,wBAAwB,CAAC,MAAM,sBAAsB,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BrE,mqGA+GA,EAAA,MAAA,EAAA,CAAA,kgMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtFY,WAAW,+BAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAa7B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAhBlC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAGxB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,wBAAwB,CAAC,MAAK,sBAAuB,CAAC,CAAC,EAAA,IAAA,EAC7D;AACJ,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,oCAAoC,EAAE,eAAe;AACtD,qBAAA,EAAA,QAAA,EAAA,mqGAAA,EAAA,MAAA,EAAA,CAAA,kgMAAA,CAAA,EAAA;82DAoE+D,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEvChF;;;;;;;;AAQG;MACU,mBAAmB,GAAG,IAAI,cAAc,CAAqB,mBAAmB,EAAE;AAC7F,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM,IAAI,iBAAiB,EAAE;AACvC,CAAA;AAED;;;;AAIG;MAEU,iBAAiB,CAAA;AACpB,IAAA,aAAa,GAAG,MAAM,CAAS,OAAO,yDAAC;AACvC,IAAA,aAAa,GAAG,IAAI,GAAG,EAAwB;IAEvD,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC7B;AAEA,IAAA,gBAAgB,CAAC,MAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IAChC;IAEA,cAAc,CAAC,EAAU,EAAE,MAA6B,EAAA;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE;AACzB,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;AACxC,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;AACnC,SAAA,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,MAAe,EAAA;QAC7B,MAAM,YAAY,GAAG,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;;QAGnD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,MAAM;QACrD;;QAGA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,MAAM;IAC9C;AAEA,IAAA,aAAa,CAAC,MAAe,EAAA;QAC3B,MAAM,YAAY,GAAG,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;;QAGnD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,IAAI;QACnD;;QAGA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI;IAC5C;AAEA;;AAEG;AACK,IAAA,WAAW,CAAC,MAAc,EAAA;AAChC,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;YAE7C,OAAO;AACL,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,GAAG;AAC9D,oBAAA,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,GAAG;AAC9D,iBAAA;AACD,gBAAA,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;aACpC;QACH;AAAE,QAAA,MAAM;;YAEN,OAAO;AACL,gBAAA,MAAM,EAAE;AACN,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,QAAQ,EAAE,GAAG;AACd,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE,YAAY;AACrB,oBAAA,cAAc,EAAE,CAAC;AAClB,iBAAA;aACF;QACH;IACF;AAEA;;;;;AAKG;AACK,IAAA,gBAAgB,CAAC,MAAc,EAAA;AACrC,QAAA,IAAI;;YAEF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAChD,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,SAAS;AAChB,aAAA,CAAC;;AAGF,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAa,EAAE;AAE1B,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACnC,qBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1C,qBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;AAAE,oBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAChD;YAEA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;;AAG/B,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1D,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG;;AAGvD,YAAA,IAAI,OAAoC;AACxC,YAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;gBACtB,OAAO,GAAG,YAAY;YACxB;AAAO,iBAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;gBAC7B,OAAO,GAAG,YAAY;YACxB;AAAO,iBAAA,IAAI,SAAS,KAAK,GAAG,EAAE;gBAC5B,OAAO,GAAG,YAAY;YACxB;iBAAO;gBACL,OAAO,GAAG,YAAY;YACxB;;;AAIA,YAAA,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;YACjF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,YAAA,MAAM,cAAc,GAAU,kBAAkB,CAAC,IAAI,CACnD,CAAC,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE7E,kBAAE;kBACA,CAAC;AAEL,YAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE;QACpC;AAAE,QAAA,MAAM;;YAEN,OAAO;AACL,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,cAAc,EAAE,CAAC;aAClB;QACH;IACF;uGAvIW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAjB,iBAAiB,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACjDD;;;;;;AAMG;AACH,SAAS,uBAAuB,CAAC,KAAuB,EAAA;;AAEtD,IAAA,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO;AAAE,QAAA,OAAO,MAAM;;IAGvD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,MAAM;AAAE,QAAA,OAAO,MAAM;;AAGrE,IAAA,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,EAAE;AAC1F,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,OAAO,MAAM;AACf;AAiBM,MAAO,wBAAyB,SAAQ,wBAAuC,CAAA;AAClE,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,aAAa,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,IAAA,eAAe;;AAGvB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;AAE/B;;;AAGG;AACH,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,iDAAC;;AAGlC,IAAA,IAAI,GAAG,KAAK,CAAsB,IAAI,gDAAC;;AAGvC,IAAA,GAAG,GAAG,KAAK,CAAqB,SAAS,+CAAC;;AAG1C,IAAA,GAAG,GAAG,KAAK,CAAqB,SAAS,+CAAC;;AAG1C,IAAA,IAAI,GAAG,KAAK,CAAS,CAAC,gDAAC;;AAGvB,IAAA,QAAQ,GAAG,KAAK,CAAS,CAAC,oDAAC;;IAG3B,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;IAGxB,SAAS,GAAG,KAAK,CAAmB,IAAI,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE1E;;;;;;;;;AASG;IACH,cAAc,GAAG,KAAK,CAAkD,MAAM,2DAC5E,SAAS,EAAE,uBAAuB,EAAA,CAClC;;AAGF,IAAA,MAAM,GAAG,KAAK,CAAS,EAAE,kDAAC;;AAG1B,IAAA,MAAM,GAAG,KAAK,CAAS,EAAE,kDAAC;AAE1B;;;AAGG;IACH,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAExB;;;AAGG;IACH,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAsB;;AAG1C,IAAA,EAAE,GAAG,KAAK,CAAS,EAAE,8CAAC;;AAGtB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;IAGxB,WAAW,GAAG,MAAM,EAAiB;;IAGrC,OAAO,GAAG,MAAM,EAAc;;IAG9B,OAAO,GAAG,MAAM,EAAc;;IAG9B,KAAK,GAAG,MAAM,EAAQ;AAEZ,IAAA,YAAY,GAAG,MAAM,CAAS,EAAE,wDAAC;AACjC,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,sDAAC;AACtB,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,0DAAC;AAC1B,IAAA,QAAQ,GAAG,SAAS,CAA+B,cAAc,oDAAC;AAElE,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,sDAAC;AAElE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;;QAExC,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5F,IAAA,CAAC,2DAAC;AAEQ,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,oDAAC;AAClD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,0DAAC;AAC5D,IAAA,OAAO,GAAG,QAAQ,CAC1B,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAA,kBAAA,EAAqB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE,mDAClF;AACS,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU,qDAAC;AAEvD,IAAA,QAAQ,GAAG,QAAQ,CAAe,MAAK;AAC/C,QAAA,MAAM,OAAO,GAA8C;AACzD,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;SACT;AACD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,IAAA,CAAC,oDAAC;AAEQ,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;AAClC,QAAA,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM;AAChD,IAAA,CAAC,+DAAC;AAEQ,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;AAClC,QAAA,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM;AAChD,IAAA,CAAC,+DAAC;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;QACzB,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC7B,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QACrC,OAAO,GAAG,GAAG,MAAM;AACrB,IAAA,CAAC,wDAAC;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;QACzB,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC7B,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QACrC,OAAO,GAAG,GAAG,MAAM;AACrB,IAAA,CAAC,wDAAC;AAEF,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;QAEP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnD,QAAA,CAAC,CAAC;;QAGF,eAAe,CAAC,MAAK;YACnB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YACnD,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;YACtC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;AACjC,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;AAMG;IACK,mBAAmB,GAAA;;AAEzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;QAClC,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;;AAGA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1D;;QAGA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;IACvC;AAEQ,IAAA,iBAAiB,CAAC,YAA8B,EAAA;AACtD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE;QAEzC,MAAM,WAAW,GAAG,6BAA6B,CAAC;YAChD,gBAAgB,EAAE,MAAM,CAAC,OAAO;YAChC,iBAAiB,EAAE,MAAM,CAAC,QAAQ;AAClC,YAAA,qBAAqB,EAAE,IAAI,CAAC,QAAQ,EAAE;AACtC,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AAChB,SAAA,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC;IAC/D;AAEU,IAAA,WAAW,CAAC,KAAoB,EAAA;QACxC,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE;;QAEzC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;;QAEhD,OAAO,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;IAC/C;AAEA;;;AAGG;AACO,IAAA,UAAU,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;AAAE,YAAA,OAAO,IAAI;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE;;AAEzC,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAC9B,cAAE,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,QAAQ,CAAA,CAAE,EAAE,GAAG,CAAC,EAAE,EAAE;cACvD,GAAG;;AAEP,QAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;AAChE,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,OAAO,MAAM;IACf;AAEU,IAAA,UAAU,CAAC,KAAa,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;QACzB,IAAI,OAAO,GAAG,KAAK;AACnB,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,GAAG,MAAM;YAAE,OAAO,GAAG,MAAM;AAC9D,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,GAAG,MAAM;YAAE,OAAO,GAAG,MAAM;AAC9D,QAAA,OAAO,OAAO;IAChB;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IACrC;AAEU,IAAA,OAAO,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AAEU,IAAA,MAAM,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;IAEU,WAAW,GAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACnD,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACvC,YAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;;;AAGvB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAC3B;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACxB;IACF;AAEO,IAAA,UAAU,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QACjB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;IAEU,YAAY,GAAA;QACpB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;IAEU,SAAS,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvD,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B;IAEU,SAAS,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvD,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,SAAS,EAAE;QAClB;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;;AAGU,IAAA,WAAW,CAAC,KAAiB,EAAA;QACrC,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAC1C,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;IAC1C;AAGU,IAAA,UAAU,CAAC,KAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;;QAEhD,MAAM,WAAW,GAAG,EAAE;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACjF,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IAC3B;IAGU,SAAS,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;QACjC;IACF;uGA9WW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EARxB,CAAC,wBAAwB,CAAC,MAAM,wBAAwB,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjEvE,85GAgHA,EAAA,MAAA,EAAA,CAAA,09NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnDY,WAAW,+BAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAY7B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAfpC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAGxB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,wBAAwB,CAAC,MAAK,wBAAyB,CAAC,CAAC,EAAA,IAAA,EAC/D;AACJ,wBAAA,+BAA+B,EAAE,iBAAiB;AAClD,wBAAA,+BAA+B,EAAE,iBAAiB;AAClD,wBAAA,+BAA+B,EAAE,iBAAiB;AAClD,wBAAA,+BAA+B,EAAE,iBAAiB;AACnD,qBAAA,EAAA,QAAA,EAAA,85GAAA,EAAA,MAAA,EAAA,CAAA,09NAAA,CAAA,EAAA;0vEA2G4D,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA;sBAgP1E,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;sBAe7C,YAAY;uBAAC,kBAAkB;;;AE5Y5B,MAAO,0BAA2B,SAAQ,wBAAgC,CAAA;;AAE9E,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;AAE/B;;;AAGG;AACH,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,IAAI,GAAG,KAAK,CAAwB,IAAI,gDAAC;;IAGzC,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;IAGxB,SAAS,GAAG,KAAK,CAAmB,IAAI,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,EAAE,GAAG,KAAK,CAAS,EAAE,8CAAC;;AAGtB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;AAGxB,IAAA,YAAY,GAAG,KAAK,CAAS,kBAAkB,wDAAC;;AAGhD,IAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,qDAAC;;IAGhD,WAAW,GAAG,MAAM,EAAU;;IAG9B,OAAO,GAAG,MAAM,EAAc;;IAG9B,OAAO,GAAG,MAAM,EAAc;;IAG9B,KAAK,GAAG,MAAM,EAAQ;AAEZ,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AAC5B,IAAA,QAAQ,GAAG,SAAS,CAA+B,cAAc,oDAAC;IAElE,SAAS,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,MAAM,GAAG,UAAU,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACvE,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,UAAU,GAAG,YAAY,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC9E,IAAA,eAAe,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,YAAY,EAAE,GAAG,eAAe,GAAG,eAAe,2DACxD;AAES,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,sDAAC;AAElE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;;QAExC,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC9F,IAAA,CAAC,2DAAC;AAEQ,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,oDAAC;AAClD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,0DAAC;AAC5D,IAAA,OAAO,GAAG,QAAQ,CAC1B,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAA,oBAAA,EAAuB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE,mDACpF;AACS,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU,qDAAC;AAE1D,IAAA,UAAU,CAAC,KAAoB,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IAChC;AAEU,IAAA,OAAO,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AAEU,IAAA,MAAM,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QACjB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;IAEU,YAAY,GAAA;QACpB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACxC;IAEU,wBAAwB,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC1C,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC;IACF;uGAxHW,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,mBAAA,EAAA,+BAAA,EAAA,mBAAA,EAAA,+BAAA,EAAA,mBAAA,EAAA,+BAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EAR1B,CAAC,wBAAwB,CAAC,MAAM,0BAA0B,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BzE,87DA+DA,EAAA,MAAA,EAAA,CAAA,2yLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtCY,WAAW,+BAAE,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAY7B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAftC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAGxB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,wBAAwB,CAAC,MAAK,0BAA2B,CAAC,CAAC,EAAA,IAAA,EACjE;AACJ,wBAAA,iCAAiC,EAAE,iBAAiB;AACpD,wBAAA,iCAAiC,EAAE,iBAAiB;AACpD,wBAAA,iCAAiC,EAAE,iBAAiB;AACpD,wBAAA,iCAAiC,EAAE,iBAAiB;AACrD,qBAAA,EAAA,QAAA,EAAA,87DAAA,EAAA,MAAA,EAAA,CAAA,2yLAAA,CAAA,EAAA;8lDA8D4D,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzDvE,MAAO,qBAAsB,SAAQ,wBAAuD,CAAA;;AAEhG,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AAEzB;;;AAGG;AACH,IAAA,OAAO,GAAG,KAAK,CAAgC,SAAS,mDAAC;;IAGzD,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;AAGxB,IAAA,IAAI,GAAG,KAAK,CAAmB,IAAI,gDAAC;;AAGpC,IAAA,EAAE,GAAG,KAAK,CAAS,EAAE,8CAAC;;AAGtB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;AAGxB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;IAGzB,aAAa,GAAG,MAAM,EAAqB;AAEjC,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;AACzB,IAAA,QAAQ,GAAG,SAAS,CAA+B,iBAAiB,oDAAC;AAErE,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,sDAAC;AAElE,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,qDAAC;AACxD,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,eAAe,2DAAC;AACpE,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,oDAAC;AAClD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,0DAAC;AAC5D,IAAA,OAAO,GAAG,QAAQ,CAC1B,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAA,cAAA,EAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE,mDAC9E;AACS,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU,qDAAC;AAEjE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;QAEP,MAAM,CAAC,MAAK;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YAC9C,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE;YAChD;AACF,QAAA,CAAC,CAAC;IACJ;AAEO,IAAA,UAAU,CAAC,KAA2C,EAAA;QAC3D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC;IACtC;AAEU,IAAA,QAAQ,CAAC,KAAY,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,YAAA,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;YACjC;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAC/C,QAAA,MAAM,QAAQ,GAAsB,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,WAAW;AAE5E,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IAC5B;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1B;IAEU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE;IACrB;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QACxC;IACF;uGAlGW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,+BAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,YAAA,EAAA,4BAAA,EAAA,YAAA,EAAA,EAAA,EAAA,SAAA,EAXrB,CAAC,wBAAwB,CAAC,MAAM,qBAAqB,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BpE,g9DAkDA,EAAA,MAAA,EAAA,CAAA,s9NAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDVa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAlBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACb,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,wBAAwB,CAAC,MAAK,qBAAsB,CAAC,CAAC,EAAA,IAAA,EAC5D;AACJ,wBAAA,2BAA2B,EAAE,iBAAiB;AAC9C,wBAAA,2BAA2B,EAAE,iBAAiB;AAC9C,wBAAA,2BAA2B,EAAE,iBAAiB;AAC9C,wBAAA,2BAA2B,EAAE,iBAAiB;AAC9C,wBAAA,iCAAiC,EAAE,cAAc;AACjD,wBAAA,iCAAiC,EAAE,YAAY;AAC/C,wBAAA,8BAA8B,EAAE,YAAY;AAC7C,qBAAA,EAAA,QAAA,EAAA,g9DAAA,EAAA,MAAA,EAAA,CAAA,s9NAAA,CAAA,EAAA;qrCA2C4D,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE3ChF;;;;;;;;;;;;;;;;;;;;;AAqBG;MASU,sBAAsB,CAAA;AAChB,IAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC5C,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;;AAG/B,IAAA,KAAK,GAAG,KAAK,CAAqB,MAAM,iDAAC;;AAGzC,IAAA,QAAQ,GAAG,KAAK,CAAwB,OAAO,oDAAC;;AAGhD,IAAA,aAAa,GAAG,KAAK,CAAS,GAAG,yDAAC;;IAGlC,WAAW,GAAG,KAAK,CAAmB,IAAI,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG5E,IAAA,SAAS,GAAG,KAAK,CAAwB,QAAQ,qDAAC;;AAGlD,IAAA,SAAS,GAAG,KAAK,CAAwB,QAAQ,qDAAC;;IAGlD,KAAK,GAAG,KAAK,CAAmB,IAAI,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE/E;;;;;AAKG;AACM,IAAA,kBAAkB,GAAG,KAAK,CAA8B,MAAM,8DAAC;IAEhE,UAAU,GAA6B,IAAI;IAC3C,WAAW,GAAG,KAAK;AAE3B,IAAA,WAAA,GAAA;;AAEE,QAAA,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,CAAC;;QAG3C,MAAM,CAAC,MAAK;;YAEV,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,EAAE;YAEhB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;gBACvC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;;YAEhB,IAAI,CAAC,mBAAmB,EAAE;QAC5B;aAAO;YACL,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;IAChB;AAEA;;AAEG;IACH,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA;;AAEG;AACH,IAAA,QAAQ,CAAC,OAAmC,EAAA;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,QAAQ;QACrD,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS,EAAE;AAC3B,gBAAA,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;YACjC;AACA,YAAA,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS,EAAE;AAC3B,gBAAA,QAAQ,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC;YAChC;QACF;IACF;AAEA;;AAEG;IACH,cAAc,GAAA;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,QAAQ;QACrD,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY;QAC5C;IACF;AAEA;;AAEG;IACH,WAAW,GAAA;QACT,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,QAAQ;QACrD,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,CAAC,SAAS,GAAG,CAAC;QACxB;IACF;AAEA;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC;IAC/B;IAEQ,mBAAmB,GAAA;;AAEzB,QAAA,IAAI,OAAO,mBAAmB,KAAK,UAAU,EAAE;AAC7C,YAAA,mBAAmB,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjE;aAAO;YACL,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxC;IACF;IAEQ,UAAU,GAAA;;AAEhB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACvF,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAGvB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC5C,YAAA,IAAI,UAAU,KAAK,MAAM,EAAE;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ;gBACpD,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,CAAC,KAAK,CAAC,kBAAkB,GAAG,UAAU;gBAChD;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,YAAY,GAAA;QAClB,OAAO;AACL,YAAA,UAAU,EAAE;AACV,gBAAA,KAAK,EAAE,CAAA,SAAA,EAAY,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE;AACjC,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAChC,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE;AACpB,aAAA;SACF;IACH;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC1B;uGAnKW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBARlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;;AAEJ,wBAAA,mCAAmC,EAAE,EAAE;AACxC,qBAAA;AACF,iBAAA;;;AC9CD;;;;AAIG;AAEG,MAAgB,cAAkB,SAAQ,wBAA2B,CAAA;AACtD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGlD,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,WAAW,GAAG,KAAK,CAAS,qBAAqB,uDAAC;;AAGlD,IAAA,OAAO,GAAG,KAAK,CAAqB,EAAE,mDAAC;;AAGvC,IAAA,IAAI,GAAG,KAAK,CAAiB,IAAI,gDAAC;;IAGlC,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;AAGxB,IAAA,EAAE,GAAG,KAAK,CAAS,EAAE,8CAAC;;AAGtB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;;IAGxB,UAAU,GAAG,KAAK,CAAmB,KAAK,uDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG5E,IAAA,iBAAiB,GAAG,KAAK,CAAS,WAAW,6DAAC;AAE9C;;;;;;;;;AASG;IACH,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAyC;;AAG5D,IAAA,0BAA0B,GAAG,KAAK,CAA4B,MAAM,sEAAC;;;;;AAO3D,IAAA,YAAY,GAAG,SAAS,CAAC,sBAAsB,wDAAC;;AAGhD,IAAA,cAAc,GAAG,SAAS,CAA6B,aAAa,0DAAC;;AAGrE,IAAA,cAAc,GAAG,SAAS,CAA+B,aAAa,0DAAC;;AAGvE,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,OAAA,CAAS,yDAAC;;;;;AAO1D,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;;AAGtB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;;AAGzB,IAAA,WAAW,GAAG,MAAM,CAAC,EAAE,uDAAC;;AAGxB,IAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,4DAAC;;AAG7B,IAAA,gBAAgB,GAAG,MAAM,CAAuB,QAAQ,4DAAC;;AAGzD,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,sDAAC;;AAGlE,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,oDAAC;;AAGlD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,0DAAC;;AAG5D,IAAA,OAAO,GAAG,QAAQ,CAC1B,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE,mDAC5E;;AAGS,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU,qDAAC;;AAGvD,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU,qDAAC;;AAGvD,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACrD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACjC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtF,IAAA,CAAC,2DAAC;AAEF;;;AAGG;AACO,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,EAAE;;AAErC,YAAA,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE;QAClC;AACA,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC,0DAAC;AAEF;;;AAGG;AACO,IAAA,aAAa,CAAC,YAAoB,EAAA;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK;cAC1C,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG;cACpC,YAAY;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK,SAAS;IAC9C;AAEA;;;AAGG;AACO,IAAA,uBAAuB,CAAC,YAAoB,EAAA;AACpD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK;cAC1C,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG;cACpC,YAAY;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;IACtC;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;QAGP,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,0BAA0B,EAAE;IACnC;;IAGU,cAAc,GAAA;QACtB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAE1C,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;QACtB;aAAO;YACL,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;AAEA;;;AAGG;IACO,YAAY,GAAA;;IAEtB;AAEA;;;AAGG;IACO,aAAa,GAAA;;IAEvB;;AAGU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAE1C,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,YAAY,EAAE;;oBAEnB,IAAI,CAAC,oBAAoB,EAAE;gBAC7B;AAAO,qBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE;oBACvC,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,uBAAuB,EAAE;gBAChC;gBACA;AAEF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,aAAa,EAAE;gBACtB;gBACA;AAEF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,YAAY,EAAE;;AAEnB,oBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,QAAQ,EAAE;wBACxC,IAAI,CAAC,oBAAoB,EAAE;oBAC7B;yBAAO;;wBAEL,IAAI,CAAC,mBAAmB,EAAE;oBAC5B;gBACF;qBAAO;;;AAGL,oBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,QAAQ,EAAE;wBACxC,IAAI,CAAC,mBAAmB,EAAE;oBAC5B;yBAAO;wBACL,IAAI,CAAC,uBAAuB,EAAE;oBAChC;gBACF;gBACA;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,YAAY,EAAE;;AAEnB,oBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,EAAE;;wBAErC,IAAI,CAAC,oBAAoB,EAAE;oBAC7B;yBAAO;wBACL,IAAI,CAAC,mBAAmB,EAAE;oBAC5B;gBACF;qBAAO;;;AAGL,oBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,QAAQ,EAAE;wBACxC,IAAI,CAAC,uBAAuB,EAAE;oBAChC;yBAAO;wBACL,IAAI,CAAC,mBAAmB,EAAE;oBAC5B;gBACF;gBACA;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,oBAAoB,EAAE;gBAC7B;gBACA;AAEF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,mBAAmB,EAAE;gBAC5B;gBACA;AAEF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;oBACjB,IAAI,CAAC,aAAa,EAAE;gBACtB;gBACA;;IAEN;;IAGU,mBAAmB,GAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;QACtC,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAE3C,QAAA,OAAO,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;AAChC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;gBACpC,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;YACF;AACA,YAAA,SAAS,EAAE;QACb;IACF;;IAGU,uBAAuB,GAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;QACtC,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAE3C,QAAA,OAAO,SAAS,IAAI,CAAC,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;AAChC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;gBACpC,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;YACF;AACA,YAAA,SAAS,EAAE;QACb;IACF;;IAGU,oBAAoB,GAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;YACF;QACF;IACF;;IAGU,mBAAmB,GAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;YACF;QACF;IACF;;IAGU,mBAAmB,GAAA;QAC3B,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC3C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB;YAC/C,MAAM,aAAa,GAAG,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC;YACrD,aAAa,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACrD,QAAA,CAAC,CAAC;IACJ;IAEU,gBAAgB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa;QAClD,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE;YACb;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK;cAC7B,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE;cAC7C,IAAI;QAER,KAAK,EAAE,KAAK,EAAE;IAChB;IAEU,qBAAqB,GAAA;AAC7B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;QACrC,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,cAAc,EAAE;YAC1B;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC3C,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY;IACxC;IAEU,qBAAqB,GAAA;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa;AAClD,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,KAAK;QAEvB,OAAO,OAAO,QAAQ,KAAK;cACtB,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE;cACzC,IAAI;IACV;;IASU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1B;;IAGU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE;IACrB;;AAGU,IAAA,aAAa,CAAC,KAAY,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B;;IAGU,yBAAyB,GAAA;AACjC,QAAA,OAAO,IAAI;IACb;;IAGU,0BAA0B,GAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAAE;AAEvC,QAAA,MAAM,WAAW,GAAG,CAAC,KAAiB,KAAI;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE;YACpB,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE;YAC1D,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC;;QAGD,UAAU,CAAC,MAAK;AACd,YAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC;AACpD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGAjboB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,qhEA+DC,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FA/DrC,cAAc,EAAA,UAAA,EAAA,CAAA;kBADnC;4iDAgEoC,sBAAsB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGQ,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGX,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACnElF;;;;;;;;;;;;;;;AAeG;AAoBG,MAAO,yBAAuC,SAAQ,cAAwB,CAAA;AACjE,IAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC3C,IAAA,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;AAEpC,IAAA,UAAU,GAAG,SAAS,CAA0B,SAAS,sDAAC;AAC1D,IAAA,mBAAmB,GAAG,SAAS,CAAuB,kBAAkB,+DAAC;IAElF,UAAU,GAAsB,IAAI;;AAG5C,IAAA,KAAK,GAAG,KAAK,CAAW,IAAI,iDAAC;;AAG7B,IAAA,SAAS,GAAG,KAAK,CAAmB,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,CAAA,EACtC,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GACzD;;IAGF,WAAW,GAAG,MAAM,EAAY;;AAGhC,IAAA,IAAc,yBAAyB,GAAA;AACrC,QAAA,OAAO,kCAAkC;IAC3C;;AAGU,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AACpE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,IAAI,IAAI;AAC/E,IAAA,CAAC,0DAAC;;AAGQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACxC,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5F,IAAA,CAAC,2DAAC;;IAGF,cAAc,GAAA;AACZ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,QAAA,OAAO,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B;;AAGA,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;;AAGA,IAAA,YAAY,CAAC,MAA2B,EAAA;AACtC,QAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAE7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE;IACtB;;IAGU,uBAAuB,GAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAErC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAwB;AACpD,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3B;QACF;IACF;;AAGU,IAAA,cAAc,CAAC,KAAY,EAAA;QACnC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACxB;;AAGU,IAAA,UAAU,CAAC,MAAwB,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3E,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC;IAC5C;IAEmB,yBAAyB,GAAA;;;;AAI1C,QAAA,OAAO,KAAK;IACd;IAEmB,YAAY,GAAA;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAC1C,IAAI,IAAI,CAAC,UAAU;YAAE;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC3C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE;AAE3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;QAEjE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAwB,CAAC,CAAC,KAAI;AACvD,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC/C,YAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/D,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,YAAA,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAClD,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACjD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AAErB,QAAA,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG;gBAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAK;YAClC,GAAG,CAAC,KAAK,EAAE;AACb,QAAA,CAAC,CAAC;QAEF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE;AAEpB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACrB,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;YAC9C;AAEA,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,EAAE;AACrC,gBAAA,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE;YACvC;AACF,QAAA,CAAC,CAAC;IACJ;IAEmB,aAAa,GAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,GAAG,EAAE,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B;IAEQ,gBAAgB,CAAC,OAAoB,EAAE,oBAA4B,EAAA;AACzE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,EAAE;QACpD,IAAI,UAAU,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QACtC,IAAI,UAAU,KAAK,QAAQ;AAAE,YAAA,OAAO,QAAQ;QAE5C,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,EAAE,YAAY,IAAI,MAAM,CAAC,WAAW;AACnF,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAE5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AAExC,QAAA,IAAI,UAAU,GAAG,oBAAoB,IAAI,UAAU,GAAG,UAAU;AAAE,YAAA,OAAO,KAAK;AAC9E,QAAA,OAAO,QAAQ;IACjB;IAEQ,mBAAmB,GAAA;QACzB,MAAM,aAAa,GAAG,GAAG;QACzB,MAAM,eAAe,GAAG,EAAE;QAC1B,MAAM,WAAW,GAAG,CAAC;QAErB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM;AAChD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,GAAG,eAAe,GAAG,WAAW,CAAC;AAEvF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC;QAC/C,MAAM,YAAY,GAAG,CAAC;AAEtB,QAAA,OAAO,YAAY,GAAG,YAAY,GAAG,UAAU;IACjD;uGArLW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+zBAZzB,CAAC,wBAAwB,CAAC,MAAM,yBAAyB,CAAC,CAAC,kSCpDxE,g3JA0JA,EAAA,MAAA,EAAA,CAAA,2hPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1GY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,oJAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgBrD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAnBrC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,EAAA,eAAA,EAGhD,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,wBAAwB,CAAC,MAAK,yBAA0B,CAAC,CAAC,EAAA,IAAA,EAChE;AACJ,wBAAA,gCAAgC,EAAE,iBAAiB;AACnD,wBAAA,gCAAgC,EAAE,iBAAiB;AACnD,wBAAA,gCAAgC,EAAE,iBAAiB;AACnD,wBAAA,gCAAgC,EAAE,iBAAiB;AACnD,wBAAA,sCAAsC,EAAE,cAAc;AACtD,wBAAA,sCAAsC,EAAE,YAAY;AACpD,wBAAA,mCAAmC,EAAE,YAAY;AACjD,wBAAA,kCAAkC,EAAE,UAAU;AAC/C,qBAAA,EAAA,QAAA,EAAA,g3JAAA,EAAA,MAAA,EAAA,CAAA,2hPAAA,CAAA,EAAA;AAMgE,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,6EACH,kBAAkB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzC3F;;;;;;;;;;;;;;;AAeG;AAoBG,MAAO,wBAAsC,SAAQ,cAAmB,CAAA;AAC3D,IAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE3C,IAAA,UAAU,GAAG,SAAS,CAA0B,SAAS,sDAAC;AAC1D,IAAA,mBAAmB,GAAG,SAAS,CAAuB,kBAAkB,+DAAC;IAElF,UAAU,GAAsB,IAAI;;AAG5C,IAAA,KAAK,GAAG,KAAK,CAAM,EAAE,iDAAC;;AAGtB,IAAA,SAAS,GAAG,KAAK,CAAmB,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,CAAA,EACtC,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GACzD;;AAGF,IAAA,eAAe,GAAG,KAAK,CAAS,CAAC,2DAAC;;AAGlC,IAAA,aAAa,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,GAAA,EAAA,CAAA,EAC3C,SAAS,EAAE,CAAC,CAAU,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GACzD;;IAGF,WAAW,GAAG,MAAM,EAAO;;AAG3B,IAAA,IAAc,yBAAyB,GAAA;AACrC,QAAA,OAAO,iCAAiC;IAC1C;;AAGU,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE;QAClC,IAAI,CAAC,aAAa,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3E,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,KAC/B,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CACrD;AACH,IAAA,CAAC,2DAAC;;AAGQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACxC,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC9F,IAAA,CAAC,2DAAC;;AAGQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QACpE,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACzF,IAAA,CAAC,uDAAC;;AAGQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QACpE,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;QACjF,OAAO,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,cAAc,CAAC,MAAM;AACnE,IAAA,CAAC,wDAAC;;IAGF,cAAc,GAAA;AACZ,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE;AAClC,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;AAEzC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;;QAG3E,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvD,OAAO,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC;AAClC,QAAA,CAAC,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3C,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B;AACA,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,MAAM,WAAW;IACpC;;AAGA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;;IAGA,YAAY,CAAC,MAA2B,EAAE,KAAa,EAAA;QACrD,KAAK,EAAE,eAAe,EAAE;AACxB,QAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAE7D,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAE1E,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC;aAAO;AACL,YAAA,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAChC;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;IACjC;;IAGU,uBAAuB,GAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAErC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAwB;AACpD,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3B;QACF;IACF;;AAGU,IAAA,SAAS,CAAC,KAAa,EAAA;QAC/B,KAAK,EAAE,eAAe,EAAE;QACxB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAE1C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;;AAEtB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB;aAAO;;AAEL,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO;iBAC3B,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ;iBAC7B,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAU,CAAC;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAC3B;QAEA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAChC;;AAGU,IAAA,cAAc,CAAC,KAAY,EAAA;QACnC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IACtB;;AAGU,IAAA,UAAU,CAAC,MAAwB,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/D;;AAGmB,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC/C,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAE1C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE;YACtE,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,uBAAuB,EAAE;YAC9B;QACF;QAEA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YAC1C,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE;gBAChC,IAAI,CAAC,uBAAuB,EAAE;YAChC;iBAAO;gBACL,IAAI,CAAC,aAAa,EAAE;YACtB;YACA;QACF;AAEA,QAAA,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;IACxB;IAEmB,yBAAyB,GAAA;;;AAG1C,QAAA,OAAO,KAAK;IACd;IAEmB,YAAY,GAAA;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAC1C,IAAI,IAAI,CAAC,UAAU;YAAE;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC3C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE;AAE3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;QAEjE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAwB,CAAC,CAAC,KAAI;AACvD,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC/C,YAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/D,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,YAAA,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAClD,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACjD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AAErB,QAAA,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG;gBAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,GAAG,CAAC,KAAK,EAAE;AACb,QAAA,CAAC,CAAC;QAEF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE;YACpB,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,EAAE;gBACrC,IAAI,CAAC,qBAAqB,EAAE;YAC9B;AACF,QAAA,CAAC,CAAC;IACJ;IAEmB,aAAa,GAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,GAAG,EAAE,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B;IAEQ,gBAAgB,CAAC,OAAoB,EAAE,oBAA4B,EAAA;AACzE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,EAAE;QACpD,IAAI,UAAU,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QACtC,IAAI,UAAU,KAAK,QAAQ;AAAE,YAAA,OAAO,QAAQ;QAE5C,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,EAAE,YAAY,IAAI,MAAM,CAAC,WAAW;AACnF,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAE5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AAExC,QAAA,IAAI,UAAU,GAAG,oBAAoB,IAAI,UAAU,GAAG,UAAU;AAAE,YAAA,OAAO,KAAK;AAC9E,QAAA,OAAO,QAAQ;IACjB;IAEQ,mBAAmB,GAAA;QACzB,MAAM,aAAa,GAAG,GAAG;QACzB,MAAM,eAAe,GAAG,EAAE;QAC1B,MAAM,WAAW,GAAG,CAAC;QAErB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM;AAChD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,GAAG,eAAe,GAAG,WAAW,CAAC;AAEvF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC;QAE/C,MAAM,eAAe,GACnB,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;AACvC,cAAE;cACA,CAAC;QAEP,MAAM,YAAY,GAAG,CAAC;AACtB,QAAA,OAAO,YAAY,GAAG,YAAY,GAAG,eAAe,GAAG,UAAU;IACnE;uGA9QW,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,4lCAZxB,CAAC,wBAAwB,CAAC,MAAM,wBAAwB,CAAC,CAAC,kSCnDvE,k/LA4LA,EAAA,MAAA,EAAA,CAAA,2vQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7IY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,oJAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAgBrD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAnBpC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,EAAA,eAAA,EAGhD,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,wBAAwB,CAAC,MAAK,wBAAyB,CAAC,CAAC,EAAA,IAAA,EAC/D;AACJ,wBAAA,+BAA+B,EAAE,iBAAiB;AAClD,wBAAA,+BAA+B,EAAE,iBAAiB;AAClD,wBAAA,+BAA+B,EAAE,iBAAiB;AAClD,wBAAA,+BAA+B,EAAE,iBAAiB;AAClD,wBAAA,qCAAqC,EAAE,cAAc;AACrD,wBAAA,qCAAqC,EAAE,YAAY;AACnD,wBAAA,kCAAkC,EAAE,YAAY;AAChD,wBAAA,iCAAiC,EAAE,UAAU;AAC9C,qBAAA,EAAA,QAAA,EAAA,k/LAAA,EAAA,MAAA,EAAA,CAAA,2vQAAA,CAAA,EAAA;AAKgE,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,6EACH,kBAAkB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEtC3F;;;;;;;;;;;;;;;;;AAiBG;AAqBG,MAAO,sBAAmC,SAAQ,cAAmB,CAAA;AACxD,IAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE3C,IAAA,UAAU,GAAG,SAAS,CAA0B,SAAS,sDAAC;AAC1D,IAAA,mBAAmB,GAAG,SAAS,CAAuB,kBAAkB,+DAAC;IAElF,UAAU,GAAsB,IAAI;;AAG5C,IAAA,KAAK,GAAG,KAAK,CAAM,EAAE,iDAAC;;IAGtB,WAAW,GAAG,KAAK,CAAmB,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG7E,IAAA,OAAO,GAAG,KAAK,CAAS,CAAC,mDAAC;;AAG1B,IAAA,YAAY,GAAG,KAAK,CAAS,UAAU,wDAAC;;IAGxC,WAAW,GAAG,MAAM,EAAO;;IAG3B,UAAU,GAAG,MAAM,EAAK;AAExB;;;AAGG;AACO,IAAA,cAAc,GAAG,SAAS,CAA+B,aAAa,0DAAC;;AAGjF,IAAA,IAAc,yBAAyB,GAAA;AACrC,QAAA,OAAO,+BAA+B;IACxC;;AAGU,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE;QAClC,IAAI,CAAC,aAAa,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;;AAG3E,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtE,YAAA,IAAI,QAAQ;AAAE,gBAAA,OAAO,QAAQ;;YAG7B,OAAO;AACL,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;aACI;AAC1B,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,2DAAC;;AAGQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3E,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAClC,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAChE;AACH,IAAA,CAAC,4DAAC;AAEF;;;AAGG;AACO,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,EAAE;;AAErC,YAAA,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE;QAClC;AACA,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC,mEAAC;AAEF;;;AAGG;AACO,IAAA,sBAAsB,CAAC,YAAoB,EAAA;AACnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK;cAC1C,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG;cACrC,YAAY;AAChB,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK,SAAS;IAC9C;AAEA;;;AAGG;AACO,IAAA,gCAAgC,CAAC,YAAoB,EAAA;AAC7D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,KAAK;cAC1C,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG;cACrC,YAAY;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;IACtC;;AAGU,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1B,QAAA,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,IAAI,GAAG;AAC9C,IAAA,CAAC,sDAAC;;AAGQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,KAAK;;QAGpE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CACpC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CACzD;AACD,QAAA,IAAI,UAAU;AAAE,YAAA,OAAO,KAAK;;QAG5B,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CACvC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAC3D;QACD,OAAO,CAAC,eAAe;AACzB,IAAA,CAAC,4DAAC;;IAGF,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,eAAe;aACxB,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK;aACtB,IAAI,CAAC,IAAI,CAAC;IACf;;AAGA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IAC7B;;AAGA,IAAA,MAAM,CAAC,MAA2B,EAAA;AAChC,QAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QAElF,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/E,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QACjC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B;;IAGA,SAAS,CAAC,QAAW,EAAE,KAAa,EAAA;QAClC,KAAK,EAAE,eAAe,EAAE;QACxB,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAE1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAU,EAAE,CAAU,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3E,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;IACjC;;IAGU,SAAS,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;YAAE;QAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACvC,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,MAAM,QAAQ,GAAG,KAAqB;QACtC,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAEvC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACrC,YAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;AAC7B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B;;IAGU,uBAAuB,GAAA;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;;QAGrC,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,KAAK,KAAK,SAAS,CAAC,MAAM,EAAE;YACzD,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;QAEA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE;AAC1C,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAwB;AACtD,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACrB;QACF;IACF;;AAGmB,IAAA,SAAS,CAAC,KAAoB,EAAA;QAC/C,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAE1C,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;;AAElD,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBAC3B;gBACA;AAEF,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE;oBAChC,IAAI,CAAC,uBAAuB,EAAE;gBAChC;AAAO,qBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;oBAClC,IAAI,CAAC,SAAS,EAAE;gBAClB;gBACA;AAEF,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;oBACxD,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,SAAS,EAAE;gBAClB;AAAO,qBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;oBAC9B,IAAI,CAAC,aAAa,EAAE;gBACtB;gBACA;AAEF,YAAA;AACE,gBAAA,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;;IAE5B;;AAGU,IAAA,aAAa,CAAC,KAAY,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE;YAClC,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;;IAGU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YAC1C,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QAC9C;IACF;;IAGU,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;;IAGU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE;IACrB;;IAGmB,mBAAmB,GAAA;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;QAClF,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;AAE3C,QAAA,OAAO,SAAS,IAAI,QAAQ,EAAE;;YAE5B,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC7D,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;gBACpC,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;YACF;AAEA,YAAA,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;AAClE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;gBACpC,IAAI,CAAC,mBAAmB,EAAE;gBAC1B;YACF;AACA,YAAA,SAAS,EAAE;QACb;IACF;;IAGmB,mBAAmB,GAAA;QACpC,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE;YAC3C,MAAM,aAAa,GAAG,MAAM,EAAE,aAAa,CAAC,+BAA+B,CAAC;YAC5E,aAAa,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACrD,QAAA,CAAC,CAAC;IACJ;IAEmB,yBAAyB,GAAA;;;AAG1C,QAAA,OAAO,KAAK;IACd;IAEmB,YAAY,GAAA;QAC7B,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAC1C,IAAI,IAAI,CAAC,UAAU;YAAE;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC3C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE;AAE3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;QAEjE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAwB,CAAC,CAAC,KAAI;AACvD,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC/C,YAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/D,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,YAAA,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAClD,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACjD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AAErB,QAAA,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG;gBAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,GAAG,CAAC,KAAK,EAAE;AACb,QAAA,CAAC,CAAC;QAEF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE;AACpB,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK,EAAE;gBACrC,IAAI,CAAC,qBAAqB,EAAE;YAC9B;AACF,QAAA,CAAC,CAAC;IACJ;IAEmB,aAAa,GAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,GAAG,EAAE,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B;IAEQ,gBAAgB,CAAC,OAAoB,EAAE,oBAA4B,EAAA;AACzE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,0BAA0B,EAAE;QACpD,IAAI,UAAU,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QACtC,IAAI,UAAU,KAAK,QAAQ;AAAE,YAAA,OAAO,QAAQ;QAE5C,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,EAAE,YAAY,IAAI,MAAM,CAAC,WAAW;AACnF,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAE5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AAExC,QAAA,IAAI,UAAU,GAAG,oBAAoB,IAAI,UAAU,GAAG,UAAU;AAAE,YAAA,OAAO,KAAK;AAC9E,QAAA,OAAO,QAAQ;IACjB;IAEQ,mBAAmB,GAAA;QACzB,MAAM,aAAa,GAAG,GAAG;QACzB,MAAM,eAAe,GAAG,EAAE;QAC1B,MAAM,WAAW,GAAG,CAAC;QAErB,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7F,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,GAAG,eAAe,GAAG,WAAW,CAAC;QAEvF,MAAM,YAAY,GAAG,CAAC;QACtB,OAAO,YAAY,GAAG,UAAU;IAClC;uGA3YW,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,goCAbtB,CAAC,wBAAwB,CAAC,MAAM,sBAAsB,CAAC,CAAC,kZCtDrE,u8JAwJA,EAAA,MAAA,EAAA,CAAA,43NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtGY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,oJAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiBrD,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApBlC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,EAAA,eAAA,EAGhD,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,wBAAwB,CAAC,MAAK,sBAAuB,CAAC,CAAC,EAAA,IAAA,EAC7D;AACJ,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,6BAA6B,EAAE,iBAAiB;AAChD,wBAAA,mCAAmC,EAAE,cAAc;AACnD,wBAAA,mCAAmC,EAAE,YAAY;AACjD,wBAAA,gCAAgC,EAAE,YAAY;AAC9C,wBAAA,+BAA+B,EAAE,UAAU;AAC3C,wBAAA,kCAAkC,EAAE,aAAa;AAClD,qBAAA,EAAA,QAAA,EAAA,u8JAAA,EAAA,MAAA,EAAA,CAAA,43NAAA,CAAA,EAAA;wEAKgE,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACH,kBAAkB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CA0BtB,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE1ElF;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAOU,gBAAgB,CAAA;;AAE3B,IAAA,EAAE,GAAG,KAAK,CAAC,QAAQ,6CAAU;;IAG7B,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE1E;;;AAGG;AACH,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAc;AAEtC;;;AAGG;AACH,IAAA,aAAa,GAAG,KAAK,CAA0B,EAAE,yDAAC;AAElD;;;;AAIG;AACH,IAAA,eAAe,GAAG,KAAK,CAAqB,MAAM,2DAAC;;AAGnD,IAAA,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAuB,cAAc,CAAC;AAExE;;AAEG;AACH,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;AACxB,QAAA,OAAO,OAAO,CAAC,KAAK,UAAU;IAChC;AAEA;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;AACxB,QAAA,OAAO,OAAO,CAAC,KAAK,UAAU,GAAG,IAAI,GAAG,CAAC;IAC3C;AAEA;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;AACxB,QAAA,OAAO,OAAO,CAAC,KAAK,UAAU,GAAG,CAAC,GAAG,IAAI;IAC3C;uGAnDW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,i2BAHjB,CAAA,uDAAA,CAAyD,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGxD,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA,uDAAA,CAAyD;oBACnE,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;mjBA4B0D,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MC1D5D,qBAAqB,CAAA;;AAEhC,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;;IAG7B,eAAe,GAAG,MAAM,EAAU;;AAGlC,IAAA,IAAI,GAAG,eAAe,CAAC,gBAAgB,gDAAC;;AAG9B,IAAA,iBAAiB,GAAG,MAAM,CAAS,EAAE,6DAAC;AAEhD,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE;YACpC,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC;QACxC;IACF;;AAGA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACzC,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,KAAK,KAAK;QAC3B;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,KAAK;IACvC;AAEA;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,GAAqB,EAAA;AACvC,QAAA,IAAI,GAAG,CAAC,eAAe,EAAE,KAAK,OAAO,EAAE;AACrC,YAAA,OAAO,IAAI;QACb;;QAEA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAChC;;AAGA,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,CAAC;QACrD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC;IACF;;IAGA,SAAS,CAAC,KAAoB,EAAE,YAAoB,EAAA;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC1D,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,YAAY,CAAC;QAExE,IAAI,QAAQ,GAAG,YAAY;AAE3B,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,QAAQ,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;gBACrE,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;gBACrE,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,MAAM;gBACT,QAAQ,GAAG,CAAC;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;gBAC/B,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA;gBACE;;AAGJ,QAAA,IAAI,QAAQ,KAAK,YAAY,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAC3B,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,cAAA,EAAiB,MAAM,CAAC,EAAE,EAAE,CAAA,EAAA,CAAI,CAAgB;YACzF,SAAS,EAAE,KAAK,EAAE;QACpB;IACF;uGA9FW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAQT,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BzC,6gDAgDA,m1CDhCY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAGzB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6gDAAA,EAAA,MAAA,EAAA,CAAA,4xCAAA,CAAA,EAAA;2RAUxB,gBAAgB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEF5B,mBAAmB,CAAA;;AAE9B,IAAA,OAAO,GAAG,KAAK,CAAgB,SAAS,mDAAC;;AAGzC,IAAA,IAAI,GAAG,KAAK,CAAa,IAAI,gDAAC;;IAG9B,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,OAAO,GAAG,KAAK,CAAmB,KAAK,oDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGzE,IAAA,IAAI,GAAG,KAAK,CAAgC,QAAQ,gDAAC;;AAGrD,IAAA,SAAS,GAAG,KAAK,CAA2B,SAAS,qDAAC;;AAGtD,IAAA,OAAO,GAAG,KAAK,CAA2B,SAAS,mDAAC;;IAGpD,SAAS,GAAG,KAAK,CAAmB,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG3E,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;;IAG7B,OAAO,GAAG,MAAM,EAAc;;AAGX,IAAA,QAAQ,GAAG,QAAQ,CAAe,MAAK;AACxD,QAAA,MAAM,OAAO,GAAqC;AAChD,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,IAAI;SACT;AACD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,IAAA,CAAC,oDAAC;AAEQ,IAAA,OAAO,CAAC,KAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B;IACF;uGA9CW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BhC,m4EAyDA,EAAA,MAAA,EAAA,CAAA,k7HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvCY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAShB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAZ/B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACP,CAAC,iBAAiB,CAAC,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,0BAA0B,EAAE,MAAM;AAClC,wBAAA,iCAAiC,EAAE,aAAa;AACjD,qBAAA,EAAA,QAAA,EAAA,m4EAAA,EAAA,MAAA,EAAA,CAAA,k7HAAA,CAAA,EAAA;;;MEMU,sBAAsB,CAAA;AAChB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAE5C,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;;AAG/B,IAAA,QAAQ,GAAG,KAAK,CAAS,MAAM,oDAAC;;AAGhC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;IAGzB,WAAW,GAAG,KAAK,CAAmB,IAAI,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG5E,SAAS,GAAG,KAAK,CAAmB,KAAK,sDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG3E,QAAQ,GAAG,KAAK,CAAmB,IAAI,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzE,eAAe,GAAG,KAAK,CAAmB,KAAK,4DAC7C,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;AAGF,IAAA,SAAS,GAAG,KAAK,CAAS,CAAC,qDAAC;;AAGlB,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;;AAG3B,IAAA,YAAY,GAAG,MAAM,CAA8B,MAAM,wDAAC;;AAG1D,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9C,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QACrC,IAAI,OAAO,EAAE;YACX,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC7C;AACA,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAC9B,IAAA,CAAC,2DAAC;;AAGQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,4DAAC;AAE/E,IAAA,WAAA,GAAA;;;QAGE,eAAe,CACb,MAAK;YACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACxC,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC5B;IACH;;AAGQ,IAAA,WAAW,CAAC,IAAY,EAAA;AAC9B,QAAA,MAAM,OAAO,GAA2B;AACtC,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,EAAE,EAAE,MAAM;AACV,YAAA,KAAK,EAAE,MAAM;SACd;AACD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;IAC1D;;AAGQ,IAAA,UAAU,CAAC,IAAY,EAAA;AAC7B,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC5B;;IAGA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C;IACF;;AAGA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI;YACF,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAChD,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/B,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;QACvD;AAAE,QAAA,MAAM;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9B,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;QACvD;IACF;;AAGA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI;aACb,KAAK,CAAC,IAAI;AACV,aAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB;uGA5GW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BnC,2xEA2DA,EAAA,MAAA,EAAA,CAAA,m+HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjCY,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKlB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBARlC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,CAAC,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2xEAAA,EAAA,MAAA,EAAA,CAAA,m+HAAA,CAAA,EAAA;;;MEIpC,iBAAiB,CAAA;AAC5B;;;AAGG;IACH,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;;AAIG;IACH,UAAU,GAAG,KAAK,CAAC,KAAK,uDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1D,IAAA,KAAK,GAAG,KAAK,CAAY,SAAS,iDAAC;;AAGnC,IAAA,OAAO,GAAG,KAAK,CAAc,IAAI,mDAAC;uGAlBvB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,4vCCjC9B,8GAGA,EAAA,MAAA,EAAA,CAAA,s8CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FD8Ba,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA3B7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,EAAE,mBAGM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,mBAAmB,EAAE,MAAM;;AAE3B,wBAAA,6BAA6B,EAAE,YAAY;;AAE3C,wBAAA,+BAA+B,EAAE,cAAc;;AAE/C,wBAAA,4BAA4B,EAAE,uBAAuB;AACrD,wBAAA,4BAA4B,EAAE,uBAAuB;AACrD,wBAAA,4BAA4B,EAAE,uBAAuB;AACrD,wBAAA,0BAA0B,EAAE,qBAAqB;AACjD,wBAAA,yBAAyB,EAAE,oBAAoB;AAC/C,wBAAA,2BAA2B,EAAE,sBAAsB;;AAEnD,wBAAA,iCAAiC,EAAE,sBAAsB;AACzD,wBAAA,+BAA+B,EAAE,oBAAoB;AACrD,wBAAA,+BAA+B,EAAE,oBAAoB;AACrD,wBAAA,+BAA+B,EAAE,oBAAoB;AACtD,qBAAA,EAAA,QAAA,EAAA,8GAAA,EAAA,MAAA,EAAA,CAAA,s8CAAA,CAAA,EAAA;;;AEzBH;;;;;;;;;;;;;;;;;AAiBG;MAuBU,iBAAiB,CAAA;AAC5B;;;;AAIG;AACH,IAAA,KAAK,GAAG,KAAK,CAAY,SAAS,iDAAC;AAEnC;;;AAGG;AACH,IAAA,OAAO,GAAG,KAAK,CAAc,IAAI,mDAAC;uGAZvB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,+1BC9C9B,kBACA,EAAA,MAAA,EAAA,CAAA,ulDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FD6Ca,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,EAAE,mBAGM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,mBAAmB,EAAE,MAAM;;AAE3B,wBAAA,4BAA4B,EAAE,uBAAuB;AACrD,wBAAA,4BAA4B,EAAE,uBAAuB;AACrD,wBAAA,4BAA4B,EAAE,uBAAuB;AACrD,wBAAA,0BAA0B,EAAE,qBAAqB;AACjD,wBAAA,yBAAyB,EAAE,oBAAoB;AAC/C,wBAAA,2BAA2B,EAAE,sBAAsB;;AAEnD,wBAAA,+BAA+B,EAAE,oBAAoB;AACrD,wBAAA,+BAA+B,EAAE,oBAAoB;AACrD,wBAAA,+BAA+B,EAAE,oBAAoB;AACtD,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,ulDAAA,CAAA,EAAA;;;MEnBU,kBAAkB,CAAA;;AAE7B,IAAA,OAAO,GAAG,KAAK,CAAkB,EAAE,mDAAC;;AAGpC,IAAA,OAAO,GAAG,KAAK,CAAe,SAAS,mDAAC;;AAGxC,IAAA,IAAI,GAAG,KAAK,CAAY,IAAI,gDAAC;;IAG7B,KAAK,GAAG,KAAK,CAAmB,KAAK,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGvE,GAAG,GAAG,KAAK,CAAmB,KAAK,gDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGrE,IAAA,GAAG,GAAG,KAAK,CAAgB,IAAI,+CAAC;;IAGhC,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGhE,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AACd,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAEtB,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,GAAG,EAAE;YAChE,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG;QAClB;AAEA,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,CAAC,wDAAC;uGApCS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,4jCCzB/B,k7BAuBA,EAAA,MAAA,EAAA,CAAA,ssEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDEa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAb9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,EAAE,mBAGM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,yBAAyB,EAAE,MAAM;AACjC,wBAAA,+BAA+B,EAAE,mBAAmB;AACpD,wBAAA,gCAAgC,EAAE,SAAS;AAC5C,qBAAA,EAAA,QAAA,EAAA,k7BAAA,EAAA,MAAA,EAAA,CAAA,ssEAAA,CAAA,EAAA;;;AEPH;;;;;;;;;;;;;;;AAeG;MA0BU,gBAAgB,CAAA;AAC3B;;;AAGG;IACH,QAAQ,GAAG,KAAK,CAAC,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;;AAIG;IACH,UAAU,GAAG,KAAK,CAAC,KAAK,uDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1D,IAAA,KAAK,GAAG,KAAK,CAAW,SAAS,iDAAC;;AAGlC,IAAA,IAAI,GAAG,KAAK,CAAU,IAAI,gDAAC;;IAG3B,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,MAAM,GAAG,MAAM,EAAQ;;AAGb,IAAA,OAAO,CAAC,KAAiB,EAAA;QACjC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;uGA9BW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,4yCCzD7B,uaAUA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FD+Ca,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAzB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cACR,IAAI,EAAA,eAAA,EAGC,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,UAAU;;AAEjB,wBAAA,sBAAsB,EAAE,iBAAiB;AACzC,wBAAA,sBAAsB,EAAE,iBAAiB;AACzC,wBAAA,sBAAsB,EAAE,iBAAiB;;AAEzC,wBAAA,4BAA4B,EAAE,YAAY;;AAE1C,wBAAA,8BAA8B,EAAE,cAAc;;AAE9C,wBAAA,2BAA2B,EAAE,uBAAuB;AACpD,wBAAA,2BAA2B,EAAE,uBAAuB;AACpD,wBAAA,2BAA2B,EAAE,uBAAuB;AACpD,wBAAA,yBAAyB,EAAE,qBAAqB;AAChD,wBAAA,wBAAwB,EAAE,oBAAoB;AAC9C,wBAAA,0BAA0B,EAAE,sBAAsB;AACnD,qBAAA,EAAA,QAAA,EAAA,uaAAA,EAAA,MAAA,EAAA,CAAA,6mFAAA,CAAA,EAAA;;;AEtCH;;;;;;;;;;;;;;;;;;AAkBG;MAkBU,oBAAoB,CAAA;;AAE/B,IAAA,KAAK,GAAG,KAAK,CAAe,QAAQ,iDAAC;;AAGrC,IAAA,OAAO,GAAG,KAAK,CAAiB,QAAQ,mDAAC;;AAGzC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,UAAU,GAAG,KAAK,CAAS,CAAC,sDAAC;;AAG7B,IAAA,aAAa,GAAG,KAAK,CAAS,CAAC,yDAAC;uGAdrB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,unCCrDjC,uXAOA,EAAA,MAAA,EAAA,CAAA,irCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FD8Ca,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjBhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,eAAA,EAGC,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,yBAAyB,EAAE,cAAc;AACzC,wBAAA,sBAAsB,EAAE,MAAM;AAC9B,wBAAA,8BAA8B,EAAE,wBAAwB;AACxD,wBAAA,8BAA8B,EAAE,wBAAwB;AACxD,wBAAA,4BAA4B,EAAE,oBAAoB;AAClD,wBAAA,8BAA8B,EAAE,sBAAsB;AACtD,wBAAA,6BAA6B,EAAE,qBAAqB;AACrD,qBAAA,EAAA,QAAA,EAAA,uXAAA,EAAA,MAAA,EAAA,CAAA,irCAAA,CAAA,EAAA;;;AEjDH;;;;AAIG;MAEU,uBAAuB,CAAA;IAC1B,QAAQ,GAAkB,IAAI;IAC9B,WAAW,GAAwB,IAAI;IAE/C,WAAW,CAAC,EAAU,EAAE,KAAiB,EAAA;QACvC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,IAAI;QACtB;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC1B;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;uGAlBW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAvB,uBAAuB,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACeD;;;;AAIG;MASU,oBAAoB,CAAA;AACd,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,YAAY,GAAG,MAAM,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClE,IAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAEpD,IAAA,OAAO,MAAM,GAAG,CAAC;AACR,IAAA,SAAS,GAAG,CAAA,aAAA,EAAgB,oBAAoB,CAAC,MAAM,EAAE,EAAE;AACzD,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,QAAQ;IAE9C,UAAU,GAAmD,IAAI;AACtD,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AAEzC,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,CAAC,CAAC;IACJ;;IAGA,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,WAAW,GAAG,KAAK,CAAmB,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG7E,WAAW,GAAG,KAAK,CAAmB,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG7E,WAAW,GAAG,KAAK,CAAmB,IAAI,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG5E,iBAAiB,GAAG,KAAK,CAAmB,KAAK,8DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGnF,eAAe,GAAG,KAAK,CAAmB,IAAI,4DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG7D,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,yDAAC;IAExC,UAAU,GAAyC,IAAI;AAC9C,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,yDAAC;AAE7B,IAAA,cAAc,GAAG,MAAM,CAAC,MAAK;AAC5C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,CAAC,KAAK,EAAE;QACd;AACF,IAAA,CAAC,0DAAC;AAEe,IAAA,mBAAmB,GAAG,MAAM,CAAC,MAAK;;AAEjD,QAAA,KAAK,IAAI,CAAC,eAAe,EAAE;AAC7B,IAAA,CAAC,+DAAC;AAEe,IAAA,qBAAqB,GAAG,MAAM,CAAC,MAAK;;AAEnD,QAAA,KAAK,IAAI,CAAC,iBAAiB,EAAE;AAC/B,IAAA,CAAC,iEAAC;AAEe,IAAA,UAAU,GAAG,SAAS,CAA0B,SAAS,sDAAC;AAE1D,IAAA,gBAAgB,GAAG,SAAS,CAAuB,eAAe,4DAAC;IAE5E,gBAAgB,GAAA;QACtB,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,IAAI,IAAI;AACjE,QAAA,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,IAAI;;;AAIlC,QAAA,QACE,gBAAgB,CAAC,aAAa,CAAC,4CAA4C,CAAC;AAC5E,YAAA,gBAAgB;IAEpB;AAEiB,IAAA,oBAAoB,GAAG,SAAS,CAAa,QAAQ,EAAE,OAAO;SAC5E,IAAI,CACH,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,EAC3B,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,EAChC,MAAM,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EAClC,MAAM,CAAC,CAAC,KAAK,KAAI;AACf,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;AAEzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,KAAK;QAErD,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AACnD,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,KAAK;AAEjD,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;SAEH,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AAExB,IAAA,YAAY,CAAC,MAAyB,EAAA;QAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;AAErB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9B;YACA;QACF;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,IAAI,CAAC,QAAQ;YAAE;;AAGf,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AAElE,QAAA,IAAI,MAAM,KAAK,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B;QAEA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAwB,CAAC,CAAC,KAAI;AACvD,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAC/C,CAAC,CAAC,QAAQ,CAAC;gBACT,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;AAC7C,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE;AAC9B,aAAA,CAAC;YACF,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,YAAA,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAErB,QAAA,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG;gBAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AACjD,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAC5B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;QACzB,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;AACzB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,eAAe,EAAE;IACxB;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;QACzB,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAC5B;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAC5B;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;;QAGrB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC1B;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAC5B;QACF;QAEA,IAAI,CAAC,KAAK,EAAE;IACd;AAGA,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE;AAEzB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;AACjD,QAAA,IAAI,CAAC,MAAM;YAAE;;AAGb,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC;YAAE;AAE7C,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;IAC5B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,GAAG,EAAE,KAAK,EAAE;AAEZ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IACjD;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE;AAE1B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,aAA4B;;QAGrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,IAAI,IAAI;QACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QACnD,IACE,CAAC,OAAO,IAAI,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;AACtD,aAAC,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EACnD;YACA;QACF;QAEA,IAAI,CAAC,KAAK,EAAE;IACd;AAEA,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;IAEQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;YAChC,IAAI,IAAI,CAAC,aAAa,EAAE;gBAAE;YAC1B,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;gBAAE;YACpD,IAAI,CAAC,KAAK,EAAE;QACd,CAAC,EAAE,EAAE,CAAC;IACR;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AACtB,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;uGA7QW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCjC,u/BAsCA,EAAA,MAAA,EAAA,CAAA,82BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDRY,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKrB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,CAAC,sBAAsB,CAAC,EAAA,eAAA,EAGhB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,u/BAAA,EAAA,MAAA,EAAA,CAAA,82BAAA,CAAA,EAAA;AA8DkB,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,0EAEN,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA;sBAkJlF,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MEtOtB,kBAAkB,CAAA;IACrB,MAAM,GAAyB,IAAI;IAEnC,eAAe,GAAwB,IAAI;IAEnD,WAAW,CACT,EAAU,EACV,cAA0B,EAC1B,gBAA4B,EAC5B,OAAoB,EACpB,MAAyB,EAAA;AAEzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;QAE5B,IAAI,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE;YAClC,QAAQ,CAAC,cAAc,EAAE;QAC3B;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE;AAEvE,QAAA,IAAI,MAAM,KAAK,OAAO,EAAE;YACtB,IAAI,CAAC,qBAAqB,EAAE;QAC9B;aAAO;YACL,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE;YAAE;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEQ,qBAAqB,GAAA;QAC3B,IAAI,IAAI,CAAC,eAAe;YAAE;QAC1B,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;QAEtE,MAAM,OAAO,GAAG,IAAI;QAEpB,MAAM,gBAAgB,GAAG,MAAW;YAClC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO;gBAAE;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC9B,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,KAAgC,KAAU;YAC/D,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE;AAClB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO;gBAAE;;;AAIpC,YAAA,IAAI,OAAO,QAAQ,CAAC,gBAAgB,KAAK,UAAU,EAAE;AACnD,gBAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;gBAClE,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAAE;AAC5C,gBAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;gBAC9B;YACF;YAEA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE;AACxD,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK;AACzE,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;YAEzE,IAAI,OAAO,IAAI,OAAO;gBAAE;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;AAChC,QAAA,CAAC;AAED,QAAA,MAAM,QAAQ,GAAG,MAAY,gBAAgB,EAAE;AAC/C,QAAA,MAAM,MAAM,GAAG,MAAY,gBAAgB,EAAE;QAC7C,MAAM,kBAAkB,GAAG,MAAW;AACpC,YAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,gBAAA,gBAAgB,EAAE;YACpB;AACF,QAAA,CAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,QAAA,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC;AACvC,QAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;AAEjE,QAAA,IAAI,CAAC,eAAe,GAAG,MAAK;YAC1B,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC;YACnE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;AACvD,YAAA,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC;AAC1C,YAAA,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;AACpE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC7B,QAAA,CAAC;IACH;IAEQ,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,eAAe,IAAI;IAC1B;uGA1FW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCUrB,2BAA2B,CAAA;AAC7B,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;AAE7B,IAAA,OAAO,GAAG,KAAK,CAAmC,IAAI,mDAAC;;AAGvD,IAAA,OAAO,GAAG,KAAK,CAAgB,IAAI,mDAAC;;AAGpC,IAAA,eAAe,GAAG,KAAK,CAAkB,IAAI,2DAAC;AAEvD,IAAA,IACc,MAAM,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI;IACnD;IAGmB,IAAI,GAAG,SAAS;AAEhB,IAAA,IAAI,GAAG,QAAQ,CAA6C,MAAK;AAClF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,MAAM;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,MAAM;QAC5C,IAAI,KAAK,YAAY,WAAW;AAAE,YAAA,OAAO,UAAU;AACnD,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,gDAAC;AAEiB,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;AAC5B,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,EAAE;AAC/C,IAAA,CAAC,gDAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,OAAO,KAAK,YAAY,WAAW,GAAG,KAAK,GAAG,IAAI;AACpD,IAAA,CAAC,uDAAC;AAEiB,IAAA,aAAa,GAAG,QAAQ,CAAuB,MAAK;AACrE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;QAC5B,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QAC1C,IAAI,KAAK,YAAY,WAAW;AAAE,YAAA,OAAO,IAAI;AAC7C,QAAA,OAAO,KAAsB;AAC/B,IAAA,CAAC,yDAAC;uGA3CS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBxC,yYAYA,EAAA,MAAA,EAAA,CAAA,iWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBARvC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,yYAAA,EAAA,MAAA,EAAA,CAAA,iWAAA,CAAA,EAAA;;sBAa9C,WAAW;uBAAC,SAAS;;sBAKrB,WAAW;uBAAC,WAAW;;;MEOb,oBAAoB,CAAA;AACd,IAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC5C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE3B,IAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC3C,IAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;;AAGnD,IAAA,WAAW,GAAG,KAAK,CAAmC,IAAI,uDAAC;;AAG3D,IAAA,kBAAkB,GAAG,KAAK,CAAgB,IAAI,8DAAC;;IAG/C,mBAAmB,GAAG,KAAK,CAAmB,KAAK,gEAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGrF,IAAA,oBAAoB,GAAG,KAAK,CAAmB,KAAK,gEAAC;;IAGrD,oBAAoB,GAAG,KAAK,CAAkB,CAAC,iEAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAGhF,qBAAqB,GAAG,KAAK,CAAkB,CAAC,kEAAI,SAAS,EAAE,eAAe,EAAA,CAAG;;IAGjF,0BAA0B,GAAG,KAAK,CAAmB,IAAI,uEAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG3F,4BAA4B,GAAG,KAAK,CAAmB,KAAK,yEAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEtF,IAAA,SAAS,GAAG,CAAA,aAAA,EAAgB,cAAc,EAAE,EAAE;IAEvD,UAAU,GAAsB,IAAI;IAEpC,WAAW,GAAkB,IAAI;IACjC,YAAY,GAAkB,IAAI;IAElC,UAAU,GAA6B,IAAI;AAElC,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;AACtC,IAAA,CAAC,sDAAC;AAEF,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC9B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAClB;;;YAIA,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,0BAA0B,EAAE;YACjC,IAAI,CAAC,4BAA4B,EAAE;AAEnC,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU;AACzC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI;;;AAI9C,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,cAAc,IAAI,iBAAiB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AAC3F,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAChB,gBAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;YACpE;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClB,QAAA,CAAC,CAAC;IACJ;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;AAC5B,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;AAC7B,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;IACF;AAEQ,IAAA,YAAY,CAAC,MAAyB,EAAA;QAC5C,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAAE;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;AAExB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;;AAG7C,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAC7B,IAAI,CAAC,SAAS,EACd,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EACtB,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EACjC,OAAO,EACP,MAAM,CACP;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AAExB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAChC,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC;YACxD;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAKxB,CAAC,CAAC,KAAI;AACP,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC;AAC9D,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC/C,YAAA,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,YAAA,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,QAAA,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO;AACP,YAAA,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE;YAClC,eAAe,EAAE,IAAI,CAAC,QAAQ;AAC/B,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;QAErB,OAAO,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC;AAExD,QAAA,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG;gBAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAClD,QAAA,CAAC,CAAC;IACJ;IAEQ,sBAAsB,GAAA;AAM5B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC9C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,EAAE;AACzD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,EAAE;AAE7D,QAAA,IAAI,UAAU,KAAK,MAAM,EAAE;YACzB,OAAO;gBACL,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU;AACtD,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,KAAK,EAAE,eAAe;aACvB;QACH;AAEA,QAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,CAAC;QAEhD,IAAI,iBAAiB,EAAE;YACrB,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU;AAC9D,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;YAEtD,OAAO;AACL,gBAAA,SAAS,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC;AAC/B,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,eAAe;aACvB;QACH;QAEA,OAAO;AACL,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,KAAK,EAAE,eAAe;SACvB;IACH;AAEQ,IAAA,YAAY,CAAC,MAAyB,EAAA;QAC5C,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC;AACnE,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACzB;QACF;QAEA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAC3B,CAAC,EAAE,KAAK,CAAC;IACX;AAEQ,IAAA,aAAa,CAAC,MAAyB,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;AAC5B,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM;YAAE;AAEhC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC;AACpE,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAChB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;YAAE;QAE/B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AACzC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAClB,CAAC,EAAE,KAAK,CAAC;IACX;IAEA,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAAE;AAEhC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;AAC7B,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAC5B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IAC7B;IAEA,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAAE;AAEhC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;AAC7B,YAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAC5B;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,aAA4B;AACrD,QAAA,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpE;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IAC7B;IAEA,KAAK,CAAC,SAAS,GAAG,KAAK,EAAA;QACrB,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,WAAW,EAAE;QACpB;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC7C,QAAA,OAAO,CAAC,eAAe,CAAC,kBAAkB,CAAC;AAE3C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,IAAI,CAAC,GAAG;YAAE;AAEV,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,GAAG,CAAC,KAAK,EAAE;QACX,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAClD;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC7C,QAAA,MAAM,MAAM,IAAI,OAAO,QAAQ,KAAK,WAAW,GAAG,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAmB;AAClG,QAAA,MAAM,MAAM,GAAsB,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,OAAO;QACxF,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAC3B;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAChB;QACF;QACA,IAAI,CAAC,IAAI,EAAE;IACb;uGAvSW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,0BAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,4BAAA,EAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,cAAc,EAAE,gBAAgB;AAChC,wBAAA,cAAc,EAAE,gBAAgB;AAChC,wBAAA,WAAW,EAAE,aAAa;AAC1B,wBAAA,YAAY,EAAE,oBAAoB;AACnC,qBAAA;AACF,iBAAA;;AA2SD,SAAS,kBAAkB,CAAC,UAA6C,EAAA;;AAEvE,IAAA,OAAO,UAAuB;AAChC;AAEA,SAAS,cAAc,GAAA;AACrB,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE;AAC5E,QAAA,OAAO,MAAM,CAAC,UAAU,EAAE;IAC5B;IAEA,OAAO,CAAA,EAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAE;AAC5E;;ACnVA;;;;;;;;AAQG;MAoBU,kBAAkB,CAAA;AAC7B;;;AAGG;AACM,IAAA,IAAI,GAAG,KAAK,CAAgB,IAAI,gDAAC;AAE1C;;;AAGG;IACM,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEnF;;;AAGG;AACM,IAAA,GAAG,GAAG,KAAK,CAAqB,SAAS,+CAAC;AAE1C,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;AAEjC,IAAA,IACI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;IAC7B;AAEA,IAAA,IACI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;IAC7B;AAEA,IAAA,IACI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;IAC7B;AAEA,IAAA,IACI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;IAC7B;AAEA,IAAA,IACI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI;IAC3B;uGA5CW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBnB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+lBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAQU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAnB9B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,QAAA,EACN;;;;;;;;AAQT,EAAA,CAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,YAAY;AACpB,qBAAA,EAAA,MAAA,EAAA,CAAA,+lBAAA,CAAA,EAAA;;sBAuBA,WAAW;uBAAC,sBAAsB;;sBAKlC,WAAW;uBAAC,sBAAsB;;sBAKlC,WAAW;uBAAC,sBAAsB;;sBAKlC,WAAW;uBAAC,sBAAsB;;sBAKlC,WAAW;uBAAC,UAAU;;;AChFzB;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAoBU,kBAAkB,CAAA;;AAE7B,IAAA,OAAO,GAAG,KAAK,CAAmB,SAAS,mDAAC;;IAG5C,OAAO,GAAG,KAAK,CAAmB,KAAK,oDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGzE,KAAK,GAAG,KAAK,CAAmB,IAAI,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;uGAR3D,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,WAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfnB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FASU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAnB9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;;;;;GAMT,EAAA,IAAA,EAEK;AACJ,wBAAA,2BAA2B,EAAE,uBAAuB;AACpD,wBAAA,8BAA8B,EAAE,0BAA0B;AAC1D,wBAAA,6BAA6B,EAAE,WAAW;AAC1C,wBAAA,2BAA2B,EAAE,SAAS;AACvC,qBAAA,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA;;;ACMH;;;AAGG;AACH,SAAS,oBAAoB,CAAC,MAAc,EAAE,cAAqB,EAAA;AACjE,IAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;;IAEvE,MAAM,QAAQ,GAAa,EAAE;AAC7B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;;AAE1B,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC;;AAEA,IAAA,IAAI,cAAc,KAAK,CAAC,EAAE;;AAExB,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC7B,IAAI,MAAM,EAAE;AACV,YAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1B;IACF;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA;;;;;;;;;;;;;;AAcG;AAqBG,MAAO,uBAAwB,SAAQ,wBAAmD,CAAA;AAC7E,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,aAAa,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/D,IAAA,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAEpD,UAAU,GAAsB,IAAI;;;;;AAO5C,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAGzB,IAAA,WAAW,GAAG,KAAK,CAAS,gBAAgB,uDAAC;;AAG7C,IAAA,IAAI,GAAG,KAAK,CAAqB,IAAI,gDAAC;;IAGtC,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAG1E,KAAK,GAAG,KAAK,CAAmB,KAAK,kDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGvE,IAAA,OAAO,GAAG,KAAK,CAAS,EAAE,mDAAC;;AAG3B,IAAA,GAAG,GAAG,KAAK,CAA4B,IAAI,+CAAC;;AAG5C,IAAA,GAAG,GAAG,KAAK,CAA4B,IAAI,+CAAC;AAE5C;;;AAGG;IACH,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAExB;;;AAGG;IACH,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAoB;;IAG5C,eAAe,GAAG,KAAK,CAAmB,IAAI,4DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGhF,eAAe,GAAG,KAAK,CAAmB,KAAK,4DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;IAGjF,iBAAiB,GAAG,KAAK,CAAmB,KAAK,8DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAGnF,IAAA,OAAO,GAAG,KAAK,CAAmB,EAAE,mDAAC;;;;;IAOlB,qBAAqB,GAAG,CAAC;AAE5C;;;AAGG;IACgB,2BAA2B,GAAG,CAAC;AAExC,IAAA,iBAAiB,CAAC,OAAyB,EAAA;QACnD,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAChD,YAAA,OAAO,OAAO;QAChB;QACA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,2BAA2B,CAAC;IAC3D;AAEU,IAAA,oBAAoB,CAAC,OAAyB,EAAA;QACtD,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAChD,YAAA,OAAO,CAAC;QACV;AACA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC;IACvE;;;;;AAOA,IAAA,KAAK,GAAG,KAAK,CAA4B,IAAI,iDAAC;;IAG9C,WAAW,GAAG,MAAM,EAA6B;;IAGjD,MAAM,GAAG,MAAM,EAAQ;;IAGvB,MAAM,GAAG,MAAM,EAAQ;;;;;AAOf,IAAA,OAAO,MAAM,GAAG,CAAC;;AAGR,IAAA,GAAG,GAAG,CAAA,iBAAA,EAAoB,uBAAuB,CAAC,MAAM,EAAE,EAAE;;AAGrE,IAAA,eAAe;;AAGb,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,GAAG,CAAA,MAAA,CAAQ,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG7C,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,GAAG,CAAA,MAAA,CAAQ,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG7C,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,GAAG,CAAA,SAAA,CAAW,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGnD,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;;AAGtB,IAAA,gBAAgB,GAAG,MAAM,CAAmB,QAAQ,4DAAC;;AAGrD,IAAA,QAAQ,GAAG,MAAM,CACzB,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,gBAAgB,EAAE,oDAC/C;;AAGS,IAAA,WAAW,GAAG,MAAM,CAA4B,IAAI,uDAAC;;AAGrD,IAAA,YAAY,GAAG,MAAM,CAAC,EAAE,wDAAC;;AAGzB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAC9B,oBAAoB,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,sDACpE;;AAGS,IAAA,QAAQ,GAAG,SAAS,CAA+B,WAAW,oDAAC;;AAG/D,IAAA,UAAU,GAAG,SAAS,CAA0B,SAAS,sDAAC;;AAG1D,IAAA,mBAAmB,GAAG,SAAS,CAAuB,kBAAkB,+DAAC;;;;AAMnF;;;AAGG;AACO,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAuB;;AAE9D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC5C,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,YAAY;QACrB;;AAGA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACxD;;QAGA,OAAO;AACL,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,cAAc,EAAE,CAAC;SAClB;AACH,IAAA,CAAC,+DAAC;;AAGQ,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,sDAAC;;AAG/D,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,cAAc,0DAAC;;AAG1E,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,GAAG;AACpC,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,GAAG;AACpC,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,qDAAC;;AAGQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;AACxC,IAAA,CAAC,4DAAC;AAEF;;;AAGG;AACO,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,IAAI,SAAS,CAAC,QAAQ;AACtF,IAAA,CAAC,2DAAC;;IAGQ,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGvC,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,sDAAC;;AAGlE,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;AACjC,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAClD,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW;;AAGzC,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS;AACzC,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,EAAE;;;;AAKnD,QAAA,IAAI,iBAAyB;AAC7B,QAAA,IAAI,qBAAqB,KAAK,CAAC,EAAE;;YAE/B,iBAAiB,GAAG,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;QAClD;aAAO;;;AAGL,YAAA,iBAAiB,GAAG,cAAc,GAAG,CAAC;QACxC;QAEA,MAAM,IAAI,GAAkB,EAAE;;AAG9B,QAAA,IAAI,iBAAiB,GAAG,CAAC,EAAE;AACzB,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACnD,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW;AAC3C,YAAA,KAAK,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,aAAa,GAAG,CAAC,EAAE,CAAC;AAC7D,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC9C;QACF;;AAGA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/C;;AAGA,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;AACtC,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9C;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,wDAAC;;AAGQ,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;QACjC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAChE,YAAA,KAAK,EAAE,MAAM;AACd,SAAA,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/D,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACjC,IAAA,CAAC,qDAAC;;AAGQ,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI;AAC7B,IAAA,CAAC,oDAAC;;AAGQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;QAChC,MAAM,KAAK,GAAa,EAAE;;AAG1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,cAAc,EAAE;;AAElB,gBAAA,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC;AAC5F,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YACrB;QACF;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,uDAAC;;AAGQ,IAAA,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE;;;;AAM7C,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;QAGP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;YACxB,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;oBAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBAC3C;YACF;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B;AACF,QAAA,CAAC,CAAC;;QAGF,eAAe,CAAC,MAAK;YACnB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa;YACnD,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;YACtC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;AAC/B,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACxB,QAAA,CAAC,CAAC;IACJ;;;;;IAOA,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QAC1C,IAAI,IAAI,CAAC,UAAU;YAAE;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa;AAChD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC3C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE;AAE3B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;QAEjE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAwB,CAAC,CAAC,KAAI;AACvD,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC/C,YAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/D,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACpC,YAAA,CAAC,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAClD,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AAErB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;;QAGrB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK;AAC1C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;AAE7C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAElB,QAAA,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG;gBAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;;IAGA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AAEpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACtB,GAAG,EAAE,KAAK,EAAE;AAEZ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACjB,IAAI,CAAC,aAAa,EAAE;QACtB;aAAO;YACL,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;;AAGA,IAAA,UAAU,CAAC,IAAwB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE;AAE/B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;;AAEtB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;;IAE5B;;IAGA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;;AAGA,IAAA,SAAS,CAAC,KAAY,EAAA;QACpB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACxB;;IAGA,aAAa,GAAA;QACX,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD;;IAGA,SAAS,GAAA;QACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACnD;;IAGA,YAAY,GAAA;QACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACvD;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD;;IAGA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;;;;AAMA,IAAA,UAAU,CAAC,KAAyC,EAAA;QAClD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB;AAAO,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;AAEpC,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD;AAAE,YAAA,MAAM;AACN,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB;QACF;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB;IACF;;;;IAMU,cAAc,GAAA;QACtB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEU,IAAA,iBAAiB,CAAC,KAAoB,EAAA;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;AAEpB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,aAAa,EAAE;gBACpB;AACF,YAAA,KAAK,OAAO;YACZ,KAAK,GAAG,EAAE;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;gBAClC,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC1B;gBACA;YACF;AACA,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;gBACzB;AACF,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;gBACxB;AACF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;gBACzB;AACF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;gBACxB;AACF,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;oBAClB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;gBAC5B;qBAAO;oBACL,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;gBAC7B;gBACA;AACF,YAAA,KAAK,UAAU;gBACb,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;gBAC3B;qBAAO;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;gBAC5B;gBACA;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,SAAS,EAAE;gBAChB;;IAEN;AAEU,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AAC7C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAC3E,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;IAEQ,gBAAgB,CAAC,OAAoB,EAAE,oBAA4B,EAAA;QACzE,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,EAAE,YAAY,IAAI,MAAM,CAAC,WAAW;AACnF,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAE5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AAExC,QAAA,IAAI,UAAU,GAAG,oBAAoB,IAAI,UAAU,GAAG,UAAU;AAAE,YAAA,OAAO,KAAK;AAC9E,QAAA,OAAO,QAAQ;IACjB;IAEQ,mBAAmB,GAAA;QACzB,MAAM,YAAY,GAAG,EAAE;QACvB,MAAM,aAAa,GAAG,EAAE;AACxB,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;AACzB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,GAAG,CAAC;QACpD,MAAM,OAAO,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,CAAC;QAEhB,OAAO,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM;IACpF;AAEA;;;;;AAKG;AACO,IAAA,aAAa,CAAC,KAAY,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;;AAGxB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;QAG3B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAC5C,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5C,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B;IACF;AAEA;;;;AAIG;IACO,WAAW,GAAA;QACnB,IAAI,CAAC,YAAY,EAAE;AAEnB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;QAEnD,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;;AAErC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;YACxB,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACvD;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B;QACF;IACF;;;;AAMA;;;;;AAKG;AACK,IAAA,iBAAiB,CAAC,YAA8B,EAAA;AACtD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;;AAGlC,QAAA,MAAM,OAAO,GAAoF;AAC/F,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,YAAY,EAAE,YAAY;SAC3B;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;QAE1B,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAC1C,YAAA,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;YACrB,SAAS;AACT,YAAA,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,SAAS;AACvD,YAAA,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,SAAS;AACxD,SAAA,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;IAC3D;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,QAA4B,EAAA;AACjD,QAAA,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;IAClE;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,IAAwB,EAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;AAEvC,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAChD,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;;QAEtD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;IACjF;AAEA;;AAEG;AACK,IAAA,oBAAoB,CAAC,IAAwB,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC7C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAE9B,QAAQ,MAAM;AACZ,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,YAAY;gBACf,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE;AAC5C,YAAA,KAAK,YAAY;gBACf,OAAO,CAAA,EAAG,KAAK,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE;AAC5C,YAAA,KAAK,YAAY;gBACf,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE;AAC5C,YAAA;gBACE,OAAO,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE;;IAEhD;AAEA;;;AAGG;AACK,IAAA,kBAAkB,CAAC,IAAY,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AAEtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;;QAGnC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AAEpE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,IAAI,IAAY,EAAE,KAAa,EAAE,GAAW;AAE5C,QAAA,IAAI;YACF,QAAQ,MAAM;AACZ,gBAAA,KAAK,YAAY;AACjB,gBAAA,KAAK,YAAY;oBACf,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC5B,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC9B,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC7B;AACF,gBAAA,KAAK,YAAY;oBACf,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC9B,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC5B,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC7B;AACF,gBAAA,KAAK,YAAY;oBACf,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC7B,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC9B,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC5B;AACF,gBAAA;AACE,oBAAA,OAAO,IAAI;;;YAIf,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE;AAC9D,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;;AAG1D,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,YAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AAC5D,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AAC5D,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;;AAEN,YAAA,OAAO,IAAI;QACb;IACF;IAEQ,iBAAiB,CAAC,IAAwB,EAAE,cAAuB,EAAA;AACzE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;;AAElC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAE5C,OAAO;YACL,IAAI;YACJ,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,cAAc;AACd,YAAA,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC3D,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK;YAC/E,SAAS,EAAE,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK;AAC5E,YAAA,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACrC,YAAA,SAAS,EAAE,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;YAC7C,OAAO;YACP,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI;SAC7C;IACH;AAEA;;;AAGG;AACK,IAAA,iBAAiB,CAAC,IAAwB,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,MAAM,OAAO,GAAqB,EAAE;AACpC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS;;YAG9C,IACE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;AAC5C,gBAAA,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAC1C;AACA,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACtB;QACF;AACA,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,cAAc,CAAC,IAAwB,EAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAE1B,QAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AAC5D,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AAC5D,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;IAEQ,SAAS,CAAC,MAAc,EAAE,IAA8B,EAAA;AAC9D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK;AAChE,QAAA,IAAI,OAA2B;QAE/B,QAAQ,IAAI;AACV,YAAA,KAAK,KAAK;gBACR,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACvC;AACF,YAAA,KAAK,OAAO;gBACV,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACzC;AACF,YAAA,KAAK,MAAM;gBACT,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBACxC;;;AAIJ,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,QAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;YAC/D,OAAO,GAAG,OAAO;QACnB;AACA,QAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;YAC/D,OAAO,GAAG,OAAO;QACnB;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAC/C;uGAj1BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,2zFAbvB,CAAC,wBAAwB,CAAC,MAAM,uBAAuB,CAAC,EAAE,uBAAuB,CAAC,0YCjG/F,yxNAgNA,EAAA,MAAA,EAAA,CAAA,4/VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnHY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,oJAAE,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiBnD,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBApBnC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP,CAAC,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,EAAA,eAAA,EAG9C,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,wBAAwB,CAAC,MAAK,uBAAwB,CAAC,EAAE,uBAAuB,CAAC,EAAA,IAAA,EACvF;AACJ,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,oCAAoC,EAAE,cAAc;AACpD,wBAAA,oCAAoC,EAAE,YAAY;AAClD,wBAAA,iCAAiC,EAAE,YAAY;AAC/C,wBAAA,gCAAgC,EAAE,UAAU;AAC5C,wBAAA,oBAAoB,EAAE,2BAA2B;AAClD,qBAAA,EAAA,QAAA,EAAA,yxNAAA,EAAA,MAAA,EAAA,CAAA,4/VAAA,CAAA,EAAA;u5DA4J4D,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGd,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAGH,kBAAkB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE9QpF;;AAEG;;;;"}