{
  "version": 3,
  "sources": ["../src/dimensionToSVG.ts"],
  "sourcesContent": ["import { Box2 } from 'vecks'\n\nimport colors from './util/colors'\nimport escapeXmlText from './util/escapeXmlText'\nimport round10 from './util/round10'\n\nimport type { DimensionEntity, ToSVGOptions } from './types'\nimport type { DimStyleTable } from './types/dxf'\nimport type { BoundsAndElement } from './types/svg'\n\nconst DEFAULT_DIMENSION_DECIMALS = 2\n\nexport interface DimensionViewport {\n  width: number\n  height: number\n}\n\n// AutoScale is meant to improve readability of dimension graphics.\n// Scale is derived from the drawing viewport (final SVG viewBox size).\n// No min/max clamp by design.\nconst AUTOSCALE_VIEWPORT_REFERENCE = 40\n\nconst computeViewportAutoScaleFactor = (\n  viewport: DimensionViewport,\n  options: ToSVGOptions | undefined,\n): number => {\n  const viewportMin = Math.min(Math.abs(viewport.width), Math.abs(viewport.height))\n  if (!Number.isFinite(viewportMin) || viewportMin <= 0) return 1\n\n  const reference = options?.dimension?.autoScaleViewportReference\n  const safeReference = Number.isFinite(reference) && (reference ?? 0) > 0\n    ? (reference as number)\n    : AUTOSCALE_VIEWPORT_REFERENCE\n\n  return viewportMin / safeReference\n}\n\nconst getViewportMin = (viewport: DimensionViewport): number => {\n  const viewportMin = Math.min(Math.abs(viewport.width), Math.abs(viewport.height))\n  return Number.isFinite(viewportMin) ? viewportMin : Number.NaN\n}\n\nconst getViewportPercentageSize = (\n  viewport: DimensionViewport,\n  percent: number | undefined,\n): number | undefined => {\n  if (!Number.isFinite(percent) || (percent ?? 0) <= 0) return undefined\n  const viewportMin = getViewportMin(viewport)\n  if (!Number.isFinite(viewportMin) || viewportMin <= 0) return undefined\n  return viewportMin * ((percent as number) / 100)\n}\n\nexport const getDimensionGeometryBBox = (entity: DimensionEntity): Box2 => {\n  const bbox = new Box2()\n\n  const points = [\n    entity.start,\n    entity.angleVertex,\n    entity.arcPoint,\n    entity.textMidpoint,\n    entity.measureStart,\n    entity.measureEnd,\n  ]\n\n  for (const p of points) {\n    if (!p) continue\n    const x = p.x\n    const y = p.y\n    if (!Number.isFinite(x) || !Number.isFinite(y)) continue\n    bbox.expandByPoint({ x, y })\n  }\n\n  return bbox\n}\n\nconst getScaledDimensionSizes = (\n  dimStyle: DimStyleTable | undefined,\n  options: ToSVGOptions | undefined,\n  viewport: DimensionViewport | undefined,\n): {\n  arrowSize: number\n  textHeight: number\n  extLineOffset: number\n  extLineExtension: number\n} => {\n  const autoScale = options?.dimension?.autoScale === true\n\n  const baseArrowSize = dimStyle?.dimAsz ?? 2.5\n  const baseTextHeight = dimStyle?.dimTxt ?? 2.5\n  const baseExtLineOffset = dimStyle?.dimExo ?? 0.625\n  const baseExtLineExtension = dimStyle?.dimExe ?? 1.25\n\n  if (!autoScale || !viewport) {\n    return {\n      arrowSize: baseArrowSize,\n      textHeight: baseTextHeight,\n      extLineOffset: baseExtLineOffset,\n      extLineExtension: baseExtLineExtension,\n    }\n  }\n\n  const scale = computeViewportAutoScaleFactor(viewport, options)\n\n  const perc = options?.dimension?.autoScaleViewportPercentages\n  const arrowFromPct = getViewportPercentageSize(viewport, perc?.arrowSize)\n  const textFromPct = getViewportPercentageSize(viewport, perc?.textHeight)\n  const offsetFromPct = getViewportPercentageSize(viewport, perc?.extLineOffset)\n  const extensionFromPct = getViewportPercentageSize(viewport, perc?.extLineExtension)\n\n  return {\n    arrowSize: arrowFromPct ?? (baseArrowSize * scale),\n    textHeight: textFromPct ?? (baseTextHeight * scale),\n    extLineOffset: offsetFromPct ?? (baseExtLineOffset * scale),\n    extLineExtension: extensionFromPct ?? (baseExtLineExtension * scale),\n  }\n}\n\nconst formatDimensionValue = (\n  value: number,\n  decimals: number = DEFAULT_DIMENSION_DECIMALS,\n): string => {\n  if (!Number.isFinite(value)) return ''\n  const rounded = round10(value, -decimals)\n  return rounded.toFixed(decimals)\n}\n\nconst computeRadiusFallback = (entity: DimensionEntity): number => {\n  const cx = entity.start?.x ?? 0\n  const cy = entity.start?.y ?? 0\n  const x1 = entity.measureStart?.x ?? 0\n  const y1 = entity.measureStart?.y ?? 0\n  const x2 = entity.measureEnd?.x ?? 0\n  const y2 = entity.measureEnd?.y ?? 0\n\n  const r1 = Math.hypot(x1 - cx, y1 - cy)\n  const r2 = Math.hypot(x2 - cx, y2 - cy)\n  const chord = Math.hypot(x2 - x1, y2 - y1)\n  return Math.max(r1, r2, chord)\n}\n\nconst computeLinearDistance = (\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n): number => Math.hypot(x2 - x1, y2 - y1)\n\nconst computeAngularDegreesMinimal = (\n  cx: number,\n  cy: number,\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n): number => {\n  const a1 = Math.atan2(y1 - cy, x1 - cx)\n  const a2 = Math.atan2(y2 - cy, x2 - cx)\n  let delta = Math.abs(a2 - a1)\n  while (delta > Math.PI * 2) delta -= Math.PI * 2\n  if (delta > Math.PI) delta = Math.PI * 2 - delta\n  return (delta * 180) / Math.PI\n}\n\nconst computeAngularDegreesCCW = (\n  cx: number,\n  cy: number,\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n): number => {\n  const a1 = Math.atan2(y1 - cy, x1 - cx)\n  const a2 = Math.atan2(y2 - cy, x2 - cx)\n  let delta = a2 - a1\n  while (delta < 0) delta += Math.PI * 2\n  while (delta >= Math.PI * 2) delta -= Math.PI * 2\n  return (delta * 180) / Math.PI\n}\n\nconst computeDimensionMeasurement = (entity: DimensionEntity): string => {\n  const x1 = entity.measureStart?.x ?? 0\n  const y1 = entity.measureStart?.y ?? 0\n  const x2 = entity.measureEnd?.x ?? 0\n  const y2 = entity.measureEnd?.y ?? 0\n\n  switch (entity.dimensionType) {\n    case 0:\n    case 1:\n    case 6: {\n      const dist = computeLinearDistance(x1, y1, x2, y2)\n      return formatDimensionValue(dist)\n    }\n    case 3: {\n      const dist = computeLinearDistance(x1, y1, x2, y2)\n      if (dist > 0) return formatDimensionValue(dist)\n      const radius = computeRadiusFallback(entity)\n      return formatDimensionValue(radius * 2)\n    }\n    case 4: {\n      const dist = computeLinearDistance(x1, y1, x2, y2)\n      if (dist > 0) return formatDimensionValue(dist)\n      const radius = computeRadiusFallback(entity)\n      return formatDimensionValue(radius)\n    }\n    case 2: {\n      const cx = entity.start?.x ?? 0\n      const cy = entity.start?.y ?? 0\n      const degrees = computeAngularDegreesMinimal(cx, cy, x1, y1, x2, y2)\n      const formatted = formatDimensionValue(degrees)\n      return formatted ? `${formatted}\u00B0` : ''\n    }\n    case 5: {\n      const cx = entity.angleVertex?.x ?? 0\n      const cy = entity.angleVertex?.y ?? 0\n      const degrees = computeAngularDegreesCCW(cx, cy, x1, y1, x2, y2)\n      const formatted = formatDimensionValue(degrees)\n      return formatted ? `${formatted}\u00B0` : ''\n    }\n    default:\n      return ''\n  }\n}\n\nconst resolveDimensionText = (entity: DimensionEntity): string => {\n  const raw = typeof entity.text === 'string' ? entity.text : ''\n  const trimmed = raw.trim()\n  const measured = computeDimensionMeasurement(entity)\n\n  if (!trimmed) return measured\n  if (trimmed.includes('<>')) {\n    return trimmed.split('<>').join(measured)\n  }\n  return trimmed\n}\n\nconst expandBBoxForMarker = (bbox: Box2, x: number, y: number, size: number) => {\n  bbox.expandByPoint({ x: x - size, y: y - size })\n  bbox.expandByPoint({ x: x + size, y: y + size })\n}\n\nconst expandBBoxForText = (\n  bbox: Box2,\n  x: number,\n  y: number,\n  height: number,\n  content: string,\n) => {\n  const textWidth = content.length * height * 0.6\n  // text-anchor=\"middle\" is used everywhere in DIMENSION rendering\n  bbox.expandByPoint({ x: x - textWidth / 2, y: y - height })\n  bbox.expandByPoint({ x: x + textWidth / 2, y: y + height })\n}\n\n/**\n * Convert DXF color number to SVG color string\n */\nfunction colorNumberToSVG(colorNumber?: number): string {\n  if (colorNumber === undefined || colorNumber < 0) {\n    return 'currentColor'\n  }\n\n  // DXF color 0 is ByBlock, 256 is ByLayer, 7 is white/black (depends on bg)\n  if (colorNumber === 0 || colorNumber === 256) {\n    return 'currentColor'\n  }\n\n  // Get RGB from color table\n  const rgb = colors[colorNumber]\n  if (!rgb) {\n    return 'currentColor'\n  }\n\n  return `rgb(${rgb[0]},${rgb[1]},${rgb[2]})`\n}\n\n/**\n * Get dimension colors and weights from DIMSTYLE with defaults\n */\nfunction getDimensionColors(dimStyle?: DimStyleTable): {\n  dimLineColor: string\n  extLineColor: string\n  textColor: string\n  dimLineWeight: number\n  extLineWeight: number\n} {\n  return {\n    dimLineColor: colorNumberToSVG(dimStyle?.dimClrd),\n    extLineColor: colorNumberToSVG(dimStyle?.dimClre),\n    textColor: colorNumberToSVG(dimStyle?.dimClrt),\n    dimLineWeight: dimStyle?.dimLwd ?? 0.5,\n    extLineWeight: dimStyle?.dimLwe ?? 0.5,\n  }\n}\n\n/**\n * Render DIMENSION entity to SVG with proper DIMSTYLE support\n */\nexport default function dimensionToSVG(\n  entity: DimensionEntity,\n  dimStyle?: DimStyleTable,\n  options?: ToSVGOptions,\n  viewport?: DimensionViewport,\n): BoundsAndElement {\n  // Dispatch to appropriate renderer based on dimension type\n  switch (entity.dimensionType) {\n    case 0: // Rotated, horizontal, or vertical\n    case 1: // Aligned\n      return renderLinearDimension(entity, dimStyle, options, viewport)\n    case 2: // Angular\n      return renderAngularDimension(entity, dimStyle, options, viewport)\n    case 5: // Angular 3-point\n      return renderAngular3PointDimension(entity, dimStyle, options, viewport)\n    case 3: // Diameter\n      return renderDiameterDimension(entity, dimStyle, options, viewport)\n    case 4: // Radius\n      return renderRadialDimension(entity, dimStyle, options, viewport)\n    case 6: // Ordinate\n      return renderOrdinateDimension(entity, dimStyle, options, viewport)\n    default:\n      // Fallback to simple line rendering\n      return renderFallbackDimension(entity)\n  }\n}\n\n/**\n * Render angular 3-point dimension (type 5).\n *\n * Based on DXF reference + ezdxf: angle is measured from p1 to p2\n * counter-clockwise around the vertex.\n */\nfunction renderAngular3PointDimension(\n  entity: DimensionEntity,\n  dimStyle?: DimStyleTable,\n  options?: ToSVGOptions,\n  viewport?: DimensionViewport,\n): BoundsAndElement {\n  const bbox = new Box2()\n  const elements: string[] = []\n  const markers: string[] = []\n\n  const { arrowSize, textHeight } = getScaledDimensionSizes(dimStyle, options, viewport)\n  const { dimLineColor, extLineColor, textColor, dimLineWeight, extLineWeight } = getDimensionColors(dimStyle)\n\n  const vertexX = entity.angleVertex?.x ?? 0\n  const vertexY = entity.angleVertex?.y ?? 0\n  const x1 = entity.measureStart?.x ?? 0\n  const y1 = entity.measureStart?.y ?? 0\n  const x2 = entity.measureEnd?.x ?? 0\n  const y2 = entity.measureEnd?.y ?? 0\n\n  // DXF reference: point (10,20,30) specifies the dimension line arc location.\n  // In practice, ezdxf may also provide (16,26,36); prefer arcPoint only if it\n  // yields a meaningful radius away from the vertex.\n  const startArcX = entity.start?.x ?? 0\n  const startArcY = entity.start?.y ?? 0\n  const arcPointX = entity.arcPoint?.x\n  const arcPointY = entity.arcPoint?.y\n\n  const arcPointRadius =\n    Number.isFinite(arcPointX) && Number.isFinite(arcPointY)\n      ? Math.hypot((arcPointX as number) - vertexX, (arcPointY as number) - vertexY)\n      : Number.NaN\n\n  const useArcPoint = Number.isFinite(arcPointRadius) && arcPointRadius > 1e-9\n  const arcLocationX = useArcPoint ? (arcPointX as number) : startArcX\n  const arcLocationY = useArcPoint ? (arcPointY as number) : startArcY\n\n  const textX = entity.textMidpoint?.x ?? arcLocationX\n  const textY = entity.textMidpoint?.y ?? arcLocationY\n\n  bbox.expandByPoint({ x: vertexX, y: vertexY })\n  bbox.expandByPoint({ x: x1, y: y1 })\n  bbox.expandByPoint({ x: x2, y: y2 })\n  bbox.expandByPoint({ x: arcLocationX, y: arcLocationY })\n  bbox.expandByPoint({ x: textX, y: textY })\n\n  const a1 = Math.atan2(y1 - vertexY, x1 - vertexX)\n  const a2 = Math.atan2(y2 - vertexY, x2 - vertexX)\n\n  let radius = Math.hypot(arcLocationX - vertexX, arcLocationY - vertexY)\n  if (!Number.isFinite(radius) || radius <= 1e-9) {\n    radius = Math.hypot(textX - vertexX, textY - vertexY)\n  }\n  if (!Number.isFinite(radius) || radius <= 1e-9) {\n    radius = Math.max(\n      Math.hypot(x1 - vertexX, y1 - vertexY),\n      Math.hypot(x2 - vertexX, y2 - vertexY),\n    )\n  }\n\n  const arcStartX = vertexX + radius * Math.cos(a1)\n  const arcStartY = vertexY + radius * Math.sin(a1)\n  const arcEndX = vertexX + radius * Math.cos(a2)\n  const arcEndY = vertexY + radius * Math.sin(a2)\n\n  bbox.expandByPoint({ x: arcStartX, y: arcStartY })\n  bbox.expandByPoint({ x: arcEndX, y: arcEndY })\n\n  // Create arrow markers\n  const markerId1 = `dim-angular-3p-arrow-start-${Date.now()}`\n  const markerId2 = `dim-angular-3p-arrow-end-${Date.now()}`\n  markers.push(\n    createArrowMarker(markerId1, arrowSize, dimLineColor, 'backward'),\n    createArrowMarker(markerId2, arrowSize, dimLineColor, 'forward'),\n  )\n\n  // Extension lines from definition points to arc endpoints.\n  elements.push(\n    `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${arcStartX}\" y2=\"${arcStartY}\" stroke=\"${extLineColor}\" stroke-width=\"${extLineWeight}\" />`,\n    `<line x1=\"${x2}\" y1=\"${y2}\" x2=\"${arcEndX}\" y2=\"${arcEndY}\" stroke=\"${extLineColor}\" stroke-width=\"${extLineWeight}\" />`,\n  )\n\n  // Arc from a1 to a2 in CCW orientation.\n  let delta = a2 - a1\n  while (delta < 0) delta += Math.PI * 2\n  while (delta >= Math.PI * 2) delta -= Math.PI * 2\n  const largeArcFlag = delta > Math.PI ? 1 : 0\n  const sweepFlag = 1\n\n  expandBBoxForMarker(bbox, arcStartX, arcStartY, arrowSize)\n  expandBBoxForMarker(bbox, arcEndX, arcEndY, arrowSize)\n\n  elements.push(\n    `<path d=\"M ${arcStartX} ${arcStartY} A ${radius} ${radius} 0 ${largeArcFlag} ${sweepFlag} ${arcEndX} ${arcEndY}\" fill=\"none\" stroke=\"${dimLineColor}\" stroke-width=\"${dimLineWeight}\" marker-start=\"url(#${markerId1})\" marker-end=\"url(#${markerId2})\" />`,\n  )\n\n  const resolvedText = resolveDimensionText(entity)\n  if (resolvedText) {\n    const midAngle = a1 + delta / 2\n    const textRotation = (midAngle * 180) / Math.PI\n\n    expandBBoxForText(bbox, textX, textY, textHeight, resolvedText)\n\n    elements.push(\n      `<text x=\"${textX}\" y=\"${textY}\" font-size=\"${textHeight}\" fill=\"${textColor}\" text-anchor=\"middle\" transform=\"rotate(${-textRotation} ${textX} ${textY}) scale(1,-1) translate(0 ${-2 * textY})\">${escapeXmlText(resolvedText)}</text>`,\n    )\n  }\n\n  return {\n    bbox,\n    element: `<defs>${markers.join('')}</defs><g>${elements.join('')}</g>`,\n  }\n}\n\n/**\n * Create SVG marker definition for dimension arrows\n */\nexport function createArrowMarker(\n  id: string,\n  size: number,\n  color: string,\n  direction: 'forward' | 'backward' = 'forward',\n): string {\n  const arrowPath = direction === 'forward'\n    ? `M 0 0 L ${size} ${size / 2} L 0 ${size} z`\n    : `M ${size} 0 L 0 ${size / 2} L ${size} ${size} z`\n  const refX = direction === 'forward' ? size : 0\n\n  return `<marker id=\"${id}\" markerWidth=\"${size}\" markerHeight=\"${size}\" refX=\"${refX}\" refY=\"${size / 2}\" orient=\"auto\" markerUnits=\"userSpaceOnUse\">\n    <path d=\"${arrowPath}\" fill=\"${color}\" />\n  </marker>`\n}\n\n/**\n * Render linear dimension (rotated, horizontal, vertical, or aligned)\n */\nfunction renderLinearDimension(\n  entity: DimensionEntity,\n  dimStyle?: DimStyleTable,\n  options?: ToSVGOptions,\n  viewport?: DimensionViewport,\n): BoundsAndElement {\n  const bbox = new Box2()\n  const elements: string[] = []\n  const markers: string[] = []\n\n  // Get dimension style properties with defaults (optionally auto-scaled)\n  const { arrowSize, textHeight, extLineOffset, extLineExtension } =\n    getScaledDimensionSizes(dimStyle, options, viewport)\n  const { dimLineColor, extLineColor, textColor, dimLineWeight, extLineWeight } = getDimensionColors(dimStyle)\n\n  // Extract dimension geometry\n  const defPoint1X = entity.measureStart?.x ?? 0\n  const defPoint1Y = entity.measureStart?.y ?? 0\n  const defPoint2X = entity.measureEnd?.x ?? 0\n  const defPoint2Y = entity.measureEnd?.y ?? 0\n  const dimLineY = entity.start?.y ?? 0\n  const textX = entity.textMidpoint?.x ?? (defPoint1X + defPoint2X) / 2\n  const textY = entity.textMidpoint?.y ?? (defPoint1Y + defPoint2Y) / 2\n\n  // Calculate dimension line angle\n  const angle = Math.atan2(defPoint2Y - defPoint1Y, defPoint2X - defPoint1X)\n  const perpAngle = angle + Math.PI / 2\n\n  // Calculate dimension line endpoints\n  const dimLine1X = defPoint1X + Math.cos(perpAngle) * (dimLineY - defPoint1Y)\n  const dimLine1Y = defPoint1Y + Math.sin(perpAngle) * (dimLineY - defPoint1Y)\n  const dimLine2X = defPoint2X + Math.cos(perpAngle) * (dimLineY - defPoint2Y)\n  const dimLine2Y = defPoint2Y + Math.sin(perpAngle) * (dimLineY - defPoint2Y)\n\n  // Expand bounding box\n  bbox.expandByPoint({ x: defPoint1X, y: defPoint1Y })\n  bbox.expandByPoint({ x: defPoint2X, y: defPoint2Y })\n  bbox.expandByPoint({ x: dimLine1X, y: dimLine1Y })\n  bbox.expandByPoint({ x: dimLine2X, y: dimLine2Y })\n  bbox.expandByPoint({ x: textX, y: textY })\n\n  // Create unique marker IDs for arrows\n  const markerId1 = `dim-arrow-start-${Date.now()}`\n  const markerId2 = `dim-arrow-end-${Date.now()}`\n\n  // Create arrow markers with dimension line color\n  markers.push(\n    createArrowMarker(markerId1, arrowSize, dimLineColor, 'backward'),\n    createArrowMarker(markerId2, arrowSize, dimLineColor, 'forward'),\n  )\n\n  // Draw extension lines\n  const extLine1StartX = defPoint1X + Math.cos(perpAngle) * extLineOffset\n  const extLine1StartY = defPoint1Y + Math.sin(perpAngle) * extLineOffset\n  const extLine1EndX = dimLine1X + Math.cos(perpAngle) * extLineExtension\n  const extLine1EndY = dimLine1Y + Math.sin(perpAngle) * extLineExtension\n\n  const extLine2StartX = defPoint2X + Math.cos(perpAngle) * extLineOffset\n  const extLine2StartY = defPoint2Y + Math.sin(perpAngle) * extLineOffset\n  const extLine2EndX = dimLine2X + Math.cos(perpAngle) * extLineExtension\n  const extLine2EndY = dimLine2Y + Math.sin(perpAngle) * extLineExtension\n\n  // Expand bounding box to include full extension lines and arrow markers\n  bbox.expandByPoint({ x: extLine1StartX, y: extLine1StartY })\n  bbox.expandByPoint({ x: extLine1EndX, y: extLine1EndY })\n  bbox.expandByPoint({ x: extLine2StartX, y: extLine2StartY })\n  bbox.expandByPoint({ x: extLine2EndX, y: extLine2EndY })\n  expandBBoxForMarker(bbox, dimLine1X, dimLine1Y, arrowSize)\n  expandBBoxForMarker(bbox, dimLine2X, dimLine2Y, arrowSize)\n\n  elements.push(\n    `<line x1=\"${extLine1StartX}\" y1=\"${extLine1StartY}\" x2=\"${extLine1EndX}\" y2=\"${extLine1EndY}\" stroke=\"${extLineColor}\" stroke-width=\"${extLineWeight}\" />`,\n    `<line x1=\"${extLine2StartX}\" y1=\"${extLine2StartY}\" x2=\"${extLine2EndX}\" y2=\"${extLine2EndY}\" stroke=\"${extLineColor}\" stroke-width=\"${extLineWeight}\" />`,\n    `<line x1=\"${dimLine1X}\" y1=\"${dimLine1Y}\" x2=\"${dimLine2X}\" y2=\"${dimLine2Y}\" stroke=\"${dimLineColor}\" stroke-width=\"${dimLineWeight}\" marker-start=\"url(#${markerId1})\" marker-end=\"url(#${markerId2})\" />`,\n  )\n\n  // Add dimension text\n  const resolvedText = resolveDimensionText(entity)\n  if (resolvedText) {\n    const textRotation = (angle * 180) / Math.PI\n    expandBBoxForText(bbox, textX, textY, textHeight, resolvedText)\n    elements.push(\n      `<text x=\"${textX}\" y=\"${textY}\" font-size=\"${textHeight}\" fill=\"${textColor}\" text-anchor=\"middle\" transform=\"rotate(${-textRotation} ${textX} ${textY}) scale(1,-1) translate(0 ${-2 * textY})\">${escapeXmlText(resolvedText)}</text>`,\n    )\n  }\n\n  return {\n    bbox,\n    element: `<defs>${markers.join('')}</defs><g>${elements.join('')}</g>`,\n  }\n}\n\n/**\n * Render angular dimension\n */\nfunction renderAngularDimension(\n  entity: DimensionEntity,\n  dimStyle?: DimStyleTable,\n  options?: ToSVGOptions,\n  viewport?: DimensionViewport,\n): BoundsAndElement {\n  const bbox = new Box2()\n  const elements: string[] = []\n  const markers: string[] = []\n\n  // Get dimension style properties (optionally auto-scaled)\n  const { arrowSize, textHeight } = getScaledDimensionSizes(dimStyle, options, viewport)\n  const { dimLineColor, extLineColor, textColor, dimLineWeight, extLineWeight } = getDimensionColors(dimStyle)\n\n  // Extract points\n  const centerX = entity.start?.x ?? 0\n  const centerY = entity.start?.y ?? 0\n  const x1 = entity.measureStart?.x ?? 0\n  const y1 = entity.measureStart?.y ?? 0\n  const x2 = entity.measureEnd?.x ?? 0\n  const y2 = entity.measureEnd?.y ?? 0\n  const textX = entity.textMidpoint?.x ?? centerX\n  const textY = entity.textMidpoint?.y ?? centerY\n\n  bbox.expandByPoint({ x: centerX, y: centerY })\n  bbox.expandByPoint({ x: x1, y: y1 })\n  bbox.expandByPoint({ x: x2, y: y2 })\n  bbox.expandByPoint({ x: textX, y: textY })\n\n  // Create arrow markers\n  const markerId1 = `dim-angular-arrow-start-${Date.now()}`\n  const markerId2 = `dim-angular-arrow-end-${Date.now()}`\n  markers.push(\n    createArrowMarker(markerId1, arrowSize, dimLineColor, 'backward'),\n    createArrowMarker(markerId2, arrowSize, dimLineColor, 'forward'),\n  )\n\n  // Draw extension lines from center to definition points\n  elements.push(\n    `<line x1=\"${centerX}\" y1=\"${centerY}\" x2=\"${x1}\" y2=\"${y1}\" stroke=\"${extLineColor}\" stroke-width=\"${extLineWeight}\" />`,\n    `<line x1=\"${centerX}\" y1=\"${centerY}\" x2=\"${x2}\" y2=\"${y2}\" stroke=\"${extLineColor}\" stroke-width=\"${extLineWeight}\" />`,\n  )\n\n  // Calculate arc radius (distance from center to text midpoint)\n  const radius = Math.hypot(textX - centerX, textY - centerY)\n  const startAngle = Math.atan2(y1 - centerY, x1 - centerX)\n  const endAngle = Math.atan2(y2 - centerY, x2 - centerX)\n\n  // Draw arc for angular dimension\n  const largeArcFlag = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0\n  const arcStartX = centerX + radius * Math.cos(startAngle)\n  const arcStartY = centerY + radius * Math.sin(startAngle)\n  const arcEndX = centerX + radius * Math.cos(endAngle)\n  const arcEndY = centerY + radius * Math.sin(endAngle)\n\n  elements.push(\n    `<path d=\"M ${arcStartX} ${arcStartY} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${arcEndX} ${arcEndY}\" fill=\"none\" stroke=\"${dimLineColor}\" stroke-width=\"${dimLineWeight}\" marker-start=\"url(#${markerId1})\" marker-end=\"url(#${markerId2})\" />`,\n  )\n\n  // Add dimension text\n  const resolvedText = resolveDimensionText(entity)\n  if (resolvedText) {\n    const midAngle = (startAngle + endAngle) / 2\n    const textRotation = (midAngle * 180) / Math.PI\n\n    expandBBoxForText(bbox, textX, textY, textHeight, resolvedText)\n\n    elements.push(\n      `<text x=\"${textX}\" y=\"${textY}\" font-size=\"${textHeight}\" fill=\"${textColor}\" text-anchor=\"middle\" transform=\"rotate(${-textRotation} ${textX} ${textY}) scale(1,-1) translate(0 ${-2 * textY})\">${escapeXmlText(resolvedText)}</text>`,\n    )\n  }\n\n  return {\n    bbox,\n    element: `<defs>${markers.join('')}</defs><g>${elements.join('')}</g>`,\n  }\n}\n\n/**\n * Render diameter dimension\n */\nfunction renderDiameterDimension(\n  entity: DimensionEntity,\n  dimStyle?: DimStyleTable,\n  options?: ToSVGOptions,\n  viewport?: DimensionViewport,\n): BoundsAndElement {\n  const bbox = new Box2()\n  const elements: string[] = []\n  const markers: string[] = []\n\n  // Get dimension style properties (optionally auto-scaled)\n  const { arrowSize, textHeight } = getScaledDimensionSizes(dimStyle, options, viewport)\n  const { dimLineColor, textColor, dimLineWeight } = getDimensionColors(dimStyle)\n\n  // Extract geometry\n  const x1 = entity.measureStart?.x ?? 0\n  const y1 = entity.measureStart?.y ?? 0\n  const x2 = entity.measureEnd?.x ?? 0\n  const y2 = entity.measureEnd?.y ?? 0\n  const textX = entity.textMidpoint?.x ?? (x1 + x2) / 2\n  const textY = entity.textMidpoint?.y ?? (y1 + y2) / 2\n\n  bbox.expandByPoint({ x: x1, y: y1 })\n  bbox.expandByPoint({ x: x2, y: y2 })\n  bbox.expandByPoint({ x: textX, y: textY })\n\n  const diameterLen = Math.hypot(x2 - x1, y2 - y1)\n  if (Number.isFinite(diameterLen) && diameterLen > 1e-6) {\n    // Create arrow markers\n    const markerId = `dim-diameter-arrow-${Date.now()}`\n    markers.push(createArrowMarker(markerId, arrowSize, dimLineColor, 'backward'))\n\n    // Create diameter line with arrow at the end\n    elements.push(\n      `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" stroke=\"${dimLineColor}\" stroke-width=\"${dimLineWeight}\" marker-end=\"url(#${markerId})\" />`,\n    )\n\n    expandBBoxForMarker(bbox, x2, y2, arrowSize)\n  }\n\n  // Add dimension text with diameter symbol\n  const resolvedText = resolveDimensionText(entity)\n  const diameterText = resolvedText ? `\u2300${resolvedText}` : '\u2300'\n  const angle = Math.atan2(y2 - y1, x2 - x1)\n  const textRotation = (angle * 180) / Math.PI\n\n  expandBBoxForText(bbox, textX, textY, textHeight, diameterText)\n\n  elements.push(\n    `<text x=\"${textX}\" y=\"${textY}\" font-size=\"${textHeight}\" fill=\"${textColor}\" text-anchor=\"middle\" transform=\"rotate(${-textRotation} ${textX} ${textY}) scale(1,-1) translate(0 ${-2 * textY})\">${escapeXmlText(diameterText)}</text>`,\n  )\n\n  return {\n    bbox,\n    element: `<defs>${markers.join('')}</defs><g>${elements.join('')}</g>`,\n  }\n}\n\n/**\n * Render radial dimension\n */\nfunction renderRadialDimension(\n  entity: DimensionEntity,\n  dimStyle?: DimStyleTable,\n  options?: ToSVGOptions,\n  viewport?: DimensionViewport,\n): BoundsAndElement {\n  const bbox = new Box2()\n  const elements: string[] = []\n  const markers: string[] = []\n\n  // Get dimension style properties (optionally auto-scaled)\n  const { arrowSize, textHeight } = getScaledDimensionSizes(dimStyle, options, viewport)\n  const { dimLineColor, textColor, dimLineWeight } = getDimensionColors(dimStyle)\n\n  // Extract geometry\n  const x1 = entity.measureStart?.x ?? 0\n  const y1 = entity.measureStart?.y ?? 0\n  const x2 = entity.measureEnd?.x ?? 0\n  const y2 = entity.measureEnd?.y ?? 0\n  const textX = entity.textMidpoint?.x ?? (x1 + x2) / 2\n  const textY = entity.textMidpoint?.y ?? (y1 + y2) / 2\n\n  bbox.expandByPoint({ x: x1, y: y1 })\n  bbox.expandByPoint({ x: x2, y: y2 })\n  bbox.expandByPoint({ x: textX, y: textY })\n\n  const radiusLen = Math.hypot(x2 - x1, y2 - y1)\n  if (Number.isFinite(radiusLen) && radiusLen > 1e-6) {\n    // Create arrow markers\n    const markerId = `dim-radius-arrow-${Date.now()}`\n    markers.push(createArrowMarker(markerId, arrowSize, dimLineColor, 'backward'))\n\n    // Create radius line with arrow at the end\n    elements.push(\n      `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" stroke=\"${dimLineColor}\" stroke-width=\"${dimLineWeight}\" marker-end=\"url(#${markerId})\" />`,\n    )\n\n    expandBBoxForMarker(bbox, x2, y2, arrowSize)\n  }\n\n  // Add dimension text with radius symbol\n  const resolvedText = resolveDimensionText(entity)\n  const radiusText = resolvedText ? `R${resolvedText}` : 'R'\n  const angle = Math.atan2(y2 - y1, x2 - x1)\n  const textRotation = (angle * 180) / Math.PI\n\n  expandBBoxForText(bbox, textX, textY, textHeight, radiusText)\n\n  elements.push(\n    `<text x=\"${textX}\" y=\"${textY}\" font-size=\"${textHeight}\" fill=\"${textColor}\" text-anchor=\"middle\" transform=\"rotate(${-textRotation} ${textX} ${textY}) scale(1,-1) translate(0 ${-2 * textY})\">${escapeXmlText(radiusText)}</text>`,\n  )\n\n  return {\n    bbox,\n    element: `<defs>${markers.join('')}</defs><g>${elements.join('')}</g>`,\n  }\n}\n\n/**\n * Render ordinate dimension\n */\nfunction renderOrdinateDimension(\n  entity: DimensionEntity,\n  dimStyle?: DimStyleTable,\n  options?: ToSVGOptions,\n  viewport?: DimensionViewport,\n): BoundsAndElement {\n  const bbox = new Box2()\n  const elements: string[] = []\n\n  // Get dimension style properties (optionally auto-scaled)\n  const { textHeight } = getScaledDimensionSizes(dimStyle, options, viewport)\n  const { dimLineColor, textColor, dimLineWeight } = getDimensionColors(dimStyle)\n\n  // Extract geometry\n  const x1 = entity.measureStart?.x ?? 0\n  const y1 = entity.measureStart?.y ?? 0\n  const x2 = entity.start?.x ?? 0\n  const y2 = entity.start?.y ?? 0\n  const textX = entity.textMidpoint?.x ?? x2\n  const textY = entity.textMidpoint?.y ?? y2\n\n  bbox.expandByPoint({ x: x1, y: y1 })\n  bbox.expandByPoint({ x: x2, y: y2 })\n  bbox.expandByPoint({ x: textX, y: textY })\n\n  // Create leader line (no arrow for ordinate dimensions)\n  elements.push(\n    `<line x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" stroke=\"${dimLineColor}\" stroke-width=\"${dimLineWeight}\" />`,\n  )\n\n  // Add dimension text\n  const resolvedText = resolveDimensionText(entity)\n  if (resolvedText) {\n    const angle = Math.atan2(y2 - y1, x2 - x1)\n    const textRotation = (angle * 180) / Math.PI\n\n    expandBBoxForText(bbox, textX, textY, textHeight, resolvedText)\n\n    elements.push(\n      `<text x=\"${textX}\" y=\"${textY}\" font-size=\"${textHeight}\" fill=\"${textColor}\" text-anchor=\"middle\" transform=\"rotate(${-textRotation} ${textX} ${textY}) scale(1,-1) translate(0 ${-2 * textY})\">${escapeXmlText(resolvedText)}</text>`,\n    )\n  }\n\n  return {\n    bbox,\n    element: `<g>${elements.join('')}</g>`,\n  }\n}\n\n/**\n * Fallback renderer for unsupported dimension types\n */\nfunction renderFallbackDimension(entity: DimensionEntity): BoundsAndElement {\n  const bbox = new Box2()\n  const elements: string[] = []\n\n  // Just render text at midpoint\n  if (entity.textMidpoint) {\n    const textX = entity.textMidpoint.x ?? 0\n    const textY = entity.textMidpoint.y ?? 0\n    bbox.expandByPoint({ x: textX, y: textY })\n\n    const resolvedText = resolveDimensionText(entity)\n    if (resolvedText) {\n      elements.push(\n        `<text x=\"${textX}\" y=\"${textY}\" font-size=\"2.5\" text-anchor=\"middle\" transform=\"scale(1,-1) translate(0 ${-2 * textY})\">${escapeXmlText(resolvedText)}</text>`,\n      )\n    }\n  }\n\n  return {\n    bbox,\n    element: `<g>${elements.join('')}</g>`,\n  }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAqB;AAErB,oBAAmB;AACnB,2BAA0B;AAC1B,qBAAoB;AAMpB,MAAM,6BAA6B;AAUnC,MAAM,+BAA+B;AAErC,MAAM,iCAAiC,CACrC,UACA,YACW;AACX,QAAM,cAAc,KAAK,IAAI,KAAK,IAAI,SAAS,KAAK,GAAG,KAAK,IAAI,SAAS,MAAM,CAAC;AAChF,MAAI,CAAC,OAAO,SAAS,WAAW,KAAK,eAAe,EAAG,QAAO;AAE9D,QAAM,YAAY,SAAS,WAAW;AACtC,QAAM,gBAAgB,OAAO,SAAS,SAAS,MAAM,aAAa,KAAK,IAClE,YACD;AAEJ,SAAO,cAAc;AACvB;AAEA,MAAM,iBAAiB,CAAC,aAAwC;AAC9D,QAAM,cAAc,KAAK,IAAI,KAAK,IAAI,SAAS,KAAK,GAAG,KAAK,IAAI,SAAS,MAAM,CAAC;AAChF,SAAO,OAAO,SAAS,WAAW,IAAI,cAAc,OAAO;AAC7D;AAEA,MAAM,4BAA4B,CAChC,UACA,YACuB;AACvB,MAAI,CAAC,OAAO,SAAS,OAAO,MAAM,WAAW,MAAM,EAAG,QAAO;AAC7D,QAAM,cAAc,eAAe,QAAQ;AAC3C,MAAI,CAAC,OAAO,SAAS,WAAW,KAAK,eAAe,EAAG,QAAO;AAC9D,SAAO,eAAgB,UAAqB;AAC9C;AAEO,MAAM,2BAA2B,CAAC,WAAkC;AACzE,QAAM,OAAO,IAAI,kBAAK;AAEtB,QAAM,SAAS;AAAA,IACb,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAEA,aAAW,KAAK,QAAQ;AACtB,QAAI,CAAC,EAAG;AACR,UAAM,IAAI,EAAE;AACZ,UAAM,IAAI,EAAE;AACZ,QAAI,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,EAAG;AAChD,SAAK,cAAc,EAAE,GAAG,EAAE,CAAC;AAAA,EAC7B;AAEA,SAAO;AACT;AAEA,MAAM,0BAA0B,CAC9B,UACA,SACA,aAMG;AACH,QAAM,YAAY,SAAS,WAAW,cAAc;AAEpD,QAAM,gBAAgB,UAAU,UAAU;AAC1C,QAAM,iBAAiB,UAAU,UAAU;AAC3C,QAAM,oBAAoB,UAAU,UAAU;AAC9C,QAAM,uBAAuB,UAAU,UAAU;AAEjD,MAAI,CAAC,aAAa,CAAC,UAAU;AAC3B,WAAO;AAAA,MACL,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,kBAAkB;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,QAAQ,+BAA+B,UAAU,OAAO;AAE9D,QAAM,OAAO,SAAS,WAAW;AACjC,QAAM,eAAe,0BAA0B,UAAU,MAAM,SAAS;AACxE,QAAM,cAAc,0BAA0B,UAAU,MAAM,UAAU;AACxE,QAAM,gBAAgB,0BAA0B,UAAU,MAAM,aAAa;AAC7E,QAAM,mBAAmB,0BAA0B,UAAU,MAAM,gBAAgB;AAEnF,SAAO;AAAA,IACL,WAAW,gBAAiB,gBAAgB;AAAA,IAC5C,YAAY,eAAgB,iBAAiB;AAAA,IAC7C,eAAe,iBAAkB,oBAAoB;AAAA,IACrD,kBAAkB,oBAAqB,uBAAuB;AAAA,EAChE;AACF;AAEA,MAAM,uBAAuB,CAC3B,OACA,WAAmB,+BACR;AACX,MAAI,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACpC,QAAM,cAAU,eAAAA,SAAQ,OAAO,CAAC,QAAQ;AACxC,SAAO,QAAQ,QAAQ,QAAQ;AACjC;AAEA,MAAM,wBAAwB,CAAC,WAAoC;AACjE,QAAM,KAAK,OAAO,OAAO,KAAK;AAC9B,QAAM,KAAK,OAAO,OAAO,KAAK;AAC9B,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,KAAK,OAAO,YAAY,KAAK;AAEnC,QAAM,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACtC,QAAM,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACtC,QAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACzC,SAAO,KAAK,IAAI,IAAI,IAAI,KAAK;AAC/B;AAEA,MAAM,wBAAwB,CAC5B,IACA,IACA,IACA,OACW,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AAExC,MAAM,+BAA+B,CACnC,IACA,IACA,IACA,IACA,IACA,OACW;AACX,QAAM,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACtC,QAAM,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACtC,MAAI,QAAQ,KAAK,IAAI,KAAK,EAAE;AAC5B,SAAO,QAAQ,KAAK,KAAK,EAAG,UAAS,KAAK,KAAK;AAC/C,MAAI,QAAQ,KAAK,GAAI,SAAQ,KAAK,KAAK,IAAI;AAC3C,SAAQ,QAAQ,MAAO,KAAK;AAC9B;AAEA,MAAM,2BAA2B,CAC/B,IACA,IACA,IACA,IACA,IACA,OACW;AACX,QAAM,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACtC,QAAM,KAAK,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACtC,MAAI,QAAQ,KAAK;AACjB,SAAO,QAAQ,EAAG,UAAS,KAAK,KAAK;AACrC,SAAO,SAAS,KAAK,KAAK,EAAG,UAAS,KAAK,KAAK;AAChD,SAAQ,QAAQ,MAAO,KAAK;AAC9B;AAEA,MAAM,8BAA8B,CAAC,WAAoC;AACvE,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,KAAK,OAAO,YAAY,KAAK;AAEnC,UAAQ,OAAO,eAAe;AAAA,IAC5B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,GAAG;AACN,YAAM,OAAO,sBAAsB,IAAI,IAAI,IAAI,EAAE;AACjD,aAAO,qBAAqB,IAAI;AAAA,IAClC;AAAA,IACA,KAAK,GAAG;AACN,YAAM,OAAO,sBAAsB,IAAI,IAAI,IAAI,EAAE;AACjD,UAAI,OAAO,EAAG,QAAO,qBAAqB,IAAI;AAC9C,YAAM,SAAS,sBAAsB,MAAM;AAC3C,aAAO,qBAAqB,SAAS,CAAC;AAAA,IACxC;AAAA,IACA,KAAK,GAAG;AACN,YAAM,OAAO,sBAAsB,IAAI,IAAI,IAAI,EAAE;AACjD,UAAI,OAAO,EAAG,QAAO,qBAAqB,IAAI;AAC9C,YAAM,SAAS,sBAAsB,MAAM;AAC3C,aAAO,qBAAqB,MAAM;AAAA,IACpC;AAAA,IACA,KAAK,GAAG;AACN,YAAM,KAAK,OAAO,OAAO,KAAK;AAC9B,YAAM,KAAK,OAAO,OAAO,KAAK;AAC9B,YAAM,UAAU,6BAA6B,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACnE,YAAM,YAAY,qBAAqB,OAAO;AAC9C,aAAO,YAAY,GAAG,SAAS,SAAM;AAAA,IACvC;AAAA,IACA,KAAK,GAAG;AACN,YAAM,KAAK,OAAO,aAAa,KAAK;AACpC,YAAM,KAAK,OAAO,aAAa,KAAK;AACpC,YAAM,UAAU,yBAAyB,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAC/D,YAAM,YAAY,qBAAqB,OAAO;AAC9C,aAAO,YAAY,GAAG,SAAS,SAAM;AAAA,IACvC;AAAA,IACA;AACE,aAAO;AAAA,EACX;AACF;AAEA,MAAM,uBAAuB,CAAC,WAAoC;AAChE,QAAM,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC5D,QAAM,UAAU,IAAI,KAAK;AACzB,QAAM,WAAW,4BAA4B,MAAM;AAEnD,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,QAAQ,SAAS,IAAI,GAAG;AAC1B,WAAO,QAAQ,MAAM,IAAI,EAAE,KAAK,QAAQ;AAAA,EAC1C;AACA,SAAO;AACT;AAEA,MAAM,sBAAsB,CAAC,MAAY,GAAW,GAAW,SAAiB;AAC9E,OAAK,cAAc,EAAE,GAAG,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC;AAC/C,OAAK,cAAc,EAAE,GAAG,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC;AACjD;AAEA,MAAM,oBAAoB,CACxB,MACA,GACA,GACA,QACA,YACG;AACH,QAAM,YAAY,QAAQ,SAAS,SAAS;AAE5C,OAAK,cAAc,EAAE,GAAG,IAAI,YAAY,GAAG,GAAG,IAAI,OAAO,CAAC;AAC1D,OAAK,cAAc,EAAE,GAAG,IAAI,YAAY,GAAG,GAAG,IAAI,OAAO,CAAC;AAC5D;AAKA,SAAS,iBAAiB,aAA8B;AACtD,MAAI,gBAAgB,UAAa,cAAc,GAAG;AAChD,WAAO;AAAA,EACT;AAGA,MAAI,gBAAgB,KAAK,gBAAgB,KAAK;AAC5C,WAAO;AAAA,EACT;AAGA,QAAM,MAAM,cAAAC,QAAO,WAAW;AAC9B,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AAC1C;AAKA,SAAS,mBAAmB,UAM1B;AACA,SAAO;AAAA,IACL,cAAc,iBAAiB,UAAU,OAAO;AAAA,IAChD,cAAc,iBAAiB,UAAU,OAAO;AAAA,IAChD,WAAW,iBAAiB,UAAU,OAAO;AAAA,IAC7C,eAAe,UAAU,UAAU;AAAA,IACnC,eAAe,UAAU,UAAU;AAAA,EACrC;AACF;AAKe,SAAR,eACL,QACA,UACA,SACA,UACkB;AAElB,UAAQ,OAAO,eAAe;AAAA,IAC5B,KAAK;AAAA;AAAA,IACL,KAAK;AACH,aAAO,sBAAsB,QAAQ,UAAU,SAAS,QAAQ;AAAA,IAClE,KAAK;AACH,aAAO,uBAAuB,QAAQ,UAAU,SAAS,QAAQ;AAAA,IACnE,KAAK;AACH,aAAO,6BAA6B,QAAQ,UAAU,SAAS,QAAQ;AAAA,IACzE,KAAK;AACH,aAAO,wBAAwB,QAAQ,UAAU,SAAS,QAAQ;AAAA,IACpE,KAAK;AACH,aAAO,sBAAsB,QAAQ,UAAU,SAAS,QAAQ;AAAA,IAClE,KAAK;AACH,aAAO,wBAAwB,QAAQ,UAAU,SAAS,QAAQ;AAAA,IACpE;AAEE,aAAO,wBAAwB,MAAM;AAAA,EACzC;AACF;AAQA,SAAS,6BACP,QACA,UACA,SACA,UACkB;AAClB,QAAM,OAAO,IAAI,kBAAK;AACtB,QAAM,WAAqB,CAAC;AAC5B,QAAM,UAAoB,CAAC;AAE3B,QAAM,EAAE,WAAW,WAAW,IAAI,wBAAwB,UAAU,SAAS,QAAQ;AACrF,QAAM,EAAE,cAAc,cAAc,WAAW,eAAe,cAAc,IAAI,mBAAmB,QAAQ;AAE3G,QAAM,UAAU,OAAO,aAAa,KAAK;AACzC,QAAM,UAAU,OAAO,aAAa,KAAK;AACzC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,KAAK,OAAO,YAAY,KAAK;AAKnC,QAAM,YAAY,OAAO,OAAO,KAAK;AACrC,QAAM,YAAY,OAAO,OAAO,KAAK;AACrC,QAAM,YAAY,OAAO,UAAU;AACnC,QAAM,YAAY,OAAO,UAAU;AAEnC,QAAM,iBACJ,OAAO,SAAS,SAAS,KAAK,OAAO,SAAS,SAAS,IACnD,KAAK,MAAO,YAAuB,SAAU,YAAuB,OAAO,IAC3E,OAAO;AAEb,QAAM,cAAc,OAAO,SAAS,cAAc,KAAK,iBAAiB;AACxE,QAAM,eAAe,cAAe,YAAuB;AAC3D,QAAM,eAAe,cAAe,YAAuB;AAE3D,QAAM,QAAQ,OAAO,cAAc,KAAK;AACxC,QAAM,QAAQ,OAAO,cAAc,KAAK;AAExC,OAAK,cAAc,EAAE,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC7C,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,cAAc,GAAG,aAAa,CAAC;AACvD,OAAK,cAAc,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,QAAM,KAAK,KAAK,MAAM,KAAK,SAAS,KAAK,OAAO;AAChD,QAAM,KAAK,KAAK,MAAM,KAAK,SAAS,KAAK,OAAO;AAEhD,MAAI,SAAS,KAAK,MAAM,eAAe,SAAS,eAAe,OAAO;AACtE,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,UAAU,MAAM;AAC9C,aAAS,KAAK,MAAM,QAAQ,SAAS,QAAQ,OAAO;AAAA,EACtD;AACA,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,UAAU,MAAM;AAC9C,aAAS,KAAK;AAAA,MACZ,KAAK,MAAM,KAAK,SAAS,KAAK,OAAO;AAAA,MACrC,KAAK,MAAM,KAAK,SAAS,KAAK,OAAO;AAAA,IACvC;AAAA,EACF;AAEA,QAAM,YAAY,UAAU,SAAS,KAAK,IAAI,EAAE;AAChD,QAAM,YAAY,UAAU,SAAS,KAAK,IAAI,EAAE;AAChD,QAAM,UAAU,UAAU,SAAS,KAAK,IAAI,EAAE;AAC9C,QAAM,UAAU,UAAU,SAAS,KAAK,IAAI,EAAE;AAE9C,OAAK,cAAc,EAAE,GAAG,WAAW,GAAG,UAAU,CAAC;AACjD,OAAK,cAAc,EAAE,GAAG,SAAS,GAAG,QAAQ,CAAC;AAG7C,QAAM,YAAY,8BAA8B,KAAK,IAAI,CAAC;AAC1D,QAAM,YAAY,4BAA4B,KAAK,IAAI,CAAC;AACxD,UAAQ;AAAA,IACN,kBAAkB,WAAW,WAAW,cAAc,UAAU;AAAA,IAChE,kBAAkB,WAAW,WAAW,cAAc,SAAS;AAAA,EACjE;AAGA,WAAS;AAAA,IACP,aAAa,EAAE,SAAS,EAAE,SAAS,SAAS,SAAS,SAAS,aAAa,YAAY,mBAAmB,aAAa;AAAA,IACvH,aAAa,EAAE,SAAS,EAAE,SAAS,OAAO,SAAS,OAAO,aAAa,YAAY,mBAAmB,aAAa;AAAA,EACrH;AAGA,MAAI,QAAQ,KAAK;AACjB,SAAO,QAAQ,EAAG,UAAS,KAAK,KAAK;AACrC,SAAO,SAAS,KAAK,KAAK,EAAG,UAAS,KAAK,KAAK;AAChD,QAAM,eAAe,QAAQ,KAAK,KAAK,IAAI;AAC3C,QAAM,YAAY;AAElB,sBAAoB,MAAM,WAAW,WAAW,SAAS;AACzD,sBAAoB,MAAM,SAAS,SAAS,SAAS;AAErD,WAAS;AAAA,IACP,cAAc,SAAS,IAAI,SAAS,MAAM,MAAM,IAAI,MAAM,MAAM,YAAY,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,yBAAyB,YAAY,mBAAmB,aAAa,wBAAwB,SAAS,uBAAuB,SAAS;AAAA,EACvP;AAEA,QAAM,eAAe,qBAAqB,MAAM;AAChD,MAAI,cAAc;AAChB,UAAM,WAAW,KAAK,QAAQ;AAC9B,UAAM,eAAgB,WAAW,MAAO,KAAK;AAE7C,sBAAkB,MAAM,OAAO,OAAO,YAAY,YAAY;AAE9D,aAAS;AAAA,MACP,YAAY,KAAK,QAAQ,KAAK,gBAAgB,UAAU,WAAW,SAAS,4CAA4C,CAAC,YAAY,IAAI,KAAK,IAAI,KAAK,6BAA6B,KAAK,KAAK,UAAM,qBAAAC,SAAc,YAAY,CAAC;AAAA,IACjO;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,SAAS,QAAQ,KAAK,EAAE,CAAC,aAAa,SAAS,KAAK,EAAE,CAAC;AAAA,EAClE;AACF;AAKO,SAAS,kBACd,IACA,MACA,OACA,YAAoC,WAC5B;AACR,QAAM,YAAY,cAAc,YAC5B,WAAW,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,OACvC,KAAK,IAAI,UAAU,OAAO,CAAC,MAAM,IAAI,IAAI,IAAI;AACjD,QAAM,OAAO,cAAc,YAAY,OAAO;AAE9C,SAAO,eAAe,EAAE,kBAAkB,IAAI,mBAAmB,IAAI,WAAW,IAAI,WAAW,OAAO,CAAC;AAAA,eAC1F,SAAS,WAAW,KAAK;AAAA;AAExC;AAKA,SAAS,sBACP,QACA,UACA,SACA,UACkB;AAClB,QAAM,OAAO,IAAI,kBAAK;AACtB,QAAM,WAAqB,CAAC;AAC5B,QAAM,UAAoB,CAAC;AAG3B,QAAM,EAAE,WAAW,YAAY,eAAe,iBAAiB,IAC7D,wBAAwB,UAAU,SAAS,QAAQ;AACrD,QAAM,EAAE,cAAc,cAAc,WAAW,eAAe,cAAc,IAAI,mBAAmB,QAAQ;AAG3G,QAAM,aAAa,OAAO,cAAc,KAAK;AAC7C,QAAM,aAAa,OAAO,cAAc,KAAK;AAC7C,QAAM,aAAa,OAAO,YAAY,KAAK;AAC3C,QAAM,aAAa,OAAO,YAAY,KAAK;AAC3C,QAAM,WAAW,OAAO,OAAO,KAAK;AACpC,QAAM,QAAQ,OAAO,cAAc,MAAM,aAAa,cAAc;AACpE,QAAM,QAAQ,OAAO,cAAc,MAAM,aAAa,cAAc;AAGpE,QAAM,QAAQ,KAAK,MAAM,aAAa,YAAY,aAAa,UAAU;AACzE,QAAM,YAAY,QAAQ,KAAK,KAAK;AAGpC,QAAM,YAAY,aAAa,KAAK,IAAI,SAAS,KAAK,WAAW;AACjE,QAAM,YAAY,aAAa,KAAK,IAAI,SAAS,KAAK,WAAW;AACjE,QAAM,YAAY,aAAa,KAAK,IAAI,SAAS,KAAK,WAAW;AACjE,QAAM,YAAY,aAAa,KAAK,IAAI,SAAS,KAAK,WAAW;AAGjE,OAAK,cAAc,EAAE,GAAG,YAAY,GAAG,WAAW,CAAC;AACnD,OAAK,cAAc,EAAE,GAAG,YAAY,GAAG,WAAW,CAAC;AACnD,OAAK,cAAc,EAAE,GAAG,WAAW,GAAG,UAAU,CAAC;AACjD,OAAK,cAAc,EAAE,GAAG,WAAW,GAAG,UAAU,CAAC;AACjD,OAAK,cAAc,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;AAGzC,QAAM,YAAY,mBAAmB,KAAK,IAAI,CAAC;AAC/C,QAAM,YAAY,iBAAiB,KAAK,IAAI,CAAC;AAG7C,UAAQ;AAAA,IACN,kBAAkB,WAAW,WAAW,cAAc,UAAU;AAAA,IAChE,kBAAkB,WAAW,WAAW,cAAc,SAAS;AAAA,EACjE;AAGA,QAAM,iBAAiB,aAAa,KAAK,IAAI,SAAS,IAAI;AAC1D,QAAM,iBAAiB,aAAa,KAAK,IAAI,SAAS,IAAI;AAC1D,QAAM,eAAe,YAAY,KAAK,IAAI,SAAS,IAAI;AACvD,QAAM,eAAe,YAAY,KAAK,IAAI,SAAS,IAAI;AAEvD,QAAM,iBAAiB,aAAa,KAAK,IAAI,SAAS,IAAI;AAC1D,QAAM,iBAAiB,aAAa,KAAK,IAAI,SAAS,IAAI;AAC1D,QAAM,eAAe,YAAY,KAAK,IAAI,SAAS,IAAI;AACvD,QAAM,eAAe,YAAY,KAAK,IAAI,SAAS,IAAI;AAGvD,OAAK,cAAc,EAAE,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAC3D,OAAK,cAAc,EAAE,GAAG,cAAc,GAAG,aAAa,CAAC;AACvD,OAAK,cAAc,EAAE,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAC3D,OAAK,cAAc,EAAE,GAAG,cAAc,GAAG,aAAa,CAAC;AACvD,sBAAoB,MAAM,WAAW,WAAW,SAAS;AACzD,sBAAoB,MAAM,WAAW,WAAW,SAAS;AAEzD,WAAS;AAAA,IACP,aAAa,cAAc,SAAS,cAAc,SAAS,YAAY,SAAS,YAAY,aAAa,YAAY,mBAAmB,aAAa;AAAA,IACrJ,aAAa,cAAc,SAAS,cAAc,SAAS,YAAY,SAAS,YAAY,aAAa,YAAY,mBAAmB,aAAa;AAAA,IACrJ,aAAa,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,aAAa,YAAY,mBAAmB,aAAa,wBAAwB,SAAS,uBAAuB,SAAS;AAAA,EACxM;AAGA,QAAM,eAAe,qBAAqB,MAAM;AAChD,MAAI,cAAc;AAChB,UAAM,eAAgB,QAAQ,MAAO,KAAK;AAC1C,sBAAkB,MAAM,OAAO,OAAO,YAAY,YAAY;AAC9D,aAAS;AAAA,MACP,YAAY,KAAK,QAAQ,KAAK,gBAAgB,UAAU,WAAW,SAAS,4CAA4C,CAAC,YAAY,IAAI,KAAK,IAAI,KAAK,6BAA6B,KAAK,KAAK,UAAM,qBAAAA,SAAc,YAAY,CAAC;AAAA,IACjO;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,SAAS,QAAQ,KAAK,EAAE,CAAC,aAAa,SAAS,KAAK,EAAE,CAAC;AAAA,EAClE;AACF;AAKA,SAAS,uBACP,QACA,UACA,SACA,UACkB;AAClB,QAAM,OAAO,IAAI,kBAAK;AACtB,QAAM,WAAqB,CAAC;AAC5B,QAAM,UAAoB,CAAC;AAG3B,QAAM,EAAE,WAAW,WAAW,IAAI,wBAAwB,UAAU,SAAS,QAAQ;AACrF,QAAM,EAAE,cAAc,cAAc,WAAW,eAAe,cAAc,IAAI,mBAAmB,QAAQ;AAG3G,QAAM,UAAU,OAAO,OAAO,KAAK;AACnC,QAAM,UAAU,OAAO,OAAO,KAAK;AACnC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,QAAQ,OAAO,cAAc,KAAK;AACxC,QAAM,QAAQ,OAAO,cAAc,KAAK;AAExC,OAAK,cAAc,EAAE,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC7C,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;AAGzC,QAAM,YAAY,2BAA2B,KAAK,IAAI,CAAC;AACvD,QAAM,YAAY,yBAAyB,KAAK,IAAI,CAAC;AACrD,UAAQ;AAAA,IACN,kBAAkB,WAAW,WAAW,cAAc,UAAU;AAAA,IAChE,kBAAkB,WAAW,WAAW,cAAc,SAAS;AAAA,EACjE;AAGA,WAAS;AAAA,IACP,aAAa,OAAO,SAAS,OAAO,SAAS,EAAE,SAAS,EAAE,aAAa,YAAY,mBAAmB,aAAa;AAAA,IACnH,aAAa,OAAO,SAAS,OAAO,SAAS,EAAE,SAAS,EAAE,aAAa,YAAY,mBAAmB,aAAa;AAAA,EACrH;AAGA,QAAM,SAAS,KAAK,MAAM,QAAQ,SAAS,QAAQ,OAAO;AAC1D,QAAM,aAAa,KAAK,MAAM,KAAK,SAAS,KAAK,OAAO;AACxD,QAAM,WAAW,KAAK,MAAM,KAAK,SAAS,KAAK,OAAO;AAGtD,QAAM,eAAe,KAAK,IAAI,WAAW,UAAU,IAAI,KAAK,KAAK,IAAI;AACrE,QAAM,YAAY,UAAU,SAAS,KAAK,IAAI,UAAU;AACxD,QAAM,YAAY,UAAU,SAAS,KAAK,IAAI,UAAU;AACxD,QAAM,UAAU,UAAU,SAAS,KAAK,IAAI,QAAQ;AACpD,QAAM,UAAU,UAAU,SAAS,KAAK,IAAI,QAAQ;AAEpD,WAAS;AAAA,IACP,cAAc,SAAS,IAAI,SAAS,MAAM,MAAM,IAAI,MAAM,MAAM,YAAY,MAAM,OAAO,IAAI,OAAO,yBAAyB,YAAY,mBAAmB,aAAa,wBAAwB,SAAS,uBAAuB,SAAS;AAAA,EAC5O;AAGA,QAAM,eAAe,qBAAqB,MAAM;AAChD,MAAI,cAAc;AAChB,UAAM,YAAY,aAAa,YAAY;AAC3C,UAAM,eAAgB,WAAW,MAAO,KAAK;AAE7C,sBAAkB,MAAM,OAAO,OAAO,YAAY,YAAY;AAE9D,aAAS;AAAA,MACP,YAAY,KAAK,QAAQ,KAAK,gBAAgB,UAAU,WAAW,SAAS,4CAA4C,CAAC,YAAY,IAAI,KAAK,IAAI,KAAK,6BAA6B,KAAK,KAAK,UAAM,qBAAAA,SAAc,YAAY,CAAC;AAAA,IACjO;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,SAAS,QAAQ,KAAK,EAAE,CAAC,aAAa,SAAS,KAAK,EAAE,CAAC;AAAA,EAClE;AACF;AAKA,SAAS,wBACP,QACA,UACA,SACA,UACkB;AAClB,QAAM,OAAO,IAAI,kBAAK;AACtB,QAAM,WAAqB,CAAC;AAC5B,QAAM,UAAoB,CAAC;AAG3B,QAAM,EAAE,WAAW,WAAW,IAAI,wBAAwB,UAAU,SAAS,QAAQ;AACrF,QAAM,EAAE,cAAc,WAAW,cAAc,IAAI,mBAAmB,QAAQ;AAG9E,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,QAAQ,OAAO,cAAc,MAAM,KAAK,MAAM;AACpD,QAAM,QAAQ,OAAO,cAAc,MAAM,KAAK,MAAM;AAEpD,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,QAAM,cAAc,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AAC/C,MAAI,OAAO,SAAS,WAAW,KAAK,cAAc,MAAM;AAEtD,UAAM,WAAW,sBAAsB,KAAK,IAAI,CAAC;AACjD,YAAQ,KAAK,kBAAkB,UAAU,WAAW,cAAc,UAAU,CAAC;AAG7E,aAAS;AAAA,MACP,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,YAAY,mBAAmB,aAAa,sBAAsB,QAAQ;AAAA,IACzI;AAEA,wBAAoB,MAAM,IAAI,IAAI,SAAS;AAAA,EAC7C;AAGA,QAAM,eAAe,qBAAqB,MAAM;AAChD,QAAM,eAAe,eAAe,SAAI,YAAY,KAAK;AACzD,QAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACzC,QAAM,eAAgB,QAAQ,MAAO,KAAK;AAE1C,oBAAkB,MAAM,OAAO,OAAO,YAAY,YAAY;AAE9D,WAAS;AAAA,IACP,YAAY,KAAK,QAAQ,KAAK,gBAAgB,UAAU,WAAW,SAAS,4CAA4C,CAAC,YAAY,IAAI,KAAK,IAAI,KAAK,6BAA6B,KAAK,KAAK,UAAM,qBAAAA,SAAc,YAAY,CAAC;AAAA,EACjO;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,SAAS,QAAQ,KAAK,EAAE,CAAC,aAAa,SAAS,KAAK,EAAE,CAAC;AAAA,EAClE;AACF;AAKA,SAAS,sBACP,QACA,UACA,SACA,UACkB;AAClB,QAAM,OAAO,IAAI,kBAAK;AACtB,QAAM,WAAqB,CAAC;AAC5B,QAAM,UAAoB,CAAC;AAG3B,QAAM,EAAE,WAAW,WAAW,IAAI,wBAAwB,UAAU,SAAS,QAAQ;AACrF,QAAM,EAAE,cAAc,WAAW,cAAc,IAAI,mBAAmB,QAAQ;AAG9E,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,KAAK,OAAO,YAAY,KAAK;AACnC,QAAM,QAAQ,OAAO,cAAc,MAAM,KAAK,MAAM;AACpD,QAAM,QAAQ,OAAO,cAAc,MAAM,KAAK,MAAM;AAEpD,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,QAAM,YAAY,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AAC7C,MAAI,OAAO,SAAS,SAAS,KAAK,YAAY,MAAM;AAElD,UAAM,WAAW,oBAAoB,KAAK,IAAI,CAAC;AAC/C,YAAQ,KAAK,kBAAkB,UAAU,WAAW,cAAc,UAAU,CAAC;AAG7E,aAAS;AAAA,MACP,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,YAAY,mBAAmB,aAAa,sBAAsB,QAAQ;AAAA,IACzI;AAEA,wBAAoB,MAAM,IAAI,IAAI,SAAS;AAAA,EAC7C;AAGA,QAAM,eAAe,qBAAqB,MAAM;AAChD,QAAM,aAAa,eAAe,IAAI,YAAY,KAAK;AACvD,QAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACzC,QAAM,eAAgB,QAAQ,MAAO,KAAK;AAE1C,oBAAkB,MAAM,OAAO,OAAO,YAAY,UAAU;AAE5D,WAAS;AAAA,IACP,YAAY,KAAK,QAAQ,KAAK,gBAAgB,UAAU,WAAW,SAAS,4CAA4C,CAAC,YAAY,IAAI,KAAK,IAAI,KAAK,6BAA6B,KAAK,KAAK,UAAM,qBAAAA,SAAc,UAAU,CAAC;AAAA,EAC/N;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,SAAS,QAAQ,KAAK,EAAE,CAAC,aAAa,SAAS,KAAK,EAAE,CAAC;AAAA,EAClE;AACF;AAKA,SAAS,wBACP,QACA,UACA,SACA,UACkB;AAClB,QAAM,OAAO,IAAI,kBAAK;AACtB,QAAM,WAAqB,CAAC;AAG5B,QAAM,EAAE,WAAW,IAAI,wBAAwB,UAAU,SAAS,QAAQ;AAC1E,QAAM,EAAE,cAAc,WAAW,cAAc,IAAI,mBAAmB,QAAQ;AAG9E,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,cAAc,KAAK;AACrC,QAAM,KAAK,OAAO,OAAO,KAAK;AAC9B,QAAM,KAAK,OAAO,OAAO,KAAK;AAC9B,QAAM,QAAQ,OAAO,cAAc,KAAK;AACxC,QAAM,QAAQ,OAAO,cAAc,KAAK;AAExC,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;AACnC,OAAK,cAAc,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;AAGzC,WAAS;AAAA,IACP,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,YAAY,mBAAmB,aAAa;AAAA,EAC3G;AAGA,QAAM,eAAe,qBAAqB,MAAM;AAChD,MAAI,cAAc;AAChB,UAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACzC,UAAM,eAAgB,QAAQ,MAAO,KAAK;AAE1C,sBAAkB,MAAM,OAAO,OAAO,YAAY,YAAY;AAE9D,aAAS;AAAA,MACP,YAAY,KAAK,QAAQ,KAAK,gBAAgB,UAAU,WAAW,SAAS,4CAA4C,CAAC,YAAY,IAAI,KAAK,IAAI,KAAK,6BAA6B,KAAK,KAAK,UAAM,qBAAAA,SAAc,YAAY,CAAC;AAAA,IACjO;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,MAAM,SAAS,KAAK,EAAE,CAAC;AAAA,EAClC;AACF;AAKA,SAAS,wBAAwB,QAA2C;AAC1E,QAAM,OAAO,IAAI,kBAAK;AACtB,QAAM,WAAqB,CAAC;AAG5B,MAAI,OAAO,cAAc;AACvB,UAAM,QAAQ,OAAO,aAAa,KAAK;AACvC,UAAM,QAAQ,OAAO,aAAa,KAAK;AACvC,SAAK,cAAc,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,UAAM,eAAe,qBAAqB,MAAM;AAChD,QAAI,cAAc;AAChB,eAAS;AAAA,QACP,YAAY,KAAK,QAAQ,KAAK,6EAA6E,KAAK,KAAK,UAAM,qBAAAA,SAAc,YAAY,CAAC;AAAA,MACxJ;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,MAAM,SAAS,KAAK,EAAE,CAAC;AAAA,EAClC;AACF;",
  "names": ["round10", "colors", "escapeXmlText"]
}
