{
  "version": 3,
  "sources": ["../../../../src/lib/shapes/geo/getGeoShapePath.ts"],
  "sourcesContent": ["import {\n\tcenterOfCircleFromThreePoints,\n\tclamp,\n\tgetPointOnCircle,\n\tgetPolygonVertices,\n\tHALF_PI,\n\tPI,\n\tPI2,\n\trng,\n\tTLDefaultDashStyle,\n\tTLDefaultSizeStyle,\n\tTLGeoShape,\n\tVec,\n\tVecModel,\n\tWeakCache,\n} from '@tldraw/editor'\nimport { PathBuilder } from '../shared/PathBuilder'\n\n/**\n * Defines the behavior for a geo shape type. Every built-in geo type is\n * registered through this same interface (see {@link defaultGeoTypeDefinitions}),\n * and consumers can register additional types via\n * {@link @tldraw/tldraw#GeoShapeUtil.configure | GeoShapeUtil.configure()}.\n *\n * @public\n */\nexport interface GeoTypeDefinition {\n\t/**\n\t * Generate the path geometry for this geo type.\n\t *\n\t * @param w - The width of the shape (already clamped to min 1)\n\t * @param h - The height of the shape (already clamped to min 1, includes growY)\n\t * @param shape - The full geo shape record, for access to props like id, dash, fill, etc.\n\t * @param strokeWidth - The scaled stroke width (strokeWidth * scale)\n\t */\n\tgetPath(w: number, h: number, shape: TLGeoShape, strokeWidth: number): PathBuilder\n\t/** Snap behavior: 'polygon' snaps to vertices + center, 'blobby' snaps to center only. */\n\tsnapType: 'polygon' | 'blobby'\n\t/** Default creation size when clicking (not dragging). Defaults to 200x200. */\n\tdefaultSize?: { w: number; h: number }\n\t/** Icon name for the style panel geo picker. */\n\ticon: string\n\t/**\n\t * Optional double-click handler. Return an object with partial props to update the shape,\n\t * or void to do nothing.\n\t */\n\tonDoubleClick?(shape: TLGeoShape): { props: Partial<TLGeoShape['props']> } | void\n}\n\n/**\n * Built-in geo type definitions keyed by their `geo` prop value. Every default\n * geo type (rectangle, ellipse, cloud, etc.) is registered here. The same\n * registry powers path generation, handle snapping, the style panel picker,\n * and creation defaults \u2014 so custom types added through\n * {@link @tldraw/tldraw#GeoShapeUtil.configure | GeoShapeUtil.configure()} get\n * the same treatment as the built-ins.\n *\n * The key order here defines the visual order of items in the geo style panel\n * picker.\n *\n * @public\n */\nexport const defaultGeoTypeDefinitions = {\n\trectangle: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-rectangle',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(0, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w, 0)\n\t\t\t\t.lineTo(w, h)\n\t\t\t\t.lineTo(0, h)\n\t\t\t\t.close()\n\t\t},\n\t},\n\tellipse: {\n\t\tsnapType: 'blobby',\n\t\ticon: 'geo-ellipse',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst cx = w / 2\n\t\t\tconst cy = h / 2\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(0, cy, { geometry: { isFilled } })\n\t\t\t\t.arcTo(cx, cy, false, true, 0, w, cy)\n\t\t\t\t.arcTo(cx, cy, false, true, 0, 0, cy)\n\t\t\t\t.close()\n\t\t},\n\t},\n\ttriangle: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-triangle',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst cx = w / 2\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(cx, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w, h)\n\t\t\t\t.lineTo(0, h)\n\t\t\t\t.close()\n\t\t},\n\t},\n\tdiamond: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-diamond',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst cx = w / 2\n\t\t\tconst cy = h / 2\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(cx, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w, cy)\n\t\t\t\t.lineTo(cx, h)\n\t\t\t\t.lineTo(0, cy)\n\t\t\t\t.close()\n\t\t},\n\t},\n\tstar: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-star',\n\t\tdefaultSize: { w: 200, h: 190 },\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\treturn getStarPath(w, h, isFilled)\n\t\t},\n\t},\n\tpentagon: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-pentagon',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\treturn PathBuilder.lineThroughPoints(getPolygonVertices(w, h, 5), {\n\t\t\t\tgeometry: { isFilled },\n\t\t\t}).close()\n\t\t},\n\t},\n\thexagon: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-hexagon',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\treturn PathBuilder.lineThroughPoints(getPolygonVertices(w, h, 6), {\n\t\t\t\tgeometry: { isFilled },\n\t\t\t}).close()\n\t\t},\n\t},\n\toctagon: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-octagon',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\treturn PathBuilder.lineThroughPoints(getPolygonVertices(w, h, 8), {\n\t\t\t\tgeometry: { isFilled },\n\t\t\t}).close()\n\t\t},\n\t},\n\trhombus: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-rhombus',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst offset = Math.min(w * 0.38, h * 0.38)\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(offset, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w, 0)\n\t\t\t\t.lineTo(w - offset, h)\n\t\t\t\t.lineTo(0, h)\n\t\t\t\t.close()\n\t\t},\n\t},\n\t'rhombus-2': {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-rhombus-2',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst offset = Math.min(w * 0.38, h * 0.38)\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(0, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w - offset, 0)\n\t\t\t\t.lineTo(w, h)\n\t\t\t\t.lineTo(offset, h)\n\t\t\t\t.close()\n\t\t},\n\t},\n\toval: {\n\t\tsnapType: 'blobby',\n\t\ticon: 'geo-oval',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\treturn getStadiumPath(w, h, isFilled)\n\t\t},\n\t},\n\ttrapezoid: {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-trapezoid',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst offset = Math.min(w * 0.38, h * 0.38)\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(offset, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w - offset, 0)\n\t\t\t\t.lineTo(w, h)\n\t\t\t\t.lineTo(0, h)\n\t\t\t\t.close()\n\t\t},\n\t},\n\t'arrow-left': {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-arrow-left',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst ox = Math.min(w, h) * 0.38\n\t\t\tconst oy = h * 0.16\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(ox, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(ox, oy)\n\t\t\t\t.lineTo(w, oy)\n\t\t\t\t.lineTo(w, h - oy)\n\t\t\t\t.lineTo(ox, h - oy)\n\t\t\t\t.lineTo(ox, h)\n\t\t\t\t.lineTo(0, h / 2)\n\t\t\t\t.close()\n\t\t},\n\t},\n\t'arrow-up': {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-arrow-up',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst ox = w * 0.16\n\t\t\tconst oy = Math.min(w, h) * 0.38\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(w / 2, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w, oy)\n\t\t\t\t.lineTo(w - ox, oy)\n\t\t\t\t.lineTo(w - ox, h)\n\t\t\t\t.lineTo(ox, h)\n\t\t\t\t.lineTo(ox, oy)\n\t\t\t\t.lineTo(0, oy)\n\t\t\t\t.close()\n\t\t},\n\t},\n\t'arrow-down': {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-arrow-down',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst ox = w * 0.16\n\t\t\tconst oy = Math.min(w, h) * 0.38\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(ox, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w - ox, 0)\n\t\t\t\t.lineTo(w - ox, h - oy)\n\t\t\t\t.lineTo(w, h - oy)\n\t\t\t\t.lineTo(w / 2, h)\n\t\t\t\t.lineTo(0, h - oy)\n\t\t\t\t.lineTo(ox, h - oy)\n\t\t\t\t.close()\n\t\t},\n\t},\n\t'arrow-right': {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-arrow-right',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst ox = Math.min(w, h) * 0.38\n\t\t\tconst oy = h * 0.16\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(0, oy, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w - ox, oy)\n\t\t\t\t.lineTo(w - ox, 0)\n\t\t\t\t.lineTo(w, h / 2)\n\t\t\t\t.lineTo(w - ox, h)\n\t\t\t\t.lineTo(w - ox, h - oy)\n\t\t\t\t.lineTo(0, h - oy)\n\t\t\t\t.close()\n\t\t},\n\t},\n\tcloud: {\n\t\tsnapType: 'blobby',\n\t\ticon: 'geo-cloud',\n\t\tdefaultSize: { w: 300, h: 180 },\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\treturn getCloudPath(w, h, shape.id, shape.props.size, shape.props.scale, isFilled)\n\t\t},\n\t},\n\t'x-box': {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-x-box',\n\t\tgetPath(w, h, shape, strokeWidth) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\treturn getXBoxPath(w, h, strokeWidth, shape.props.dash, isFilled)\n\t\t},\n\t},\n\t'check-box': {\n\t\tsnapType: 'polygon',\n\t\ticon: 'geo-check-box',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst size = Math.min(w, h) * 0.82\n\t\t\tconst ox = (w - size) / 2\n\t\t\tconst oy = (h - size) / 2\n\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(0, 0, { geometry: { isFilled } })\n\t\t\t\t.lineTo(w, 0)\n\t\t\t\t.lineTo(w, h)\n\t\t\t\t.lineTo(0, h)\n\t\t\t\t.close()\n\t\t\t\t.moveTo(clamp(ox + size * 0.25, 0, w), clamp(oy + size * 0.52, 0, h), {\n\t\t\t\t\tgeometry: { isInternal: true, isFilled: false },\n\t\t\t\t\toffset: 0,\n\t\t\t\t})\n\t\t\t\t.lineTo(clamp(ox + size * 0.45, 0, w), clamp(oy + size * 0.82, 0, h))\n\t\t\t\t.lineTo(clamp(ox + size * 0.82, 0, w), clamp(oy + size * 0.22, 0, h), { offset: 0 })\n\t\t},\n\t},\n\theart: {\n\t\tsnapType: 'blobby',\n\t\ticon: 'geo-heart',\n\t\tgetPath(w, h, shape) {\n\t\t\tconst isFilled = shape.props.fill !== 'none'\n\t\t\tconst cx = w / 2\n\t\t\tconst o = w / 4\n\t\t\tconst k = h / 4\n\t\t\treturn new PathBuilder()\n\t\t\t\t.moveTo(cx, h, { geometry: { isFilled } })\n\t\t\t\t.cubicBezierTo(0, k * 1.2, o * 1.5, k * 3, 0, k * 2.5)\n\t\t\t\t.cubicBezierTo(cx, k * 0.9, 0, -k * 0.32, o * 1.85, -k * 0.32)\n\t\t\t\t.cubicBezierTo(w, k * 1.2, o * 2.15, -k * 0.32, w, -k * 0.32)\n\t\t\t\t.cubicBezierTo(cx, h, w, k * 2.5, o * 2.5, k * 3)\n\t\t\t\t.close()\n\t\t},\n\t},\n} as const satisfies Record<string, GeoTypeDefinition>\n\n/**\n * Look up a geo type definition by name, checking custom types first then\n * falling back to the built-in registry.\n *\n * @public\n */\nexport function getGeoTypeDefinition(\n\tname: string,\n\tcustomGeoTypes?: Record<string, GeoTypeDefinition>\n): GeoTypeDefinition | undefined {\n\treturn (\n\t\tcustomGeoTypes?.[name] ?? (defaultGeoTypeDefinitions as Record<string, GeoTypeDefinition>)[name]\n\t)\n}\n\nconst pathCache = new WeakCache<TLGeoShape, PathBuilder>()\nexport function getGeoShapePath(\n\tshape: TLGeoShape,\n\tstrokeWidth: number,\n\tcustomGeoTypes?: Record<string, GeoTypeDefinition>\n) {\n\t// Cache is keyed on shape only. For x-box, strokeWidth affects the diagonal\n\t// inset, but theme changes are rare enough that stale cache entries are acceptable.\n\treturn pathCache.get(shape, (s) => _getGeoPath(s, strokeWidth, customGeoTypes))\n}\n\nfunction _getGeoPath(\n\tshape: TLGeoShape,\n\tstrokeWidth: number,\n\tcustomGeoTypes?: Record<string, GeoTypeDefinition>\n) {\n\tconst w = Math.max(1, shape.props.w)\n\tconst h = Math.max(1, shape.props.h + shape.props.growY)\n\tconst sw = strokeWidth * shape.props.scale\n\n\tconst def = getGeoTypeDefinition(shape.props.geo, customGeoTypes)\n\tif (!def) {\n\t\tthrow new Error(`Unknown geo type: ${shape.props.geo}`)\n\t}\n\treturn def.getPath(w, h, shape, sw)\n}\n\nfunction getXBoxPath(\n\tw: number,\n\th: number,\n\tsw: number,\n\tdash: TLDefaultDashStyle,\n\tisFilled: boolean\n) {\n\tconst cx = w / 2\n\tconst cy = h / 2\n\n\tconst path = new PathBuilder()\n\t\t.moveTo(0, 0, { geometry: { isFilled } })\n\t\t.lineTo(w, 0)\n\t\t.lineTo(w, h)\n\t\t.lineTo(0, h)\n\t\t.close()\n\n\tif (dash === 'none') {\n\t\treturn path\n\t}\n\n\tif (dash === 'dashed' || dash === 'dotted') {\n\t\treturn path\n\t\t\t.moveTo(0, 0, {\n\t\t\t\tgeometry: { isInternal: true, isFilled: false },\n\t\t\t\tdashStart: 'skip',\n\t\t\t\tdashEnd: 'outset',\n\t\t\t})\n\t\t\t.lineTo(cx, cy)\n\t\t\t.moveTo(w, h, {\n\t\t\t\tgeometry: { isInternal: true, isFilled: false },\n\t\t\t\tdashStart: 'skip',\n\t\t\t\tdashEnd: 'outset',\n\t\t\t})\n\t\t\t.lineTo(cx, cy)\n\t\t\t.moveTo(0, h, {\n\t\t\t\tgeometry: { isInternal: true, isFilled: false },\n\t\t\t\tdashStart: 'skip',\n\t\t\t\tdashEnd: 'outset',\n\t\t\t})\n\t\t\t.lineTo(cx, cy)\n\t\t\t.moveTo(w, 0, {\n\t\t\t\tgeometry: { isInternal: true, isFilled: false },\n\t\t\t\tdashStart: 'skip',\n\t\t\t\tdashEnd: 'outset',\n\t\t\t})\n\t\t\t.lineTo(cx, cy)\n\t}\n\n\tconst inset = dash === 'draw' ? 0.62 : 0\n\n\tpath\n\t\t.moveTo(clamp(sw * inset, 0, w), clamp(sw * inset, 0, h), {\n\t\t\tgeometry: { isInternal: true, isFilled: false },\n\t\t})\n\t\t.lineTo(clamp(w - sw * inset, 0, w), clamp(h - sw * inset, 0, h))\n\t\t.moveTo(clamp(w - sw * inset, 0, w), clamp(sw * inset, 0, h))\n\t\t.lineTo(clamp(sw * inset, 0, w), clamp(h - sw * inset, 0, h))\n\n\treturn path\n}\n\nfunction getStadiumPath(w: number, h: number, isFilled: boolean) {\n\t// stadium:\n\tif (h > w) {\n\t\tconst r = w / 2\n\t\treturn new PathBuilder()\n\t\t\t.moveTo(0, r, { geometry: { isFilled } })\n\t\t\t.arcTo(r, r, false, true, 0, w, r)\n\t\t\t.lineTo(w, h - r)\n\t\t\t.arcTo(r, r, false, true, 0, 0, h - r)\n\t\t\t.close()\n\t}\n\n\tconst r = h / 2\n\treturn new PathBuilder()\n\t\t.moveTo(r, h, { geometry: { isFilled } })\n\t\t.arcTo(r, r, false, true, 0, r, 0)\n\t\t.lineTo(w - r, 0)\n\t\t.arcTo(r, r, false, true, 0, w - r, h)\n\t\t.close()\n}\n\nfunction getStarPath(w: number, h: number, isFilled: boolean) {\n\t// Most of this code is to offset the center, a 5 point star\n\t// will need to be moved downward because from its center [0,0]\n\t// it will have a bigger minY than maxY. This is because it'll\n\t// have 2 points at the bottom.\n\tconst sides = 5\n\tconst step = PI2 / sides / 2\n\tconst rightMostIndex = Math.floor(sides / 4) * 2\n\tconst leftMostIndex = sides * 2 - rightMostIndex\n\tconst topMostIndex = 0\n\tconst bottomMostIndex = Math.floor(sides / 2) * 2\n\tconst maxX = (Math.cos(-HALF_PI + rightMostIndex * step) * w) / 2\n\tconst minX = (Math.cos(-HALF_PI + leftMostIndex * step) * w) / 2\n\n\tconst minY = (Math.sin(-HALF_PI + topMostIndex * step) * h) / 2\n\tconst maxY = (Math.sin(-HALF_PI + bottomMostIndex * step) * h) / 2\n\tconst diffX = w - Math.abs(maxX - minX)\n\tconst diffY = h - Math.abs(maxY - minY)\n\tconst offsetX = w / 2 + minX - (w / 2 - maxX)\n\tconst offsetY = h / 2 + minY - (h / 2 - maxY)\n\n\tconst ratio = 1\n\tconst cx = (w - offsetX) / 2\n\tconst cy = (h - offsetY) / 2\n\tconst ox = (w + diffX) / 2\n\tconst oy = (h + diffY) / 2\n\tconst ix = (ox * ratio) / 2\n\tconst iy = (oy * ratio) / 2\n\n\treturn PathBuilder.lineThroughPoints(\n\t\tArray.from(Array(sides * 2), (_, i) => {\n\t\t\tconst theta = -HALF_PI + i * step\n\t\t\treturn new Vec(\n\t\t\t\tcx + (i % 2 ? ix : ox) * Math.cos(theta),\n\t\t\t\tcy + (i % 2 ? iy : oy) * Math.sin(theta)\n\t\t\t)\n\t\t}),\n\t\t{ geometry: { isFilled } }\n\t).close()\n}\n\n/* ---------------------- Cloud --------------------- */\n\nfunction getOvalPerimeter(h: number, w: number) {\n\tif (h > w) return (PI * (w / 2) + (h - w)) * 2\n\telse return (PI * (h / 2) + (w - h)) * 2\n}\n\ntype PillSection =\n\t| {\n\t\t\ttype: 'straight'\n\t\t\tstart: VecModel\n\t\t\tdelta: VecModel\n\t  }\n\t| {\n\t\t\ttype: 'arc'\n\t\t\tcenter: VecModel\n\t\t\tstartAngle: number\n\t  }\n\nfunction getPillPoints(width: number, height: number, numPoints: number) {\n\tconst radius = Math.min(width, height) / 2\n\tconst longSide = Math.max(width, height) - radius * 2\n\tconst circumference = Math.PI * (radius * 2) + 2 * longSide\n\tconst spacing = circumference / numPoints\n\n\tconst sections: PillSection[] =\n\t\twidth > height\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'straight',\n\t\t\t\t\t\tstart: new Vec(radius, 0),\n\t\t\t\t\t\tdelta: new Vec(1, 0),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'arc',\n\t\t\t\t\t\tcenter: new Vec(width - radius, radius),\n\t\t\t\t\t\tstartAngle: -PI / 2,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'straight',\n\t\t\t\t\t\tstart: new Vec(width - radius, height),\n\t\t\t\t\t\tdelta: new Vec(-1, 0),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'arc',\n\t\t\t\t\t\tcenter: new Vec(radius, radius),\n\t\t\t\t\t\tstartAngle: PI / 2,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'straight',\n\t\t\t\t\t\tstart: new Vec(width, radius),\n\t\t\t\t\t\tdelta: new Vec(0, 1),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'arc',\n\t\t\t\t\t\tcenter: new Vec(radius, height - radius),\n\t\t\t\t\t\tstartAngle: 0,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'straight',\n\t\t\t\t\t\tstart: new Vec(0, height - radius),\n\t\t\t\t\t\tdelta: new Vec(0, -1),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'arc',\n\t\t\t\t\t\tcenter: new Vec(radius, radius),\n\t\t\t\t\t\tstartAngle: PI,\n\t\t\t\t\t},\n\t\t\t\t]\n\n\tlet sectionOffset = 0\n\n\tconst points: Vec[] = []\n\tfor (let i = 0; i < numPoints; i++) {\n\t\tconst section = sections[0]\n\t\tif (section.type === 'straight') {\n\t\t\tpoints.push(Vec.Add(section.start, Vec.Mul(section.delta, sectionOffset)))\n\t\t} else {\n\t\t\tpoints.push(\n\t\t\t\tgetPointOnCircle(section.center, radius, section.startAngle + sectionOffset / radius)\n\t\t\t)\n\t\t}\n\t\tsectionOffset += spacing\n\t\tlet sectionLength = section.type === 'straight' ? longSide : PI * radius\n\t\twhile (sectionOffset > sectionLength) {\n\t\t\tsectionOffset -= sectionLength\n\t\t\tsections.push(sections.shift()!)\n\t\t\tsectionLength = sections[0].type === 'straight' ? longSide : PI * radius\n\t\t}\n\t}\n\n\treturn points\n}\n\nconst SIZES: Record<TLDefaultSizeStyle, number> = {\n\ts: 50,\n\tm: 70,\n\tl: 100,\n\txl: 130,\n}\n\nconst BUMP_PROTRUSION = 0.2\n\nfunction getCloudPath(\n\twidth: number,\n\theight: number,\n\tseed: string,\n\tsize: TLDefaultSizeStyle,\n\tscale: number,\n\tisFilled: boolean\n) {\n\tconst path = new PathBuilder()\n\tconst getRandom = rng(seed)\n\tconst pillCircumference = getOvalPerimeter(width, height)\n\tconst numBumps = Math.max(\n\t\tMath.ceil(pillCircumference / SIZES[size]),\n\t\t6,\n\t\tMath.ceil(pillCircumference / Math.min(width, height))\n\t)\n\tconst targetBumpProtrusion = (pillCircumference / numBumps) * BUMP_PROTRUSION\n\n\t// if the aspect ratio is high, innerWidth should be smaller\n\tconst innerWidth = Math.max(width - targetBumpProtrusion * 2, 1)\n\tconst innerHeight = Math.max(height - targetBumpProtrusion * 2, 1)\n\tconst innerCircumference = getOvalPerimeter(innerWidth, innerHeight)\n\n\tconst distanceBetweenPointsOnPerimeter = innerCircumference / numBumps\n\n\tconst paddingX = (width - innerWidth) / 2\n\tconst paddingY = (height - innerHeight) / 2\n\tconst bumpPoints = getPillPoints(innerWidth, innerHeight, numBumps).map((p) => {\n\t\treturn p.addXY(paddingX, paddingY)\n\t})\n\tconst maxWiggleX = width < 20 ? 0 : targetBumpProtrusion * 0.3\n\tconst maxWiggleY = height < 20 ? 0 : targetBumpProtrusion * 0.3\n\n\t// wiggle the points from either end so that the bumps 'pop'\n\t// in at the bottom-right and the top-left looks relatively stable\n\t// note: it's important that we don't mutate here! these points are also the bump points\n\tconst wiggledPoints = bumpPoints.slice(0)\n\tfor (let i = 0; i < Math.floor(numBumps / 2); i++) {\n\t\twiggledPoints[i] = Vec.AddXY(\n\t\t\twiggledPoints[i],\n\t\t\tgetRandom() * maxWiggleX * scale,\n\t\t\tgetRandom() * maxWiggleY * scale\n\t\t)\n\t\twiggledPoints[numBumps - i - 1] = Vec.AddXY(\n\t\t\twiggledPoints[numBumps - i - 1],\n\t\t\tgetRandom() * maxWiggleX * scale,\n\t\t\tgetRandom() * maxWiggleY * scale\n\t\t)\n\t}\n\n\tfor (let i = 0; i < wiggledPoints.length; i++) {\n\t\tconst j = i === wiggledPoints.length - 1 ? 0 : i + 1\n\t\tconst leftWigglePoint = wiggledPoints[i]\n\t\tconst rightWigglePoint = wiggledPoints[j]\n\t\tconst leftPoint = bumpPoints[i]\n\t\tconst rightPoint = bumpPoints[j]\n\n\t\t// when the points are on the curvy part of a pill, there is a natural arc that we need to extends past\n\t\t// otherwise it looks like the bumps get less bumpy on the curvy parts\n\t\tconst distanceBetweenOriginalPoints = Vec.Dist(leftPoint, rightPoint)\n\t\tconst curvatureOffset = distanceBetweenPointsOnPerimeter - distanceBetweenOriginalPoints\n\t\tconst distanceBetweenWigglePoints = Vec.Dist(leftWigglePoint, rightWigglePoint)\n\t\tconst relativeSize = distanceBetweenWigglePoints / distanceBetweenOriginalPoints\n\t\tconst finalDistance = (Math.max(paddingX, paddingY) + curvatureOffset) * relativeSize\n\n\t\tconst arcPoint = Vec.Lrp(leftPoint, rightPoint, 0.5).add(\n\t\t\tVec.Sub(rightPoint, leftPoint).uni().per().mul(finalDistance)\n\t\t)\n\t\tif (arcPoint.x < 0) {\n\t\t\tarcPoint.x = 0\n\t\t} else if (arcPoint.x > width) {\n\t\t\tarcPoint.x = width\n\t\t}\n\t\tif (arcPoint.y < 0) {\n\t\t\tarcPoint.y = 0\n\t\t} else if (arcPoint.y > height) {\n\t\t\tarcPoint.y = height\n\t\t}\n\n\t\tconst center = centerOfCircleFromThreePoints(leftWigglePoint, rightWigglePoint, arcPoint)\n\n\t\tconst radius = Vec.Dist(\n\t\t\tcenter ? center : Vec.Average([leftWigglePoint, rightWigglePoint]),\n\t\t\tleftWigglePoint\n\t\t)\n\n\t\tif (i === 0) {\n\t\t\tpath.moveTo(leftWigglePoint.x, leftWigglePoint.y, { geometry: { isFilled } })\n\t\t}\n\n\t\tpath.circularArcTo(radius, false, true, rightWigglePoint.x, rightWigglePoint.y)\n\t}\n\n\treturn path.close()\n}\n"],
  "mappings": "AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EAEA;AAAA,OACM;AACP,SAAS,mBAAmB;AA8CrB,MAAM,4BAA4B;AAAA,EACxC,WAAW;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,aAAO,IAAI,YAAY,EACrB,OAAO,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACvC,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,KAAK,IAAI;AACf,YAAM,KAAK,IAAI;AACf,aAAO,IAAI,YAAY,EACrB,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACxC,MAAM,IAAI,IAAI,OAAO,MAAM,GAAG,GAAG,EAAE,EACnC,MAAM,IAAI,IAAI,OAAO,MAAM,GAAG,GAAG,EAAE,EACnC,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,UAAU;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,KAAK,IAAI;AACf,aAAO,IAAI,YAAY,EACrB,OAAO,IAAI,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACxC,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,KAAK,IAAI;AACf,YAAM,KAAK,IAAI;AACf,aAAO,IAAI,YAAY,EACrB,OAAO,IAAI,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACxC,OAAO,GAAG,EAAE,EACZ,OAAO,IAAI,CAAC,EACZ,OAAO,GAAG,EAAE,EACZ,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,MAAM;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa,EAAE,GAAG,KAAK,GAAG,IAAI;AAAA,IAC9B,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,aAAO,YAAY,GAAG,GAAG,QAAQ;AAAA,IAClC;AAAA,EACD;AAAA,EACA,UAAU;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,aAAO,YAAY,kBAAkB,mBAAmB,GAAG,GAAG,CAAC,GAAG;AAAA,QACjE,UAAU,EAAE,SAAS;AAAA,MACtB,CAAC,EAAE,MAAM;AAAA,IACV;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,aAAO,YAAY,kBAAkB,mBAAmB,GAAG,GAAG,CAAC,GAAG;AAAA,QACjE,UAAU,EAAE,SAAS;AAAA,MACtB,CAAC,EAAE,MAAM;AAAA,IACV;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,aAAO,YAAY,kBAAkB,mBAAmB,GAAG,GAAG,CAAC,GAAG;AAAA,QACjE,UAAU,EAAE,SAAS;AAAA,MACtB,CAAC,EAAE,MAAM;AAAA,IACV;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,SAAS,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI;AAC1C,aAAO,IAAI,YAAY,EACrB,OAAO,QAAQ,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAC5C,OAAO,GAAG,CAAC,EACX,OAAO,IAAI,QAAQ,CAAC,EACpB,OAAO,GAAG,CAAC,EACX,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,aAAa;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,SAAS,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI;AAC1C,aAAO,IAAI,YAAY,EACrB,OAAO,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACvC,OAAO,IAAI,QAAQ,CAAC,EACpB,OAAO,GAAG,CAAC,EACX,OAAO,QAAQ,CAAC,EAChB,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,MAAM;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,aAAO,eAAe,GAAG,GAAG,QAAQ;AAAA,IACrC;AAAA,EACD;AAAA,EACA,WAAW;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,SAAS,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI;AAC1C,aAAO,IAAI,YAAY,EACrB,OAAO,QAAQ,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAC5C,OAAO,IAAI,QAAQ,CAAC,EACpB,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,cAAc;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI;AAC5B,YAAM,KAAK,IAAI;AACf,aAAO,IAAI,YAAY,EACrB,OAAO,IAAI,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACxC,OAAO,IAAI,EAAE,EACb,OAAO,GAAG,EAAE,EACZ,OAAO,GAAG,IAAI,EAAE,EAChB,OAAO,IAAI,IAAI,EAAE,EACjB,OAAO,IAAI,CAAC,EACZ,OAAO,GAAG,IAAI,CAAC,EACf,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,YAAY;AAAA,IACX,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,KAAK,IAAI;AACf,YAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI;AAC5B,aAAO,IAAI,YAAY,EACrB,OAAO,IAAI,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAC3C,OAAO,GAAG,EAAE,EACZ,OAAO,IAAI,IAAI,EAAE,EACjB,OAAO,IAAI,IAAI,CAAC,EAChB,OAAO,IAAI,CAAC,EACZ,OAAO,IAAI,EAAE,EACb,OAAO,GAAG,EAAE,EACZ,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,cAAc;AAAA,IACb,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,KAAK,IAAI;AACf,YAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI;AAC5B,aAAO,IAAI,YAAY,EACrB,OAAO,IAAI,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACxC,OAAO,IAAI,IAAI,CAAC,EAChB,OAAO,IAAI,IAAI,IAAI,EAAE,EACrB,OAAO,GAAG,IAAI,EAAE,EAChB,OAAO,IAAI,GAAG,CAAC,EACf,OAAO,GAAG,IAAI,EAAE,EAChB,OAAO,IAAI,IAAI,EAAE,EACjB,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,eAAe;AAAA,IACd,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI;AAC5B,YAAM,KAAK,IAAI;AACf,aAAO,IAAI,YAAY,EACrB,OAAO,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACxC,OAAO,IAAI,IAAI,EAAE,EACjB,OAAO,IAAI,IAAI,CAAC,EAChB,OAAO,GAAG,IAAI,CAAC,EACf,OAAO,IAAI,IAAI,CAAC,EAChB,OAAO,IAAI,IAAI,IAAI,EAAE,EACrB,OAAO,GAAG,IAAI,EAAE,EAChB,MAAM;AAAA,IACT;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa,EAAE,GAAG,KAAK,GAAG,IAAI;AAAA,IAC9B,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,aAAO,aAAa,GAAG,GAAG,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,QAAQ;AAAA,IAClF;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO,aAAa;AACjC,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,aAAO,YAAY,GAAG,GAAG,aAAa,MAAM,MAAM,MAAM,QAAQ;AAAA,IACjE;AAAA,EACD;AAAA,EACA,aAAa;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,OAAO,KAAK,IAAI,GAAG,CAAC,IAAI;AAC9B,YAAM,MAAM,IAAI,QAAQ;AACxB,YAAM,MAAM,IAAI,QAAQ;AAExB,aAAO,IAAI,YAAY,EACrB,OAAO,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACvC,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,MAAM,EACN,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG,CAAC,GAAG,MAAM,KAAK,OAAO,MAAM,GAAG,CAAC,GAAG;AAAA,QACrE,UAAU,EAAE,YAAY,MAAM,UAAU,MAAM;AAAA,QAC9C,QAAQ;AAAA,MACT,CAAC,EACA,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG,CAAC,GAAG,MAAM,KAAK,OAAO,MAAM,GAAG,CAAC,CAAC,EACnE,OAAO,MAAM,KAAK,OAAO,MAAM,GAAG,CAAC,GAAG,MAAM,KAAK,OAAO,MAAM,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC;AAAA,IACrF;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,GAAG,GAAG,OAAO;AACpB,YAAM,WAAW,MAAM,MAAM,SAAS;AACtC,YAAM,KAAK,IAAI;AACf,YAAM,IAAI,IAAI;AACd,YAAM,IAAI,IAAI;AACd,aAAO,IAAI,YAAY,EACrB,OAAO,IAAI,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACxC,cAAc,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,GAAG,EACpD,cAAc,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,EAC5D,cAAc,GAAG,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,EAC3D,cAAc,IAAI,GAAG,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,EAC/C,MAAM;AAAA,IACT;AAAA,EACD;AACD;AAQO,SAAS,qBACf,MACA,gBACgC;AAChC,SACC,iBAAiB,IAAI,KAAM,0BAAgE,IAAI;AAEjG;AAEA,MAAM,YAAY,IAAI,UAAmC;AAClD,SAAS,gBACf,OACA,aACA,gBACC;AAGD,SAAO,UAAU,IAAI,OAAO,CAAC,MAAM,YAAY,GAAG,aAAa,cAAc,CAAC;AAC/E;AAEA,SAAS,YACR,OACA,aACA,gBACC;AACD,QAAM,IAAI,KAAK,IAAI,GAAG,MAAM,MAAM,CAAC;AACnC,QAAM,IAAI,KAAK,IAAI,GAAG,MAAM,MAAM,IAAI,MAAM,MAAM,KAAK;AACvD,QAAM,KAAK,cAAc,MAAM,MAAM;AAErC,QAAM,MAAM,qBAAqB,MAAM,MAAM,KAAK,cAAc;AAChE,MAAI,CAAC,KAAK;AACT,UAAM,IAAI,MAAM,qBAAqB,MAAM,MAAM,GAAG,EAAE;AAAA,EACvD;AACA,SAAO,IAAI,QAAQ,GAAG,GAAG,OAAO,EAAE;AACnC;AAEA,SAAS,YACR,GACA,GACA,IACA,MACA,UACC;AACD,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AAEf,QAAM,OAAO,IAAI,YAAY,EAC3B,OAAO,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACvC,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,MAAM;AAER,MAAI,SAAS,QAAQ;AACpB,WAAO;AAAA,EACR;AAEA,MAAI,SAAS,YAAY,SAAS,UAAU;AAC3C,WAAO,KACL,OAAO,GAAG,GAAG;AAAA,MACb,UAAU,EAAE,YAAY,MAAM,UAAU,MAAM;AAAA,MAC9C,WAAW;AAAA,MACX,SAAS;AAAA,IACV,CAAC,EACA,OAAO,IAAI,EAAE,EACb,OAAO,GAAG,GAAG;AAAA,MACb,UAAU,EAAE,YAAY,MAAM,UAAU,MAAM;AAAA,MAC9C,WAAW;AAAA,MACX,SAAS;AAAA,IACV,CAAC,EACA,OAAO,IAAI,EAAE,EACb,OAAO,GAAG,GAAG;AAAA,MACb,UAAU,EAAE,YAAY,MAAM,UAAU,MAAM;AAAA,MAC9C,WAAW;AAAA,MACX,SAAS;AAAA,IACV,CAAC,EACA,OAAO,IAAI,EAAE,EACb,OAAO,GAAG,GAAG;AAAA,MACb,UAAU,EAAE,YAAY,MAAM,UAAU,MAAM;AAAA,MAC9C,WAAW;AAAA,MACX,SAAS;AAAA,IACV,CAAC,EACA,OAAO,IAAI,EAAE;AAAA,EAChB;AAEA,QAAM,QAAQ,SAAS,SAAS,OAAO;AAEvC,OACE,OAAO,MAAM,KAAK,OAAO,GAAG,CAAC,GAAG,MAAM,KAAK,OAAO,GAAG,CAAC,GAAG;AAAA,IACzD,UAAU,EAAE,YAAY,MAAM,UAAU,MAAM;AAAA,EAC/C,CAAC,EACA,OAAO,MAAM,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC,EAC/D,OAAO,MAAM,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,MAAM,KAAK,OAAO,GAAG,CAAC,CAAC,EAC3D,OAAO,MAAM,KAAK,OAAO,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC;AAE7D,SAAO;AACR;AAEA,SAAS,eAAe,GAAW,GAAW,UAAmB;AAEhE,MAAI,IAAI,GAAG;AACV,UAAMA,KAAI,IAAI;AACd,WAAO,IAAI,YAAY,EACrB,OAAO,GAAGA,IAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACvC,MAAMA,IAAGA,IAAG,OAAO,MAAM,GAAG,GAAGA,EAAC,EAChC,OAAO,GAAG,IAAIA,EAAC,EACf,MAAMA,IAAGA,IAAG,OAAO,MAAM,GAAG,GAAG,IAAIA,EAAC,EACpC,MAAM;AAAA,EACT;AAEA,QAAM,IAAI,IAAI;AACd,SAAO,IAAI,YAAY,EACrB,OAAO,GAAG,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EACvC,MAAM,GAAG,GAAG,OAAO,MAAM,GAAG,GAAG,CAAC,EAChC,OAAO,IAAI,GAAG,CAAC,EACf,MAAM,GAAG,GAAG,OAAO,MAAM,GAAG,IAAI,GAAG,CAAC,EACpC,MAAM;AACT;AAEA,SAAS,YAAY,GAAW,GAAW,UAAmB;AAK7D,QAAM,QAAQ;AACd,QAAM,OAAO,MAAM,QAAQ;AAC3B,QAAM,iBAAiB,KAAK,MAAM,QAAQ,CAAC,IAAI;AAC/C,QAAM,gBAAgB,QAAQ,IAAI;AAClC,QAAM,eAAe;AACrB,QAAM,kBAAkB,KAAK,MAAM,QAAQ,CAAC,IAAI;AAChD,QAAM,OAAQ,KAAK,IAAI,CAAC,UAAU,iBAAiB,IAAI,IAAI,IAAK;AAChE,QAAM,OAAQ,KAAK,IAAI,CAAC,UAAU,gBAAgB,IAAI,IAAI,IAAK;AAE/D,QAAM,OAAQ,KAAK,IAAI,CAAC,UAAU,eAAe,IAAI,IAAI,IAAK;AAC9D,QAAM,OAAQ,KAAK,IAAI,CAAC,UAAU,kBAAkB,IAAI,IAAI,IAAK;AACjE,QAAM,QAAQ,IAAI,KAAK,IAAI,OAAO,IAAI;AACtC,QAAM,QAAQ,IAAI,KAAK,IAAI,OAAO,IAAI;AACtC,QAAM,UAAU,IAAI,IAAI,QAAQ,IAAI,IAAI;AACxC,QAAM,UAAU,IAAI,IAAI,QAAQ,IAAI,IAAI;AAExC,QAAM,QAAQ;AACd,QAAM,MAAM,IAAI,WAAW;AAC3B,QAAM,MAAM,IAAI,WAAW;AAC3B,QAAM,MAAM,IAAI,SAAS;AACzB,QAAM,MAAM,IAAI,SAAS;AACzB,QAAM,KAAM,KAAK,QAAS;AAC1B,QAAM,KAAM,KAAK,QAAS;AAE1B,SAAO,YAAY;AAAA,IAClB,MAAM,KAAK,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM;AACtC,YAAM,QAAQ,CAAC,UAAU,IAAI;AAC7B,aAAO,IAAI;AAAA,QACV,MAAM,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK;AAAA,QACvC,MAAM,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK;AAAA,MACxC;AAAA,IACD,CAAC;AAAA,IACD,EAAE,UAAU,EAAE,SAAS,EAAE;AAAA,EAC1B,EAAE,MAAM;AACT;AAIA,SAAS,iBAAiB,GAAW,GAAW;AAC/C,MAAI,IAAI,EAAG,SAAQ,MAAM,IAAI,MAAM,IAAI,MAAM;AAAA,MACxC,SAAQ,MAAM,IAAI,MAAM,IAAI,MAAM;AACxC;AAcA,SAAS,cAAc,OAAe,QAAgB,WAAmB;AACxE,QAAM,SAAS,KAAK,IAAI,OAAO,MAAM,IAAI;AACzC,QAAM,WAAW,KAAK,IAAI,OAAO,MAAM,IAAI,SAAS;AACpD,QAAM,gBAAgB,KAAK,MAAM,SAAS,KAAK,IAAI;AACnD,QAAM,UAAU,gBAAgB;AAEhC,QAAM,WACL,QAAQ,SACL;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,OAAO,IAAI,IAAI,QAAQ,CAAC;AAAA,MACxB,OAAO,IAAI,IAAI,GAAG,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,IAAI,IAAI,QAAQ,QAAQ,MAAM;AAAA,MACtC,YAAY,CAAC,KAAK;AAAA,IACnB;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,OAAO,IAAI,IAAI,QAAQ,QAAQ,MAAM;AAAA,MACrC,OAAO,IAAI,IAAI,IAAI,CAAC;AAAA,IACrB;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,IAAI,IAAI,QAAQ,MAAM;AAAA,MAC9B,YAAY,KAAK;AAAA,IAClB;AAAA,EACD,IACC;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,OAAO,IAAI,IAAI,OAAO,MAAM;AAAA,MAC5B,OAAO,IAAI,IAAI,GAAG,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,IAAI,IAAI,QAAQ,SAAS,MAAM;AAAA,MACvC,YAAY;AAAA,IACb;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,OAAO,IAAI,IAAI,GAAG,SAAS,MAAM;AAAA,MACjC,OAAO,IAAI,IAAI,GAAG,EAAE;AAAA,IACrB;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,IAAI,IAAI,QAAQ,MAAM;AAAA,MAC9B,YAAY;AAAA,IACb;AAAA,EACD;AAEH,MAAI,gBAAgB;AAEpB,QAAM,SAAgB,CAAC;AACvB,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AACnC,UAAM,UAAU,SAAS,CAAC;AAC1B,QAAI,QAAQ,SAAS,YAAY;AAChC,aAAO,KAAK,IAAI,IAAI,QAAQ,OAAO,IAAI,IAAI,QAAQ,OAAO,aAAa,CAAC,CAAC;AAAA,IAC1E,OAAO;AACN,aAAO;AAAA,QACN,iBAAiB,QAAQ,QAAQ,QAAQ,QAAQ,aAAa,gBAAgB,MAAM;AAAA,MACrF;AAAA,IACD;AACA,qBAAiB;AACjB,QAAI,gBAAgB,QAAQ,SAAS,aAAa,WAAW,KAAK;AAClE,WAAO,gBAAgB,eAAe;AACrC,uBAAiB;AACjB,eAAS,KAAK,SAAS,MAAM,CAAE;AAC/B,sBAAgB,SAAS,CAAC,EAAE,SAAS,aAAa,WAAW,KAAK;AAAA,IACnE;AAAA,EACD;AAEA,SAAO;AACR;AAEA,MAAM,QAA4C;AAAA,EACjD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AACL;AAEA,MAAM,kBAAkB;AAExB,SAAS,aACR,OACA,QACA,MACA,MACA,OACA,UACC;AACD,QAAM,OAAO,IAAI,YAAY;AAC7B,QAAM,YAAY,IAAI,IAAI;AAC1B,QAAM,oBAAoB,iBAAiB,OAAO,MAAM;AACxD,QAAM,WAAW,KAAK;AAAA,IACrB,KAAK,KAAK,oBAAoB,MAAM,IAAI,CAAC;AAAA,IACzC;AAAA,IACA,KAAK,KAAK,oBAAoB,KAAK,IAAI,OAAO,MAAM,CAAC;AAAA,EACtD;AACA,QAAM,uBAAwB,oBAAoB,WAAY;AAG9D,QAAM,aAAa,KAAK,IAAI,QAAQ,uBAAuB,GAAG,CAAC;AAC/D,QAAM,cAAc,KAAK,IAAI,SAAS,uBAAuB,GAAG,CAAC;AACjE,QAAM,qBAAqB,iBAAiB,YAAY,WAAW;AAEnE,QAAM,mCAAmC,qBAAqB;AAE9D,QAAM,YAAY,QAAQ,cAAc;AACxC,QAAM,YAAY,SAAS,eAAe;AAC1C,QAAM,aAAa,cAAc,YAAY,aAAa,QAAQ,EAAE,IAAI,CAAC,MAAM;AAC9E,WAAO,EAAE,MAAM,UAAU,QAAQ;AAAA,EAClC,CAAC;AACD,QAAM,aAAa,QAAQ,KAAK,IAAI,uBAAuB;AAC3D,QAAM,aAAa,SAAS,KAAK,IAAI,uBAAuB;AAK5D,QAAM,gBAAgB,WAAW,MAAM,CAAC;AACxC,WAAS,IAAI,GAAG,IAAI,KAAK,MAAM,WAAW,CAAC,GAAG,KAAK;AAClD,kBAAc,CAAC,IAAI,IAAI;AAAA,MACtB,cAAc,CAAC;AAAA,MACf,UAAU,IAAI,aAAa;AAAA,MAC3B,UAAU,IAAI,aAAa;AAAA,IAC5B;AACA,kBAAc,WAAW,IAAI,CAAC,IAAI,IAAI;AAAA,MACrC,cAAc,WAAW,IAAI,CAAC;AAAA,MAC9B,UAAU,IAAI,aAAa;AAAA,MAC3B,UAAU,IAAI,aAAa;AAAA,IAC5B;AAAA,EACD;AAEA,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC9C,UAAM,IAAI,MAAM,cAAc,SAAS,IAAI,IAAI,IAAI;AACnD,UAAM,kBAAkB,cAAc,CAAC;AACvC,UAAM,mBAAmB,cAAc,CAAC;AACxC,UAAM,YAAY,WAAW,CAAC;AAC9B,UAAM,aAAa,WAAW,CAAC;AAI/B,UAAM,gCAAgC,IAAI,KAAK,WAAW,UAAU;AACpE,UAAM,kBAAkB,mCAAmC;AAC3D,UAAM,8BAA8B,IAAI,KAAK,iBAAiB,gBAAgB;AAC9E,UAAM,eAAe,8BAA8B;AACnD,UAAM,iBAAiB,KAAK,IAAI,UAAU,QAAQ,IAAI,mBAAmB;AAEzE,UAAM,WAAW,IAAI,IAAI,WAAW,YAAY,GAAG,EAAE;AAAA,MACpD,IAAI,IAAI,YAAY,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,aAAa;AAAA,IAC7D;AACA,QAAI,SAAS,IAAI,GAAG;AACnB,eAAS,IAAI;AAAA,IACd,WAAW,SAAS,IAAI,OAAO;AAC9B,eAAS,IAAI;AAAA,IACd;AACA,QAAI,SAAS,IAAI,GAAG;AACnB,eAAS,IAAI;AAAA,IACd,WAAW,SAAS,IAAI,QAAQ;AAC/B,eAAS,IAAI;AAAA,IACd;AAEA,UAAM,SAAS,8BAA8B,iBAAiB,kBAAkB,QAAQ;AAExF,UAAM,SAAS,IAAI;AAAA,MAClB,SAAS,SAAS,IAAI,QAAQ,CAAC,iBAAiB,gBAAgB,CAAC;AAAA,MACjE;AAAA,IACD;AAEA,QAAI,MAAM,GAAG;AACZ,WAAK,OAAO,gBAAgB,GAAG,gBAAgB,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAAA,IAC7E;AAEA,SAAK,cAAc,QAAQ,OAAO,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAAA,EAC/E;AAEA,SAAO,KAAK,MAAM;AACnB;",
  "names": ["r"]
}
