@arsedizioni/ars-utils 22.1.5 → 22.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +158 -10
  2. package/clipper.ui/clipper.scss +564 -0
  3. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +1 -1
  4. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +11 -7
  6. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-core.date.mjs +609 -0
  8. package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -0
  9. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +591 -0
  10. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs.map +1 -0
  11. package/fesm2022/arsedizioni-ars-utils-core.mjs +270 -1449
  12. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  13. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +1 -1
  14. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +1 -1
  16. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +14 -4108
  18. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +962 -0
  20. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -0
  21. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +506 -0
  22. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -0
  23. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +450 -0
  24. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -0
  25. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +184 -0
  26. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -0
  27. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +825 -0
  28. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -0
  29. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +708 -0
  30. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -0
  31. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +426 -0
  32. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs.map +1 -0
  33. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +531 -0
  34. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs.map +1 -0
  35. package/fesm2022/arsedizioni-ars-utils-ui.mjs +54 -1227
  36. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  37. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +1049 -0
  38. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs.map +1 -0
  39. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +263 -0
  40. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs.map +1 -0
  41. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +4 -3
  42. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  43. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +53 -0
  44. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs.map +1 -0
  45. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +517 -0
  46. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs.map +1 -0
  47. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +246 -0
  48. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs.map +1 -0
  49. package/fesm2022/arsedizioni-ars-utils.mjs +13 -12
  50. package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
  51. package/help/package.json +4 -0
  52. package/package.json +80 -14
  53. package/styles/ui.colors.scss +23 -0
  54. package/support.ui/package.json +4 -0
  55. package/tinymce/package.json +4 -0
  56. package/types/arsedizioni-ars-utils-clipper.common.d.ts +1 -2
  57. package/types/arsedizioni-ars-utils-clipper.ui.d.ts +4 -1
  58. package/types/arsedizioni-ars-utils-core.d.ts +684 -1004
  59. package/types/arsedizioni-ars-utils-core.date.d.ts +304 -0
  60. package/types/arsedizioni-ars-utils-core.markdown.d.ts +159 -0
  61. package/types/arsedizioni-ars-utils-ui.application.d.ts +10 -2022
  62. package/types/arsedizioni-ars-utils-ui.controls.d.ts +413 -0
  63. package/types/arsedizioni-ars-utils-ui.d.ts +183 -566
  64. package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +224 -0
  65. package/types/arsedizioni-ars-utils-ui.dialogs.d.ts +228 -0
  66. package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +47 -0
  67. package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +309 -0
  68. package/types/arsedizioni-ars-utils-ui.files.d.ts +271 -0
  69. package/types/arsedizioni-ars-utils-ui.filters.d.ts +163 -0
  70. package/types/arsedizioni-ars-utils-ui.help.d.ts +220 -0
  71. package/types/arsedizioni-ars-utils-ui.navigation.d.ts +650 -0
  72. package/types/arsedizioni-ars-utils-ui.notifications.d.ts +73 -0
  73. package/types/arsedizioni-ars-utils-ui.paginator.d.ts +23 -0
  74. package/types/arsedizioni-ars-utils-ui.shell.d.ts +345 -0
  75. package/types/arsedizioni-ars-utils-ui.tinymce.d.ts +63 -0
  76. package/types/arsedizioni-ars-utils.d.ts +4 -10
  77. package/ui.tinymce/README.md +12 -0
  78. package/ui.tinymce/langs/it.js +466 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arsedizioni-ars-utils-core.markdown.mjs","sources":["../../../projects/ars-utils/core.markdown/markdown.ts","../../../projects/ars-utils/core.markdown/format-markdown.pipe.ts","../../../projects/ars-utils/core.markdown/public_api.ts","../../../projects/ars-utils/core.markdown/arsedizioni-ars-utils-core.markdown.ts"],"sourcesContent":["/**\n * Zero-dependency Markdown to HTML converter.\n *\n * Design goals:\n * - Single line-based pass over blocks (no repeated full-string regex passes).\n * - Inline formatting never touches code spans / code blocks (stash & restore).\n * - No HTML entity escaping by default in normal text: the source passes as-is.\n * Exception: the content of code spans / code blocks is ALWAYS escaped, so\n * things like List<string> render correctly (the browser displays the\n * original characters; entities never reach the user or the clipboard).\n * Opt-in full escaping via { escapeHtml: true } for untrusted input.\n * - URL sanitization on links/images (javascript:, vbscript:, data: are dropped).\n * - Bounded result cache for repeated renders (Angular change detection friendly).\n *\n * Supported syntax: headings, paragraphs, hard/soft breaks, hr, blockquotes\n * (nested), fenced code blocks, inline code, bold/italic/strikethrough, links\n * (with title), images, autolinked bare URLs, ordered/unordered lists (nested,\n * task lists, ordered start offset), GFM tables with alignment, raw HTML\n * blocks (e.g. <table>...</table>) passed through verbatim when escapeHtml\n * is false: their newlines stay plain newlines, never converted to <br>.\n *\n * Known simplifications (documented, by design):\n * - A blank line terminates a list.\n * - Setext headings (=== / ---) are not supported, use # syntax.\n * - Reference-style links [text][ref] are not supported.\n */\n\nexport interface MarkdownOptions {\n /**\n * Escape raw HTML found in the source as entities (default: false).\n * When false (default) no &amp;/&lt;/&gt;/&quot; entities are ever produced:\n * the text is emitted as-is. Enable ONLY when rendering untrusted input,\n * since raw HTML in the source would otherwise reach the DOM (XSS).\n */\n escapeHtml?: boolean;\n /** Render single newlines inside paragraphs as <br> (default: true). */\n breaks?: boolean;\n}\n\ntype Opts = Required<MarkdownOptions>;\n\nexport class MarkdownUtils {\n\n // #region Cache\n\n private static readonly cache = new Map<string, string>();\n private static readonly CACHE_MAX = 200;\n\n /** Clears the internal result cache. */\n static clearCache(): void {\n this.cache.clear();\n }\n\n // #endregion\n\n // #region Public API\n\n /**\n * Convert markdown to HTML.\n * @param markdown : the markdown source\n * @param options : conversion options\n * @returns : the HTML string ('' when input is falsy)\n */\n static toHtml(markdown?: string, options?: MarkdownOptions): string {\n if (!markdown) return '';\n const opts: Opts = { escapeHtml: false, breaks: true, ...options };\n\n const key = `${opts.escapeHtml ? 1 : 0}${opts.breaks ? 1 : 0}|${markdown}`;\n const hit = this.cache.get(key);\n if (hit !== undefined) return hit;\n\n // Normalize line endings and fix glued sentence punctuation (\"dettaglio!Ecco\").\n // Only when the next char is uppercase (a new sentence), so URLs with query\n // strings (\"/page?id=1\") and code identifiers are left untouched.\n const source = markdown\n .replace(/\\r\\n?/g, '\\n')\n .replace(/([a-zà-ÿ][!?])([A-ZÀ-Þ])/g, '$1 $2');\n\n const html = this.parseBlocks(source.split('\\n'), opts).trim();\n\n if (this.cache.size >= this.CACHE_MAX) {\n this.cache.delete(this.cache.keys().next().value!); // FIFO eviction\n }\n this.cache.set(key, html);\n return html;\n }\n\n // #endregion\n\n // #region Block parser (single pass)\n\n /** Block-level HTML tags that start a raw HTML block (passthrough, no <p>/<br>). */\n private static readonly htmlBlockTags = new Set([\n 'address', 'article', 'aside', 'blockquote', 'caption', 'colgroup', 'col',\n 'dd', 'details', 'dialog', 'div', 'dl', 'dt', 'fieldset', 'figcaption',\n 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header',\n 'hr', 'iframe', 'li', 'main', 'nav', 'ol', 'p', 'pre', 'section', 'summary',\n 'table', 'tbody', 'td', 'tfoot', 'thead', 'th', 'tr', 'ul',\n ]);\n\n /** Void/self-contained tags: a single tag, no closing tag expected. */\n private static readonly htmlVoidTags = new Set(['hr', 'col', 'img', 'input']);\n\n /**\n * Precompiled: first block-level tag occurrence anywhere in a line.\n * Anchored on the '<' literal, so scanning is cheap; the lookahead\n * prevents partial matches ('<td' must not match inside '<tdx').\n */\n private static readonly htmlBlockScanRe = new RegExp(\n `<(\\\\/?)(${[...MarkdownUtils.htmlBlockTags].join('|')})(?=[\\\\s/>])`,\n 'gi'\n );\n\n /** Result of scanning a line for the start of a raw HTML block. */\n private static findHtmlBlockStart(\n line: string\n ): { index: number; tag: string; isClose: boolean; isComment: boolean } | undefined {\n // HTML comment candidate (skipping occurrences inside inline code spans)\n let comment = line.indexOf('<!--');\n while (comment !== -1 && this.insideCodeSpan(line, comment)) {\n comment = line.indexOf('<!--', comment + 4);\n }\n\n // Block tag candidate (same code-span guard)\n const re = this.htmlBlockScanRe;\n re.lastIndex = 0;\n let m: RegExpExecArray | null;\n let tagHit: { index: number; tag: string; isClose: boolean } | undefined;\n while ((m = re.exec(line)) !== null) {\n if (!this.insideCodeSpan(line, m.index)) {\n tagHit = { index: m.index, tag: m[2].toLowerCase(), isClose: m[1] === '/' };\n break;\n }\n }\n\n if (comment !== -1 && (!tagHit || comment < tagHit.index)) {\n return { index: comment, tag: '', isClose: false, isComment: true };\n }\n return tagHit ? { ...tagHit, isComment: false } : undefined;\n }\n\n /** True when `index` falls inside an inline code span (odd backtick count before it). */\n private static insideCodeSpan(line: string, index: number): boolean {\n let count = 0;\n for (let i = 0; i < index; i++) {\n if (line.charCodeAt(i) === 96 /* ` */) count++;\n }\n return (count & 1) === 1;\n }\n\n /**\n * indexOf-based depth scanner (no regex, no allocations): walks `text`\n * adjusting `depth` for <tag ...> / </tag> occurrences of the SAME tag.\n * Self-closing <tag ... /> forms do not alter depth.\n * @returns [newDepth, endIndex] where endIndex is the position right after\n * the '>' that balanced the element, or -1 when still open.\n */\n private static scanHtmlDepth(text: string, tag: string, depth: number): [number, number] {\n const lower = text.toLowerCase();\n const open = '<' + tag;\n const close = '</' + tag;\n let i = 0;\n while ((i = lower.indexOf('<', i)) !== -1) {\n if (lower.startsWith(close, i) && this.isTagBoundary(lower, i + close.length)) {\n depth--;\n const gt = lower.indexOf('>', i);\n const end = gt === -1 ? lower.length : gt + 1;\n if (depth <= 0) return [0, end];\n i = end;\n } else if (lower.startsWith(open, i) && this.isTagBoundary(lower, i + open.length)) {\n const gt = lower.indexOf('>', i);\n const selfClosing = gt !== -1 && lower.charCodeAt(gt - 1) === 47 /* / */;\n if (selfClosing) {\n if (depth === 0) return [0, gt + 1]; // standalone self-closed element\n } else {\n depth++;\n }\n i = gt === -1 ? lower.length : gt + 1;\n } else {\n i++;\n }\n }\n return [depth, -1];\n }\n\n /** A tag token must be followed by whitespace, '/', '>' or end of line. */\n private static isTagBoundary(s: string, idx: number): boolean {\n if (idx >= s.length) return true; // tag opening continues on the next line\n const c = s.charCodeAt(idx);\n return c === 62 /* > */ || c === 47 /* / */ || c === 32 /* space */ || c === 9 /* tab */;\n }\n\n /**\n * Re-injects the remainder of a partially consumed line so the main loop\n * processes it as markdown. Returns the index the loop should resume from.\n */\n private static pushBack(lines: string[], i: number, remainder: string): number {\n if (remainder.trim()) {\n lines[i] = remainder;\n return i - 1; // the loop's i++ re-processes the remainder\n }\n return i;\n }\n\n /**\n * Emits a raw HTML block starting at `hit.index` of lines[i], consuming\n * following lines until the element is balanced. Text after the block on\n * the closing line is pushed back for markdown processing.\n * @returns the index of the last consumed line\n */\n private static emitHtmlBlock(\n lines: string[],\n i: number,\n hit: { index: number; tag: string; isClose: boolean; isComment: boolean },\n out: string[]\n ): number {\n const line = lines[i];\n\n // HTML comment: raw until '-->'\n if (hit.isComment) {\n let end = line.indexOf('-->', hit.index);\n if (end !== -1) {\n out.push(line.slice(hit.index, end + 3));\n return this.pushBack(lines, i, line.slice(end + 3));\n }\n out.push(line.slice(hit.index));\n while (++i < lines.length) {\n end = lines[i].indexOf('-->');\n if (end !== -1) {\n out.push(lines[i].slice(0, end + 3));\n return this.pushBack(lines, i, lines[i].slice(end + 3));\n }\n out.push(lines[i]);\n }\n return lines.length - 1; // unterminated: consumed to EOF\n }\n\n // Stray closing tag or void tag: emit just the tag, resume after '>'\n if (hit.isClose || this.htmlVoidTags.has(hit.tag)) {\n const gt = line.indexOf('>', hit.index);\n const end = gt === -1 ? line.length : gt + 1;\n out.push(line.slice(hit.index, end));\n return this.pushBack(lines, i, line.slice(end));\n }\n\n // Opening block tag: raw until the element is balanced (depth === 0)\n let [depth, split] = this.scanHtmlDepth(line.slice(hit.index), hit.tag, 0);\n if (split !== -1) {\n out.push(line.slice(hit.index, hit.index + split));\n return this.pushBack(lines, i, line.slice(hit.index + split));\n }\n out.push(line.slice(hit.index));\n while (depth > 0 && ++i < lines.length) {\n [depth, split] = this.scanHtmlDepth(lines[i], hit.tag, depth);\n if (split !== -1) {\n out.push(lines[i].slice(0, split));\n return this.pushBack(lines, i, lines[i].slice(split));\n }\n out.push(lines[i]);\n }\n return Math.min(i, lines.length - 1);\n }\n\n private static parseBlocks(lines: string[], opts: Opts): string {\n const out: string[] = [];\n let paragraph: string[] = [];\n\n const flush = (): void => {\n if (paragraph.length > 0) {\n const sep = opts.breaks ? '<br>' : ' ';\n out.push(`<p>${paragraph.map(l => this.inline(l, opts)).join(sep)}</p>`);\n paragraph = [];\n }\n };\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // --- Fenced code block -------------------------------------------------\n const fence = trimmed.match(/^```([\\w+-]+)?\\s*$/);\n if (fence) {\n flush();\n const lang = fence[1] ? ` class=\"language-${fence[1]}\"` : '';\n const code: string[] = [];\n i++;\n while (i < lines.length && !/^```\\s*$/.test(lines[i].trim())) {\n code.push(lines[i]);\n i++;\n }\n out.push(`<pre><code${lang}>${this.escape(code.join('\\n'))}</code></pre>`);\n continue;\n }\n\n // --- Blank line --------------------------------------------------------\n if (!trimmed) {\n flush();\n continue;\n }\n\n // --- Raw HTML block passthrough (only with escaping disabled) ------------\n // A block-level HTML element found ANYWHERE in the line starts a raw\n // block: text before it joins the current paragraph, the element is\n // emitted as-is (plain newlines, no <p>, no <br>) until balanced, and\n // any text after the closing tag resumes markdown processing.\n if (!opts.escapeHtml && line.includes('<')) {\n const hit = this.findHtmlBlockStart(line);\n if (hit) {\n const before = line.slice(0, hit.index).trim();\n if (before) paragraph.push(before);\n flush();\n i = this.emitHtmlBlock(lines, i, hit, out);\n continue;\n }\n }\n\n // --- ATX heading -------------------------------------------------------\n const heading = trimmed.match(/^(#{1,6})\\s+(.+?)\\s*#*\\s*$/);\n if (heading) {\n flush();\n const level = heading[1].length;\n out.push(`<h${level}>${this.inline(heading[2], opts)}</h${level}>`);\n continue;\n }\n\n // --- Horizontal rule ---------------------------------------------------\n if (/^(?:-{3,}|\\*{3,}|_{3,})$/.test(trimmed)) {\n flush();\n out.push('<hr>');\n continue;\n }\n\n // --- Blockquote (consecutive lines, one level stripped, recursive) ------\n if (/^>\\s?/.test(trimmed)) {\n flush();\n const quoted: string[] = [];\n while (i < lines.length && /^>\\s?/.test(lines[i].trim())) {\n quoted.push(lines[i].trim().replace(/^>\\s?/, ''));\n i++;\n }\n i--;\n out.push(`<blockquote>${this.parseBlocks(quoted, opts)}</blockquote>`);\n continue;\n }\n\n // --- Table (header row + separator row) ---------------------------------\n if (\n trimmed.includes('|') &&\n i + 1 < lines.length &&\n lines[i + 1].includes('-') &&\n /^\\|?[\\s:\\-|]+\\|?$/.test(lines[i + 1].trim())\n ) {\n flush();\n const aligns = this.tableAligns(lines[i + 1].trim());\n const head = this.tableRow(trimmed, 'th', aligns, opts);\n const body: string[] = [];\n i += 2;\n while (i < lines.length && lines[i].trim().includes('|')) {\n body.push(this.tableRow(lines[i].trim(), 'td', aligns, opts));\n i++;\n }\n i--;\n out.push(\n `<table>\\n<thead>\\n${head}\\n</thead>` +\n (body.length > 0 ? `\\n<tbody>\\n${body.join('\\n')}\\n</tbody>` : '') +\n `\\n</table>`\n );\n continue;\n }\n\n // --- List ---------------------------------------------------------------\n if (MarkdownUtils.listItemRe.test(line)) {\n flush();\n const [html, last] = this.parseList(lines, i, opts);\n out.push(html);\n i = last;\n continue;\n }\n\n // --- Plain text: accumulate into current paragraph ----------------------\n paragraph.push(trimmed);\n }\n flush();\n return out.join('\\n');\n }\n\n // #endregion\n\n // #region Lists\n\n /** Matches \"- item\", \"* item\", \"+ item\", \"1. item\", \"1) item\" with leading indent. */\n private static readonly listItemRe = /^(\\s*)([-*+]|\\d+[.)])\\s+(.*)$/;\n\n /**\n * Gathers the contiguous list block starting at `start`, builds it (with\n * nesting) and returns [html, indexOfLastConsumedLine].\n */\n private static parseList(lines: string[], start: number, opts: Opts): [string, number] {\n const block: string[] = [];\n let i = start;\n while (i < lines.length) {\n const l = lines[i];\n if (!l.trim()) break; // blank line ends the list\n if (this.listItemRe.test(l) || /^\\s{2,}\\S/.test(l)) {\n block.push(l);\n i++;\n } else break;\n }\n return [this.buildList(block, opts), i - 1];\n }\n\n private static buildList(block: string[], opts: Opts): string {\n const first = block[0].match(this.listItemRe)!;\n const baseIndent = first[1].length;\n const ordered = /^\\d/.test(first[2]);\n const startNum = ordered ? parseInt(first[2], 10) : 1;\n\n interface Item { text: string; childLines: string[] }\n const items: Item[] = [];\n\n for (const l of block) {\n const m = l.match(this.listItemRe);\n if (m && m[1].length <= baseIndent) {\n items.push({ text: m[3], childLines: [] });\n } else if (items.length > 0) {\n // Continuation or nested content: strip one nesting level of indent\n items[items.length - 1].childLines.push(\n l.length > baseIndent + 2 ? l.slice(baseIndent + 2) : l.trim()\n );\n }\n }\n\n const lis = items.map(item => {\n let inner: string;\n // GFM task list: - [ ] / - [x]\n const task = item.text.match(/^\\[([ xX])\\]\\s+(.*)$/);\n if (task) {\n const checked = task[1] !== ' ' ? ' checked' : '';\n inner = `<input type=\"checkbox\" disabled${checked}> ${this.inline(task[2], opts)}`;\n } else {\n inner = this.inline(item.text, opts);\n }\n if (item.childLines.length > 0) {\n inner += '\\n' + this.parseBlocks(item.childLines, opts);\n }\n return `<li>${inner}</li>`;\n });\n\n const tag = ordered ? 'ol' : 'ul';\n const startAttr = ordered && startNum > 1 ? ` start=\"${startNum}\"` : '';\n return `<${tag}${startAttr}>\\n${lis.join('\\n')}\\n</${tag}>`;\n }\n\n // #endregion\n\n // #region Tables\n\n private static tableAligns(separator: string): (string | undefined)[] {\n return separator\n .replace(/^\\||\\|$/g, '')\n .split('|')\n .map(cell => {\n const t = cell.trim();\n if (t.startsWith(':') && t.endsWith(':')) return 'center';\n if (t.endsWith(':')) return 'right';\n if (t.startsWith(':')) return 'left';\n return undefined;\n });\n }\n\n private static tableRow(\n row: string,\n tag: 'th' | 'td',\n aligns: (string | undefined)[],\n opts: Opts\n ): string {\n const cells = row.replace(/^\\||\\|$/g, '').split('|').map(c => c.trim());\n const cellsHtml = cells\n .map((cell, j) => {\n const align = aligns[j] ? ` align=\"${aligns[j]}\"` : '';\n return `<${tag}${align}>${this.inline(cell, opts)}</${tag}>`;\n })\n .join('');\n return `<tr>${cellsHtml}</tr>`;\n }\n\n // #endregion\n\n // #region Inline formatting\n\n /**\n * Applies inline markdown to a single text segment.\n * Generated HTML (code, links, images, autolinks) is stashed behind \\u0000\n * placeholders so later regex passes can never corrupt it.\n */\n private static inline(text: string, opts: Opts): string {\n const store: string[] = [];\n const stash = (html: string): string => `\\u0000${store.push(html) - 1}\\u0000`;\n\n // 1. Inline code: stash first so later passes can't touch it.\n // Content is ALWAYS escaped so <, >, & inside code survive in the DOM\n // (the browser renders entities back to the original characters).\n let s = text.replace(/`([^`]+)`/g, (_m, code: string) =>\n stash(`<code>${this.escape(code)}</code>`)\n );\n\n // 2. Escape raw HTML as entities (opt-in only)\n if (opts.escapeHtml) s = this.escape(s);\n\n // 3. Images: ![alt](url \"title\")\n s = s.replace(\n /!\\[([^\\]]*)\\]\\(\\s*([^)\\s]+)(?:\\s+(?:\"|&quot;)(.+?)(?:\"|&quot;))?\\s*\\)/g,\n (_m, alt: string, src: string, title?: string) => {\n const url = this.safeUrl(src);\n if (!url) return alt;\n const t = title ? ` title=\"${this.escapeAttr(title)}\"` : '';\n return stash(`<img src=\"${url}\" alt=\"${this.escapeAttr(alt)}\"${t} loading=\"lazy\">`);\n }\n );\n\n // 4. Links: [text](url \"title\")\n s = s.replace(\n /\\[([^\\]]+)\\]\\(\\s*([^)\\s]+)(?:\\s+(?:\"|&quot;)(.+?)(?:\"|&quot;))?\\s*\\)/g,\n (_m, txt: string, href: string, title?: string) => {\n const url = this.safeUrl(href);\n if (!url) return txt;\n const t = title ? ` title=\"${this.escapeAttr(title)}\"` : '';\n return stash(`<a href=\"${url}\"${t} target=\"_blank\" rel=\"noopener noreferrer\">${txt}</a>`);\n }\n );\n\n // 5. Autolink remaining bare URLs (markdown links are already stashed)\n s = s.replace(/https?:\\/\\/[^\\s<>\"']+/g, url =>\n stash(`<a href=\"${url}\" target=\"_blank\" rel=\"noopener noreferrer\">${url}</a>`)\n );\n\n // 6. Bold / italic / strikethrough.\n // Delimiters must hug the text; underscore emphasis only at word\n // boundaries so identifiers like snake_case are left untouched.\n s = s.replace(/\\*\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*\\*/g, '<strong><em>$1</em></strong>');\n s = s.replace(/(?<![\\w*])___(?=\\S)([\\s\\S]*?\\S)___(?![\\w*])/g, '<strong><em>$1</em></strong>');\n s = s.replace(/\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*/g, '<strong>$1</strong>');\n s = s.replace(/(?<![\\w*])__(?=\\S)([\\s\\S]*?\\S)__(?![\\w*])/g, '<strong>$1</strong>');\n s = s.replace(/\\*(?=\\S)([^*\\n]*?\\S)\\*/g, '<em>$1</em>');\n s = s.replace(/(?<![\\w_])_(?=\\S)([^_\\n]*?\\S)_(?![\\w_])/g, '<em>$1</em>');\n s = s.replace(/~~(?=\\S)([\\s\\S]*?\\S)~~/g, '<del>$1</del>');\n\n // 7. Restore stashed HTML\n return s.replace(/\\u0000(\\d+)\\u0000/g, (_m, idx: string) => store[Number(idx)] ?? '');\n }\n\n // #endregion\n\n // #region Security helpers\n\n /** Escapes quotes for safe interpolation inside a double-quoted HTML attribute. */\n private static escapeAttr(s: string): string {\n return s.replace(/&(?!(?:amp|lt|gt|quot|#\\d+);)/g, '&amp;').replace(/\"/g, '&quot;');\n }\n\n /** Escapes &, <, > and \" for safe HTML interpolation. */\n private static escape(s: string): string {\n return s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n }\n\n /**\n * Returns a sanitized URL or undefined when the scheme is dangerous.\n * Blocks javascript:, vbscript: and data: (also when obfuscated with\n * whitespace/control characters, e.g. \"java\\tscript:\").\n */\n private static safeUrl(url: string): string | undefined {\n const compact = url.replace(/[\\s\\u0000-\\u001f]/g, '');\n if (/^(javascript|vbscript|data):/i.test(compact)) return undefined;\n return url.replace(/\"/g, '%22');\n }\n\n // #endregion\n\n // #region Clipboard\n\n /**\n * Copies markdown content to the clipboard in two flavors:\n * - text/html : the rendered HTML (rich paste into Word, Outlook, Gmail...)\n * - text/plain : the original markdown source (paste into editors, IDEs...)\n * @param markdown : the markdown source\n * @param options : conversion options for the HTML flavor\n * @returns : true on success\n */\n static async copyToClipboard(markdown?: string, options?: MarkdownOptions): Promise<boolean> {\n if (!markdown || typeof navigator === 'undefined' || !navigator.clipboard) return false;\n try {\n if (typeof ClipboardItem !== 'undefined') {\n const html = this.toHtml(markdown, options);\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([html], { type: 'text/html' }),\n 'text/plain': new Blob([markdown], { type: 'text/plain' }),\n }),\n ]);\n } else {\n // Older engines: plain text only\n await navigator.clipboard.writeText(markdown);\n }\n return true;\n } catch {\n // Clipboard API requires a secure context and user activation\n return false;\n }\n }\n\n /**\n * Copies plain text (e.g. the content of a single code block) to the clipboard.\n * @param text : the text to copy\n * @returns : true on success\n */\n static async copyText(text?: string): Promise<boolean> {\n if (!text || typeof navigator === 'undefined' || !navigator.clipboard) return false;\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Extracts the visible plain text from a rendered element\n * (what the user sees, entities already decoded by the browser).\n * @param element : the element hosting the rendered markdown\n * @returns : the plain text\n */\n static elementToText(element: HTMLElement): string {\n return element.innerText ?? element.textContent ?? '';\n }\n\n // #endregion\n}","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { MarkdownUtils } from './markdown';\n\n/**\n * Pipe that converts a Markdown string to sanitized HTML using `MarkdownUtils.toHtml`.\n *\n * Usage: `{{ text | formatMarkdown }}`\n */\n@Pipe({\n name: 'formatMarkdown',\n standalone: true\n})\nexport class FormatMarkdownPipe implements PipeTransform {\n private readonly sanitizer = inject(DomSanitizer);\n\n /**\n * Transforms a Markdown string into sanitized HTML.\n * @param value - The Markdown input to convert. Treated as an empty string when `undefined`.\n * @returns A `SafeHtml` value that can be rendered with `[innerHTML]`.\n */\n transform(value?: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(\n MarkdownUtils.toHtml(value ?? '', { escapeHtml: false }));\n }\n}\n","/*\n * Public API Surface of @arsedizioni/ars-utils/core.markdown\n */\nexport * from './markdown';\nexport * from './format-markdown.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MAgBU,aAAa,CAAA;;AAIA,IAAA,SAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;aAClC,IAAA,CAAA,SAAS,GAAG,GAAG,CAAC;;AAGxC,IAAA,OAAO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;;;AAMA;;;;;AAKG;AACH,IAAA,OAAO,MAAM,CAAC,QAAiB,EAAE,OAAyB,EAAA;AACxD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;AACxB,QAAA,MAAM,IAAI,GAAS,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE;AAElE,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,QAAQ,EAAE;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS;AAAE,YAAA,OAAO,GAAG;;;;QAKjC,MAAM,MAAM,GAAG;AACZ,aAAA,OAAO,CAAC,QAAQ,EAAE,IAAI;AACtB,aAAA,OAAO,CAAC,2BAA2B,EAAE,OAAO,CAAC;AAEhD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;QAE9D,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;QACrD;QACA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;AACzB,QAAA,OAAO,IAAI;IACb;;;;aAOwB,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,CAAC;QAC9C,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK;AACzE,QAAA,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY;AACtE,QAAA,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;AACxE,QAAA,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;AAC3E,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAC3D,KAAA,CAAC,CAAC;;AAGqB,IAAA,SAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAE9E;;;;AAIG;aACqB,IAAA,CAAA,eAAe,GAAG,IAAI,MAAM,CAClD,WAAW,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EACnE,IAAI,CACL,CAAC;;IAGM,OAAO,kBAAkB,CAC/B,IAAY,EAAA;;QAGZ,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAClC,QAAA,OAAO,OAAO,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;YAC3D,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC;QAC7C;;AAGA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;AAC/B,QAAA,EAAE,CAAC,SAAS,GAAG,CAAC;AAChB,QAAA,IAAI,CAAyB;AAC7B,QAAA,IAAI,MAAoE;AACxE,QAAA,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;gBACvC,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBAC3E;YACF;QACF;AAEA,QAAA,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE;AACzD,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;QACrE;AACA,QAAA,OAAO,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,SAAS;IAC7D;;AAGQ,IAAA,OAAO,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;QACvD,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE;AAAU,gBAAA,KAAK,EAAE;QAChD;AACA,QAAA,OAAO,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC;IAC1B;AAEA;;;;;;AAMG;AACK,IAAA,OAAO,aAAa,CAAC,IAAY,EAAE,GAAW,EAAE,KAAa,EAAA;AACnE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG;QACxB,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE;YACzC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC7E,gBAAA,KAAK,EAAE;gBACP,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAChC,gBAAA,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC;gBAC7C,IAAI,KAAK,IAAI,CAAC;AAAE,oBAAA,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC/B,CAAC,GAAG,GAAG;YACT;iBAAO,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;gBAClF,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAChC,gBAAA,MAAM,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;gBAChE,IAAI,WAAW,EAAE;oBACf,IAAI,KAAK,KAAK,CAAC;wBAAE,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBACtC;qBAAO;AACL,oBAAA,KAAK,EAAE;gBACT;AACA,gBAAA,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC;YACvC;iBAAO;AACL,gBAAA,CAAC,EAAE;YACL;QACF;AACA,QAAA,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpB;;AAGQ,IAAA,OAAO,aAAa,CAAC,CAAS,EAAE,GAAW,EAAA;AACjD,QAAA,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAC3B,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC;IAChF;AAEA;;;AAGG;AACK,IAAA,OAAO,QAAQ,CAAC,KAAe,EAAE,CAAS,EAAE,SAAiB,EAAA;AACnE,QAAA,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE;AACpB,YAAA,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;AACpB,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC;QACf;AACA,QAAA,OAAO,CAAC;IACV;AAEA;;;;;AAKG;IACK,OAAO,aAAa,CAC1B,KAAe,EACf,CAAS,EACT,GAAyE,EACzE,GAAa,EAAA;AAEb,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;;AAGrB,QAAA,IAAI,GAAG,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AACd,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACxC,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACrD;AACA,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/B,YAAA,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;gBACzB,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7B,gBAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AACd,oBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;oBACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACzD;gBACA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB;AACA,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B;;AAGA,QAAA,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACjD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;AACvC,YAAA,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC;AAC5C,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpC,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD;;QAGA,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1E,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AAClD,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAC/D;AACA,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;YACtC,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AAC7D,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAClC,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvD;YACA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB;AACA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC;AAEQ,IAAA,OAAO,WAAW,CAAC,KAAe,EAAE,IAAU,EAAA;QACpD,MAAM,GAAG,GAAa,EAAE;QACxB,IAAI,SAAS,GAAa,EAAE;QAE5B,MAAM,KAAK,GAAG,MAAW;AACvB,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG;AACtC,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAA,GAAA,EAAM,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,IAAA,CAAM,CAAC;gBACxE,SAAS,GAAG,EAAE;YAChB;AACF,QAAA,CAAC;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;;YAG3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACjD,IAAI,KAAK,EAAE;AACT,gBAAA,KAAK,EAAE;AACP,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,oBAAoB,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE;gBAC5D,MAAM,IAAI,GAAa,EAAE;AACzB,gBAAA,CAAC,EAAE;gBACH,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;oBAC5D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,oBAAA,CAAC,EAAE;gBACL;AACA,gBAAA,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA,aAAA,CAAe,CAAC;gBAC1E;YACF;;YAGA,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,KAAK,EAAE;gBACP;YACF;;;;;;AAOA,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBACzC,IAAI,GAAG,EAAE;AACP,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AAC9C,oBAAA,IAAI,MAAM;AAAE,wBAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,oBAAA,KAAK,EAAE;AACP,oBAAA,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;oBAC1C;gBACF;YACF;;YAGA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC;YAC3D,IAAI,OAAO,EAAE;AACX,gBAAA,KAAK,EAAE;gBACP,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;gBAC/B,GAAG,CAAC,IAAI,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,CAAG,CAAC;gBACnE;YACF;;AAGA,YAAA,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC5C,gBAAA,KAAK,EAAE;AACP,gBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBAChB;YACF;;AAGA,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACzB,gBAAA,KAAK,EAAE;gBACP,MAAM,MAAM,GAAa,EAAE;AAC3B,gBAAA,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AACxD,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjD,oBAAA,CAAC,EAAE;gBACL;AACA,gBAAA,CAAC,EAAE;AACH,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA,aAAA,CAAe,CAAC;gBACtE;YACF;;AAGA,YAAA,IACE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrB,gBAAA,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM;gBACpB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC1B,gBAAA,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAC7C;AACA,gBAAA,KAAK,EAAE;AACP,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;gBACvD,MAAM,IAAI,GAAa,EAAE;gBACzB,CAAC,IAAI,CAAC;AACN,gBAAA,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC7D,oBAAA,CAAC,EAAE;gBACL;AACA,gBAAA,CAAC,EAAE;AACH,gBAAA,GAAG,CAAC,IAAI,CACN,CAAA,kBAAA,EAAqB,IAAI,CAAA,UAAA,CAAY;qBACpC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,UAAA,CAAY,GAAG,EAAE,CAAC;AAClE,oBAAA,CAAA,UAAA,CAAY,CACb;gBACD;YACF;;YAGA,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvC,gBAAA,KAAK,EAAE;AACP,gBAAA,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;AACnD,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBACd,CAAC,GAAG,IAAI;gBACR;YACF;;AAGA,YAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QACzB;AACA,QAAA,KAAK,EAAE;AACP,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACvB;;;;aAOwB,IAAA,CAAA,UAAU,GAAG,+BAA+B,CAAC;AAErE;;;AAGG;AACK,IAAA,OAAO,SAAS,CAAC,KAAe,EAAE,KAAa,EAAE,IAAU,EAAA;QACjE,MAAM,KAAK,GAAa,EAAE;QAC1B,IAAI,CAAC,GAAG,KAAK;AACb,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;AACvB,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;AAAE,gBAAA,MAAM;AACrB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAClD,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,gBAAA,CAAC,EAAE;YACL;;gBAAO;QACT;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7C;AAEQ,IAAA,OAAO,SAAS,CAAC,KAAe,EAAE,IAAU,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAE;QAC9C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;QAGrD,MAAM,KAAK,GAAW,EAAE;AAExB,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,UAAU,EAAE;AAClC,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;YAC5C;AAAO,iBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE3B,gBAAA,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CACrC,CAAC,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAC/D;YACH;QACF;QAEA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;AAC3B,YAAA,IAAI,KAAa;;YAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;YACpD,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,UAAU,GAAG,EAAE;AACjD,gBAAA,KAAK,GAAG,CAAA,+BAAA,EAAkC,OAAO,CAAA,EAAA,EAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;YACpF;iBAAO;gBACL,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;YACtC;YACA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,gBAAA,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACzD;YACA,OAAO,CAAA,IAAA,EAAO,KAAK,CAAA,KAAA,CAAO;AAC5B,QAAA,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI;AACjC,QAAA,MAAM,SAAS,GAAG,OAAO,IAAI,QAAQ,GAAG,CAAC,GAAG,WAAW,QAAQ,CAAA,CAAA,CAAG,GAAG,EAAE;AACvE,QAAA,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,EAAG,SAAS,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,IAAA,EAAO,GAAG,GAAG;IAC7D;;;IAMQ,OAAO,WAAW,CAAC,SAAiB,EAAA;AAC1C,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,UAAU,EAAE,EAAE;aACtB,KAAK,CAAC,GAAG;aACT,GAAG,CAAC,IAAI,IAAG;AACV,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,YAAA,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,QAAQ;AACzD,YAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,OAAO;AACnC,YAAA,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,MAAM;AACpC,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC,CAAC;IACN;IAEQ,OAAO,QAAQ,CACrB,GAAW,EACX,GAAgB,EAChB,MAA8B,EAC9B,IAAU,EAAA;QAEV,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,MAAM,SAAS,GAAG;AACf,aAAA,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AACf,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE;AACtD,YAAA,OAAO,IAAI,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA,EAAA,EAAK,GAAG,GAAG;AAC9D,QAAA,CAAC;aACA,IAAI,CAAC,EAAE,CAAC;QACX,OAAO,CAAA,IAAA,EAAO,SAAS,CAAA,KAAA,CAAO;IAChC;;;AAMA;;;;AAIG;AACK,IAAA,OAAO,MAAM,CAAC,IAAY,EAAE,IAAU,EAAA;QAC5C,MAAM,KAAK,GAAa,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,CAAC,IAAY,KAAa,CAAA,MAAA,EAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ;;;;QAK7E,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,IAAY,KAClD,KAAK,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,OAAA,CAAS,CAAC,CAC3C;;QAGD,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;AAGvC,QAAA,CAAC,GAAG,CAAC,CAAC,OAAO,CACX,wEAAwE,EACxE,CAAC,EAAE,EAAE,GAAW,EAAE,GAAW,EAAE,KAAc,KAAI;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,GAAG;AACpB,YAAA,MAAM,CAAC,GAAG,KAAK,GAAG,WAAW,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE;AAC3D,YAAA,OAAO,KAAK,CAAC,CAAA,UAAA,EAAa,GAAG,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,gBAAA,CAAkB,CAAC;AACrF,QAAA,CAAC,CACF;;AAGD,QAAA,CAAC,GAAG,CAAC,CAAC,OAAO,CACX,uEAAuE,EACvE,CAAC,EAAE,EAAE,GAAW,EAAE,IAAY,EAAE,KAAc,KAAI;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,GAAG;AACpB,YAAA,MAAM,CAAC,GAAG,KAAK,GAAG,WAAW,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE;YAC3D,OAAO,KAAK,CAAC,CAAA,SAAA,EAAY,GAAG,CAAA,CAAA,EAAI,CAAC,CAAA,2CAAA,EAA8C,GAAG,CAAA,IAAA,CAAM,CAAC;AAC3F,QAAA,CAAC,CACF;;QAGD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,IACzC,KAAK,CAAC,YAAY,GAAG,CAAA,4CAAA,EAA+C,GAAG,CAAA,IAAA,CAAM,CAAC,CAC/E;;;;QAKD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,iCAAiC,EAAE,8BAA8B,CAAC;QAChF,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,8CAA8C,EAAE,8BAA8B,CAAC;QAC7F,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,qBAAqB,CAAC;QACnE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,4CAA4C,EAAE,qBAAqB,CAAC;QAClF,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,aAAa,CAAC;QACvD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,0CAA0C,EAAE,aAAa,CAAC;QACxE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,eAAe,CAAC;;QAGzD,OAAO,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,GAAW,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvF;;;;IAOQ,OAAO,UAAU,CAAC,CAAS,EAAA;AACjC,QAAA,OAAO,CAAC,CAAC,OAAO,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IACrF;;IAGQ,OAAO,MAAM,CAAC,CAAS,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,CAAC;IAC5B;AAEA;;;;AAIG;IACK,OAAO,OAAO,CAAC,GAAW,EAAA;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;AACrD,QAAA,IAAI,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,SAAS;QACnE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;IACjC;;;AAMA;;;;;;;AAOG;AACH,IAAA,aAAa,eAAe,CAAC,QAAiB,EAAE,OAAyB,EAAA;QACvE,IAAI,CAAC,QAAQ,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;AACvF,QAAA,IAAI;AACF,YAAA,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE;gBACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC3C,gBAAA,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;AAC9B,oBAAA,IAAI,aAAa,CAAC;AAChB,wBAAA,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACpD,wBAAA,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;qBAC3D,CAAC;AACH,iBAAA,CAAC;YACJ;iBAAO;;gBAEL,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC/C;AACA,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;;AAEN,YAAA,OAAO,KAAK;QACd;IACF;AAEA;;;;AAIG;AACH,IAAA,aAAa,QAAQ,CAAC,IAAa,EAAA;QACjC,IAAI,CAAC,IAAI,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;AACnF,QAAA,IAAI;YACF,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;AACzC,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEA;;;;;AAKG;IACH,OAAO,aAAa,CAAC,OAAoB,EAAA;QACvC,OAAO,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE;IACvD;;;ACznBF;;;;AAIG;MAKU,kBAAkB,CAAA;AAJ/B,IAAA,WAAA,GAAA;AAKmB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAWlD,IAAA;AATC;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAc,EAAA;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAC3C,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D;8GAXW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACZD;;AAEG;;ACFH;;AAEG;;;;"}