@sportsdataverse/sporty 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -9
- package/dist/canvas.d.ts +1 -1
- package/dist/canvas.js +1 -1
- package/dist/{chunk-VID5HIDQ.js → chunk-3WYO7OMK.js} +9 -5
- package/dist/chunk-3WYO7OMK.js.map +1 -0
- package/dist/{chunk-X4CSZYJQ.js → chunk-DRH5NZI4.js} +2 -2
- package/dist/chunk-DRH5NZI4.js.map +1 -0
- package/dist/d3.d.ts +1 -1
- package/dist/d3.js +1 -1
- package/dist/index.d.ts +42 -22
- package/dist/index.js +466 -76
- package/dist/index.js.map +1 -1
- package/dist/plot.d.ts +2 -2
- package/dist/plot.js +2 -2
- package/dist/{scene-Dv5KLA63.d.ts → scene-D5Jc19yu.d.ts} +1 -1
- package/dist/specs/index.d.ts +41 -1
- package/dist/specs/index.js +1 -1
- package/dist/svg.d.ts +1 -1
- package/dist/svg.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-VID5HIDQ.js.map +0 -1
- package/dist/chunk-X4CSZYJQ.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/transform.ts","../src/shapes.ts","../src/specs/_normalize.ts","../src/units.ts","../src/surface.ts","../src/baseball/features.ts","../src/baseball/types.ts","../src/baseball/field.ts","../src/basketball/features.ts","../src/basketball/types.ts","../src/basketball/court.ts","../src/curling/features.ts","../src/curling/types.ts","../src/curling/sheet.ts","../src/football/features.ts","../src/football/types.ts","../src/football/field.ts","../src/hockey/features.ts","../src/hockey/types.ts","../src/hockey/rink.ts","../src/lacrosse/features.ts","../src/lacrosse/types.ts","../src/lacrosse/field.ts","../src/soccer/features.ts","../src/soccer/types.ts","../src/soccer/pitch.ts","../src/tennis/features.ts","../src/tennis/types.ts","../src/tennis/court.ts","../src/volleyball/features.ts","../src/volleyball/types.ts","../src/volleyball/court.ts","../src/api.ts","../src/frames.ts","../src/basketball/zones.ts"],"names":["end","base","features","r","ex","ey","circle","isOneOf","halfCourt","sideline","raX","edgeX","edgeY","ARRAY_FIELDS","RANGE_SYNONYMS","halfField","endzone","zip","goalLine","goal","defensiveZone","neutralZone","offensiveZone","fieldApron","endLine","boards","centerLine","refereeCrease","goalFrame","playerBenchOutline","playerBenchAreaFill","penaltyBoxOutline","penaltyBoxFill","penaltyBox","goalCircle","centerCircle","courtApron","centerMark","net","frame","backcourt"],"mappings":"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","file":"index.js","sourcesContent":["// Injected from package.json by tsup/vitest `define`, so changesets version bumps reach VERSION.\nexport const VERSION: string = __SPORTY_VERSION__;\n","import type { Color, Point } from \"./scene.js\";\n\nexport function rotateCoords(pts: readonly Point[], angleDeg: number): Point[] {\n if (angleDeg === 0) return pts.map((p): Point => [p[0], p[1]]);\n const t = (angleDeg / 180) * Math.PI;\n const c = Math.cos(t);\n const s = Math.sin(t);\n return pts.map(([x, y]): Point => [x * c - y * s, x * s + y * c]);\n}\n\n/** Defaults follow sportyR's `reflect(df, over_x = FALSE, over_y = TRUE)`; pass `overY: false` explicitly for an X-only reflection. */\nexport const reflectCoords = (\n pts: readonly Point[],\n { overX = false, overY = true }: { overX?: boolean; overY?: boolean },\n): Point[] => pts.map(([x, y]): Point => [overY ? -x : x, overX ? -y : y]);\n\nexport interface Placement {\n xAnchor: number;\n yAnchor: number;\n reflectX?: boolean;\n reflectY?: boolean;\n xTrans?: number;\n yTrans?: number;\n rotation?: number;\n}\n\n/** R `add_feature`: 1/2/4 copies — (x+ax, y+ay), (−(x+ax), y+ay), (−(x+ax), −(y+ay)), (x+ax, −(y+ay)) — then + shift, then rotate about (0,0). */\nexport function placeFeature(points: readonly Point[], p: Placement): Point[][] {\n const { xAnchor: ax, yAnchor: ay, xTrans: tx = 0, yTrans: ty = 0, rotation = 0 } = p;\n const d1 = points.map(([x, y]): Point => [x + ax + tx, y + ay + ty]);\n const d2 = points.map(([x, y]): Point => [-(x + ax) + tx, y + ay + ty]);\n const d3 = points.map(([x, y]): Point => [-(x + ax) + tx, -(y + ay) + ty]);\n const d4 = points.map(([x, y]): Point => [x + ax + tx, -(y + ay) + ty]);\n const copies =\n p.reflectX && p.reflectY ? [d1, d2, d3, d4] : p.reflectX ? [d1, d2] : p.reflectY ? [d1, d4] : [d1];\n return copies.map((c) => rotateCoords(c, rotation));\n}\n\n/** R: 9-char hex with alpha not 00/ff → NA (no stroke); \"#ffffff00\" → undefined. */\nexport function strokeFor(outline: Color | undefined): Color | undefined {\n if (!outline) return undefined;\n const o = outline.toLowerCase();\n if (/^#[0-9a-f]{8}$/.test(o)) {\n const a = o.slice(7);\n return a === \"ff\" ? o.slice(0, 7) : undefined;\n }\n return o;\n}\n","import type { Point } from \"./scene.js\";\nimport { rotateCoords } from \"./transform.js\";\n\n/** Angles `start`/`end` are in units of π, like R. */\nexport function createCircle({\n center = [0, 0],\n npoints = 1000,\n r = 1,\n start = 0,\n end = 2,\n}: { center?: Point; npoints?: number; r?: number; start?: number; end?: number } = {}): Point[] {\n const out: Point[] = [];\n const a0 = start * Math.PI;\n const a1 = end * Math.PI;\n for (let i = 0; i < npoints; i++) {\n const t = npoints === 1 ? a0 : a0 + ((a1 - a0) * i) / (npoints - 1);\n out.push([center[0] + r * Math.cos(t), center[1] + r * Math.sin(t)]);\n }\n return out;\n}\n\nexport const createRectangle = (xMin: number, xMax: number, yMin: number, yMax: number): Point[] => [\n [xMin, yMin],\n [xMax, yMin],\n [xMax, yMax],\n [xMin, yMax],\n [xMin, yMin],\n];\n\nexport const createSquare = (side: number, c: Point = [0, 0]): Point[] =>\n createRectangle(c[0] - side / 2, c[0] + side / 2, c[1] - side / 2, c[1] + side / 2);\n\nexport const createDiamond = (h: number, w: number, c: Point = [0, 0]): Point[] => [\n [c[0] - w / 2, c[1]],\n [c[0], c[1] - h / 2],\n [c[0] + w / 2, c[1]],\n [c[0], c[1] + h / 2],\n [c[0] - w / 2, c[1]],\n];\n\nexport function createXShape(barLength: number, barWidth: number, rotationDeg = 45): Point[] {\n const L = barLength;\n const W = barWidth;\n const xs = [0, W / 2, W / 2, L / 2, L / 2, W / 2, W / 2, -W / 2, -W / 2, -L / 2, -L / 2, -W / 2, -W / 2, 0];\n const ys = [\n L / 2,\n L / 2,\n W / 2,\n W / 2,\n -W / 2,\n -W / 2,\n -L / 2,\n -L / 2,\n -W / 2,\n -W / 2,\n W / 2,\n W / 2,\n L / 2,\n L / 2,\n ];\n return rotateCoords(\n xs.map((x, i): Point => [x, ys[i] ?? 0]),\n rotationDeg,\n );\n}\n","export const asArray = <T>(v: T | readonly T[] | undefined, fallback: readonly T[] = []): readonly T[] => v === undefined ? fallback : Array.isArray(v) ? (v as readonly T[]) : [v as T];\nexport const or = <T>(v: T | undefined | null, fallback: T): T => (v === undefined || v === null ? fallback : v); // R `%or%`\n","import { UnknownUnitError } from \"./errors.js\";\nimport type { Point, Units } from \"./scene.js\";\n\n/** Feet per one unit (R `unit-conversions.R`; NOT sportypy's 340.8 bug). */\nexport const FT_PER_UNIT: Readonly<Record<Units, number>> = {\n mm: 1 / 304.8,\n cm: 1 / 30.48,\n m: 1 / 0.3048,\n in: 1 / 12,\n ft: 1,\n yd: 3,\n};\n\n/** R `convert_units` also accepts the full names (plus singular and British spellings here). */\nconst UNIT_NAMES: Readonly<Record<string, Units>> = {\n feet: \"ft\",\n foot: \"ft\",\n meters: \"m\",\n metres: \"m\",\n meter: \"m\",\n metre: \"m\",\n yards: \"yd\",\n yard: \"yd\",\n inches: \"in\",\n inch: \"in\",\n centimeters: \"cm\",\n centimetres: \"cm\",\n centimeter: \"cm\",\n centimetre: \"cm\",\n millimeters: \"mm\",\n millimetres: \"mm\",\n millimeter: \"mm\",\n millimetre: \"mm\",\n};\n\n/** Case-insensitive unit abbreviation or full name (`\"FT\"`, `\"feet\"`, `\"Metres\"`) to its `Units`; anything else throws `UnknownUnitError`. */\nexport function normalizeUnit(u: string): Units {\n const k = String(u).toLowerCase();\n if (Object.hasOwn(FT_PER_UNIT, k)) return k as Units;\n if (Object.hasOwn(UNIT_NAMES, k)) return UNIT_NAMES[k] as Units;\n throw new UnknownUnitError(\n `Unknown unit \"${u}\"; expected one of: ${Object.keys(FT_PER_UNIT).join(\", \")} (or a full name such as \"feet\")`,\n );\n}\n\nconst convert = (v: number, from: Units, to: Units): number =>\n from === to ? v : (v * FT_PER_UNIT[from]) / FT_PER_UNIT[to];\n\nexport const convertUnits = (value: number, from: Units, to: Units): number =>\n convert(value, normalizeUnit(from), normalizeUnit(to));\n\nexport function convertPoints(pts: readonly Point[], from: Units, to: Units): Point[] {\n const f = normalizeUnit(from);\n const t = normalizeUnit(to);\n return pts.map(([x, y]): Point => [convert(x, f, t), convert(y, f, t)]);\n}\n","import { SportyError } from \"./errors.js\";\nimport type { Color, Feature, Point, Scene, TextFeature, Units } from \"./scene.js\";\nimport { createRectangle } from \"./shapes.js\";\nimport { asArray } from \"./specs/_normalize.js\";\nimport { type Placement, placeFeature, rotateCoords, strokeFor } from \"./transform.js\";\nimport { convertPoints, convertUnits } from \"./units.js\";\n\nexport { SportyError, UnknownDisplayRangeError, UnknownLeagueError, UnknownUnitError } from \"./errors.js\";\n\ntype Limits = readonly [number, number];\nconst isMatrix = (v: unknown): boolean => Array.isArray(v) && Array.isArray(v[0]);\n\n/**\n * R `utils::modifyList(base, updates)`; a scalar update to an array field becomes `[value]`, a flat row to a matrix\n * field `[row]`. An `undefined`/`null` update keeps the default.\n */\nexport function mergeParams<P extends object>(\n base: P,\n updates: Partial<Record<keyof P, unknown>> | undefined,\n arrayFields: readonly (keyof P)[],\n): P {\n const out: Record<keyof P, unknown> = { ...base };\n for (const k of Object.keys(updates ?? {}) as (keyof P)[]) {\n const v = updates?.[k];\n if (v === undefined || v === null) continue;\n const w = arrayFields.includes(k) ? asArray(v) : v;\n out[k] = isMatrix(base[k]) && !isMatrix(w) ? [w] : w;\n }\n return out as P;\n}\n\n/** R `utils::modifyList(<set_colors()>, color_updates)`; an `undefined`/`null` colour keeps the default (as `mergeParams`). */\nexport function mergeColors<F extends string>(\n defaults: Readonly<Record<F, Color | readonly Color[]>>,\n updates?: Partial<Record<F, Color | readonly Color[]>>,\n): Record<F, Color | readonly Color[]> {\n const out: Record<F, Color | readonly Color[]> = { ...defaults };\n for (const k of Object.keys(updates ?? {}) as F[]) {\n const v = updates?.[k];\n if (v !== undefined && v !== null) out[k] = v;\n }\n return out;\n}\n\n/** `SurfaceOptions.arcResolution` (default 200): points per arc, an integer >= 2, else `SportyError`. */\nexport function arcResolution(n: number | undefined): number {\n const v = n ?? 200;\n if (!Number.isInteger(v) || v < 2) throw new SportyError(`arcResolution must be an integer >= 2; got ${n}`);\n return v;\n}\n\n/** R `data.frame()` recycling: colour i of a vector is `c[i % length]`. */\nexport const colorAt = (c: Color | readonly Color[], i: number): Color =>\n typeof c === \"string\" ? c : (c[i % c.length] ?? \"#00000000\");\n\nexport interface FeatureOptions {\n /** R `feature_outline_color` (default `#ffffff00` = no stroke). */\n stroke?: Color;\n /** Convert the points AND anchors before placement (R converts points only; see `convertLimits`). */\n units?: readonly [from: Units, to: Units];\n /** 3-D hints, already in the Scene's units. */\n elevation?: number;\n height?: number;\n}\n\n/** R `add_feature`: one PolygonFeature per placed copy, zIndex = position in `features` (= R's layer index). */\nexport function addFeature(\n features: Feature[],\n name: string,\n points: readonly Point[],\n fill: Color,\n placement: Placement,\n { stroke, units, elevation, height }: FeatureOptions = {},\n): void {\n const [from, to] = units ?? [\"ft\", \"ft\"];\n const p = {\n ...placement,\n xAnchor: convertUnits(placement.xAnchor, from, to),\n yAnchor: convertUnits(placement.yAnchor, from, to),\n };\n const s = strokeFor(stroke);\n for (const copy of placeFeature(convertPoints(points, from, to), p)) {\n features.push({\n kind: \"polygon\",\n name,\n zIndex: features.length,\n fill,\n points: copy,\n ...(s === undefined ? {} : { stroke: s }),\n ...(elevation === undefined ? {} : { elevation }),\n ...(height === undefined ? {} : { height }),\n });\n }\n}\n\n/** R `vec %or% d`: an empty vector becomes the length-1 default. */\nexport const orVec = <T>(v: readonly T[] | undefined, d: T): readonly T[] =>\n v !== undefined && v.length > 0 ? v : [d];\n\n/** R `data.frame()`: every column is recycled to the longest one. */\nexport function frame<T extends Record<string, readonly unknown[]>>(\n cols: T,\n): { [K in keyof T]: T[K][number] }[] {\n const n = Math.max(...Object.values(cols).map((c) => c.length));\n return Array.from(\n { length: n },\n (_, i) =>\n Object.fromEntries(Object.entries(cols).map(([k, c]) => [k, c[i % c.length]])) as {\n [K in keyof T]: T[K][number];\n },\n );\n}\n\n/** A ggfittext label, already placed (R positions it directly, not via `add_feature`); zIndex = position in `features`. */\nexport function addText(\n features: Feature[],\n name: string,\n t: Omit<TextFeature, \"kind\" | \"name\" | \"zIndex\">,\n): void {\n features.push({ kind: \"text\", name, zIndex: features.length, ...t });\n}\n\n/** R `geom_*` tail: rotate the corners of the xlims × ylims box, then take min/max. */\nexport function displayBbox(xlim: Limits, ylim: Limits, rotation: number): Scene[\"bbox\"] {\n const box = rotateCoords(\n createRectangle(Math.min(...xlim), Math.max(...xlim), Math.min(...ylim), Math.max(...ylim)),\n rotation,\n );\n const xs = box.map((q) => q[0]);\n const ys = box.map((q) => q[1]);\n return [Math.min(...xs), Math.min(...ys), Math.max(...xs), Math.max(...ys)];\n}\n\n/**\n * Divergence from R: R converts the feature points but neither the anchors nor the display limits, so its\n * non-native plot is scrambled as well as cropped. We convert all three (see `addFeature`).\n */\nexport const convertLimits = (\n xlim: Limits,\n ylim: Limits,\n from: Units,\n to: Units,\n): [x: [number, number], y: [number, number]] => [\n [convertUnits(xlim[0], from, to), convertUnits(xlim[1], from, to)],\n [convertUnits(ylim[0], from, to), convertUnits(ylim[1], from, to)],\n];\n","import { SportyError } from \"../errors.js\";\nimport type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle, createSquare } from \"../shapes.js\";\nimport { reflectCoords, rotateCoords } from \"../transform.js\";\n\ntype Arc = { npoints?: number | undefined };\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\n/** R math-functions.R quadratic_formula: both roots (NaN when the discriminant is negative, like R's sqrt). */\nexport const quadraticFormula = (a: number, b: number, c: number): [number, number] => {\n const d = Math.sqrt(b * b - 4 * a * c);\n return [(-b + d) / (2 * a), (-b - d) / (2 * a)];\n};\n\n/** baseball_infield_dirt (features-baseball.R 24): infield arc (about the pitcher's plate) + home-plate circle, both clipped where they meet the foul-grass line. */\nexport function infieldDirt({\n homePlateCircleRadius = 0,\n foulLineToFoulGrass = 0,\n pitchersPlateDistance = 0,\n infieldArcRadius = 0,\n npoints,\n}: {\n homePlateCircleRadius?: number;\n foulLineToFoulGrass?: number;\n pitchersPlateDistance?: number;\n infieldArcRadius?: number;\n} & Arc = {}): Point[] {\n const hpRoots = quadraticFormula(\n 2,\n 2 * foulLineToFoulGrass,\n foulLineToFoulGrass ** 2 - homePlateCircleRadius ** 2,\n );\n const hpX = hpRoots.find((r) => r < 0) ?? Number.NaN; // R: roots[which(roots < 0)]\n const hpAcos = Math.acos(hpX / homePlateCircleRadius);\n const hpStart = homePlateCircleRadius === 0 || Number.isNaN(hpAcos) ? 1 : hpAcos / Math.PI;\n const inRoots = quadraticFormula(\n 2,\n -2 * foulLineToFoulGrass - 2 * pitchersPlateDistance,\n foulLineToFoulGrass ** 2 +\n 2 * foulLineToFoulGrass * pitchersPlateDistance +\n pitchersPlateDistance ** 2 -\n infieldArcRadius ** 2,\n );\n const inX = inRoots.find((r) => r > 0) ?? Number.NaN;\n const inAcos = Math.acos(inX / infieldArcRadius);\n const inStart = infieldArcRadius === 0 || Number.isNaN(inAcos) ? 0.25 : inAcos / Math.PI;\n return [\n ...circle({\n center: [0, pitchersPlateDistance],\n start: inStart,\n end: 1 - inStart,\n r: infieldArcRadius,\n npoints,\n }),\n ...circle({ center: [0, 0], start: hpStart, end: 3 - hpStart, r: homePlateCircleRadius, npoints }),\n ];\n}\n\n/** baseball_infield_grass (features-baseball.R 123): home arc, three base arcs, then the home arc's first point again. */\nexport function infieldGrass({\n homePlateCircleRadius = 0,\n foulLineToInfieldGrass = 0,\n baselineDistance = 0,\n baseAnchorToInfieldGrass = 0,\n npoints,\n}: {\n homePlateCircleRadius?: number;\n foulLineToInfieldGrass?: number;\n baselineDistance?: number;\n baseAnchorToInfieldGrass?: number;\n} & Arc = {}): Point[] {\n const f = foulLineToInfieldGrass;\n const hr = homePlateCircleRadius;\n const roots1b = quadraticFormula(2, 2 * f, f ** 2 - hr ** 2);\n const x1b = roots1b.find((r) => r > 0) ?? hr;\n const theta1b = hr === 0 ? 0 : Math.acos(x1b / hr) / Math.PI;\n const roots3b = quadraticFormula(2, -2 * f, f ** 2 - hr ** 2);\n // R tests `> 0` for emptiness but then filters `< 0`; transcribed literally.\n const x3b = roots3b.some((r) => r > 0) ? roots3b.find((r) => r < 0) : hr;\n const theta3b = hr === 0 ? 1 : Math.acos((x3b ?? Number.NaN) / hr) / Math.PI;\n const bl = baselineDistance;\n const fbRoots = quadraticFormula(\n 2,\n 2 * f - 2 * Math.SQRT2 * bl,\n f ** 2 - Math.SQRT2 * f * bl + bl ** 2 - baseAnchorToInfieldGrass ** 2,\n );\n const fbX = fbRoots.find((r) => r < bl * Math.cos(Math.PI / 4)) ?? Number.NaN;\n const fbDelta = Math.abs(fbX - bl * Math.cos(Math.PI / 4));\n const th = baseAnchorToInfieldGrass === 0 ? 0 : Math.acos(fbDelta / baseAnchorToInfieldGrass) / Math.PI;\n const r = baseAnchorToInfieldGrass;\n const home = circle({ center: [0, 0], start: theta3b, end: theta1b, r: hr, npoints });\n return [\n ...home,\n ...circle({\n center: [bl * Math.cos(Math.PI / 4), bl * Math.sin(Math.PI / 4)],\n start: 1 + th,\n end: 1 - th,\n r,\n npoints,\n }),\n ...circle({ center: [0, bl * Math.SQRT2], start: 1.5 + th, end: 1.5 - th, r, npoints }),\n ...circle({\n center: [bl * Math.cos((3 * Math.PI) / 4), bl * Math.sin((3 * Math.PI) / 4)],\n start: 1 - (1 - th),\n end: 1 - (1 + th),\n r,\n npoints,\n }),\n ...home.slice(0, 1),\n ];\n}\n\n/** baseball_pitchers_mound. */\nexport const pitchersMound = ({\n pitchersMoundRadius = 0,\n npoints,\n}: { pitchersMoundRadius?: number } & Arc = {}): Point[] =>\n circle({ center: [0, 0], start: 0, end: 2, r: pitchersMoundRadius, npoints });\n\n/** baseball_home_plate (R 645): 6-point pentagon with its back tip at the origin. */\nexport const homePlate = ({ homePlateEdgeLength: e = 0 }: { homePlateEdgeLength?: number } = {}): Point[] => [\n [0, 0],\n [e / 2, e / 2],\n [e / 2, e],\n [-e / 2, e],\n [-e / 2, e / 2],\n [0, 0],\n];\n\n/** baseball_base (features-baseball.R 682): a square rotated 45 degrees, shifted along x for 1B (left) / 3B (right) so the bag sits inside the baseline. */\nexport function base({\n baseSideLength = 0,\n adjustXLeft = false,\n adjustXRight = false,\n}: { baseSideLength?: number; adjustXLeft?: boolean; adjustXRight?: boolean } = {}): Point[] {\n const amt = (baseSideLength * Math.SQRT2) / 2;\n const dx = (adjustXLeft ? -amt : 0) + (adjustXRight ? amt : 0);\n return rotateCoords(createSquare(baseSideLength, [0, 0]), 45).map(([x, y]): Point => [x + dx, y]);\n}\n\n/** baseball_pitchers_plate. */\nexport const pitchersPlate = ({\n pitchersPlateLength: l = 0,\n pitchersPlateWidth: w = 0,\n}: { pitchersPlateLength?: number; pitchersPlateWidth?: number } = {}): Point[] =>\n createRectangle(-l / 2, l / 2, 0, w);\n\n/** baseball_batters_box (R 291): 9-point half frame, mirrored over the y axis, shifted by the y adjustment. */\nexport function battersBox({\n battersBoxLength = 0,\n battersBoxWidth = 0,\n battersBoxYAdj = 0,\n battersBoxThickness: t = 0,\n}: {\n battersBoxLength?: number;\n battersBoxWidth?: number;\n battersBoxYAdj?: number;\n battersBoxThickness?: number;\n} = {}): Point[] {\n const w = battersBoxWidth / 2;\n const l = battersBoxLength / 2;\n // The 9th y is the FULL length: an R quirk kept for parity.\n const half: Point[] = [\n [0, l],\n [w, l],\n [w, -l],\n [0, -l],\n [0, -l + t],\n [w - t, -l + t],\n [w - t, l - t],\n [0, l - t],\n [0, battersBoxLength],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })].map(\n ([x, y]): Point => [x, y + battersBoxYAdj],\n );\n}\n\n/** baseball_catchers_box (R 357): rectangle or trapezoid, chosen by a case-insensitive shape name. */\nexport function catchersBox({\n catchersBoxDepth: depth = 0,\n catchersBoxWidth: width = 0,\n battersBoxLength = 0,\n battersBoxYAdj: adj = 0,\n catchersBoxShape = \"rectangle\",\n catchersBoxThickness: t = 0,\n homePlateCircleRadius: hr = 0,\n}: {\n catchersBoxDepth?: number;\n catchersBoxWidth?: number;\n battersBoxLength?: number;\n battersBoxYAdj?: number;\n catchersBoxShape?: string;\n catchersBoxThickness?: number;\n homePlateCircleRadius?: number;\n} = {}): Point[] {\n const c = Math.cos(Math.PI / 4);\n const s = Math.sin(Math.PI / 4);\n const w = width / 2;\n const hl = battersBoxLength / 2;\n const rect = (): Point[] =>\n (\n [\n [w, -hl],\n [w, -depth],\n [-w, -depth],\n [-w, -hl],\n [-w + t, -hl],\n [-w + t, -depth + t],\n [w - t, -depth + t],\n [w - t, -hl],\n [w, -hl],\n ] as Point[]\n ).map(([x, y]): Point => [x, y + adj]);\n const trap = (): Point[] => {\n const b1y = -hl + adj;\n const b1 = 2 * (Math.abs(b1y / c) * s);\n const b2yOuter = -depth - t;\n const b2yInner = -depth;\n const b2Inner = 2 * (Math.abs(hr - t / c) * s);\n const b2Outer = 2 * (Math.abs(hr) * s);\n return [\n [b1 / 2, b1y],\n [b2Outer / 2 - t, b2yInner + t],\n [-b2Outer / 2 + t, b2yInner + t],\n [-b1 / 2, b1y],\n [-b1 / 2 - t, b1y],\n [-b2Inner / 2 - 2 * t, b2yOuter + t],\n [b2Inner / 2 + 2 * t, b2yOuter + t],\n [b1 / 2 + t, b1y],\n [b1 / 2, b1y],\n ];\n };\n switch (catchersBoxShape.toLowerCase()) {\n case \"rect\":\n case \"rectangle\":\n case \"rectangular\":\n return rect();\n case \"trap\":\n case \"trapezoid\":\n case \"trapezoidal\":\n return trap();\n default:\n throw new SportyError(`${catchersBoxShape} is not a valid shape for the catcher's box`);\n }\n}\n\n/** baseball_foul_line (R 488): 5-point strip from the batter's box corner toward the pole. */\nexport function foulLine({\n isLine1b = false,\n lineDistance = 0,\n battersBoxLength = 0,\n battersBoxWidth = 0,\n battersBoxYAdj = 0,\n homePlateSideToBattersBox = 0,\n foulLineThickness: t = 0,\n}: {\n isLine1b?: boolean;\n lineDistance?: number;\n battersBoxLength?: number;\n battersBoxWidth?: number;\n battersBoxYAdj?: number;\n homePlateSideToBattersBox?: number;\n foulLineThickness?: number;\n} = {}): Point[] {\n const cornerX = battersBoxWidth + homePlateSideToBattersBox;\n const cornerY = battersBoxLength / 2 + battersBoxYAdj;\n const start = cornerX > cornerY ? cornerY : cornerX + battersBoxYAdj / 2 + t;\n if (!isLine1b) {\n const ex = lineDistance * Math.cos((3 * Math.PI) / 4);\n const ey = lineDistance * Math.sin((3 * Math.PI) / 4);\n return [\n [-start, start],\n [ex, ey],\n [ex + t, ey],\n [-start + t, start],\n [-start, start],\n ];\n }\n const ex = lineDistance * Math.cos(Math.PI / 4);\n const ey = lineDistance * Math.sin(Math.PI / 4);\n return [\n [start, start],\n [ex, ey],\n [ex - t, ey],\n [start - t, start],\n [start, start],\n ];\n}\n\n/** baseball_running_lane (R 572): 7-point literal, every coordinate divided by the square root of 2. */\nexport function runningLane({\n runningLaneDepth: d = 0,\n runningLaneLength: l = 0,\n runningLaneStartDistance: s = 0,\n runningLaneThickness: t = 0,\n}: {\n runningLaneDepth?: number;\n runningLaneLength?: number;\n runningLaneStartDistance?: number;\n runningLaneThickness?: number;\n} = {}): Point[] {\n const q = Math.SQRT2;\n return [\n [s / q, s / q],\n [(s + d) / q, (s - d) / q],\n [(s + d + l) / q, (s - d + l) / q],\n [(s + d + l - t) / q, (s - d + l + t) / q],\n [(s + d) / q, (s - d + 2 * t) / q],\n [(s + t) / q, (s + t) / q],\n [s / q, s / q],\n ];\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `baseball_*` builder (prefix dropped), as used in `PolygonFeature.name` (10). */\nexport const BASEBALL_FEATURES = [\n \"infield_dirt\",\n \"infield_grass\",\n \"pitchers_mound\",\n \"home_plate\",\n \"base\",\n \"pitchers_plate\",\n \"batters_box\",\n \"catchers_box\",\n \"foul_line\",\n \"running_lane\",\n] as const;\nexport type BaseballFeature = (typeof BASEBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_baseball()` (2). */\nexport const BASEBALL_DISPLAY_RANGES = [\"full\", \"infield\"] as const;\nexport type BaseballDisplayRange = (typeof BASEBALL_DISPLAY_RANGES)[number];\n\n/** The 10 argument names of `baseball_features_set_colors()`, in R's declaration order. */\nexport const BASEBALL_COLOR_KEYS = [\n \"plot_background\",\n \"infield_dirt\",\n \"infield_grass\",\n \"pitchers_mound\",\n \"base\",\n \"pitchers_plate\",\n \"batters_box\",\n \"catchers_box\",\n \"foul_line\",\n \"running_lane\",\n] as const;\nexport type BaseballColorKey = (typeof BASEBALL_COLOR_KEYS)[number];\n\n/** Defaults of `baseball_features_set_colors()` — the only sport whose plot_background default is a colour (geom-baseball.R 35). */\nexport const BASEBALL_DEFAULT_COLORS: Readonly<Record<BaseballColorKey, Color>> = {\n plot_background: \"#395d33\",\n infield_dirt: \"#9b7653\",\n infield_grass: \"#395d33\",\n pitchers_mound: \"#9b7653\",\n base: \"#ffffff\",\n pitchers_plate: \"#ffffff\",\n batters_box: \"#ffffff\",\n catchers_box: \"#ffffff\",\n foul_line: \"#ffffff\",\n running_lane: \"#ffffff\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n BASEBALL_LEAGUES,\n BASEBALL_SPECS,\n type BaseballLeague,\n type BaseballParamUpdates,\n} from \"../specs/baseball.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n BASEBALL_DEFAULT_COLORS,\n BASEBALL_DISPLAY_RANGES,\n type BaseballColorKey,\n type BaseballDisplayRange,\n type BaseballFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/** Port of sportyR `geom_baseball()`: origin = back tip of home plate, +y toward centre field; same divergences as `soccerPitch`. */\nexport function baseballField(\n league: BaseballLeague | (string & {}),\n opts: SurfaceOptions<BaseballParamUpdates, BaseballColorKey, BaseballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(BASEBALL_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown baseball league \"${league}\"; expected one of: ${BASEBALL_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(BASEBALL_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown baseball display range \"${opts.displayRange}\"; expected one of: ${BASEBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(BASEBALL_SPECS[key], opts.updates, []); // baseball has no array fields\n const colors = mergeColors(BASEBALL_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: BaseballColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.field_units || \"ft\");\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const features: Feature[] = [];\n const add = (\n name: BaseballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX = false,\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY: false, xTrans, yTrans, rotation },\n conv ? { units: conv } : {},\n );\n const bl = p.baseline_distance;\n const box = {\n battersBoxLength: p.batters_box_length,\n battersBoxWidth: p.batters_box_width,\n battersBoxYAdj: p.batters_box_y_adj,\n };\n const foul = {\n ...box,\n homePlateSideToBattersBox: p.home_plate_side_to_batters_box,\n foulLineThickness: p.line_width,\n };\n // Layers, in R's add_feature order (geom-baseball.R 300-470); base_side_length is passed without %or% in R (every generated league has it).\n add(\n \"infield_dirt\",\n F.infieldDirt({\n homePlateCircleRadius: p.home_plate_circle_radius,\n foulLineToFoulGrass: p.foul_line_to_foul_grass,\n pitchersPlateDistance: p.pitchers_plate_front_to_home_plate,\n infieldArcRadius: p.infield_arc_radius,\n npoints,\n }),\n col(\"infield_dirt\"),\n 0,\n 0,\n );\n add(\n \"infield_grass\",\n F.infieldGrass({\n homePlateCircleRadius: p.home_plate_circle_radius,\n foulLineToInfieldGrass: p.foul_line_to_infield_grass,\n baselineDistance: bl,\n baseAnchorToInfieldGrass: p.base_anchor_to_infield_grass_radius,\n npoints,\n }),\n col(\"infield_grass\"),\n 0,\n 0,\n );\n add(\n \"pitchers_mound\",\n F.pitchersMound({ pitchersMoundRadius: p.pitchers_mound_radius, npoints }),\n col(\"pitchers_mound\"),\n 0,\n p.pitchers_mound_center_to_home_plate,\n );\n add(\"home_plate\", F.homePlate({ homePlateEdgeLength: p.home_plate_edge_length }), col(\"base\"), 0, 0);\n add(\n \"base\",\n F.base({ baseSideLength: p.base_side_length, adjustXLeft: true }),\n col(\"base\"),\n bl * Math.cos(Math.PI / 4),\n bl * Math.sin(Math.PI / 4),\n ); // first base\n add(\"base\", F.base({ baseSideLength: p.base_side_length }), col(\"base\"), 0, bl * Math.SQRT2); // second base\n add(\n \"base\",\n F.base({ baseSideLength: p.base_side_length, adjustXRight: true }),\n col(\"base\"),\n bl * Math.cos((3 * Math.PI) / 4),\n bl * Math.sin((3 * Math.PI) / 4),\n ); // third base\n add(\n \"pitchers_plate\",\n F.pitchersPlate({\n pitchersPlateLength: p.pitchers_plate_length,\n pitchersPlateWidth: p.pitchers_plate_width,\n }),\n col(\"pitchers_plate\"),\n 0,\n p.pitchers_plate_front_to_home_plate,\n );\n add(\n \"batters_box\",\n F.battersBox({ ...box, battersBoxThickness: p.line_width }),\n col(\"batters_box\"),\n p.home_plate_edge_length / 2 + p.home_plate_side_to_batters_box + p.batters_box_width / 2,\n 0,\n true,\n );\n add(\n \"catchers_box\",\n F.catchersBox({\n catchersBoxDepth: p.catchers_box_depth,\n catchersBoxWidth: p.catchers_box_width ?? 0,\n battersBoxLength: p.batters_box_length,\n battersBoxYAdj: p.batters_box_y_adj,\n catchersBoxShape: p.catchers_box_shape ?? \"rectangle\",\n catchersBoxThickness: p.line_width,\n homePlateCircleRadius: p.home_plate_circle_radius,\n }),\n col(\"catchers_box\"),\n 0,\n 0,\n );\n add(\n \"foul_line\",\n F.foulLine({ ...foul, isLine1b: true, lineDistance: p.right_field_distance }),\n col(\"foul_line\"),\n 0,\n 0,\n );\n add(\"foul_line\", F.foulLine({ ...foul, lineDistance: p.left_field_distance }), col(\"foul_line\"), 0, 0);\n add(\n \"running_lane\",\n F.runningLane({\n runningLaneDepth: p.running_lane_depth ?? 0,\n runningLaneLength: p.running_lane_length ?? 0,\n runningLaneStartDistance: p.running_lane_start_distance ?? 0,\n runningLaneThickness: p.line_width,\n }),\n col(\"running_lane\"),\n 0,\n 0,\n );\n // Display range (geom-baseball.R 490-541): the +5 / -5 paddings are native feet (R).\n const full = range === \"full\";\n const xr: readonly [number, number] = full\n ? [p.left_field_distance * Math.cos((3 * Math.PI) / 4), p.right_field_distance * Math.cos(Math.PI / 4)]\n : [-p.infield_arc_radius - 5, p.infield_arc_radius + 5];\n const yr: readonly [number, number] = full\n ? [-p.backstop_radius - 5, p.center_field_distance + 5]\n : [-p.home_plate_circle_radius - 5, p.pitchers_plate_front_to_home_plate + p.infield_arc_radius + 5];\n const [cx, cy] = convertLimits(xr, yr, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // #395d33 unless hidden by the user\n return {\n sport: \"baseball\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"home_plate\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle } from \"../shapes.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). */\ntype Arc = { npoints?: number | undefined };\n\n// R: `if (is.na(asin(v))) 0 else asin(v) / pi`\nconst asinOverPi = (v: number): number => {\n const a = Math.asin(v);\n return Number.isNaN(a) ? 0 : a / Math.PI;\n};\n\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\nexport function halfCourt({\n courtLength = 0,\n courtWidth = 0,\n}: { courtLength?: number; courtWidth?: number } = {}): Point[] {\n return createRectangle(-courtLength / 4, courtLength / 4, -courtWidth / 2, courtWidth / 2);\n}\n\nexport function twoPointRange({\n basketCenterToBaseline = 0,\n basketCenterToCornerThree = 0,\n lineThickness = 0,\n twoPointRangeRadius = 0,\n npoints,\n}: {\n basketCenterToBaseline?: number;\n basketCenterToCornerThree?: number;\n lineThickness?: number;\n twoPointRangeRadius?: number;\n} & Arc = {}): Point[] {\n const startY = basketCenterToCornerThree - lineThickness;\n const angle = asinOverPi(startY / twoPointRangeRadius);\n return [\n [basketCenterToBaseline, startY],\n ...circle({ center: [0, 0], start: 1 - angle, end: 1 + angle, r: twoPointRangeRadius, npoints }),\n [basketCenterToBaseline, -startY],\n [basketCenterToBaseline, startY],\n ];\n}\n\nexport function centerCircleFill({\n centerCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { centerCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: centerCircleRadius - lineThickness, npoints });\n}\n\nexport function paintedArea({\n laneLength = 0,\n laneWidth = 0,\n paintMargin = 0,\n lineThickness = 0,\n}: { laneLength?: number; laneWidth?: number; paintMargin?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(\n paintMargin,\n laneLength - lineThickness - paintMargin,\n -laneWidth / 2 + lineThickness + paintMargin,\n laneWidth / 2 - lineThickness - paintMargin,\n );\n}\n\nexport function freeThrowCircleFill({\n freeThrowCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { freeThrowCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0.5, end: 1.5, r: freeThrowCircleRadius - lineThickness, npoints });\n}\n\nexport function courtApron({\n courtLength = 0,\n courtWidth = 0,\n courtApronEndline = 0,\n courtApronSideline = 0,\n courtApronToBoundary = 0,\n lineThickness = 0,\n}: {\n courtLength?: number;\n courtWidth?: number;\n courtApronEndline?: number;\n courtApronSideline?: number;\n courtApronToBoundary?: number;\n lineThickness?: number;\n} = {}): Point[] {\n const outerX = courtLength / 2 + courtApronEndline;\n const innerX = courtLength / 2 + lineThickness + courtApronToBoundary;\n const outerY = courtWidth / 2 + courtApronSideline;\n const innerY = courtWidth / 2 + lineThickness + courtApronToBoundary;\n return [\n [0, outerY],\n [outerX, outerY],\n [outerX, -courtWidth / 2 - courtApronSideline],\n [0, -courtWidth / 2 - courtApronSideline],\n [0, -innerY],\n [innerX, -innerY],\n [innerX, innerY],\n [0, innerY],\n [0, outerY],\n ];\n}\n\nexport function endline({\n courtWidth = 0,\n lineThickness = 0,\n}: { courtWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(0, lineThickness, -courtWidth / 2 - lineThickness, courtWidth / 2 + lineThickness);\n}\n\nexport function sideline({\n courtLength = 0,\n lineThickness = 0,\n}: { courtLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-courtLength / 2 - lineThickness, courtLength / 2 + lineThickness, 0, lineThickness);\n}\n\nexport function centerCircleOutline({\n centerCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { centerCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r: centerCircleRadius, npoints }), // outer edge\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: centerCircleRadius - lineThickness, npoints }), // inner edge, reversed\n ];\n}\n\nexport function divisionLine({\n courtWidth = 0,\n lineThickness = 0,\n divisionLineExtension = 0,\n}: { courtWidth?: number; lineThickness?: number; divisionLineExtension?: number } = {}): Point[] {\n // R quirk: with an extension both y bounds shift down by extension + thickness (not symmetric).\n return divisionLineExtension > 0\n ? createRectangle(\n -lineThickness / 2,\n lineThickness / 2,\n -courtWidth / 2 - divisionLineExtension - lineThickness,\n courtWidth / 2 - divisionLineExtension - lineThickness,\n )\n : createRectangle(-lineThickness / 2, lineThickness / 2, -courtWidth / 2, courtWidth / 2);\n}\n\nexport function threePointLine({\n basketCenterToBaseline = 0,\n basketCenterToCornerThree = 0,\n lineThickness = 0,\n threePointLineRadius = 0,\n npoints,\n}: {\n basketCenterToBaseline?: number;\n basketCenterToCornerThree?: number;\n lineThickness?: number;\n threePointLineRadius?: number;\n} & Arc = {}): Point[] {\n const startYOuter = basketCenterToCornerThree;\n const startYInner = startYOuter - lineThickness;\n const rOuter = threePointLineRadius;\n const rInner = rOuter - lineThickness;\n const angleOuter = asinOverPi(startYOuter / rOuter);\n const angleInner = asinOverPi(startYInner / rInner);\n return [\n [basketCenterToBaseline, startYOuter],\n ...circle({ center: [0, 0], start: 1 - angleOuter, end: 1 + angleOuter, r: rOuter, npoints }),\n [basketCenterToBaseline, -startYOuter],\n [basketCenterToBaseline, -startYInner],\n ...circle({ center: [0, 0], start: 1 + angleInner, end: 1 - angleInner, r: rInner, npoints }),\n [basketCenterToBaseline, startYInner],\n [basketCenterToBaseline, startYOuter],\n ];\n}\n\nexport function freeThrowLaneBoundary({\n laneLength = 0,\n laneWidth = 0,\n lineThickness = 0,\n}: { laneLength?: number; laneWidth?: number; lineThickness?: number } = {}): Point[] {\n return [\n [0, laneWidth / 2],\n [-laneLength, laneWidth / 2],\n [-laneLength, -laneWidth / 2],\n [0, -laneWidth / 2],\n [0, -laneWidth / 2 + lineThickness],\n [-laneLength + lineThickness, -laneWidth / 2 + lineThickness],\n [-laneLength + lineThickness, laneWidth / 2 - lineThickness],\n [0, laneWidth / 2 - lineThickness],\n [0, laneWidth / 2],\n ];\n}\n\nexport function freeThrowCircle({\n overhang = 0,\n freeThrowCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { overhang?: number; freeThrowCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n // R: `if (!is.na(x)) theta <- x else 0` — only NaN (0/0) is NA; ±Inf passes through.\n const t = overhang / freeThrowCircleRadius / Math.PI;\n const theta = Number.isNaN(t) ? 0 : t;\n const startAngle = 0.5 - theta;\n const endAngle = 1.5 + theta;\n return [\n ...circle({ center: [0, 0], start: startAngle, end: endAngle, r: freeThrowCircleRadius, npoints }),\n ...circle({\n center: [0, 0],\n start: endAngle,\n end: startAngle,\n r: freeThrowCircleRadius - lineThickness,\n npoints,\n }),\n ];\n}\n\nexport function freeThrowCircleDash({\n featureRadius = 0,\n lineThickness = 0,\n startAngle = 0,\n endAngle = 0,\n npoints,\n}: {\n featureRadius?: number;\n lineThickness?: number;\n startAngle?: number;\n endAngle?: number;\n} & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: startAngle, end: endAngle, r: featureRadius, npoints }),\n ...circle({\n center: [0, 0],\n start: endAngle,\n end: startAngle,\n r: featureRadius - lineThickness,\n npoints,\n }),\n ];\n}\n\nexport function laneSpaceMark({\n featureThickness = 0,\n markDepth = 0,\n}: { featureThickness?: number; markDepth?: number } = {}): Point[] {\n return createRectangle(-featureThickness, 0, 0, markDepth);\n}\n\nexport function inboundingLine({\n lineThickness = 0,\n inPlayExt = 0,\n outOfBoundsExt = 0,\n drawnDirection = \"\",\n}: {\n lineThickness?: number;\n inPlayExt?: number;\n outOfBoundsExt?: number;\n drawnDirection?: string;\n} = {}): Point[] {\n return drawnDirection.toLowerCase() === \"top_down\"\n ? createRectangle(-lineThickness, 0, -inPlayExt, outOfBoundsExt + lineThickness)\n : createRectangle(-lineThickness, 0, -(outOfBoundsExt + lineThickness), inPlayExt);\n}\n\nexport function substitutionLine({\n lineThickness = 0,\n substitutionLineWidth = 0,\n drawnDirection = \"\",\n}: { lineThickness?: number; substitutionLineWidth?: number; drawnDirection?: string } = {}): Point[] {\n // R quirk: x_min = 0 > x_max = -line_thickness (reversed bounds), kept as is.\n return drawnDirection.toLowerCase() === \"bottom_up\"\n ? createRectangle(0, -lineThickness, 0, substitutionLineWidth + lineThickness)\n : createRectangle(0, -lineThickness, -(substitutionLineWidth + lineThickness), 0);\n}\n\nexport function teamBenchLine({\n lineThickness = 0,\n extension = 0,\n drawnDirection = \"\",\n}: { lineThickness?: number; extension?: number; drawnDirection?: string } = {}): Point[] {\n // R quirk: bottom_up draws toward +x, otherwise toward -x.\n return drawnDirection.toLowerCase() === \"bottom_up\"\n ? createRectangle(0, lineThickness, 0, extension)\n : createRectangle(0, -lineThickness, -extension, 0);\n}\n\nexport function restrictedArc({\n featureRadius = 0,\n lineThickness = 0,\n backboardToCenterOfBasket = 0,\n npoints,\n}: {\n featureRadius?: number;\n lineThickness?: number;\n backboardToCenterOfBasket?: number;\n} & Arc = {}): Point[] {\n const c: Point = [-backboardToCenterOfBasket, 0];\n return [\n [0, featureRadius],\n ...circle({ center: c, start: 0.5, end: 1.5, r: featureRadius, npoints }),\n [0, -featureRadius],\n [0, -(featureRadius + lineThickness)],\n ...circle({ center: c, start: 1.5, end: 0.5, r: featureRadius + lineThickness, npoints }),\n [0, featureRadius + lineThickness],\n [0, featureRadius],\n ];\n}\n\nexport function lowerDefensiveBoxMark({\n drawnDirection = \"\",\n extension = 0,\n lineThickness = 0,\n}: { drawnDirection?: string; extension?: number; lineThickness?: number } = {}): Point[] {\n const d = drawnDirection.toLowerCase();\n if (d === \"left_to_right\") return createRectangle(-extension, 0, 0, lineThickness);\n // R quirk: y_min = extension > y_max = 0 (reversed bounds).\n if (d === \"top_down\") return createRectangle(-lineThickness, 0, extension, 0);\n // R: neither branch assigns, so `return(lower_defensive_box_mark_df)` errors \"object not found\".\n throw new Error(`lowerDefensiveBoxMark: unsupported drawnDirection \"${drawnDirection}\"`);\n}\n\nexport function backboard({\n backboardWidth = 0,\n backboardThickness = 0,\n}: { backboardWidth?: number; backboardThickness?: number } = {}): Point[] {\n return createRectangle(0, backboardThickness, -backboardWidth / 2, backboardWidth / 2);\n}\n\nexport function basketRing({\n basketRingConnectorWidth = 0,\n backboardFaceToRingCent = 0,\n basketRingInnerRadius = 0,\n basketRingThickness = 0,\n npoints,\n}: {\n basketRingConnectorWidth?: number;\n backboardFaceToRingCent?: number;\n basketRingInnerRadius?: number;\n basketRingThickness?: number;\n} & Arc = {}): Point[] {\n const rOuter = basketRingInnerRadius + basketRingThickness;\n const startAngle = asinOverPi(basketRingConnectorWidth / 2 / rOuter);\n const endAngle = 2 - startAngle;\n const joinX = -backboardFaceToRingCent + rOuter * Math.cos(startAngle * Math.PI);\n const h = basketRingConnectorWidth / 2;\n return [\n [0, h],\n [joinX, h],\n ...circle({\n center: [-backboardFaceToRingCent, 0],\n start: startAngle,\n end: endAngle,\n r: rOuter,\n npoints,\n }),\n [joinX, -h],\n [0, -h],\n [0, h],\n ];\n}\n\nexport function net({\n basketRingInnerRadius = 0,\n npoints,\n}: { basketRingInnerRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: basketRingInnerRadius, npoints });\n}\n","import type { Color } from \"../scene.js\";\n\nexport const BASKETBALL_FEATURES = [\n \"half_court\",\n \"court_apron\",\n \"center_circle_outline\",\n \"center_circle_fill\",\n \"division_line\",\n \"endline\",\n \"sideline\",\n \"two_point_range\",\n \"three_point_line\",\n \"painted_area\",\n \"free_throw_lane_boundary\",\n \"lane_space_mark\",\n \"free_throw_circle_fill\",\n \"free_throw_circle\",\n \"free_throw_circle_dash\",\n \"restricted_arc\",\n \"lower_defensive_box_mark\",\n \"inbounding_line\",\n \"substitution_line\",\n \"team_bench_line\",\n \"backboard\",\n \"basket_ring\",\n \"net\",\n] as const;\nexport type BasketballFeature = (typeof BASKETBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_basketball()` (49). */\nexport const BASKETBALL_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalfcourt\",\n \"offensive_half_court\",\n \"offensive half court\",\n \"defense\",\n \"defence\",\n \"defensivehalfcourt\",\n \"defensive_half_court\",\n \"defensive half court\",\n \"offensivekey\",\n \"offensive_key\",\n \"offensive key\",\n \"attackingkey\",\n \"attacking_key\",\n \"attacking key\",\n \"defensivekey\",\n \"defensive_key\",\n \"defensive key\",\n \"defendingkey\",\n \"defending_key\",\n \"defending key\",\n \"offensivepaint\",\n \"offensive_paint\",\n \"offensive paint\",\n \"attackingpaint\",\n \"attacking_paint\",\n \"attacking paint\",\n \"offensivelane\",\n \"offensive_lane\",\n \"offensive lane\",\n \"attackinglane\",\n \"attacking_lane\",\n \"attacking lane\",\n \"defensivepaint\",\n \"defensive_paint\",\n \"defensive paint\",\n \"defendingpaint\",\n \"defending_paint\",\n \"defending paint\",\n \"defensivelane\",\n \"defensive_lane\",\n \"defensive lane\",\n \"defendinglane\",\n \"defending_lane\",\n \"defending lane\",\n] as const;\nexport type BasketballDisplayRange = (typeof BASKETBALL_DISPLAY_RANGES)[number];\n\nconst SURFACE = \"#d2ab6f\";\nconst LINE = \"#000000\";\n\n/**\n * The 26 argument names of `basketball_features_set_colors()`, in R's declaration order.\n * Colour keys are NOT feature names: e.g. the `half_court` feature is drawn twice, coloured\n * by `offensive_half_court` / `defensive_half_court`; Task 13 maps colour to feature at `addFeature`.\n */\nexport const BASKETBALL_COLOR_KEYS = [\n \"plot_background\",\n \"defensive_half_court\",\n \"offensive_half_court\",\n \"court_apron\",\n \"center_circle_outline\",\n \"center_circle_fill\",\n \"division_line\",\n \"endline\",\n \"sideline\",\n \"two_point_range\",\n \"three_point_line\",\n \"painted_area\",\n \"lane_boundary\",\n \"free_throw_circle_outline\",\n \"free_throw_circle_fill\",\n \"free_throw_circle_dash\",\n \"lane_space_mark\",\n \"inbounding_line\",\n \"substitution_line\",\n \"baseline_lower_defensive_box\",\n \"lane_lower_defensive_box\",\n \"team_bench_line\",\n \"restricted_arc\",\n \"backboard\",\n \"basket_ring\",\n \"net\",\n] as const;\nexport type BasketballColorKey = (typeof BASKETBALL_COLOR_KEYS)[number];\n\n/** Defaults of `basketball_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const BASKETBALL_DEFAULT_COLORS: Readonly<Record<BasketballColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n defensive_half_court: SURFACE,\n offensive_half_court: SURFACE,\n court_apron: SURFACE,\n center_circle_outline: LINE,\n center_circle_fill: SURFACE,\n division_line: LINE,\n endline: LINE,\n sideline: LINE,\n two_point_range: SURFACE,\n three_point_line: LINE,\n painted_area: SURFACE,\n lane_boundary: LINE,\n free_throw_circle_outline: LINE,\n free_throw_circle_fill: SURFACE,\n free_throw_circle_dash: LINE,\n lane_space_mark: LINE,\n inbounding_line: LINE,\n substitution_line: LINE,\n baseline_lower_defensive_box: LINE,\n lane_lower_defensive_box: LINE,\n team_bench_line: LINE,\n restricted_arc: LINE,\n backboard: LINE,\n basket_ring: \"#f55b33\",\n net: \"#ffffff\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { asArray } from \"../specs/_normalize.js\";\nimport {\n BASKETBALL_LEAGUES,\n BASKETBALL_SPECS,\n type BasketballLeague,\n type BasketballParamUpdates,\n type BasketballParams,\n} from \"../specs/basketball.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n frame,\n mergeColors,\n mergeParams,\n orVec,\n} from \"../surface.js\";\nimport { convertUnits, normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n BASKETBALL_DEFAULT_COLORS,\n BASKETBALL_DISPLAY_RANGES,\n type BasketballColorKey,\n type BasketballDisplayRange,\n type BasketballFeature,\n} from \"./types.js\";\n\nconst HIDDEN = \"#00000000\";\nconst NBA = BASKETBALL_SPECS.nba;\nconst ARRAY_FIELDS = (Object.keys(NBA) as (keyof BasketballParams)[]).filter((k) => Array.isArray(NBA[k]));\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/** `display_range` keys with spaces/underscores removed, then R's synonyms folded together. */\ntype RangeGroup =\n | \"full\"\n | \"inboundsonly\"\n | \"offense\"\n | \"defense\"\n | \"offensivekey\"\n | \"defensivekey\"\n | \"offensivepaint\"\n | \"defensivepaint\";\nconst RANGE_SYNONYMS: Readonly<Record<string, RangeGroup>> = {\n offence: \"offense\",\n offensivehalfcourt: \"offense\",\n defence: \"defense\",\n defensivehalfcourt: \"defense\",\n attackingkey: \"offensivekey\",\n defendingkey: \"defensivekey\",\n attackingpaint: \"offensivepaint\",\n offensivelane: \"offensivepaint\",\n attackinglane: \"offensivepaint\",\n defendingpaint: \"defensivepaint\",\n defensivelane: \"defensivepaint\",\n defendinglane: \"defensivepaint\",\n};\n\n/**\n * Port of sportyR `geom_basketball()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` also converts the\n * anchors and display limits (R converts only the feature points, so its non-native plots are broken).\n */\nexport function basketballCourt(\n league: BasketballLeague | (string & {}),\n opts: SurfaceOptions<BasketballParamUpdates, BasketballColorKey, BasketballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(BASKETBALL_LEAGUES, key)) {\n throw new UnknownLeagueError(\n `Unknown basketball league \"${league}\"; expected one of: ${BASKETBALL_LEAGUES.join(\", \")}`,\n );\n }\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(BASKETBALL_DISPLAY_RANGES, range)) {\n throw new UnknownDisplayRangeError(\n `Unknown basketball display range \"${opts.displayRange}\"; expected one of: ${BASKETBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n }\n\n const p = mergeParams(BASKETBALL_SPECS[key], opts.updates, ARRAY_FIELDS);\n const colors = mergeColors(BASKETBALL_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: BasketballColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.court_units || \"ft\"); // custom's \"\" (R would error converting from \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n\n const L = p.court_length;\n const W = p.court_width;\n const lt = p.line_thickness;\n const bcb = p.basket_center_to_baseline;\n const bfb = p.backboard_face_to_baseline;\n const ftR = p.free_throw_circle_radius;\n\n const features: Feature[] = [];\n const add = (\n name: BasketballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color; elevation?: number; height?: number } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n\n // Multi-instance tables (R 382-515). Colours are bound to rows BEFORE sorting, so they travel with them.\n const centerCircles = frame({\n radius: orVec(p.center_circle_radius, 0),\n outline: asArray(colors.center_circle_outline),\n fill: asArray(colors.center_circle_fill),\n }).sort((a, b) => b.radius - a.radius);\n\n const threePointArcs = frame({\n radius: orVec(p.basket_center_to_three_point_arc, 0),\n corner: orVec(p.basket_center_to_corner_three, 0), // unused for drawing; R counts it in nrow()\n line: asArray(colors.three_point_line),\n twoPointRange: asArray(colors.two_point_range),\n }).sort((a, b) => b.radius - a.radius);\n\n const laneLength = orVec(p.lane_length, 0);\n const allHidden = laneLength.map(() => false);\n const lanes = frame({\n length: laneLength,\n width: orVec(p.lane_width, 0),\n paintMargin: orVec(p.paint_margin, 0),\n boundaryColor: asArray(colors.lane_boundary),\n paintedArea: asArray(colors.painted_area),\n boundaryVisible: p.lane_boundary_visibility.length > 0 ? p.lane_boundary_visibility : allHidden,\n paintedVisible: p.painted_area_visibility.length > 0 ? p.painted_area_visibility : allHidden,\n }).sort((a, b) => b.length - a.length || b.width - a.width);\n\n // Lane space mark sets stay in the spec's (unsorted) order.\n const lsmColors = asArray(colors.lane_space_mark);\n const nSets = p.lane_space_mark_lengths.length;\n const markSets = p.lane_space_mark_lengths.map((lengths, i) => {\n // R ifelse() with a scalar test keeps one element: set i gets colour i only when there are several sets.\n const color = (nSets > 1 && lsmColors.length > i ? lsmColors[i] : lsmColors[0]) ?? HIDDEN;\n return lengths.map((length, j) => ({\n yAnchor: (p.lane_width[i] ?? Number.NaN) / 2,\n length,\n width: p.lane_space_mark_widths[i] ?? Number.NaN,\n separation: p.lane_space_mark_separations[i]?.[j] ?? Number.NaN,\n color,\n visible: p.lane_space_mark_visibility[i] === true,\n }));\n });\n\n const overhang = p.free_throw_circle_overhang ?? 0;\n const overhangEndTheta = ftR !== 0 ? 0.5 - overhang / ftR / Math.PI : 0.5;\n\n const benchTop = p.bench_side.toLowerCase() === \"top\";\n const bench = benchTop ? 1 : -1;\n const benchDirection = benchTop ? \"bottom_up\" : \"top_down\";\n const inboundingLines = frame({\n toBaseline: orVec(p.inbounding_line_to_baseline, 0),\n inPlayExt: orVec(p.inbounding_line_in_play_ext, 0),\n outOfBoundsExt: orVec(p.inbounding_line_out_of_bounds_ext, 0),\n symmetric: orVec(p.symmetric_inbounding_line, false),\n anchorSide: orVec(p.inbounding_line_anchor_side, 1).map((s) => (benchTop ? s : -1 * s)),\n });\n\n // Layers, in R's add_feature order (R 799-1237).\n const halfCourt = F.halfCourt({ courtLength: L, courtWidth: W });\n add(\"half_court\", halfCourt, col(\"defensive_half_court\"), -0.25 * L, 0, false, false);\n add(\"half_court\", halfCourt, col(\"offensive_half_court\"), 0.25 * L, 0, false, false);\n add(\n \"court_apron\",\n F.courtApron({\n courtLength: L,\n courtWidth: W,\n courtApronEndline: p.court_apron_endline,\n courtApronSideline: p.court_apron_sideline,\n courtApronToBoundary: p.court_apron_to_boundary,\n lineThickness: lt,\n }),\n col(\"court_apron\"),\n 0,\n 0,\n true,\n false,\n { stroke: col(\"court_apron\") },\n );\n\n centerCircles.forEach((c, i) => {\n // R passes `line_thickness[i] %or% 0`: only the largest circle's fill is inset by the line thickness.\n const fill = F.centerCircleFill({\n centerCircleRadius: c.radius,\n lineThickness: i === 0 ? lt : 0,\n npoints,\n });\n add(\"center_circle_fill\", fill, c.fill, 0, 0, true, false);\n const outline = F.centerCircleOutline({ centerCircleRadius: c.radius, lineThickness: lt, npoints });\n add(\"center_circle_outline\", outline, c.outline, 0, 0, true, false);\n });\n\n threePointArcs.forEach((arc, i) => {\n // R builds arc i from the UNSORTED spec vectors but colours it from the sorted row i.\n const radius = p.basket_center_to_three_point_arc[i] ?? 0;\n const shape = {\n basketCenterToBaseline: bcb,\n basketCenterToCornerThree: p.basket_center_to_corner_three[i] ?? 0,\n lineThickness: lt,\n npoints,\n };\n add(\n \"two_point_range\",\n F.twoPointRange({ ...shape, twoPointRangeRadius: radius }),\n arc.twoPointRange,\n L / 2 - bcb,\n 0,\n true,\n false,\n );\n add(\n \"three_point_line\",\n F.threePointLine({ ...shape, threePointLineRadius: radius }),\n arc.line,\n L / 2 - bcb,\n 0,\n true,\n false,\n );\n });\n\n const ftX = L / 2 - bfb - p.free_throw_line_to_backboard;\n add(\n \"free_throw_circle_fill\",\n F.freeThrowCircleFill({ freeThrowCircleRadius: ftR, lineThickness: lt, npoints }),\n col(\"free_throw_circle_fill\"),\n ftX,\n 0,\n true,\n false,\n );\n add(\n \"free_throw_circle\",\n F.freeThrowCircle({ freeThrowCircleRadius: ftR, lineThickness: lt, npoints }),\n col(\"free_throw_circle_outline\"),\n ftX + lt / 2,\n 0,\n true,\n false,\n );\n\n for (const lane of lanes) {\n const shape = { laneLength: lane.length, laneWidth: lane.width, lineThickness: lt };\n const paintFill = lane.paintedVisible === true ? lane.paintedArea : HIDDEN;\n add(\n \"painted_area\",\n F.paintedArea({ ...shape, paintMargin: lane.paintMargin }),\n paintFill,\n L / 2 - lane.length + lt,\n 0,\n true,\n false,\n );\n const boundaryFill = lane.boundaryVisible === true ? lane.boundaryColor : HIDDEN;\n add(\"free_throw_lane_boundary\", F.freeThrowLaneBoundary(shape), boundaryFill, L / 2, 0, true, false);\n }\n\n const nDashes = p.n_free_throw_circle_dashes ?? 0;\n if (nDashes > 0) {\n const dash = (startAngle: number, endAngle: number): Point[] =>\n F.freeThrowCircleDash({ featureRadius: ftR, lineThickness: lt, startAngle, endAngle, npoints });\n add(\n \"free_throw_circle_dash\",\n dash(0.5, overhangEndTheta),\n col(\"free_throw_circle_dash\"),\n ftX,\n 0,\n true,\n true,\n );\n const thetaDashes = ftR !== 0 ? (p.free_throw_dash_length ?? 0) / ftR / Math.PI : 0;\n const thetaSpaces = ftR !== 0 ? (p.free_throw_dash_spacing ?? 0) / ftR / Math.PI : 0;\n let start = ftR !== 0 ? 0.5 - overhang / ftR / Math.PI - thetaSpaces : 0.5 - thetaSpaces;\n for (let d = 1; d <= nDashes; d++) {\n // R quirk kept: each dash spans theta_spaces, not theta_dashes.\n add(\n \"free_throw_circle_dash\",\n dash(start, start - thetaSpaces),\n col(\"free_throw_circle_dash\"),\n ftX + lt / 2,\n 0,\n true,\n false,\n );\n start = start - thetaDashes - thetaSpaces;\n }\n }\n\n // R loops over the (sorted) lanes but picks mark set i by spec order.\n lanes.forEach((_, i) => {\n const set = markSets[i] ?? [];\n let x = L / 2 - bfb;\n for (const m of set) {\n x = x - m.separation;\n // Parent bug not ported: R reads `lane_space_mark_set[i, \"color\"]` (lane index i, NA once i > marks per set).\n const fill = m.visible ? m.color : HIDDEN;\n add(\n \"lane_space_mark\",\n F.laneSpaceMark({ featureThickness: m.length, markDepth: m.width }),\n fill,\n x,\n m.yAnchor,\n true,\n true,\n );\n }\n });\n\n const boxShape = { extension: p.lower_defensive_box_mark_extension ?? 0, lineThickness: lt };\n add(\n \"lower_defensive_box_mark\",\n F.lowerDefensiveBoxMark({ ...boxShape, drawnDirection: \"left_to_right\" }),\n col(\"baseline_lower_defensive_box\"),\n L / 2,\n (p.baseline_lower_defensive_box_marks_int_sep ?? 0) / 2,\n true,\n true,\n );\n add(\n \"lower_defensive_box_mark\",\n F.lowerDefensiveBoxMark({ ...boxShape, drawnDirection: \"top_down\" }),\n (p.lane_lower_defensive_box_marks_visibility ?? false) === true\n ? col(\"lane_lower_defensive_box\")\n : HIDDEN,\n L / 2 - (p.baseline_to_lane_lower_defensive_box_marks ?? 0),\n (p.lane_lower_defensive_box_marks_int_sep ?? 0) / 2,\n true,\n true,\n );\n\n add(\"endline\", F.endline({ courtWidth: W, lineThickness: lt }), col(\"endline\"), L / 2, 0, true, false);\n add(\"sideline\", F.sideline({ courtLength: L, lineThickness: lt }), col(\"sideline\"), 0, W / 2, false, true);\n\n for (const line of inboundingLines) {\n const shape = F.inboundingLine({\n lineThickness: lt,\n inPlayExt: line.inPlayExt,\n outOfBoundsExt: line.outOfBoundsExt,\n drawnDirection: line.anchorSide < 1 ? \"bottom_up\" : \"top_down\",\n });\n add(\n \"inbounding_line\",\n shape,\n col(\"inbounding_line\"),\n L / 2 - line.toBaseline,\n (W / 2) * line.anchorSide,\n true,\n line.symmetric,\n );\n }\n\n add(\n \"substitution_line\",\n F.substitutionLine({\n lineThickness: lt,\n substitutionLineWidth: p.substitution_line_width ?? 0,\n drawnDirection: benchDirection,\n }),\n col(\"substitution_line\"),\n (p.substitution_line_ext_sep ?? 0) / 2,\n (bench * W) / 2,\n true,\n false,\n );\n add(\n \"team_bench_line\",\n F.teamBenchLine({\n lineThickness: lt,\n extension: p.team_bench_line_ext ?? 0,\n drawnDirection: benchDirection,\n }),\n col(\"team_bench_line\"),\n L / 2,\n bench * (W / 2 + lt),\n true,\n false,\n );\n add(\n \"division_line\",\n F.divisionLine({\n courtWidth: W,\n lineThickness: lt,\n divisionLineExtension: p.division_line_extension ?? 0,\n }),\n col(\"division_line\"),\n 0,\n 0,\n false,\n true,\n );\n\n const hint = (ft: number): number => convertUnits(ft, \"ft\", units);\n add(\n \"restricted_arc\",\n F.restrictedArc({\n featureRadius: p.restricted_arc_radius ?? 0,\n lineThickness: lt,\n backboardToCenterOfBasket: bcb - bfb,\n npoints,\n }),\n col(\"restricted_arc\"),\n L / 2 - bfb,\n 0,\n true,\n false,\n );\n add(\n \"basket_ring\",\n F.basketRing({\n basketRingConnectorWidth: p.basket_ring_connector_width,\n backboardFaceToRingCent: bcb - bfb,\n basketRingInnerRadius: p.basket_ring_inner_radius,\n basketRingThickness: p.basket_ring_thickness,\n npoints,\n }),\n col(\"basket_ring\"),\n L / 2 - bfb,\n 0,\n true,\n false,\n { elevation: hint(10) },\n );\n add(\n \"net\",\n F.net({ basketRingInnerRadius: p.basket_ring_inner_radius, npoints }),\n col(\"net\"),\n L / 2 - bcb,\n 0,\n true,\n false,\n { elevation: hint(10 - 1.5) },\n );\n add(\n \"backboard\",\n F.backboard({ backboardWidth: p.backboard_width, backboardThickness: p.backboard_thickness }),\n col(\"backboard\"),\n L / 2 - bfb,\n 0,\n true,\n false,\n { height: hint(3.5) },\n );\n\n // Display range (R 1240-1652), in the spec's units; then converted, translated, rotated.\n const hcl = L / 2 + p.court_apron_endline;\n const hcw = W / 2 + p.court_apron_sideline;\n const keyX = L / 2 - bcb - Math.max(...p.basket_center_to_three_point_arc) - 3;\n const paintX = L / 2 - Math.max(...p.lane_length) - ftR;\n const laneHalf = Math.max(...p.lane_width) / 2;\n const fullY = [-hcw, hcw] as const;\n const paintY = [-laneHalf - 1.5, laneHalf + 1.5] as const;\n const ranges: Record<RangeGroup, readonly [readonly [number, number], readonly [number, number]]> = {\n full: [[-hcl, hcl], fullY],\n inboundsonly: [\n [-(L / 2 + lt), L / 2 + lt],\n [-(W / 2 + lt), W / 2 + lt],\n ],\n offense: [[0, hcl], fullY],\n defense: [[-hcl, 0], fullY],\n offensivekey: [[keyX, hcl], fullY],\n defensivekey: [[-hcl, -keyX], fullY],\n offensivepaint: [[paintX, hcl], paintY],\n defensivepaint: [[-hcl, -paintX], paintY],\n };\n const squashed = range.replace(/[ _]/g, \"\");\n const [rx, ry] = ranges[RANGE_SYNONYMS[squashed] ?? (squashed as RangeGroup)];\n const [cx, cy] = convertLimits(rx, ry, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n\n // R: plot_background NULL = none; our transparent default stands in for NULL.\n const background = col(\"plot_background\");\n return {\n sport: \"basketball\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle } from \"../shapes.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). Same helper as soccer/features.ts. */\ntype Arc = { npoints?: number | undefined };\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\n/** curling_end: the playing end beyond the hog line, hanging from (downward) or rising from (upward) y = 0; the anchor puts y = 0 on the hog line. */\nexport function end({\n sheetLength = 0,\n sheetWidth = 0,\n teeLineToCenter = 0,\n hogLineToTeeLine = 0,\n drawnDirection = \"\",\n}: {\n sheetLength?: number;\n sheetWidth?: number;\n teeLineToCenter?: number;\n hogLineToTeeLine?: number;\n drawnDirection?: string;\n} = {}): Point[] {\n const endLength = sheetLength / 2 - teeLineToCenter + hogLineToTeeLine;\n return drawnDirection.toLowerCase() === \"upward\"\n ? createRectangle(-sheetWidth / 2, sheetWidth / 2, 0, endLength)\n : createRectangle(-sheetWidth / 2, sheetWidth / 2, -endLength, 0);\n}\n\n/** curling_centre_zone: the strip between the two hog lines. */\nexport function centreZone({\n sheetWidth = 0,\n teeLineToCenter = 0,\n hogLineToTeeLine = 0,\n}: { sheetWidth?: number; teeLineToCenter?: number; hogLineToTeeLine?: number } = {}): Point[] {\n const h = teeLineToCenter - hogLineToTeeLine;\n return createRectangle(-sheetWidth / 2, sheetWidth / 2, -h, h);\n}\n\n/** curling_sheet_apron: the only 10-point shape, the y >= 0 half of the frame (mirrored over x by the assembler). */\nexport function sheetApron({\n sheetLength = 0,\n sheetWidth = 0,\n apronBehindBack = 0,\n apronAlongSide = 0,\n}: {\n sheetLength?: number;\n sheetWidth?: number;\n apronBehindBack?: number;\n apronAlongSide?: number;\n} = {}): Point[] {\n const w = sheetWidth / 2;\n const l = sheetLength / 2;\n const ox = w + apronAlongSide;\n const oy = l + apronBehindBack;\n return [\n [0, l],\n [w, l],\n [w, 0],\n [ox, 0],\n [ox, oy],\n [-ox, oy],\n [-ox, 0],\n [-w, 0],\n [-w, l],\n [0, l],\n ];\n}\n\n/** curling_centre_line. */\nexport function centreLine({\n lineThickness = 0,\n teeLineToCenter = 0,\n centreLineExtension = 0,\n}: { lineThickness?: number; teeLineToCenter?: number; centreLineExtension?: number } = {}): Point[] {\n const h = teeLineToCenter + centreLineExtension;\n return createRectangle(-lineThickness / 2, lineThickness / 2, -h, h);\n}\n\n/** curling_tee_line. */\nexport const teeLine = ({\n lineThickness = 0,\n sheetWidth = 0,\n}: { lineThickness?: number; sheetWidth?: number } = {}): Point[] =>\n createRectangle(-sheetWidth / 2, sheetWidth / 2, -lineThickness / 2, lineThickness / 2);\n\n/** curling_back_line. */\nexport const backLine = ({\n lineThickness = 0,\n sheetWidth = 0,\n}: { lineThickness?: number; sheetWidth?: number } = {}): Point[] =>\n createRectangle(-sheetWidth / 2, sheetWidth / 2, 0, lineThickness);\n\n/** curling_hog_line (same geometry as the back line in R). */\nexport const hogLine = ({\n lineThickness = 0,\n sheetWidth = 0,\n}: { lineThickness?: number; sheetWidth?: number } = {}): Point[] =>\n createRectangle(-sheetWidth / 2, sheetWidth / 2, 0, lineThickness);\n\n/** curling_hack_line. */\nexport const hackLine = ({\n lineThickness = 0,\n hackWidth = 0,\n}: { lineThickness?: number; hackWidth?: number } = {}): Point[] =>\n createRectangle(-hackWidth / 2, hackWidth / 2, -lineThickness, 0);\n\n/** curling_courtesy_line. */\nexport const courtesyLine = ({\n lineThickness = 0,\n lineLength = 0,\n}: { lineThickness?: number; lineLength?: number } = {}): Point[] =>\n createRectangle(-lineLength, 0, -lineThickness, 0);\n\n/** curling_hack_foothold. */\nexport const hackFoothold = ({\n footholdDepth = 0,\n footholdWidth = 0,\n}: { footholdDepth?: number; footholdWidth?: number } = {}): Point[] =>\n createRectangle(0, footholdWidth, -footholdDepth, 0);\n\n/** curling_button: a full disc. */\nexport const button = ({ featureRadius = 0, npoints }: { featureRadius?: number } & Arc = {}): Point[] =>\n circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n\n/** curling_house_ring: a filled disc; the assembler stacks the radii largest-first so each smaller ring paints over the last. */\nexport const houseRing = ({ featureRadius = 0, npoints }: { featureRadius?: number } & Arc = {}): Point[] =>\n circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `curling_*` builder (prefix dropped), as used in `PolygonFeature.name` (12). */\nexport const CURLING_FEATURES = [\n \"sheet_apron\",\n \"end\",\n \"centre_zone\",\n \"house_ring\",\n \"button\",\n \"tee_line\",\n \"back_line\",\n \"hog_line\",\n \"centre_line\",\n \"hack_line\",\n \"courtesy_line\",\n \"hack_foothold\",\n] as const;\nexport type CurlingFeature = (typeof CURLING_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_curling()` (4). */\nexport const CURLING_DISPLAY_RANGES = [\"full\", \"in_bounds_only\", \"in bounds only\", \"house\"] as const;\nexport type CurlingDisplayRange = (typeof CURLING_DISPLAY_RANGES)[number];\n\n/** The 14 argument names of `curling_features_set_colors()`, in R's declaration order (colour keys are NOT feature names). */\nexport const CURLING_COLOR_KEYS = [\n \"plot_background\",\n \"end_1\",\n \"centre_zone\",\n \"end_2\",\n \"sheet_apron\",\n \"centre_line\",\n \"tee_line\",\n \"back_line\",\n \"hog_line\",\n \"hack_line\",\n \"courtesy_line\",\n \"hack\",\n \"button\",\n \"house_rings\",\n] as const;\nexport type CurlingColorKey = (typeof CURLING_COLOR_KEYS)[number];\n\n/** Defaults of `curling_features_set_colors()` (R's plot_background default is NULL; transparent here). `house_rings` is a vector, recycled by `colorAt`. */\nexport const CURLING_DEFAULT_COLORS: Readonly<Record<CurlingColorKey, Color | readonly Color[]>> = {\n plot_background: \"#ffffff00\",\n end_1: \"#ffffff\",\n centre_zone: \"#ffffff\",\n end_2: \"#ffffff\",\n sheet_apron: \"#0033a0\",\n centre_line: \"#000000\",\n tee_line: \"#000000\",\n back_line: \"#000000\",\n hog_line: \"#c8102e\",\n hack_line: \"#000000\",\n courtesy_line: \"#000000\",\n hack: \"#000000\",\n button: \"#ffffff\",\n house_rings: [\"#c8102e\", \"#ffffff\", \"#0033a0\"],\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n CURLING_LEAGUES,\n CURLING_SPECS,\n type CurlingLeague,\n type CurlingParamUpdates,\n} from \"../specs/curling.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n CURLING_DEFAULT_COLORS,\n CURLING_DISPLAY_RANGES,\n type CurlingColorKey,\n type CurlingDisplayRange,\n type CurlingFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/**\n * Port of sportyR `geom_curling()`: one PolygonFeature per ggplot layer R adds, in R's layer order. The sheet is vertical\n * (`sheet_width` spans x, `sheet_length` spans y).\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` also converts the anchors and\n * display limits; a house-ring colour vector shorter than the ring count recycles (R yields NA).\n */\nexport function curlingSheet(\n league: CurlingLeague | (string & {}),\n opts: SurfaceOptions<CurlingParamUpdates, CurlingColorKey, CurlingDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(CURLING_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown curling league \"${league}\"; expected one of: ${CURLING_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase(); // R: tolower() only — no trim\n if (!isOneOf(CURLING_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown curling display range \"${opts.displayRange}\"; expected one of: ${CURLING_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(CURLING_SPECS[key], opts.updates, [\"house_ring_radii\"]);\n const colors = mergeColors(CURLING_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: CurlingColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.sheet_units || \"ft\"); // R: sheet_units %or% \"ft\" (custom's \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.sheet_length;\n const W = p.sheet_width;\n const tee = p.tee_line_to_center;\n const hog = p.hog_line_to_tee_line;\n const features: Feature[] = [];\n const add = (\n name: CurlingFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n // Layers, in R's add_feature order (geom-curling.R 296-470).\n add(\n \"sheet_apron\",\n F.sheetApron({\n sheetLength: L,\n sheetWidth: W,\n apronBehindBack: p.apron_behind_back,\n apronAlongSide: p.apron_along_side,\n }),\n col(\"sheet_apron\"),\n 0,\n 0,\n false,\n true,\n { stroke: col(\"sheet_apron\") },\n );\n const endOpts = { sheetLength: L, sheetWidth: W, teeLineToCenter: tee, hogLineToTeeLine: hog };\n add(\"end\", F.end({ ...endOpts, drawnDirection: \"downward\" }), col(\"end_1\"), 0, -tee + hog, false, false);\n add(\n \"centre_zone\",\n F.centreZone({ sheetWidth: W, teeLineToCenter: tee, hogLineToTeeLine: hog }),\n col(\"centre_zone\"),\n 0,\n 0,\n false,\n false,\n );\n add(\"end\", F.end({ ...endOpts, drawnDirection: \"upward\" }), col(\"end_2\"), 0, tee - hog, false, false);\n const radii = [...p.house_ring_radii].sort((a, b) => b - a); // R: house_ring_radii[rev(order(house_ring_radii))]\n radii.forEach((r, i) =>\n add(\n \"house_ring\",\n F.houseRing({ featureRadius: r, npoints }),\n colorAt(colors.house_rings, i),\n 0,\n tee,\n false,\n true,\n ),\n );\n add(\"button\", F.button({ featureRadius: p.button_radius, npoints }), col(\"button\"), 0, tee, false, true);\n add(\n \"tee_line\",\n F.teeLine({ lineThickness: p.tee_line_thickness, sheetWidth: W }),\n col(\"tee_line\"),\n 0,\n tee,\n false,\n true,\n );\n add(\n \"back_line\",\n F.backLine({ lineThickness: p.back_line_thickness, sheetWidth: W }),\n col(\"back_line\"),\n 0,\n tee + p.back_line_to_tee_line,\n false,\n true,\n );\n add(\n \"hog_line\",\n F.hogLine({ lineThickness: p.hog_line_thickness, sheetWidth: W }),\n col(\"hog_line\"),\n 0,\n tee - hog,\n false,\n true,\n );\n add(\n \"centre_line\",\n F.centreLine({\n lineThickness: p.centre_line_thickness,\n teeLineToCenter: tee,\n centreLineExtension: p.centre_line_extension,\n }),\n col(\"centre_line\"),\n 0,\n 0,\n false,\n false,\n );\n add(\n \"hack_line\",\n F.hackLine({\n lineThickness: p.hack_line_thickness,\n hackWidth: 2 * p.hack_foothold_width + p.hack_foothold_gap,\n }),\n col(\"hack_line\"),\n 0,\n tee + p.centre_line_extension,\n false,\n true,\n );\n add(\n \"courtesy_line\",\n F.courtesyLine({ lineThickness: p.courtesy_line_thickness, lineLength: p.courtesy_line_length }),\n col(\"courtesy_line\"),\n W / 2,\n tee - hog - p.courtesy_line_to_hog_line,\n true,\n true,\n );\n add(\n \"hack_foothold\",\n F.hackFoothold({ footholdDepth: p.hack_foothold_depth, footholdWidth: p.hack_foothold_width }),\n col(\"hack\"),\n p.hack_foothold_gap,\n tee + p.centre_line_extension,\n true,\n true,\n );\n // Display range (geom-curling.R 511-600) in native units (the +5 is NOT scaled — R); then converted (documented divergence 1), translated, rotated.\n const hsl = L / 2 + p.apron_behind_back + 5;\n const hsw = W / 2 + p.apron_along_side + 5;\n const endLength = tee - hog - p.courtesy_line_to_hog_line;\n const inBounds = range === \"in_bounds_only\" || range === \"in bounds only\";\n const [cx, cy] = convertLimits(\n inBounds ? [-(W / 2 + 0.5), W / 2 + 0.5] : [-hsw, hsw],\n inBounds ? [-(L / 2 + 0.5), L / 2 + 0.5] : range === \"house\" ? [endLength, hsl] : [-hsl, hsl],\n from,\n units,\n );\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // R: NULL = none; transparent stands in\n return {\n sport: \"curling\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createRectangle } from \"../shapes.js\";\n\n// No football feature has an arc, so no builder takes `npoints`.\n\n/** R `data.frame(x = c(...), y = c(...))`. */\nconst zip = (xs: readonly number[], ys: readonly number[]): Point[] =>\n xs.map((x, i): Point => [x, ys[i] ?? 0]);\n\nconst isRectangular = (benchShape: string): boolean =>\n [\"rectangle\", \"rectangular\"].includes(benchShape.toLowerCase());\n\n/**\n * R's bench-corner x for the apron/border outlines. Rectangular benches with equal sides divide by zero, so\n * `m = Inf` and the corner falls back to `x1` (JS and R agree on Infinity here).\n */\nfunction outerCornerX(\n benchShape: string,\n startingDepth: number,\n thickness: number,\n teamBenchLengthFieldSide: number,\n teamBenchLengthBackSide: number,\n teamBenchWidth: number,\n teamBenchAreaBorderThickness: number,\n): number {\n if (!isRectangular(benchShape))\n return teamBenchLengthBackSide / 2 + teamBenchAreaBorderThickness + thickness / 2;\n const m = teamBenchWidth / (teamBenchLengthBackSide / 2 - teamBenchLengthFieldSide / 2);\n const y2 = startingDepth + thickness;\n const y1 = startingDepth - teamBenchWidth - teamBenchAreaBorderThickness;\n const x1 = teamBenchLengthFieldSide / 2 + teamBenchAreaBorderThickness + thickness;\n return (y2 - y1) / m + x1;\n}\n\ntype BenchOpts = {\n fieldLength?: number;\n fieldWidth?: number;\n endzoneLength?: number;\n restrictedAreaLength?: number;\n restrictedAreaWidth?: number;\n coachingBoxLength?: number;\n coachingBoxWidth?: number;\n teamBenchLengthFieldSide?: number;\n teamBenchLengthBackSide?: number;\n teamBenchWidth?: number;\n teamBenchAreaBorderThickness?: number;\n benchShape?: string;\n};\n\n// Surface base features -------------------------------------------------------------------------\n\n/** Quarter-length half-field rectangle (R anchors it at ±L/4). */\nexport function halfField({\n fieldLength = 0,\n fieldWidth = 0,\n}: { fieldLength?: number; fieldWidth?: number } = {}): Point[] {\n return createRectangle(-fieldLength / 4, fieldLength / 4, -fieldWidth / 2, fieldWidth / 2);\n}\n\nexport function endzone({\n fieldWidth = 0,\n endzoneLength = 0,\n}: { fieldWidth?: number; endzoneLength?: number } = {}): Point[] {\n return createRectangle(-endzoneLength / 2, endzoneLength / 2, -fieldWidth / 2, fieldWidth / 2);\n}\n\n/** R quirk kept: the \"restricted area (top)\" vertex uses field_border_thickness, not restricted_area_width. */\nexport function fieldApron({\n fieldLength = 0,\n fieldWidth = 0,\n endzoneLength = 0,\n boundaryThickness = 0,\n fieldBorderThickness = 0,\n restrictedAreaLength = 0,\n restrictedAreaWidth = 0,\n coachingBoxLength = 0,\n coachingBoxWidth = 0,\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n teamBenchAreaBorderThickness = 0,\n extraApronPadding = 0,\n benchShape = \"\",\n}: BenchOpts & {\n boundaryThickness?: number;\n fieldBorderThickness?: number;\n extraApronPadding?: number;\n} = {}): Point[] {\n const fbt = fieldBorderThickness;\n const tb = teamBenchAreaBorderThickness;\n const extX = fieldLength / 2 + endzoneLength + boundaryThickness + fbt + extraApronPadding;\n const depth =\n fieldWidth / 2 + boundaryThickness + restrictedAreaWidth + coachingBoxWidth + teamBenchWidth + tb + fbt;\n const extY = depth + extraApronPadding;\n const outer = outerCornerX(\n benchShape,\n depth,\n fbt,\n teamBenchLengthFieldSide,\n teamBenchLengthBackSide,\n teamBenchWidth,\n tb,\n );\n const benchX = teamBenchLengthFieldSide / 2 + tb + fbt;\n const coachX = coachingBoxLength / 2 + tb + fbt;\n const restrictedX = restrictedAreaLength / 2 + tb + fbt;\n const edgeX = fieldLength / 2 + endzoneLength + boundaryThickness + fbt;\n const benchY = fieldWidth / 2 + boundaryThickness + restrictedAreaWidth + coachingBoxWidth;\n const coachY = fieldWidth / 2 + boundaryThickness + restrictedAreaWidth;\n const edgeY = fieldWidth / 2 + boundaryThickness + fbt;\n return zip(\n [\n 0,\n outer,\n benchX,\n coachX,\n restrictedX,\n edgeX,\n edgeX,\n restrictedX,\n coachX,\n benchX,\n outer,\n 0,\n 0,\n extX,\n extX,\n 0,\n 0,\n ],\n [\n depth,\n depth,\n benchY,\n coachY,\n edgeY,\n edgeY,\n -edgeY,\n -edgeY,\n -coachY,\n -benchY,\n -depth,\n -depth,\n -extY,\n -extY,\n extY,\n extY,\n depth,\n ],\n );\n}\n\n// Surface boundaries ----------------------------------------------------------------------------\n\nexport function endLine({\n featureThickness = 0,\n fieldWidth = 0,\n}: { featureThickness?: number; fieldWidth?: number } = {}): Point[] {\n return createRectangle(\n 0,\n featureThickness,\n -(fieldWidth / 2 + featureThickness),\n fieldWidth / 2 + featureThickness,\n );\n}\n\nexport function sideline({\n featureThickness = 0,\n fieldLength = 0,\n endzoneLength = 0,\n}: { featureThickness?: number; fieldLength?: number; endzoneLength?: number } = {}): Point[] {\n return createRectangle(\n -(fieldLength / 2 + endzoneLength),\n fieldLength / 2 + endzoneLength,\n 0,\n featureThickness,\n );\n}\n\nexport function fieldBorder({\n fieldLength = 0,\n fieldWidth = 0,\n featureThickness = 0,\n endzoneLength = 0,\n boundaryLineThickness = 0,\n restrictedAreaLength = 0,\n restrictedAreaWidth = 0,\n coachingBoxLength = 0,\n coachingBoxWidth = 0,\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n teamBenchAreaBorderThickness = 0,\n surroundsTeamBenchArea = false,\n benchShape = \"\",\n}: BenchOpts & {\n featureThickness?: number;\n boundaryLineThickness?: number;\n surroundsTeamBenchArea?: boolean;\n} = {}): Point[] {\n const t = featureThickness;\n const tb = teamBenchAreaBorderThickness;\n const blt = boundaryLineThickness;\n const raX = restrictedAreaLength / 2 + tb;\n const edgeX = fieldLength / 2 + endzoneLength + blt;\n const edgeY = fieldWidth / 2 + blt;\n if (!surroundsTeamBenchArea) {\n return zip(\n [raX, edgeX, edgeX, raX, raX, edgeX + t, edgeX + t, raX, raX],\n [edgeY, edgeY, -edgeY, -edgeY, -(edgeY + t), -(edgeY + t), edgeY + t, edgeY + t, edgeY],\n );\n }\n const depth = fieldWidth / 2 + blt + restrictedAreaWidth + coachingBoxWidth + teamBenchWidth + tb;\n const outer = outerCornerX(\n benchShape,\n depth,\n t,\n teamBenchLengthFieldSide,\n teamBenchLengthBackSide,\n teamBenchWidth,\n tb,\n );\n const backX = teamBenchLengthBackSide / 2 + tb;\n const benchX = teamBenchLengthFieldSide / 2 + tb;\n const coachX = coachingBoxLength / 2 + tb;\n const benchY = depth - teamBenchWidth - tb;\n return zip(\n [\n 0,\n backX,\n benchX,\n coachX,\n raX,\n edgeX,\n edgeX,\n raX,\n coachX,\n benchX,\n backX,\n 0,\n 0,\n outer,\n benchX + t,\n coachX + t,\n raX + t,\n edgeX + t,\n edgeX + t,\n raX + t,\n coachX + t,\n benchX + t,\n outer,\n 0,\n 0,\n ],\n [\n depth,\n depth,\n benchY,\n benchY,\n edgeY,\n edgeY,\n -fieldWidth / 2 - blt,\n -fieldWidth / 2 - blt,\n -depth + teamBenchWidth + tb,\n -depth + teamBenchWidth + tb,\n -depth,\n -depth,\n -depth - t,\n -depth - t,\n -depth + teamBenchWidth + tb,\n -depth + teamBenchWidth + tb + coachingBoxWidth,\n -fieldWidth / 2 - blt - t,\n -fieldWidth / 2 - blt - t,\n edgeY + t,\n edgeY + t,\n depth - teamBenchWidth - tb - coachingBoxWidth,\n depth - teamBenchWidth - tb,\n depth + t,\n depth + t,\n depth,\n ],\n );\n}\n\nexport function fieldBorderOutline({\n fieldLength = 0,\n fieldWidth = 0,\n featureThickness = 0,\n endzoneLength = 0,\n boundaryLineThickness = 0,\n restrictedAreaLength = 0,\n restrictedAreaWidth = 0,\n coachingBoxLength = 0,\n coachingBoxWidth = 0,\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n teamBenchAreaBorderThickness = 0,\n fieldBorderThickness = 0,\n surroundsTeamBenchArea = true,\n benchShape = \"\",\n}: BenchOpts & {\n featureThickness?: number;\n boundaryLineThickness?: number;\n fieldBorderThickness?: number;\n surroundsTeamBenchArea?: boolean;\n} = {}): Point[] {\n const t = featureThickness;\n const tb = teamBenchAreaBorderThickness;\n const blt = boundaryLineThickness;\n const fbt = fieldBorderThickness;\n if (!surroundsTeamBenchArea) {\n const raX = restrictedAreaLength / 2 + tb;\n const edgeX = fieldLength / 2 + endzoneLength + blt + fbt;\n const edgeY = fieldWidth / 2 + blt + fbt;\n return zip(\n [raX, edgeX, edgeX, raX, raX, edgeX + t, edgeX + t, raX, raX],\n [edgeY, edgeY, -edgeY, -edgeY, -(edgeY + t), -(edgeY + t), edgeY + t, edgeY + t, edgeY],\n );\n }\n const depth = fieldWidth / 2 + blt + restrictedAreaWidth + coachingBoxWidth + teamBenchWidth + tb + fbt;\n const outer = outerCornerX(\n benchShape,\n depth,\n fbt,\n teamBenchLengthFieldSide,\n teamBenchLengthBackSide,\n teamBenchWidth,\n tb,\n );\n const benchX = teamBenchLengthFieldSide / 2 + tb + fbt;\n const coachX = coachingBoxLength / 2 + tb + fbt;\n const raX = restrictedAreaLength / 2 + tb + fbt;\n const edgeX = fieldLength / 2 + endzoneLength + blt + fbt;\n const outerEdgeX = fieldLength / 2 + blt + endzoneLength + fbt + t;\n const benchY = fieldWidth / 2 + blt + restrictedAreaWidth + coachingBoxWidth;\n const coachY = fieldWidth / 2 + blt + restrictedAreaWidth;\n const edgeY = fieldWidth / 2 + blt + fbt;\n const outY = depth + t;\n return zip(\n [\n 0,\n outer,\n benchX,\n coachX,\n raX,\n edgeX,\n edgeX,\n raX,\n coachX,\n benchX,\n outer,\n 0,\n 0,\n outer + t,\n benchX + t,\n coachX + t,\n raX + t,\n outerEdgeX,\n outerEdgeX,\n raX + t,\n coachX + t,\n benchX + t,\n outer + t,\n 0,\n 0,\n ],\n [\n depth,\n depth,\n benchY,\n coachY,\n edgeY,\n edgeY,\n -edgeY,\n -edgeY,\n -coachY,\n -benchY,\n -depth,\n -depth,\n -outY,\n -outY,\n -benchY,\n -coachY,\n -(edgeY + t),\n -(edgeY + t),\n edgeY + t,\n edgeY + t,\n coachY,\n benchY,\n outY,\n outY,\n depth,\n ],\n );\n}\n\nexport const redZoneBorder = ({ featureThickness = 0 }: { featureThickness?: number } = {}): Point[] =>\n createRectangle(0, 20, 0, featureThickness);\n\nexport const redZoneBorderOutline = ({ featureThickness = 0 }: { featureThickness?: number } = {}): Point[] =>\n createRectangle(0, 20, 0, featureThickness);\n\n// Surface lines ---------------------------------------------------------------------------------\n\nexport const goalLine = ({\n fieldWidth = 0,\n featureThickness = 0,\n}: { fieldWidth?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(0, featureThickness, -fieldWidth / 2, fieldWidth / 2);\n\nexport function majorYardLine({\n fieldWidth = 0,\n featureThickness = 0,\n distToSideline = 0,\n crossHashLength = 0,\n crossHashSeparation = 0,\n}: {\n fieldWidth?: number;\n featureThickness?: number;\n distToSideline?: number;\n crossHashLength?: number;\n crossHashSeparation?: number;\n} = {}): Point[] {\n const h = featureThickness / 2;\n const o = featureThickness / 2 + crossHashLength;\n const s = crossHashSeparation / 2;\n const st = crossHashSeparation / 2 + featureThickness;\n const top = fieldWidth / 2 - distToSideline;\n return zip(\n [-h, -h, -o, -o, -h, -h, -o, -o, -h, -h, h, h, o, o, h, h, o, o, h, h, -h],\n [-top, -st, -st, -s, -s, s, s, st, st, top, top, st, st, s, s, -s, -s, -st, -st, -top, -top],\n );\n}\n\nexport const minorYardLine = ({\n yardLineHeight = 0,\n featureThickness = 0,\n}: { yardLineHeight?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-featureThickness / 2, featureThickness / 2, 0, yardLineHeight);\n\nexport const tryMark = ({\n tryMarkWidth = 0,\n featureThickness = 0,\n}: { tryMarkWidth?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-featureThickness / 2, featureThickness / 2, -tryMarkWidth / 2, tryMarkWidth / 2);\n\nexport const coachingBoxLine = ({\n coachingBoxLineLength = 0,\n featureThickness = 0,\n}: { coachingBoxLineLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-coachingBoxLineLength / 2, coachingBoxLineLength / 2, 0, featureThickness);\n\n// Surface features ------------------------------------------------------------------------------\n\nexport const directionalArrow = ({\n arrowBase = 0,\n arrowLength = 0,\n}: { arrowBase?: number; arrowLength?: number } = {}): Point[] =>\n zip([0, arrowLength, 0, 0], [arrowBase / 2, 0, -arrowBase / 2, arrowBase / 2]);\n\nexport const restrictedArea = ({\n restrictedAreaLength = 0,\n featureThickness = 0,\n}: { restrictedAreaLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-restrictedAreaLength / 2, restrictedAreaLength / 2, 0, featureThickness);\n\nexport const coachingBox = ({\n coachingBoxLength = 0,\n featureThickness = 0,\n}: { coachingBoxLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-coachingBoxLength / 2, coachingBoxLength / 2, 0, featureThickness);\n\nexport const teamBenchArea = ({\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n}: {\n teamBenchLengthFieldSide?: number;\n teamBenchLengthBackSide?: number;\n teamBenchWidth?: number;\n} = {}): Point[] =>\n zip(\n [\n -teamBenchLengthFieldSide / 2,\n teamBenchLengthFieldSide / 2,\n teamBenchLengthBackSide / 2,\n -teamBenchLengthBackSide / 2,\n -teamBenchLengthFieldSide / 2,\n ],\n [0, 0, teamBenchWidth, teamBenchWidth, 0],\n );\n\nexport function teamBenchAreaOutline({\n restrictedAreaLength = 0,\n restrictedAreaWidth = 0,\n coachingBoxLength = 0,\n coachingBoxWidth = 0,\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n featureThickness = 0,\n}: BenchOpts & { featureThickness?: number } = {}): Point[] {\n const t = featureThickness;\n const [ra, cb, fs, bs] = [\n restrictedAreaLength / 2,\n coachingBoxLength / 2,\n teamBenchLengthFieldSide / 2,\n teamBenchLengthBackSide / 2,\n ];\n const cbY = restrictedAreaWidth + coachingBoxWidth;\n const backY = restrictedAreaWidth + coachingBoxWidth + teamBenchWidth;\n return zip(\n [\n -ra,\n -cb,\n -fs,\n -bs,\n bs,\n fs,\n cb,\n ra,\n ra + t,\n cb + t,\n fs + t,\n bs + t,\n -(bs + t),\n -(fs + t),\n -(cb + t),\n -(ra + t),\n -ra,\n ],\n [\n 0,\n restrictedAreaWidth,\n cbY,\n backY,\n backY,\n cbY,\n restrictedAreaWidth,\n 0,\n 0,\n restrictedAreaWidth,\n cbY,\n backY + t,\n backY + t,\n cbY,\n restrictedAreaWidth,\n 0,\n 0,\n ],\n );\n}\n","import type { Color } from \"../scene.js\";\n\n/**\n * One name per sportyR `football_*` builder (prefix dropped), plus the two yard-number layers `geom_football()`\n * draws itself: `yardage_marker` (TextFeature) and `yardage_marker_box` (its transparent ggplot bounding box).\n */\nexport const FOOTBALL_FEATURES = [\n \"half_field\",\n \"endzone\",\n \"field_apron\",\n \"end_line\",\n \"sideline\",\n \"field_border\",\n \"field_border_outline\",\n \"red_zone_border\",\n \"red_zone_border_outline\",\n \"goal_line\",\n \"major_yard_line\",\n \"minor_yard_line\",\n \"try_mark\",\n \"coaching_box_line\",\n \"directional_arrow\",\n \"restricted_area\",\n \"coaching_box\",\n \"team_bench_area\",\n \"team_bench_area_outline\",\n \"yardage_marker\",\n \"yardage_marker_box\",\n] as const;\nexport type FootballFeature = (typeof FOOTBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_football()` (xlims and ylims share them; 22). */\nexport const FOOTBALL_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalffield\",\n \"offensive_half_field\",\n \"offensive half field\",\n \"defense\",\n \"defence\",\n \"defensivehalffield\",\n \"defensive_half_field\",\n \"defensive half field\",\n \"redzone\",\n \"red_zone\",\n \"red zone\",\n \"oredzone\",\n \"offensive_red_zone\",\n \"offensive red zone\",\n \"dredzone\",\n \"defensive_red_zone\",\n \"defensive red zone\",\n] as const;\nexport type FootballDisplayRange = (typeof FOOTBALL_DISPLAY_RANGES)[number];\n\n/** The 23 argument names of `football_features_set_colors()`, in R's declaration order. */\nexport const FOOTBALL_COLOR_KEYS = [\n \"plot_background\",\n \"field_apron\",\n \"offensive_half\",\n \"defensive_half\",\n \"offensive_endzone\",\n \"defensive_endzone\",\n \"end_line\",\n \"sideline\",\n \"field_border\",\n \"field_border_outline\",\n \"red_zone_border\",\n \"red_zone_border_outline\",\n \"major_yard_line\",\n \"goal_line\",\n \"minor_yard_line\",\n \"directional_arrow\",\n \"try_mark\",\n \"yardage_marker\",\n \"restricted_area\",\n \"coaching_box\",\n \"team_bench_area\",\n \"team_bench_area_outline\",\n \"coaching_box_line\",\n] as const;\nexport type FootballColorKey = (typeof FOOTBALL_COLOR_KEYS)[number];\n\nconst GRASS = \"#196f0c\";\nconst WHITE = \"#ffffff\";\n\n/** Defaults of `football_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const FOOTBALL_DEFAULT_COLORS: Readonly<Record<FootballColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n field_apron: GRASS,\n offensive_half: GRASS,\n defensive_half: GRASS,\n offensive_endzone: GRASS,\n defensive_endzone: GRASS,\n end_line: WHITE,\n sideline: WHITE,\n field_border: GRASS,\n field_border_outline: \"#ffffff00\",\n red_zone_border: \"#196f0c00\",\n red_zone_border_outline: \"#ffffff00\",\n major_yard_line: WHITE,\n goal_line: WHITE,\n minor_yard_line: WHITE,\n directional_arrow: WHITE,\n try_mark: WHITE,\n yardage_marker: WHITE,\n restricted_area: WHITE,\n coaching_box: WHITE,\n team_bench_area: GRASS,\n team_bench_area_outline: WHITE,\n coaching_box_line: \"#ffcb05\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { createRectangle } from \"../shapes.js\";\nimport {\n FOOTBALL_LEAGUES,\n FOOTBALL_SPECS,\n type FootballLeague,\n type FootballParamUpdates,\n type FootballParams,\n} from \"../specs/football.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n addText,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n frame,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { rotateCoords } from \"../transform.js\";\nimport { convertPoints, normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n FOOTBALL_DEFAULT_COLORS,\n FOOTBALL_DISPLAY_RANGES,\n type FootballColorKey,\n type FootballDisplayRange,\n type FootballFeature,\n} from \"./types.js\";\n\nconst ARRAY_FIELDS: readonly (keyof FootballParams)[] = [\n \"additional_minor_yard_lines\",\n \"numbers_bottom\",\n \"numbers_top\",\n];\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/** R `seq(from, to, by)` (and `from:to`) for by > 0; R errors when to < from (custom's zeros), we return []. */\nconst seq = (from: number, to: number, by = 1): number[] =>\n Array.from({ length: Math.max(0, Math.floor((to - from) / by + 1e-10) + 1) }, (_, i) => from + i * by);\n\n/** `display_range` keys with spaces/underscores removed, then R's synonyms folded together. */\ntype RangeGroup = \"full\" | \"inboundsonly\" | \"offense\" | \"defense\" | \"redzone\" | \"dredzone\";\nconst RANGE_SYNONYMS: Readonly<Record<string, RangeGroup>> = {\n offence: \"offense\",\n offensivehalffield: \"offense\",\n defence: \"defense\",\n defensivehalffield: \"defense\",\n oredzone: \"redzone\",\n offensiveredzone: \"redzone\",\n defensiveredzone: \"dredzone\",\n};\n\n/**\n * Port of sportyR `geom_football()`: one PolygonFeature per ggplot polygon layer and one TextFeature per\n * `ggfittext::geom_fit_text` layer, in R's layer order. Divergences: an unknown `displayRange` throws (R falls\n * back to \"full\"); `units` also converts the anchors and display limits (R converts only the feature points);\n * custom's all-zero defaults give empty yard-line sets (R errors in `seq()`).\n */\nexport function footballField(\n league: FootballLeague | (string & {}),\n opts: SurfaceOptions<FootballParamUpdates, FootballColorKey, FootballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(FOOTBALL_LEAGUES, key)) {\n throw new UnknownLeagueError(\n `Unknown football league \"${league}\"; expected one of: ${FOOTBALL_LEAGUES.join(\", \")}`,\n );\n }\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(FOOTBALL_DISPLAY_RANGES, range)) {\n throw new UnknownDisplayRangeError(\n `Unknown football display range \"${opts.displayRange}\"; expected one of: ${FOOTBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n }\n\n const p = mergeParams(FOOTBALL_SPECS[key], opts.updates, ARRAY_FIELDS);\n const colors = mergeColors(FOOTBALL_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: FootballColorKey): Color => colorAt(colors[k], 0);\n arcResolution(opts.arcResolution); // validated for a uniform API; the field draws no arcs\n const from = normalizeUnit(p.field_units || \"ft\"); // custom's \"\" (R's `%or% \"ft\"` only catches NULL)\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n\n const L = p.field_length;\n const W = p.field_width;\n const ez = p.endzone_length;\n const blt = p.boundary_line_thickness;\n const fbt = p.field_border_thickness ?? 0;\n const minor = p.minor_line_thickness;\n const raw = p.restricted_area_width;\n const cbw = p.coaching_box_width;\n const fs = p.team_bench_length_field_side;\n const tbw = p.team_bench_width;\n const tb = p.team_bench_area_border_thickness;\n const benchShape = p.bench_shape ?? \"rectangle\";\n const ntyl = p.number_to_yard_line;\n const nw = p.number_width;\n const nh = p.number_height;\n const stbn = p.sideline_to_bottom_of_numbers;\n const ald = p.arrow_line_dist;\n const myd = p.major_yard_line_distance;\n\n // Yard-line sets (geom-football.R 256-303): minor lines drop multiples of the major distance but keep negatives (CFL extras).\n const majorLines = seq(0, L / 2 - 1, myd);\n const minorLines = [...seq(0, L / 2 - 1), ...(p.additional_minor_yard_lines ?? [])].filter(\n (v) => v % (myd ?? 1) !== 0 || v < 0,\n );\n const arrowLines = seq(1, L / 2).filter((v) => v % ald === 0 && v !== L / 2);\n let markedLines = seq(1, L - 1)\n .filter((v) => v % ald === 0)\n .flatMap((v) => [v - L / 2, v - L / 2]);\n if (!markedLines.includes(0)) markedLines = [0, ...markedLines].sort((a, b) => a - b);\n\n // Yard numbers (R 305-427): an odd-length row centres its middle number on its line (dist_to_line 0).\n const dists = (n: number): number[] => {\n if (n % 2 === 0) return Array<number>(n).fill(ntyl);\n const half = Array<number>(n / 2 - 0.5).fill(ntyl);\n return [...half, 0, ...half];\n };\n const row = (numbers: readonly string[], markerRotation: number, top: boolean) =>\n numbers.length === 0\n ? []\n : frame({\n marking: numbers,\n markerRotation: [markerRotation],\n top: [top],\n line: markedLines,\n dist: dists(numbers.length),\n });\n const marked = [...row(p.numbers_bottom, 0, false), ...row(p.numbers_top, 180, true)];\n const boxes: { marking: string; markerRotation: number; rect: Point[] }[] = [];\n let lineSide: \"left\" | \"center\" | \"right\" = \"left\"; // carries over from the bottom row into the top row, as in R\n for (const m of marked) {\n if (m.dist === 0) lineSide = \"center\";\n let x0: number;\n let x1: number;\n if (lineSide === \"left\") {\n x0 = m.line - ntyl - minor / 2 - nw;\n x1 = m.line - ntyl - minor / 2;\n lineSide = \"right\";\n } else if (lineSide === \"center\") {\n x0 = m.line - nw / 2;\n x1 = m.line + nw / 2;\n lineSide = \"left\";\n } else {\n x0 = m.line + ntyl + minor / 2;\n x1 = m.line + ntyl + minor / 2 + nw;\n lineSide = \"left\";\n }\n const [y0, y1] = m.top\n ? [W / 2 - stbn, W / 2 - stbn - 1.5 * nh]\n : [-W / 2 + stbn, -W / 2 + stbn + 1.5 * nh];\n const rect = createRectangle(x0, x1, y0, y1);\n boxes.push({\n marking: m.marking,\n markerRotation: m.markerRotation,\n rect: conv ? convertPoints(rect, ...conv) : rect,\n });\n }\n\n const features: Feature[] = [];\n const add = (\n name: FootballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n stroke?: Color,\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n { ...(stroke === undefined ? {} : { stroke }), ...(conv ? { units: conv } : {}) },\n );\n\n const bench = {\n restrictedAreaLength: fs,\n restrictedAreaWidth: raw,\n coachingBoxLength: fs,\n coachingBoxWidth: cbw,\n teamBenchLengthFieldSide: fs,\n teamBenchLengthBackSide: p.team_bench_length_back_side,\n teamBenchWidth: tbw,\n teamBenchAreaBorderThickness: tb,\n };\n const border = {\n ...bench,\n fieldLength: L,\n fieldWidth: W,\n endzoneLength: ez,\n boundaryLineThickness: blt,\n surroundsTeamBenchArea: p.field_border_behind_bench ?? true,\n benchShape,\n };\n const sideY = W / 2 + blt;\n const halfField = F.halfField({ fieldLength: L, fieldWidth: W });\n const endzone = F.endzone({ fieldWidth: W, endzoneLength: ez });\n const minorLine = F.minorYardLine({ yardLineHeight: p.minor_yard_line_height, featureThickness: minor });\n\n // Layers, in R's add_feature order (R 675-1078); every call R makes with an outline passes it.\n add(\n \"field_apron\",\n F.fieldApron({\n ...border,\n boundaryThickness: blt,\n fieldBorderThickness: fbt,\n extraApronPadding: p.extra_apron_padding,\n }),\n col(\"field_apron\"),\n 0,\n 0,\n true,\n false,\n col(\"field_apron\"),\n );\n add(\n \"field_border\",\n F.fieldBorder({ ...border, featureThickness: fbt }),\n col(\"field_border\"),\n 0,\n 0,\n true,\n false,\n col(\"field_border\"),\n );\n add(\n \"field_border_outline\",\n F.fieldBorderOutline({ ...border, featureThickness: minor, fieldBorderThickness: fbt }),\n col(\"field_border_outline\"),\n 0,\n 0,\n true,\n false,\n col(\"field_border_outline\"),\n );\n add(\"half_field\", halfField, col(\"defensive_half\"), -0.25 * L, 0, false, false);\n add(\"half_field\", halfField, col(\"offensive_half\"), 0.25 * L, 0, false, false);\n add(\n \"restricted_area\",\n F.restrictedArea({ restrictedAreaLength: fs, featureThickness: raw }),\n col(\"restricted_area\"),\n 0,\n sideY,\n false,\n true,\n col(\"restricted_area\"),\n );\n add(\n \"coaching_box\",\n F.coachingBox({ coachingBoxLength: fs, featureThickness: cbw }),\n col(\"coaching_box\"),\n 0,\n sideY + raw,\n false,\n true,\n col(\"coaching_box\"),\n );\n add(\n \"team_bench_area\",\n F.teamBenchArea(bench),\n col(\"team_bench_area\"),\n 0,\n sideY + raw + cbw,\n false,\n true,\n col(\"team_bench_area\"),\n );\n add(\n \"coaching_box_line\",\n F.coachingBoxLine({ coachingBoxLineLength: fs, featureThickness: minor }),\n col(\"coaching_box_line\"),\n 0,\n sideY + raw + cbw,\n false,\n true,\n col(\"coaching_box_line\"),\n );\n add(\n \"team_bench_area_outline\",\n F.teamBenchAreaOutline({ ...bench, featureThickness: tb }),\n col(\"team_bench_area_outline\"),\n 0,\n sideY,\n false,\n true,\n col(\"team_bench_area_outline\"),\n );\n add(\n \"red_zone_border\",\n F.redZoneBorder({ featureThickness: fbt }),\n col(\"red_zone_border\"),\n L / 2 - 20,\n sideY,\n true,\n true,\n col(\"red_zone_border\"),\n );\n add(\n \"red_zone_border_outline\",\n F.redZoneBorderOutline({ featureThickness: minor }),\n col(\"red_zone_border_outline\"),\n L / 2 - 20,\n sideY + fbt,\n true,\n true,\n col(\"red_zone_border_outline\"),\n );\n add(\n \"sideline\",\n F.sideline({ featureThickness: blt, fieldLength: L, endzoneLength: ez }),\n col(\"sideline\"),\n 0,\n W / 2,\n false,\n true,\n col(\"sideline\"),\n );\n add(\n \"end_line\",\n F.endLine({ featureThickness: blt, fieldWidth: W }),\n col(\"end_line\"),\n L / 2 + ez,\n 0,\n true,\n false,\n col(\"end_line\"),\n );\n add(\"endzone\", endzone, col(\"defensive_endzone\"), -(L / 2) - ez / 2, 0, false, false);\n add(\"endzone\", endzone, col(\"offensive_endzone\"), L / 2 + ez / 2, 0, false, false);\n const majorLine = F.majorYardLine({\n fieldWidth: W,\n featureThickness: minor,\n distToSideline: p.sideline_to_major_yard_line,\n crossHashLength: p.inbound_cross_hashmark_length,\n crossHashSeparation: p.inbound_cross_hashmark_separation,\n });\n for (const yl of majorLines) add(\"major_yard_line\", majorLine, col(\"major_yard_line\"), yl, 0, true, false);\n const outerY = W / 2 - p.sideline_to_outer_yard_line - p.minor_yard_line_height;\n for (const yl of minorLines)\n add(\"minor_yard_line\", minorLine, col(\"minor_yard_line\"), L / 2 - yl, outerY, true, true);\n for (const yl of minorLines)\n add(\n \"minor_yard_line\",\n minorLine,\n col(\"minor_yard_line\"),\n L / 2 - yl,\n p.inbound_hashmark_separation / 2,\n true,\n true,\n );\n add(\n \"goal_line\",\n F.goalLine({ fieldWidth: W, featureThickness: p.goal_line_thickness }),\n col(\"goal_line\"),\n L / 2,\n 0,\n true,\n false,\n );\n add(\n \"try_mark\",\n F.tryMark({ tryMarkWidth: p.try_mark_width ?? 0, featureThickness: minor }),\n col(\"try_mark\"),\n L / 2 - (p.try_mark_distance ?? 0),\n 0,\n true,\n false,\n );\n // Yard numbers (R 1007-1057): R places them directly — shift, rotate, take the bounding box — then draws that\n // box as a transparent polygon (shifted a second time: R quirk kept) and fits the label into the same box.\n for (const b of boxes) {\n const placed = rotateCoords(\n b.rect.map(([x, y]): Point => [x + xTrans, y + yTrans]),\n rotation,\n );\n const xs = placed.map((q) => q[0]);\n const ys = placed.map((q) => q[1]);\n const [bx0, bx1, by0, by1] = [Math.min(...xs), Math.max(...xs), Math.min(...ys), Math.max(...ys)];\n addFeature(features, \"yardage_marker_box\", createRectangle(bx0, bx1, by0, by1), \"#ffffff00\", {\n xAnchor: 0,\n yAnchor: 0,\n xTrans,\n yTrans,\n });\n const [[ux0, uy0], , [ux1, uy1]] = b.rect as [Point, Point, Point];\n addText(features, \"yardage_marker\", {\n fill: col(\"yardage_marker\"),\n x: (bx0 + bx1) / 2,\n y: (by0 + by1) / 2,\n text: b.marking,\n fontFamily: p.number_font,\n // R's box before rotation: number_width × 1.5·number_height (ggfittext grow + fullheight fills it)\n fitBox: [Math.abs(ux1 - ux0), Math.abs(uy1 - uy0)],\n rotation: rotation + b.markerRotation,\n });\n }\n const arrow = F.directionalArrow({ arrowBase: p.arrow_base, arrowLength: p.arrow_length });\n const arrowY = W / 2 - stbn - nh + p.top_number_to_arrow;\n for (const al of arrowLines)\n add(\n \"directional_arrow\",\n arrow,\n col(\"directional_arrow\"),\n L / 2 - al + p.yard_line_to_arrow,\n arrowY,\n true,\n true,\n );\n\n // Display range (R 1080-1303), in the spec's units; then converted, translated, rotated.\n const pad = p.extra_apron_padding ?? 5;\n const hfl = L / 2 + ez + blt + fbt + minor + pad;\n const hfw = W / 2 + blt + raw + cbw + tbw + fbt + tb + minor + pad;\n const fullY = [-hfw, hfw] as const;\n const ranges: Record<RangeGroup, readonly [readonly [number, number], readonly [number, number]]> = {\n full: [[-hfl, hfl], fullY],\n inboundsonly: [\n [-(L / 2 + ez + blt), L / 2 + ez + blt],\n [-(W / 2 + blt), W / 2 + blt],\n ],\n offense: [[0, hfl], fullY],\n defense: [[-hfl, 0], fullY],\n redzone: [[L / 2 - 20, hfl], fullY],\n dredzone: [[-hfl, -(L / 2) + 20], fullY],\n };\n const squashed = range.replace(/[ _]/g, \"\");\n const [rx, ry] = ranges[RANGE_SYNONYMS[squashed] ?? (squashed as RangeGroup)];\n const [cx, cy] = convertLimits(rx, ry, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n\n // R: plot_background NULL = none; our transparent default stands in for NULL.\n const background = col(\"plot_background\");\n return {\n sport: \"football\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle } from \"../shapes.js\";\nimport { reflectCoords } from \"../transform.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). */\ntype Arc = { npoints?: number | undefined };\n\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\n/** R `data.frame(x = c(...), y = c(...))`. */\nconst zip = (xs: readonly number[], ys: readonly number[]): Point[] =>\n xs.map((x, i): Point => [x, ys[i] ?? 0]);\n\ntype ZoneOpts = {\n rinkLength?: number;\n rinkWidth?: number;\n featureRadius?: number;\n nzoneLength?: number;\n} & Arc;\n\n// Surface base features -------------------------------------------------------------------------\n\nexport function defensiveZone({\n rinkLength = 0,\n rinkWidth = 0,\n featureRadius = 0,\n nzoneLength = 0,\n npoints,\n}: ZoneOpts = {}): Point[] {\n const halfLength = rinkLength / 2;\n const halfWidth = rinkWidth / 2;\n const cx = halfLength - featureRadius;\n const cy = halfWidth - featureRadius;\n return [\n [-nzoneLength / 2, halfWidth],\n ...circle({ center: [-cx, cy], start: 0.5, end: 1, r: featureRadius, npoints }),\n [-halfLength, 0],\n ...circle({ center: [-cx, -cy], start: 1, end: 1.5, r: featureRadius, npoints }),\n [-nzoneLength / 2, -halfWidth],\n [-nzoneLength / 2, halfWidth],\n ];\n}\n\nexport function neutralZone({\n rinkWidth = 0,\n featureThickness = 0,\n}: { rinkWidth?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(-featureThickness / 2, featureThickness / 2, -rinkWidth / 2, rinkWidth / 2);\n}\n\nexport function offensiveZone({\n rinkLength = 0,\n rinkWidth = 0,\n featureRadius = 0,\n nzoneLength = 0,\n npoints,\n}: ZoneOpts = {}): Point[] {\n const halfLength = rinkLength / 2;\n const halfWidth = rinkWidth / 2;\n const cx = halfLength - featureRadius;\n const cy = halfWidth - featureRadius;\n return [\n [nzoneLength / 2, halfWidth],\n ...circle({ center: [cx, cy], start: 0.5, end: 0, r: featureRadius, npoints }),\n [halfLength, 0],\n ...circle({ center: [cx, -cy], start: 0, end: -0.5, r: featureRadius, npoints }),\n [nzoneLength / 2, -halfWidth],\n [nzoneLength / 2, halfWidth],\n ];\n}\n\n// Surface boundaries ----------------------------------------------------------------------------\n\nexport function boards({\n rinkLength = 0,\n rinkWidth = 0,\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: {\n rinkLength?: number;\n rinkWidth?: number;\n featureRadius?: number;\n featureThickness?: number;\n} & Arc = {}): Point[] {\n const halfLength = rinkLength / 2;\n const halfWidth = rinkWidth / 2;\n const cx = halfLength - featureRadius;\n const cy = halfWidth - featureRadius;\n const outer = featureRadius + featureThickness;\n return [\n [0, halfWidth],\n ...circle({ center: [cx, cy], start: 0.5, end: 0, r: featureRadius, npoints }),\n [halfLength, 0],\n ...circle({ center: [cx, -cy], start: 0, end: -0.5, r: featureRadius, npoints }),\n [0, -halfWidth],\n [0, -halfWidth - featureThickness],\n ...circle({ center: [cx, -cy], start: -0.5, end: 0, r: outer, npoints }),\n [halfLength + featureThickness, 0],\n ...circle({ center: [cx, cy], start: 0, end: 0.5, r: outer, npoints }),\n [0, halfWidth + featureThickness],\n [0, halfWidth],\n ];\n}\n\n// Surface lines ---------------------------------------------------------------------------------\n\nexport function centerLine({\n featureThickness = 0,\n rinkWidth = 0,\n centerFaceoffSpotGap = 0,\n}: { featureThickness?: number; rinkWidth?: number; centerFaceoffSpotGap?: number } = {}): Point[] {\n return createRectangle(\n -featureThickness / 2,\n featureThickness / 2,\n centerFaceoffSpotGap / 2,\n rinkWidth / 2,\n );\n}\n\nexport function refereeCrease({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n return [\n [featureRadius, 0],\n ...circle({ center: [0, 0], start: 0, end: 1, r: featureRadius, npoints }),\n [-featureRadius, 0],\n [-featureRadius + featureThickness, 0],\n ...circle({ center: [0, 0], start: 1, end: 0, r: featureRadius - featureThickness, npoints }),\n [featureRadius, 0],\n ];\n}\n\nexport function zoneLine({\n rinkWidth = 0,\n featureThickness = 0,\n}: { rinkWidth?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(0, featureThickness, -rinkWidth / 2, rinkWidth / 2);\n}\n\n/** Absolute value of `xAnchor` forces the right-hand (TV) side, as in R; the shape is re-anchored at x = 0. */\nexport function goalLine({\n rinkLength = 0,\n rinkWidth = 0,\n featureRadius = 0,\n featureThickness = 0,\n xAnchor = 0,\n npoints,\n}: {\n rinkLength?: number;\n rinkWidth?: number;\n featureRadius?: number;\n featureThickness?: number;\n xAnchor?: number;\n} & Arc = {}): Point[] {\n const halfLength = rinkLength / 2;\n const halfWidth = rinkWidth / 2;\n const cx = halfLength - featureRadius;\n const cy = halfWidth - featureRadius;\n const maxX = Math.abs(xAnchor) + featureThickness / 2;\n if (maxX <= cx) {\n return createRectangle(-featureThickness / 2, featureThickness / 2, -halfWidth, halfWidth);\n }\n const baseX = Math.abs(xAnchor) - cx;\n const startX = baseX - featureThickness / 2;\n const endX = baseX + featureThickness / 2;\n // R quirk kept: no guard on asin(), so |x| > r yields NaN points just as R does.\n const thetaStart = Math.asin(startX / featureRadius) / Math.PI;\n const thetaEnd = Math.asin(endX / featureRadius) / Math.PI;\n return [\n ...circle({ center: [cx, cy], start: 0.5 - thetaStart, end: 0.5 - thetaEnd, r: featureRadius, npoints }),\n ...circle({\n center: [cx, -cy],\n start: -0.5 + thetaEnd,\n end: -0.5 + thetaStart,\n r: featureRadius,\n npoints,\n }),\n ].map(([x, y]): Point => [x - Math.abs(xAnchor), y]);\n}\n\nexport function goaltendersRestrictedArea({\n rinkLength = 0,\n featureThickness = 0,\n shortBaseWidth = 0,\n longBaseWidth = 0,\n xAnchor = 0,\n}: {\n rinkLength?: number;\n featureThickness?: number;\n shortBaseWidth?: number;\n longBaseWidth?: number;\n xAnchor?: number;\n} = {}): Point[] {\n const hs = shortBaseWidth / 2;\n const hl = longBaseWidth / 2;\n const ax = Math.abs(xAnchor);\n const t = featureThickness;\n const xs = [\n ax,\n rinkLength / 2,\n rinkLength / 2,\n ax - t / 2,\n ax - t / 2,\n rinkLength / 2,\n rinkLength / 2,\n ax,\n ax,\n ];\n const ys = [hs, hl, hl - t, hs - t, -hs + t, -hl + t, -hl, -hs, hs];\n return zip(\n xs.map((x) => x - ax),\n ys,\n );\n}\n\nexport function odzoneFaceoffLines({\n featureThickness = 0,\n faceoffLineDistX = 0,\n faceoffLineDistY = 0,\n faceoffLineLength = 0,\n faceoffLineWidth = 0,\n}: {\n featureThickness?: number;\n faceoffLineDistX?: number;\n faceoffLineDistY?: number;\n faceoffLineLength?: number;\n faceoffLineWidth?: number;\n} = {}): Point[] {\n const dx = faceoffLineDistX;\n const dy = faceoffLineDistY;\n const t = featureThickness;\n const half = zip(\n [dx, dx + faceoffLineLength, dx + faceoffLineLength, dx + t, dx + t, dx, dx],\n [dy, dy, dy + t, dy + t, dy + faceoffLineWidth, dy + faceoffLineWidth, dy],\n );\n return [...half, ...reflectCoords(half, { overX: true, overY: false })];\n}\n\n// Surface features ------------------------------------------------------------------------------\n\nexport function centerFaceoffSpot({\n featureRadius = 0,\n npoints,\n}: { featureRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n}\n\ntype CreaseOpts = {\n featureRadius?: number;\n featureThickness?: number;\n creaseStyle?: string;\n creaseLength?: number;\n creaseWidth?: number;\n notchDistX?: number;\n notchWidth?: number;\n} & Arc;\n\n/** R: theta = acos(half_width / r) / pi, or 0 when r is 0 or |half_width / r| > 1. */\nconst creaseTheta = (featureRadius: number, halfCreaseWidth: number): number =>\n featureRadius === 0 || Math.abs(halfCreaseWidth / featureRadius) > 1\n ? 0\n : Math.acos(halfCreaseWidth / featureRadius) / Math.PI;\n\n/** Styles `nhl98` / `ushl1` / `nhl92` (case-insensitive); any other style is R's switch default, a single (0, 0) point. */\nexport function goalCreaseOutline({\n featureRadius = 0,\n featureThickness = 0,\n creaseStyle = \"\",\n creaseLength = 0,\n creaseWidth = 0,\n notchDistX = 0,\n notchWidth = 0,\n npoints,\n}: CreaseOpts = {}): Point[] {\n const hw = creaseWidth / 2;\n const theta = creaseTheta(featureRadius, hw);\n const t = featureThickness;\n const nx = notchDistX;\n const r = featureRadius;\n const ri = featureRadius - featureThickness;\n const arc = (start: number, end: number, rr: number): Point[] =>\n circle({ center: [0, 0], start, end, r: rr, npoints });\n switch (creaseStyle.toLowerCase()) {\n case \"nhl98\":\n return [\n ...zip([0, -creaseLength], [hw, hw]),\n ...arc(0.5 + theta, 1.5 - theta, r),\n ...zip(\n [-creaseLength, 0, 0, -nx, -nx, -(nx + t), -(nx + t), -creaseLength],\n [-hw, -hw, -hw + t, -hw + t, -hw + t + notchWidth, -hw + t + notchWidth, -hw + t, -hw + t],\n ),\n ...arc(1.5 - theta, 0.5 + theta, ri),\n ...zip(\n [-creaseLength, -(nx + t), -(nx + t), -nx, -nx, 0, 0],\n [hw - t, hw - t, hw - t - notchWidth, hw - t - notchWidth, hw - t, hw - t, hw],\n ),\n ];\n case \"ushl1\":\n return [\n ...arc(0.5, 1.5, r),\n ...arc(1.5, 1.5 - theta, ri),\n ...zip(\n [-nx - t, 0, 0, -nx, -nx, -nx - t, -nx - t],\n [-hw, -hw, -hw + t, -hw + t, -hw + t + notchWidth, -hw + t + notchWidth, -hw],\n ),\n ...arc(1.5 - theta, 0.5 + theta, ri),\n ...zip(\n [-nx - t, -nx - t, -nx, -nx, 0, 0, -nx - t],\n [hw, hw - t - notchWidth, hw - t - notchWidth, hw - t, hw - t, hw, hw],\n ),\n ...arc(0.5 + theta, 0.5, ri),\n ...zip([0, 0], [r - t, r]),\n ];\n case \"nhl92\":\n return [\n ...arc(0.5, 1.5, r),\n ...arc(1.5, 1.5 - theta, ri),\n ...zip(\n [-nx, -nx + notchWidth, -nx + notchWidth, -nx, -nx, -nx - t, -nx - t, -nx],\n [-hw, -hw, -hw + t, -hw + t, -hw + t + notchWidth, -hw + t + notchWidth, -hw, -hw],\n ),\n ...arc(1.5 - theta, 0.5 + theta, ri),\n ...zip(\n [-nx, -nx + notchWidth, -nx + notchWidth, -nx, -nx, -nx - t, -nx - t, -nx],\n [hw, hw, hw - t, hw - t, hw - t - notchWidth, hw - t - notchWidth, hw, hw],\n ),\n ...arc(0.5 + theta, 0.5, ri),\n ...zip([0, 0], [r - t, r]),\n ];\n default:\n return [[0, 0]];\n }\n}\n\n/** Same style switch as `goalCreaseOutline`; `creaseLength` is used by `ushl1` only. */\nexport function goalCreaseFill({\n featureRadius = 0,\n featureThickness = 0,\n creaseStyle = \"\",\n creaseLength = 0,\n creaseWidth = 0,\n notchDistX = 0,\n notchWidth = 0,\n npoints,\n}: CreaseOpts = {}): Point[] {\n const hw = creaseWidth / 2;\n const theta = creaseTheta(featureRadius, hw);\n const t = featureThickness;\n const nx = notchDistX;\n const ri = featureRadius - featureThickness;\n const arc = (start: number, end: number): Point[] => circle({ center: [0, 0], start, end, r: ri, npoints });\n switch (creaseStyle.toLowerCase()) {\n case \"nhl98\":\n return [\n ...zip(\n [0, -nx, -nx, -(nx + t), -(nx + t)],\n [hw - t, hw - t, hw - t - notchWidth, hw - t - notchWidth, hw - t],\n ),\n ...arc(0.5 + theta, 1.5 - theta),\n ...zip(\n [-(nx + t), -(nx + t), -nx, -nx, 0, 0],\n [-hw + t, -hw + t + notchWidth, -hw + t + notchWidth, -hw + t, -hw + t, hw - t],\n ),\n ];\n case \"ushl1\":\n return [\n ...zip([0, -creaseLength], [hw, hw]),\n ...arc(0.5 + theta, 1.5 - theta),\n ...zip([-creaseLength, 0], [-hw, -hw]),\n ];\n case \"nhl92\":\n return arc(0.5, 1.5);\n default:\n return [[0, 0]];\n }\n}\n\nexport function centerFaceoffCircle({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r: featureRadius, npoints }),\n [0, -featureRadius],\n [0, -featureRadius - featureThickness],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: featureRadius - featureThickness, npoints }),\n ];\n}\n\nexport function odzoneFaceoffCircle({\n featureRadius = 0,\n featureThickness = 0,\n hashmarkWidth = 0,\n hashmarkExtSpacing = 0,\n npoints,\n}: {\n featureRadius?: number;\n featureThickness?: number;\n hashmarkWidth?: number;\n hashmarkExtSpacing?: number;\n} & Arc = {}): Point[] {\n const ext = hashmarkExtSpacing / 2;\n const int = ext - featureThickness;\n const guard = featureRadius === 0 || Math.abs(ext / featureRadius) > 1;\n const theta1 = guard ? 0 : Math.asin(ext / featureRadius) / Math.PI;\n const theta2 = guard ? 0 : Math.asin(int / featureRadius) / Math.PI;\n const r = featureRadius;\n const arc = (start: number, end: number, rr: number): Point[] =>\n circle({ center: [0, 0], start, end, r: rr, npoints });\n const half: Point[] = [\n [0, r],\n ...arc(0.5, 0.5 + theta2, r),\n [-int, r + hashmarkWidth],\n [-ext, r + hashmarkWidth],\n ...arc(0.5 + theta1, 1.5 - theta1, r),\n [-ext, -r - hashmarkWidth],\n [-int, -r - hashmarkWidth],\n ...arc(1.5 - theta2, 1.5, r),\n [0, -r + featureThickness],\n ...arc(1.5, 0.5, r - featureThickness),\n [0, r],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })];\n}\n\nexport function nodzoneFaceoffSpotRing({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n const half: Point[] = [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r: featureRadius, npoints }),\n [0, -featureRadius + featureThickness],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: featureRadius - featureThickness, npoints }),\n [0, featureRadius - featureThickness],\n [0, featureRadius],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })];\n}\n\nexport function nodzoneFaceoffSpotStripe({\n featureRadius = 0,\n featureThickness = 0,\n gapWidth = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number; gapWidth?: number } & Arc = {}): Point[] {\n const inner = featureRadius - featureThickness;\n const stripe = inner - gapWidth;\n const theta = featureRadius === 0 || Math.abs(stripe / inner) > 1 ? 0 : Math.asin(stripe / inner) / Math.PI;\n return [\n ...circle({ center: [0, 0], start: 0.5 - theta, end: 0.5 + theta, r: inner, npoints }),\n ...circle({ center: [0, 0], start: 1.5 - theta, end: 1.5 + theta, r: inner, npoints }),\n ];\n}\n\ntype GoalOpts = {\n featureRadius?: number;\n goalMouthWidth?: number;\n goalBackWidth?: number;\n goalDepth?: number;\n goalPostDiameter?: number;\n} & Arc;\n\nexport function goalFrame({\n featureRadius = 0,\n goalMouthWidth = 0,\n goalBackWidth = 0,\n goalDepth = 0,\n goalPostDiameter = 0,\n npoints,\n}: GoalOpts = {}): Point[] {\n const hm = goalMouthWidth / 2;\n const cx = goalDepth - featureRadius - goalPostDiameter;\n const cy = goalBackWidth / 2 - featureRadius + goalPostDiameter / 2;\n const ri = featureRadius - goalPostDiameter;\n return [\n [0, hm + goalPostDiameter],\n ...circle({ center: [cx, cy], start: 0.65, end: 0, r: featureRadius, npoints }),\n ...circle({ center: [cx, -cy], start: 0, end: -0.65, r: featureRadius, npoints }),\n [0, -(hm + goalPostDiameter)],\n [0, -hm],\n ...circle({ center: [cx, -cy], start: -0.65, end: 0, r: ri, npoints }),\n ...circle({ center: [cx, cy], start: 0, end: 0.65, r: ri, npoints }),\n [0, hm],\n [0, hm + goalPostDiameter],\n ];\n}\n\nexport function goalFrameFill({\n featureRadius = 0,\n goalMouthWidth = 0,\n goalBackWidth = 0,\n goalDepth = 0,\n goalPostDiameter = 0,\n npoints,\n}: GoalOpts = {}): Point[] {\n const hm = goalMouthWidth / 2;\n const cx = goalDepth - featureRadius - goalPostDiameter;\n const cy = goalBackWidth / 2 - featureRadius + goalPostDiameter / 2;\n const ri = featureRadius - goalPostDiameter;\n return [\n [0, -hm],\n ...circle({ center: [cx, -cy], start: -0.65, end: 0, r: ri, npoints }),\n ...circle({ center: [cx, cy], start: 0, end: 0.65, r: ri, npoints }),\n [0, hm],\n ];\n}\n\ntype BoxOpts = { featureThickness?: number; benchLength?: number; benchDepth?: number };\n\nexport function playerBenchOutline({\n featureThickness = 0,\n benchLength = 0,\n benchDepth = 0,\n}: BoxOpts = {}): Point[] {\n const t = featureThickness;\n return zip(\n [-t, -t, benchLength + t, benchLength + t, benchLength, benchLength, 0, 0, t],\n [t, 2 * t + benchDepth, 2 * t + benchDepth, t, t, t + benchDepth, t + benchDepth, t, t],\n );\n}\n\nexport function playerBenchAreaFill({\n featureThickness = 0,\n benchLength = 0,\n benchDepth = 0,\n}: BoxOpts = {}): Point[] {\n return createRectangle(-benchLength / 2, benchLength / 2, featureThickness, featureThickness + benchDepth);\n}\n\nexport function penaltyBoxOutline({\n featureThickness = 0,\n penaltyBoxLength = 0,\n penaltyBoxSeparation = 0,\n penaltyBoxDepth = 0,\n}: {\n featureThickness?: number;\n penaltyBoxLength?: number;\n penaltyBoxSeparation?: number;\n penaltyBoxDepth?: number;\n} = {}): Point[] {\n const t = featureThickness;\n const s = penaltyBoxSeparation / 2;\n const d = penaltyBoxDepth;\n return zip(\n [\n 0,\n s + penaltyBoxLength + t,\n s + penaltyBoxLength + t,\n s + penaltyBoxLength,\n s + penaltyBoxLength,\n s + t,\n s + t,\n s,\n s,\n 0,\n 0,\n ],\n [-(2 * t + d), -(2 * t + d), -t, -t, -(t + d), -(t + d), -t, -t, -(t + d), -(t + d), -(2 * t + d)],\n );\n}\n\n/** R quirk kept: y_min > y_max, so the rectangle is traced clockwise. */\nexport function penaltyBoxFill({\n featureThickness = 0,\n penaltyBoxLength = 0,\n penaltyBoxDepth = 0,\n}: { featureThickness?: number; penaltyBoxLength?: number; penaltyBoxDepth?: number } = {}): Point[] {\n return createRectangle(\n -penaltyBoxLength / 2,\n penaltyBoxLength / 2,\n -featureThickness,\n -(featureThickness + penaltyBoxDepth),\n );\n}\n\nexport function offIceOfficialsBox({\n featureThickness = 0,\n officialsBoxLength = 0,\n officialsBoxDepth = 0,\n}: { featureThickness?: number; officialsBoxLength?: number; officialsBoxDepth?: number } = {}): Point[] {\n return createRectangle(\n -officialsBoxLength / 2,\n officialsBoxLength / 2,\n -featureThickness,\n -(featureThickness + officialsBoxDepth),\n );\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `hockey_*` builder (prefix dropped), as used in `PolygonFeature.name`. */\nexport const HOCKEY_FEATURES = [\n \"defensive_zone\",\n \"neutral_zone\",\n \"offensive_zone\",\n \"boards\",\n \"center_line\",\n \"referee_crease\",\n \"zone_line\",\n \"goal_line\",\n \"goaltenders_restricted_area\",\n \"odzone_faceoff_lines\",\n \"center_faceoff_spot\",\n \"goal_crease_outline\",\n \"goal_crease_fill\",\n \"center_faceoff_circle\",\n \"odzone_faceoff_circle\",\n \"nodzone_faceoff_spot_ring\",\n \"nodzone_faceoff_spot_stripe\",\n \"goal_frame\",\n \"goal_frame_fill\",\n \"player_bench_outline\",\n \"player_bench_area_fill\",\n \"penalty_box_outline\",\n \"penalty_box_fill\",\n \"off_ice_officials_box\",\n] as const;\nexport type HockeyFeature = (typeof HOCKEY_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_hockey()` (xlims and ylims share them; 21). */\nexport const HOCKEY_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"defense\",\n \"defence\",\n \"nzone\",\n \"neutral\",\n \"neutral_zone\",\n \"neutral zone\",\n \"ozone\",\n \"offensive_zone\",\n \"offensive zone\",\n \"attacking_zone\",\n \"attacking zone\",\n \"dzone\",\n \"defensive_zone\",\n \"defensive zone\",\n \"defending_zone\",\n \"defending zone\",\n] as const;\nexport type HockeyDisplayRange = (typeof HOCKEY_DISPLAY_RANGES)[number];\n\nconst RED = \"#c8102e\";\nconst BLUE = \"#0033a0\";\nconst ICE = \"#ffffff\";\n\n/** The 25 argument names of `hockey_features_set_colors()`, in R's declaration order. */\nexport const HOCKEY_COLOR_KEYS = [\n \"plot_background\",\n \"boards\",\n \"ozone_ice\",\n \"nzone_ice\",\n \"dzone_ice\",\n \"center_line\",\n \"zone_line\",\n \"goal_line\",\n \"restricted_trapezoid\",\n \"goal_crease_outline\",\n \"goal_crease_fill\",\n \"referee_crease\",\n \"center_faceoff_spot\",\n \"faceoff_spot_ring\",\n \"faceoff_spot_stripe\",\n \"center_faceoff_circle\",\n \"odzone_faceoff_circle\",\n \"faceoff_line\",\n \"goal_frame\",\n \"goal_fill\",\n \"team_a_bench\",\n \"team_b_bench\",\n \"team_a_penalty_box\",\n \"team_b_penalty_box\",\n \"off_ice_officials_box\",\n] as const;\nexport type HockeyColorKey = (typeof HOCKEY_COLOR_KEYS)[number];\n\n/** Defaults of `hockey_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const HOCKEY_DEFAULT_COLORS: Readonly<Record<HockeyColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n boards: \"#000000\",\n ozone_ice: ICE,\n nzone_ice: ICE,\n dzone_ice: ICE,\n center_line: RED,\n zone_line: BLUE,\n goal_line: RED,\n restricted_trapezoid: RED,\n goal_crease_outline: RED,\n goal_crease_fill: \"#41b6e6\",\n referee_crease: RED,\n center_faceoff_spot: BLUE,\n faceoff_spot_ring: RED,\n faceoff_spot_stripe: RED,\n center_faceoff_circle: BLUE,\n odzone_faceoff_circle: RED,\n faceoff_line: RED,\n goal_frame: RED,\n goal_fill: \"#a5acaf4d\",\n team_a_bench: ICE,\n team_b_bench: ICE,\n team_a_penalty_box: ICE,\n team_b_penalty_box: ICE,\n off_ice_officials_box: \"#a5acaf\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { HOCKEY_LEAGUES, HOCKEY_SPECS, type HockeyLeague, type HockeyParamUpdates } from \"../specs/hockey.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { convertUnits, normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n HOCKEY_DEFAULT_COLORS,\n HOCKEY_DISPLAY_RANGES,\n type HockeyColorKey,\n type HockeyDisplayRange,\n type HockeyFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/** `display_range` keys with spaces/underscores removed, then R's synonyms folded together. */\ntype RangeGroup = \"full\" | \"inboundsonly\" | \"offense\" | \"defense\" | \"nzone\" | \"ozone\" | \"dzone\";\nconst RANGE_SYNONYMS: Readonly<Record<string, RangeGroup>> = {\n offence: \"offense\",\n defence: \"defense\",\n neutral: \"nzone\",\n neutralzone: \"nzone\",\n offensivezone: \"ozone\",\n attackingzone: \"ozone\",\n defensivezone: \"dzone\",\n defendingzone: \"dzone\",\n};\n\n/**\n * Port of sportyR `geom_hockey()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` also converts the\n * anchors and display limits (R converts only the feature points, so its non-native plots are broken).\n */\nexport function hockeyRink(\n league: HockeyLeague | (string & {}),\n opts: SurfaceOptions<HockeyParamUpdates, HockeyColorKey, HockeyDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(HOCKEY_LEAGUES, key)) {\n throw new UnknownLeagueError(\n `Unknown hockey league \"${league}\"; expected one of: ${HOCKEY_LEAGUES.join(\", \")}`,\n );\n }\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(HOCKEY_DISPLAY_RANGES, range)) {\n throw new UnknownDisplayRangeError(\n `Unknown hockey display range \"${opts.displayRange}\"; expected one of: ${HOCKEY_DISPLAY_RANGES.join(\", \")}`,\n );\n }\n\n // Every hockey param is a scalar: no array fields, so no multi-instance tables (unlike basketball).\n const p = mergeParams(HOCKEY_SPECS[key], opts.updates, []);\n const colors = mergeColors(HOCKEY_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: HockeyColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.rink_units || \"ft\"); // custom's \"\" (R would error converting from \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const hint = (ft: number): number => convertUnits(ft, \"ft\", units);\n\n const L = p.rink_length;\n const W = p.rink_width;\n const bt = p.board_thickness;\n const minor = p.minor_line_thickness;\n const major = p.major_line_thickness;\n const goalX = L / 2 - p.goal_line_to_boards;\n const odzoneX = L / 2 - p.odzone_faceoff_spot_to_boards;\n const nzoneSpotX = p.nzone_length / 2 - p.nzone_faceoff_spot_to_zone_line;\n const spotY = p.noncenter_faceoff_spot_y;\n\n const features: Feature[] = [];\n const add = (\n name: HockeyFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { height?: number } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n\n const zone = {\n rinkLength: L,\n rinkWidth: W,\n featureRadius: p.corner_radius,\n nzoneLength: p.nzone_length,\n npoints,\n };\n const crease = {\n featureRadius: p.goal_crease_radius,\n featureThickness: minor,\n creaseStyle: p.goal_crease_style ?? \"\",\n creaseLength: p.goal_crease_length,\n creaseWidth: p.goal_crease_width,\n notchDistX: p.goal_crease_notch_dist_x,\n notchWidth: p.goal_crease_notch_width,\n npoints,\n };\n const goal = {\n featureRadius: p.goal_radius,\n goalMouthWidth: p.goal_mouth_width,\n goalBackWidth: p.goal_back_width,\n goalDepth: p.goal_depth,\n goalPostDiameter: p.goal_post_diameter,\n npoints,\n };\n const lines = {\n featureThickness: minor,\n faceoffLineDistY: p.faceoff_line_dist_y,\n faceoffLineWidth: p.faceoff_line_width,\n };\n const ring = F.nodzoneFaceoffSpotRing({\n featureRadius: p.noncenter_faceoff_spot_radius,\n featureThickness: minor,\n npoints,\n });\n const stripe = F.nodzoneFaceoffSpotStripe({\n featureRadius: p.noncenter_faceoff_spot_radius,\n featureThickness: minor,\n gapWidth: p.noncenter_faceoff_spot_gap_width,\n npoints,\n });\n const bench = { featureThickness: bt, benchLength: p.bench_length, benchDepth: p.bench_depth };\n const benchX = p.bench_separation / 2 + p.bench_length / 2;\n const boxX = p.penalty_box_separation / 2 + bt + p.penalty_box_length / 2;\n const boxFill = F.penaltyBoxFill({\n featureThickness: bt,\n penaltyBoxLength: p.penalty_box_length,\n penaltyBoxDepth: p.penalty_box_depth,\n });\n\n // Layers, in R's add_feature order (geom-hockey.R 468-892).\n add(\"defensive_zone\", F.defensiveZone(zone), col(\"dzone_ice\"), 0, 0, false, false);\n add(\n \"neutral_zone\",\n F.neutralZone({ rinkWidth: W, featureThickness: p.nzone_length }),\n col(\"nzone_ice\"),\n 0,\n 0,\n false,\n false,\n );\n add(\"offensive_zone\", F.offensiveZone(zone), col(\"ozone_ice\"), 0, 0, false, false);\n add(\n \"center_line\",\n F.centerLine({\n featureThickness: major,\n rinkWidth: W,\n centerFaceoffSpotGap: p.center_faceoff_spot_gap ?? 0,\n }),\n col(\"center_line\"),\n 0,\n 0,\n false,\n true,\n );\n add(\n \"zone_line\",\n F.zoneLine({ rinkWidth: W, featureThickness: major }),\n col(\"zone_line\"),\n p.nzone_length / 2,\n 0,\n true,\n false,\n );\n if (p.has_trapezoid) {\n add(\n \"goaltenders_restricted_area\",\n F.goaltendersRestrictedArea({\n rinkLength: L,\n featureThickness: minor,\n shortBaseWidth: p.short_base_width,\n longBaseWidth: p.long_base_width,\n xAnchor: goalX,\n }),\n col(\"restricted_trapezoid\"),\n goalX,\n 0,\n true,\n false,\n );\n }\n add(\"goal_crease_fill\", F.goalCreaseFill(crease), col(\"goal_crease_fill\"), goalX, 0, true, false);\n add(\"goal_crease_outline\", F.goalCreaseOutline(crease), col(\"goal_crease_outline\"), goalX, 0, true, false);\n add(\n \"goal_line\",\n F.goalLine({\n rinkLength: L,\n rinkWidth: W,\n featureRadius: p.corner_radius,\n featureThickness: minor,\n xAnchor: goalX,\n npoints,\n }),\n col(\"goal_line\"),\n goalX,\n 0,\n true,\n false,\n );\n add(\"goal_frame_fill\", F.goalFrameFill(goal), col(\"goal_fill\"), goalX, 0, true, false);\n add(\"goal_frame\", F.goalFrame(goal), col(\"goal_frame\"), goalX, 0, true, false, { height: hint(4) });\n add(\n \"odzone_faceoff_circle\",\n F.odzoneFaceoffCircle({\n featureRadius: p.faceoff_circle_radius,\n featureThickness: minor,\n hashmarkWidth: p.hashmark_width,\n hashmarkExtSpacing: p.hashmark_ext_spacing,\n npoints,\n }),\n col(\"odzone_faceoff_circle\"),\n odzoneX,\n spotY,\n true,\n true,\n );\n add(\"nodzone_faceoff_spot_stripe\", stripe, col(\"faceoff_spot_stripe\"), odzoneX, spotY, true, true);\n add(\"nodzone_faceoff_spot_ring\", ring, col(\"faceoff_spot_ring\"), odzoneX, spotY, true, true);\n add(\n \"odzone_faceoff_lines\",\n F.odzoneFaceoffLines({\n ...lines,\n faceoffLineDistX: p.faceoff_line_dist_x,\n faceoffLineLength: p.faceoff_line_length,\n }),\n col(\"faceoff_line\"),\n odzoneX,\n spotY,\n true,\n true,\n );\n add(\n \"odzone_faceoff_lines\",\n F.odzoneFaceoffLines({\n ...lines,\n faceoffLineDistX: -1 * p.faceoff_line_dist_x,\n faceoffLineLength: -1 * p.faceoff_line_length,\n }),\n col(\"faceoff_line\"),\n odzoneX,\n spotY,\n true,\n true,\n );\n add(\"nodzone_faceoff_spot_stripe\", stripe, col(\"faceoff_spot_stripe\"), nzoneSpotX, spotY, true, true);\n add(\"nodzone_faceoff_spot_ring\", ring, col(\"faceoff_spot_ring\"), nzoneSpotX, spotY, true, true);\n add(\n \"center_faceoff_circle\",\n F.centerFaceoffCircle({ featureRadius: p.faceoff_circle_radius, featureThickness: minor, npoints }),\n col(\"center_faceoff_circle\"),\n 0,\n 0,\n true,\n false,\n );\n add(\n \"referee_crease\",\n F.refereeCrease({ featureRadius: p.referee_crease_radius, featureThickness: minor, npoints }),\n col(\"referee_crease\"),\n 0,\n -W / 2,\n false,\n false,\n );\n add(\n \"center_faceoff_spot\",\n F.centerFaceoffSpot({ featureRadius: p.center_faceoff_spot_radius, npoints }),\n col(\"center_faceoff_spot\"),\n 0,\n 0,\n true,\n false,\n );\n const benchFill = F.playerBenchAreaFill(bench);\n add(\"player_bench_area_fill\", benchFill, col(\"team_a_bench\"), -benchX, W / 2, false, false);\n add(\"player_bench_area_fill\", benchFill, col(\"team_b_bench\"), benchX, W / 2, false, false);\n add(\n \"player_bench_outline\",\n F.playerBenchOutline(bench),\n col(\"boards\"),\n p.bench_separation / 2,\n W / 2,\n true,\n false,\n );\n add(\"penalty_box_fill\", boxFill, col(\"team_a_penalty_box\"), -boxX, -W / 2, false, false);\n add(\"penalty_box_fill\", boxFill, col(\"team_b_penalty_box\"), boxX, -W / 2, false, false);\n add(\n \"penalty_box_outline\",\n F.penaltyBoxOutline({\n featureThickness: bt,\n penaltyBoxLength: p.penalty_box_length,\n penaltyBoxDepth: p.penalty_box_depth,\n penaltyBoxSeparation: p.penalty_box_separation,\n }),\n col(\"boards\"),\n 0,\n -(W / 2),\n true,\n false,\n );\n add(\n \"off_ice_officials_box\",\n F.offIceOfficialsBox({\n featureThickness: bt,\n officialsBoxLength: p.penalty_box_separation,\n officialsBoxDepth: p.penalty_box_depth,\n }),\n col(\"off_ice_officials_box\"),\n 0,\n -(W / 2),\n false,\n false,\n );\n add(\n \"boards\",\n F.boards({ rinkLength: L, rinkWidth: W, featureRadius: p.corner_radius, featureThickness: bt, npoints }),\n col(\"boards\"),\n 0,\n 0,\n true,\n false,\n { height: hint(3.5) },\n );\n\n // Display range (R 894-1090), in the spec's units; then converted, translated, rotated.\n const hrl = L / 2 + 3 * bt + 5;\n const hrw = W / 2 + Math.max(p.bench_depth, p.penalty_box_depth) + 3 * bt + 5;\n const hnz = p.nzone_length / 2 + major + 5;\n const fullY = [-hrw, hrw] as const;\n const ranges: Record<RangeGroup, readonly [readonly [number, number], readonly [number, number]]> = {\n full: [[-hrl, hrl], fullY],\n inboundsonly: [\n [-(L / 2 + bt), L / 2 + bt],\n [-(W / 2 + bt), W / 2 + bt],\n ],\n offense: [[0, hrl], fullY],\n defense: [[-hrl, 0], fullY],\n nzone: [[-hnz, hnz], fullY],\n ozone: [[hnz - major - 10, hrl], fullY],\n dzone: [[-hrl, -hnz + major + 10], fullY],\n };\n const squashed = range.replace(/[ _]/g, \"\");\n const [rx, ry] = ranges[RANGE_SYNONYMS[squashed] ?? (squashed as RangeGroup)];\n const [cx, cy] = convertLimits(rx, ry, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n\n // R: plot_background NULL = none; our transparent default stands in for NULL.\n const background = col(\"plot_background\");\n return {\n sport: \"hockey\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import { SportyError } from \"../errors.js\";\nimport type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle, createSquare, createXShape } from \"../shapes.js\";\nimport { reflectCoords, rotateCoords } from \"../transform.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). Same helper as soccer/features.ts. */\ntype Arc = { npoints?: number | undefined };\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\ntype Zone = {\n fieldLength?: number;\n fieldWidth?: number;\n cornerRadius?: number;\n nzoneLength?: number;\n fieldShape?: string;\n} & Arc;\n\n/** lacrosse_defensive_zone (features-lacrosse.R 19): oval → boards-shaped half (2n + 4 points), else the x <= 0 half rectangle. */\nexport function defensiveZone({\n fieldLength = 0,\n fieldWidth = 0,\n cornerRadius = 0,\n nzoneLength = 0,\n fieldShape = \"rectangle\",\n npoints,\n}: Zone = {}): Point[] {\n if (fieldShape.toLowerCase() !== \"oval\")\n return createRectangle(-fieldLength / 2, 0, -fieldWidth / 2, fieldWidth / 2);\n const hl = fieldLength / 2;\n const hw = fieldWidth / 2;\n const cx = hl - cornerRadius;\n const cy = hw - cornerRadius;\n return [\n [-nzoneLength / 2, hw],\n ...circle({ center: [-cx, cy], start: 0.5, end: 1, r: cornerRadius, npoints }),\n [-hl, 0],\n ...circle({ center: [-cx, -cy], start: 1, end: 1.5, r: cornerRadius, npoints }),\n [-nzoneLength / 2, -hw],\n [-nzoneLength / 2, hw],\n ];\n}\n\n/** lacrosse_neutral_zone (R 100). The assembler always passes 0 (see field.ts), so R draws a zero-width rectangle. */\nexport function neutralZone({\n nzoneLength = 0,\n fieldWidth = 0,\n}: { nzoneLength?: number; fieldWidth?: number } = {}): Point[] {\n return createRectangle(-nzoneLength / 2, nzoneLength / 2, -fieldWidth / 2, fieldWidth / 2);\n}\n\n/** lacrosse_offensive_zone (R 127): mirror image of `defensiveZone`. */\nexport function offensiveZone({\n fieldLength = 0,\n fieldWidth = 0,\n cornerRadius = 0,\n nzoneLength = 0,\n fieldShape = \"rectangle\",\n npoints,\n}: Zone = {}): Point[] {\n if (fieldShape.toLowerCase() !== \"oval\")\n return createRectangle(0, fieldLength / 2, -fieldWidth / 2, fieldWidth / 2);\n const hl = fieldLength / 2;\n const hw = fieldWidth / 2;\n const cx = hl - cornerRadius;\n const cy = hw - cornerRadius;\n return [\n [nzoneLength / 2, hw],\n ...circle({ center: [cx, cy], start: 0.5, end: 0, r: cornerRadius, npoints }),\n [hl, 0],\n ...circle({ center: [cx, -cy], start: 0, end: -0.5, r: cornerRadius, npoints }),\n [nzoneLength / 2, -hw],\n [nzoneLength / 2, hw],\n ];\n}\n\n/** lacrosse_field_apron (R 209): 9-point half frame for a rectangle; any other shape is R's single point `(0, 0)`. */\nexport function fieldApron({\n fieldLength = 0,\n fieldWidth = 0,\n fieldApronThickness = 0,\n fieldShape = \"rectangle\",\n}: {\n fieldLength?: number;\n fieldWidth?: number;\n fieldApronThickness?: number;\n fieldShape?: string;\n} = {}): Point[] {\n if (fieldShape.toLowerCase() !== \"rectangle\") return [[0, 0]]; // ponytail: R quirk preserved for parity (1-row frame)\n const L = fieldLength / 2;\n const W = fieldWidth / 2;\n const a = fieldApronThickness;\n return [\n [0, W],\n [L, W],\n [L, -W],\n [0, -W],\n [0, -W - a],\n [L + a, -W - a],\n [L + a, W + a],\n [0, W + a],\n [0, W],\n ];\n}\n\n/** lacrosse_sideline (R 265). */\nexport function sideline({\n fieldLength = 0,\n lineThickness = 0,\n}: { fieldLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-fieldLength / 2, fieldLength / 2, 0, lineThickness);\n}\n\n/** lacrosse_end_line (R 288). */\nexport function endLine({\n fieldWidth = 0,\n lineThickness = 0,\n}: { fieldWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(0, lineThickness, -fieldWidth / 2, fieldWidth / 2);\n}\n\n/** lacrosse_boards (R 314): inner arcs out, outer arcs back (4n + 7 points), x >= 0 half. */\nexport function boards({\n fieldLength = 0,\n fieldWidth = 0,\n cornerRadius = 0,\n boundaryThickness = 0,\n npoints,\n}: {\n fieldLength?: number;\n fieldWidth?: number;\n cornerRadius?: number;\n boundaryThickness?: number;\n} & Arc = {}): Point[] {\n const hl = fieldLength / 2;\n const hw = fieldWidth / 2;\n const cx = hl - cornerRadius;\n const cy = hw - cornerRadius;\n const t = boundaryThickness;\n return [\n [0, hw],\n ...circle({ center: [cx, cy], start: 0.5, end: 0, r: cornerRadius, npoints }),\n [hl, 0],\n ...circle({ center: [cx, -cy], start: 0, end: -0.5, r: cornerRadius, npoints }),\n [0, -hw],\n [0, -hw - t],\n ...circle({ center: [cx, -cy], start: -0.5, end: 0, r: cornerRadius + t, npoints }),\n [hl + t, 0],\n ...circle({ center: [cx, cy], start: 0, end: 0.5, r: cornerRadius + t, npoints }),\n [0, hw + t],\n [0, hw],\n ];\n}\n\n/** lacrosse_center_line (R 425). */\nexport function centerLine({\n centerLineWidth = 0,\n lineThickness = 0,\n}: { centerLineWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness / 2, lineThickness / 2, -centerLineWidth / 2, centerLineWidth / 2);\n}\n\n/** lacrosse_wing_line (R 447). */\nexport function wingLine({\n wingLineLength = 0,\n lineThickness = 0,\n}: { wingLineLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-wingLineLength / 2, wingLineLength / 2, 0, lineThickness);\n}\n\n/** lacrosse_restraining_line (R 471). */\nexport function restrainingLine({\n fieldWidth = 0,\n lineThickness = 0,\n}: { fieldWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness, 0, -fieldWidth / 2, fieldWidth / 2);\n}\n\n/** lacrosse_defensive_area_line (R 497). */\nexport function defensiveAreaLine({\n defensiveAreaLineLength = 0,\n lineThickness = 0,\n}: { defensiveAreaLineLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(0, defensiveAreaLineLength, 0, lineThickness);\n}\n\n/** lacrosse_goal_line (R 526): a short bar, or (full diameter) two thin arcs of the goal circle at ±0.5π (2n points). */\nexport function goalLine({\n goalFrameWidth = 0,\n lineThickness = 0,\n goalLineFullDiameter = false,\n goalCircleRadius = 0,\n npoints,\n}: {\n goalFrameWidth?: number;\n lineThickness?: number;\n goalLineFullDiameter?: boolean;\n goalCircleRadius?: number;\n} & Arc = {}): Point[] {\n if (!goalLineFullDiameter)\n return createRectangle(-lineThickness / 2, lineThickness / 2, -goalFrameWidth / 2, goalFrameWidth / 2);\n const dev = Math.asin(lineThickness / 2 / goalCircleRadius) / Math.PI;\n const r = goalCircleRadius;\n return [\n ...circle({ center: [0, 0], start: 0.5 - dev, end: 0.5 + dev, r, npoints }),\n ...circle({ center: [0, 0], start: -0.5 - dev, end: -0.5 + dev, r, npoints }),\n ];\n}\n\n/** lacrosse_referee_crease (R 570 and again, identically, at R 1148): half ring (2n + 4 points). */\nexport function refereeCrease({\n refereeCreaseRadius = 0,\n lineThickness = 0,\n npoints,\n}: { refereeCreaseRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n const r = refereeCreaseRadius;\n const t = lineThickness;\n return [\n [r, 0],\n ...circle({ center: [0, 0], start: 0, end: 1, r, npoints }),\n [-r, 0],\n [-r + t, 0],\n ...circle({ center: [0, 0], start: 1, end: 0, r: r - t, npoints }),\n [r, 0],\n ];\n}\n\n/** lacrosse_referee_crease_fill (R 1199): a half disc; R's `line_thickness` argument is unused. */\nexport function refereeCreaseFill({\n refereeCreaseRadius = 0,\n npoints,\n}: { refereeCreaseRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 1, r: refereeCreaseRadius, npoints });\n}\n\ntype GoalCircle = {\n goalCircleRadius?: number;\n lineThickness?: number;\n goalCircleFull360?: boolean;\n goalDepth?: number;\n goalDepthToCircle?: number;\n} & Arc;\n\n/** lacrosse_goal_circle (R 634): full-360 → two mirrored half rings with seam points; otherwise the ring clipped at goal_depth_to_circle + goal_depth. */\nexport function goalCircle({\n goalCircleRadius = 0,\n lineThickness = 0,\n goalCircleFull360 = true,\n goalDepth = 0,\n goalDepthToCircle = 0,\n npoints,\n}: GoalCircle = {}): Point[] {\n const r = goalCircleRadius;\n const t = lineThickness;\n if (goalCircleFull360) {\n const half: Point[] = [\n [0, r],\n ...circle({ center: [0, 0], start: 0.5, end: -0.5, r, npoints }),\n [0, -r],\n [0, -r + t],\n ...circle({ center: [0, 0], start: -0.5, end: 0.5, r: r - t, npoints }),\n [0, r - t],\n [0, r],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })];\n }\n const depth = goalDepthToCircle + goalDepth;\n const start = Math.acos(depth / r) / Math.PI;\n const end = 2 - start;\n return [\n [depth, 0],\n ...circle({ center: [0, 0], start, end, r, npoints }),\n [depth, 0],\n [depth - t, 0],\n ...circle({ center: [0, 0], start: 2 - start, end: 2 - end, r: r - t, npoints }),\n [depth - t, 0],\n [depth, 0],\n ];\n}\n\n/** lacrosse_goal_circle_fill (R 734): the inner disc, or its clipped arc. */\nexport function goalCircleFill({\n goalCircleRadius = 0,\n lineThickness = 0,\n goalCircleFull360 = true,\n goalDepth = 0,\n goalDepthToCircle = 0,\n npoints,\n}: GoalCircle = {}): Point[] {\n const r = goalCircleRadius - lineThickness;\n if (goalCircleFull360) return circle({ center: [0, 0], start: 0, end: 2, r, npoints });\n const start = Math.acos((goalDepthToCircle + goalDepth) / goalCircleRadius) / Math.PI;\n const end = 2 - start;\n return circle({ center: [0, 0], start: 2 - start, end: 2 - end, r, npoints });\n}\n\n/** lacrosse_goal_arc (R 789). `lineThickness === undefined` reproduces R's un-guarded `field_params$goal_arc_line_thickness` (NULL → numeric(0) recycling): no inner arc, duplicated seam points. */\nexport function goalArc({\n goalArcExtension = 0,\n goalArcRadius = 0,\n lineThickness,\n npoints,\n}: { goalArcExtension?: number; goalArcRadius?: number; lineThickness: number | undefined } & Arc): Point[] {\n const e = goalArcExtension;\n const r = goalArcRadius;\n const outer = circle({ center: [0, 0], start: 0.5, end: 1.5, r, npoints });\n if (lineThickness === undefined) return [[e, r], ...outer, [e, -r], [e, -r], [e, r], [e, r]]; // ponytail: R quirk preserved for parity (n + 5 points)\n const t = lineThickness;\n return [\n [e, r],\n ...outer,\n [e, -r],\n [e, -r + t],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: r - t, npoints }),\n [e, r - t],\n [e, r],\n ];\n}\n\n/** lacrosse_goal_fan (R 839): arcs centred at (goal_circle_radius, 0); the inner arc is inset by an angular `t/(R − t)/π` (2n + 6 points; R's sign mix kept). */\nexport function goalFan({\n goalFanRadius = 0,\n goalCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { goalFanRadius?: number; goalCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n const c = goalCircleRadius;\n const t = lineThickness;\n const pi = Math.PI;\n const inset = t / (goalFanRadius + c - t) / pi;\n return [\n [c * Math.cos(0.5 * pi), c * Math.sin(0.5 * pi)],\n [c * Math.cos(0.5 * pi) + t * Math.cos(0.75 * pi), c * Math.sin(0.5 * pi) + t * Math.sin(0.75 * pi)],\n ...circle({ center: [c, 0], start: 0.75, end: 1.25, r: goalFanRadius + c, npoints }),\n [c * Math.cos(1.5 * pi), c * Math.sin(1.5 * pi)],\n [c * Math.cos(1.5 * pi) + t * Math.cos(1.25 * pi), c * Math.sin(1.5 * pi) - t * Math.sin(1.25 * pi)],\n ...circle({ center: [c, 0], start: 1.25 - inset, end: 0.75 + inset, r: goalFanRadius + c - t, npoints }),\n [c * Math.cos(0.5 * pi) + t * Math.cos(0.75 * pi), c * Math.sin(0.5 * pi) - t * Math.sin(0.75 * pi)],\n [c * Math.cos(0.5 * pi), c * Math.sin(0.5 * pi)],\n ];\n}\n\n/** lacrosse_goal_fan_hash_mark (R 919): a centred bar rotated by `rotationalAngle` degrees. */\nexport function goalFanHashMark({\n goalFanHashMarkLength = 0,\n lineThickness = 0,\n rotationalAngle = 0,\n}: { goalFanHashMarkLength?: number; lineThickness?: number; rotationalAngle?: number } = {}): Point[] {\n return rotateCoords(\n createRectangle(\n -goalFanHashMarkLength / 2,\n goalFanHashMarkLength / 2,\n -lineThickness / 2,\n lineThickness / 2,\n ),\n rotationalAngle,\n );\n}\n\n/** lacrosse_goal_mouth_hash_mark (R 953). */\nexport function goalMouthHashMark({\n goalMouthHashMarkLength = 0,\n lineThickness = 0,\n}: { goalMouthHashMarkLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-goalMouthHashMarkLength, 0, -lineThickness, 0);\n}\n\n/** lacrosse_goal_mouth (R 981): semicircular ring split at ±goal_mouth_semi_circle_separation (2n + 9 points). */\nexport function goalMouth({\n goalMouthRadius = 0,\n lineThickness = 0,\n goalMouthSemiCircleSeparation = 0,\n npoints,\n}: {\n goalMouthRadius?: number;\n lineThickness?: number;\n goalMouthSemiCircleSeparation?: number;\n} & Arc = {}): Point[] {\n const r = goalMouthRadius;\n const t = lineThickness;\n const s = goalMouthSemiCircleSeparation;\n return [\n [0, s],\n [0, r],\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r, npoints }),\n [0, -r],\n [0, -s],\n [-t, -s],\n [-t, -r + t],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: r - t, npoints }),\n [-t, r - t],\n [-t, s],\n [0, s],\n ];\n}\n\n/** lacrosse_below_goal_marking (R 1050): a full disc. */\nexport function belowGoalMarking({\n belowGoalMarkingRadius = 0,\n npoints,\n}: { belowGoalMarkingRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: belowGoalMarkingRadius, npoints });\n}\n\ntype Goal = { goalFrameOpeningInterior?: number; goalPostThickness?: number; goalDepth?: number };\n\n/** lacrosse_goal_frame (R 1075): 7-point frame. */\nexport function goalFrame({\n goalFrameOpeningInterior: o = 0,\n goalPostThickness: p = 0,\n goalDepth: d = 0,\n}: Goal = {}): Point[] {\n return [\n [0, o / 2],\n [d - p, 0],\n [0, -o / 2],\n [0, -o / 2 - p],\n [d, 0],\n [0, o / 2 + p],\n [0, 0],\n ];\n}\n\n/** lacrosse_goal_net (R 1115): 4 points; the last y is the full opening, not half (R). */\nexport function goalNet({\n goalFrameOpeningInterior: o = 0,\n goalPostThickness: p = 0,\n goalDepth: d = 0,\n}: Goal = {}): Point[] {\n return [\n [0, o / 2],\n [d - p, 0],\n [0, -o / 2],\n [0, o],\n ];\n}\n\n/** lacrosse_center_circle (R 1222): outer half arc, seam to `−r − t` (R), inner arc back (2n + 2 points). */\nexport function centerCircle({\n centerCircleRadius = 0,\n centerCircleThickness = 0,\n npoints,\n}: { centerCircleRadius?: number; centerCircleThickness?: number } & Arc = {}): Point[] {\n const r = centerCircleRadius;\n const t = centerCircleThickness;\n return [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r, npoints }),\n [0, -r],\n [0, -r - t],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: r - t, npoints }),\n ];\n}\n\ntype Bench = { benchAreaOutlineThickness?: number; benchLength?: number; benchDepth?: number };\n\n/** lacrosse_player_bench_outline (R 1271): 9 points. */\nexport function playerBenchOutline({\n benchAreaOutlineThickness: t = 0,\n benchLength: l = 0,\n benchDepth: d = 0,\n}: Bench = {}): Point[] {\n return [\n [-t, t],\n [-t, 2 * t + d],\n [l + t, 2 * t + d],\n [l + t, t],\n [l, t],\n [l, t + d],\n [0, t + d],\n [0, t],\n [t, t],\n ];\n}\n\n/** lacrosse_player_bench_area_fill (R 1320). */\nexport function playerBenchAreaFill({\n benchAreaOutlineThickness: t = 0,\n benchLength: l = 0,\n benchDepth: d = 0,\n}: Bench = {}): Point[] {\n return createRectangle(-l / 2, l / 2, t, t + d);\n}\n\n/** lacrosse_penalty_box_outline (R 1354): 11 points; R's `penalty_box_width` argument is unused. */\nexport function penaltyBoxOutline({\n penaltyBoxOutlineThickness: t = 0,\n penaltyBoxLength: l = 0,\n penaltyBoxSeparation: s = 0,\n penaltyBoxDepth: d = 0,\n}: {\n penaltyBoxOutlineThickness?: number;\n penaltyBoxLength?: number;\n penaltyBoxWidth?: number;\n penaltyBoxSeparation?: number;\n penaltyBoxDepth?: number;\n} = {}): Point[] {\n const h = s / 2;\n return [\n [0, -(2 * t + d)],\n [h + l + t, -(2 * t + d)],\n [h + l + t, -t],\n [h + l, -t],\n [h + l, -(t + d)],\n [h + t, -(t + d)],\n [h + t, -t],\n [h, -t],\n [h, -(t + d)],\n [0, -(t + d)],\n [0, -(2 * t + d)],\n ];\n}\n\n/** lacrosse_penalty_box_fill (R 1414). */\nexport function penaltyBoxFill({\n penaltyBoxOutlineThickness: t = 0,\n penaltyBoxLength: l = 0,\n penaltyBoxDepth: d = 0,\n}: {\n penaltyBoxOutlineThickness?: number;\n penaltyBoxLength?: number;\n penaltyBoxDepth?: number;\n} = {}): Point[] {\n return createRectangle(-l / 2, l / 2, -t, -(t + d));\n}\n\n/** lacrosse_off_field_officials_box (R 1445). */\nexport function offFieldOfficialsBox({\n officialsBoxThickness: t = 0,\n officialsBoxLength: l = 0,\n officialsBoxDepth: d = 0,\n}: {\n officialsBoxThickness?: number;\n officialsBoxLength?: number;\n officialsBoxDepth?: number;\n} = {}): Point[] {\n return createRectangle(-l / 2, l / 2, -t, -(t + d));\n}\n\n/** lacrosse_face_off_marker (R 1485): `tolower(shape)` \"o\" → disc, \"x\" → X (14 points), \"square\" → square (5); any other shape throws `SportyError` (R's 0-row frame makes `add_feature` error). */\nexport function faceOffMarker({\n shape = \"O\",\n featureThickness = 0,\n sideLength = 0,\n featureRadius = 0,\n npoints,\n}: {\n shape?: string;\n featureThickness?: number;\n sideLength?: number;\n featureRadius?: number;\n} & Arc = {}): Point[] {\n switch (shape.toLowerCase()) {\n case \"o\":\n return circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n case \"x\":\n return createXShape(sideLength, featureThickness, 45);\n case \"square\":\n return createSquare(sideLength);\n default:\n throw new SportyError(`Unknown face-off marker shape \"${shape}\"; expected O, X or square`);\n }\n}\n\n/** lacrosse_change_area_outline (R 1527): 7 points. */\nexport function changeAreaOutline({\n changeAreaLength: l = 0,\n changeAreaWidth: w = 0,\n featureThickness: t = 0,\n}: { changeAreaLength?: number; changeAreaWidth?: number; featureThickness?: number } = {}): Point[] {\n return [\n [l, 0],\n [l, -w],\n [0, -w],\n [0, -(w + t)],\n [l + t, -(w + t)],\n [l + t, 0],\n [l, 0],\n ];\n}\n\n/** lacrosse_change_area_fill (R 1568). */\nexport function changeAreaFill({\n changeAreaLength: l = 0,\n changeAreaWidth: w = 0,\n}: { changeAreaLength?: number; changeAreaWidth?: number } = {}): Point[] {\n return createRectangle(0, l, -w, 0);\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `lacrosse_*` builder (prefix dropped), in draw order, as used in `PolygonFeature.name` (33; R defines `lacrosse_referee_crease` twice, identically). */\nexport const LACROSSE_FEATURES = [\n \"field_apron\",\n \"defensive_zone\",\n \"neutral_zone\",\n \"offensive_zone\",\n \"referee_crease_fill\",\n \"sideline\",\n \"end_line\",\n \"change_area_outline\",\n \"change_area_fill\",\n \"center_line\",\n \"player_bench_area_fill\",\n \"player_bench_outline\",\n \"penalty_box_fill\",\n \"penalty_box_outline\",\n \"off_field_officials_box\",\n \"boards\",\n \"wing_line\",\n \"restraining_line\",\n \"defensive_area_line\",\n \"referee_crease\",\n \"center_circle\",\n \"goal_circle_fill\",\n \"goal_circle\",\n \"goal_arc\",\n \"goal_fan\",\n \"goal_fan_hash_mark\",\n \"goal_mouth\",\n \"goal_mouth_hash_mark\",\n \"below_goal_marking\",\n \"goal_net\",\n \"goal_frame\",\n \"goal_line\",\n \"face_off_marker\",\n] as const;\nexport type LacrosseFeature = (typeof LACROSSE_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_lacrosse()` (13). */\nexport const LACROSSE_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalffield\",\n \"offensive_half_field\",\n \"offensive half field\",\n \"defense\",\n \"defence\",\n \"defensivehalffield\",\n \"defensive_half_field\",\n \"defensive half field\",\n] as const;\nexport type LacrosseDisplayRange = (typeof LACROSSE_DISPLAY_RANGES)[number];\n\n/** The 35 argument names of `lacrosse_features_set_colors()`, in R's declaration order (colour keys are NOT feature names). */\nexport const LACROSSE_COLOR_KEYS = [\n \"plot_background\",\n \"field_apron\",\n \"defensive_zone\",\n \"neutral_zone\",\n \"offensive_zone\",\n \"team_a_bench\",\n \"team_b_bench\",\n \"team_a_penalty_box\",\n \"team_b_penalty_box\",\n \"off_field_officials_box\",\n \"boards\",\n \"end_line\",\n \"sideline\",\n \"center_line\",\n \"wing_line\",\n \"restraining_line\",\n \"defensive_area_line\",\n \"goal_line\",\n \"referee_crease\",\n \"referee_crease_fill\",\n \"goal_circle\",\n \"goal_circle_fill\",\n \"goal_arc\",\n \"goal_fan\",\n \"goal_fan_hash_mark\",\n \"goal_mouth_hash_mark\",\n \"goal_mouth\",\n \"below_goal_marking\",\n \"goal_frame\",\n \"goal_net\",\n \"center_circle\",\n \"center_face_off_marker\",\n \"corner_face_off_marker\",\n \"change_area_outline\",\n \"change_area_fill\",\n] as const;\nexport type LacrosseColorKey = (typeof LACROSSE_COLOR_KEYS)[number];\n\n/** Defaults of `lacrosse_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const LACROSSE_DEFAULT_COLORS: Readonly<Record<LacrosseColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n field_apron: \"#195f0c\",\n defensive_zone: \"#195f0c\",\n neutral_zone: \"#195f0c\",\n offensive_zone: \"#195f0c\",\n team_a_bench: \"#a5acaf4d\",\n team_b_bench: \"#a5acaf4d\",\n team_a_penalty_box: \"#a5acaf4d\",\n team_b_penalty_box: \"#a5acaf4d\",\n off_field_officials_box: \"#a5acaf\",\n boards: \"#ffa500\",\n end_line: \"#ffffff\",\n sideline: \"#ffffff\",\n center_line: \"#ffffff\",\n wing_line: \"#ffffff\",\n restraining_line: \"#ffffff\",\n defensive_area_line: \"#ffffff\",\n goal_line: \"#ffffff\",\n referee_crease: \"#ffffff\",\n referee_crease_fill: \"#195f0c\",\n goal_circle: \"#ffffff\",\n goal_circle_fill: \"#195f0c\",\n goal_arc: \"#ffffff\",\n goal_fan: \"#ffffff\",\n goal_fan_hash_mark: \"#ffffff\",\n goal_mouth_hash_mark: \"#ffffff\",\n goal_mouth: \"#ffffff\",\n below_goal_marking: \"#ffffff\",\n goal_frame: \"#ffa500\",\n goal_net: \"#a5acaf4d\",\n center_circle: \"#ffffff\",\n center_face_off_marker: \"#ffffff\",\n corner_face_off_marker: \"#ffffff\",\n change_area_outline: \"#ffffff\",\n change_area_fill: \"#195f0c\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n LACROSSE_LEAGUES,\n LACROSSE_SPECS,\n type LacrosseLeague,\n type LacrosseParamUpdates,\n} from \"../specs/lacrosse.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n LACROSSE_DEFAULT_COLORS,\n LACROSSE_DISPLAY_RANGES,\n type LacrosseColorKey,\n type LacrosseDisplayRange,\n type LacrosseFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n// R reads five keys that no league's JSON has, so `%or% 0` always yields 0 (preserved for parity; absent from LacrosseParams).\nconst NZONE_LENGTH = 0; // geom-lacrosse.R 323/330/338: `nzone_length` (the JSON key is `neutral_zone_length`)\nconst BOARD_THICKNESS = 0; // R 819/836: `board_thickness` (the JSON key is `boards_thickness`)\nconst CENTER_FACE_OFF_MARKER_RADIUS = 0; // R 535\nconst CORNER_FACE_OFF_MARKER_BAR_WIDTH = 0; // R 541\nconst CORNER_FACE_OFF_MARKER_BAR_LENGTH = 0; // R 542\n\n/**\n * Port of sportyR `geom_lacrosse()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` also converts the anchors and\n * display limits; a user's `center_face_off_marker` colour wins over the contrasting `#ffcb05` (R overwrites it).\n */\nexport function lacrosseField(\n league: LacrosseLeague | (string & {}),\n opts: SurfaceOptions<LacrosseParamUpdates, LacrosseColorKey, LacrosseDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(LACROSSE_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown lacrosse league \"${league}\"; expected one of: ${LACROSSE_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase(); // R: tolower() only — no trim\n if (!isOneOf(LACROSSE_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown lacrosse display range \"${opts.displayRange}\"; expected one of: ${LACROSSE_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(LACROSSE_SPECS[key], opts.updates, [\"goal_fan_hash_mark_separation_from_center\"]);\n // Colour pre-step (geom-lacrosse.R 296-311): R compares the DEFAULTS (always equal) and then overwrites even a user's\n // value; here the user's value wins (documented divergence 6).\n const contrast =\n (p.center_face_off_marker_color_contrasting ?? false) &&\n LACROSSE_DEFAULT_COLORS.center_face_off_marker === LACROSSE_DEFAULT_COLORS.center_line;\n const colors = mergeColors(\n LACROSSE_DEFAULT_COLORS,\n contrast && opts.colorUpdates?.center_face_off_marker === undefined\n ? { ...opts.colorUpdates, center_face_off_marker: \"#ffcb05\" }\n : opts.colorUpdates,\n );\n const col = (k: LacrosseColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.field_units || \"ft\"); // R: field_units %or% \"ft\" (custom's \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.field_length;\n const W = p.field_width;\n const gx = L / 2 - p.goal_line_center_to_end_line; // every goal feature's x anchor\n const features: Feature[] = [];\n const add = (\n name: LacrosseFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n const stroked = (k: LacrosseColorKey): { stroke: Color } => ({ stroke: col(k) });\n // Layers, in R's add_feature order (geom-lacrosse.R 616-1199).\n const zone = {\n fieldLength: L,\n fieldWidth: W,\n cornerRadius: p.corner_radius ?? 0,\n nzoneLength: NZONE_LENGTH,\n fieldShape: p.field_shape,\n npoints,\n };\n add(\n \"field_apron\",\n F.fieldApron({\n fieldLength: L,\n fieldWidth: W,\n fieldApronThickness: p.field_apron_thickness,\n fieldShape: p.field_shape,\n }),\n col(\"field_apron\"),\n 0,\n 0,\n true,\n false,\n stroked(\"field_apron\"),\n );\n add(\n \"defensive_zone\",\n F.defensiveZone(zone),\n col(\"defensive_zone\"),\n 0,\n 0,\n false,\n false,\n stroked(\"defensive_zone\"),\n );\n add(\n \"neutral_zone\",\n F.neutralZone({ nzoneLength: NZONE_LENGTH, fieldWidth: W }),\n col(\"neutral_zone\"),\n 0,\n 0,\n false,\n false,\n );\n add(\n \"offensive_zone\",\n F.offensiveZone(zone),\n col(\"offensive_zone\"),\n 0,\n 0,\n false,\n false,\n stroked(\"offensive_zone\"),\n );\n const crease = {\n refereeCreaseRadius: p.referee_crease_radius ?? 0,\n lineThickness: p.referee_crease_thickness ?? 0,\n npoints,\n };\n add(\"referee_crease_fill\", F.refereeCreaseFill(crease), col(\"referee_crease_fill\"), 0, -W / 2, true, false);\n const boundary = p.boundary_thickness ?? 0;\n add(\n \"sideline\",\n F.sideline({ fieldLength: L, lineThickness: boundary }),\n (p.has_sidelines ?? true) ? col(\"sideline\") : \"#ffffff00\",\n 0,\n W / 2,\n false,\n true,\n );\n add(\n \"end_line\",\n F.endLine({ fieldWidth: W, lineThickness: boundary }),\n (p.has_endlines ?? true) ? col(\"end_line\") : \"#ffffff00\",\n L / 2,\n 0,\n true,\n false,\n );\n const changeAreaLength =\n (p.bench_separation ?? 0) / 2 + (p.bench_length ?? 0) + (p.change_area_extension ?? 0);\n const changeAreaWidth = p.change_area_width ?? 0;\n add(\n \"change_area_outline\",\n F.changeAreaOutline({\n changeAreaLength,\n changeAreaWidth,\n featureThickness: p.change_area_outline_thickness ?? 0,\n }),\n col(\"change_area_outline\"),\n 0,\n W / 2,\n true,\n false,\n stroked(\"change_area_outline\"),\n );\n add(\n \"change_area_fill\",\n F.changeAreaFill({ changeAreaLength, changeAreaWidth }),\n col(\"change_area_fill\"),\n 0,\n W / 2,\n true,\n false,\n stroked(\"change_area_fill\"),\n );\n add(\n \"center_line\",\n F.centerLine({ centerLineWidth: p.center_line_width, lineThickness: p.center_line_thickness }),\n col(\"center_line\"),\n 0,\n 0,\n true,\n false,\n );\n const bench = {\n benchAreaOutlineThickness: p.boards_thickness ?? 0,\n benchLength: p.bench_length ?? 0,\n benchDepth: p.bench_depth ?? 0,\n };\n const benchX = (p.bench_separation ?? 0) / 2 + (p.bench_length ?? 0) / 2;\n const benchFill = F.playerBenchAreaFill(bench);\n add(\"player_bench_area_fill\", benchFill, col(\"team_a_bench\"), -benchX, W / 2, false, false);\n add(\"player_bench_area_fill\", benchFill, col(\"team_b_bench\"), benchX, W / 2, false, false);\n add(\n \"player_bench_outline\",\n F.playerBenchOutline(bench),\n col(\"boards\"),\n (p.bench_separation ?? 0) / 2,\n W / 2,\n true,\n false,\n );\n const penaltyBox = {\n penaltyBoxOutlineThickness: p.boards_thickness ?? 0,\n penaltyBoxLength: p.penalty_box_length ?? 0,\n penaltyBoxDepth: p.penalty_box_depth ?? 0,\n };\n const penaltyX = (p.penalty_box_separation ?? 0) / 2 + BOARD_THICKNESS + (p.penalty_box_length ?? 0) / 2;\n const penaltyFill = F.penaltyBoxFill(penaltyBox);\n add(\"penalty_box_fill\", penaltyFill, col(\"team_a_penalty_box\"), -penaltyX, -W / 2, false, false);\n add(\"penalty_box_fill\", penaltyFill, col(\"team_b_penalty_box\"), penaltyX, -W / 2, false, false);\n add(\n \"penalty_box_outline\",\n F.penaltyBoxOutline({ ...penaltyBox, penaltyBoxSeparation: p.penalty_box_separation ?? 0 }),\n col(\"boards\"),\n 0,\n -(W / 2),\n true,\n false,\n );\n add(\n \"off_field_officials_box\",\n F.offFieldOfficialsBox({\n officialsBoxThickness: p.boards_thickness ?? 0,\n officialsBoxLength: p.penalty_box_separation ?? 0,\n officialsBoxDepth: p.penalty_box_depth ?? 0,\n }),\n col(\"off_field_officials_box\"),\n 0,\n -(W / 2),\n false,\n false,\n );\n add(\n \"boards\",\n F.boards({\n fieldLength: L,\n fieldWidth: W,\n cornerRadius: p.corner_radius ?? 0,\n boundaryThickness: p.boards_thickness ?? 0,\n npoints,\n }),\n col(\"boards\"),\n 0,\n 0,\n true,\n false,\n { stroke: (p.has_boards ?? false) ? col(\"boards\") : \"#ffffff00\" },\n );\n add(\n \"wing_line\",\n F.wingLine({ wingLineLength: p.wing_line_length ?? 0, lineThickness: p.wing_line_thickness ?? 0 }),\n col(\"wing_line\"),\n 0,\n W / 2 - (p.wing_line_center_to_sideline ?? 0),\n false,\n true,\n );\n add(\n \"restraining_line\",\n F.restrainingLine({ fieldWidth: W, lineThickness: p.restraining_line_thickness ?? 0 }),\n col(\"restraining_line\"),\n p.restraining_line_outer_edge_to_center ?? 0,\n 0,\n true,\n false,\n );\n add(\n \"defensive_area_line\",\n F.defensiveAreaLine({\n defensiveAreaLineLength: p.defensive_area_line_length ?? 0,\n lineThickness: p.defensive_area_line_thickness ?? 0,\n }),\n col(\"defensive_area_line\"),\n L / 2 - (p.defensive_area_line_length ?? 0),\n W / 2 - (p.defensive_area_line_center_to_sideline ?? 0),\n true,\n true,\n );\n add(\"referee_crease\", F.refereeCrease(crease), col(\"referee_crease\"), 0, -W / 2, true, false);\n add(\n \"center_circle\",\n F.centerCircle({\n centerCircleRadius: p.center_circle_radius ?? 0,\n centerCircleThickness: p.center_circle_thickness ?? 0,\n npoints,\n }),\n col(\"center_circle\"),\n 0,\n 0,\n true,\n false,\n );\n const goalCircle = {\n goalCircleRadius: p.goal_circle_radius,\n lineThickness: p.goal_circle_thickness,\n goalCircleFull360: p.goal_circle_full_360,\n goalDepth: p.goal_depth,\n goalDepthToCircle: p.goal_depth_to_circle ?? 0,\n npoints,\n };\n add(\"goal_circle_fill\", F.goalCircleFill(goalCircle), col(\"goal_circle_fill\"), gx, 0, true, true);\n add(\"goal_circle\", F.goalCircle(goalCircle), col(\"goal_circle\"), gx, 0, true, true);\n add(\n \"goal_arc\",\n F.goalArc({\n goalArcExtension: p.goal_arc_extension ?? 0,\n goalArcRadius: p.goal_arc_radius ?? 0,\n lineThickness: p.goal_arc_line_thickness, // R: no %or% — undefined reproduces its NULL recycling\n npoints,\n }),\n col(\"goal_arc\"),\n gx,\n 0,\n true,\n false,\n );\n add(\n \"goal_fan\",\n F.goalFan({\n goalFanRadius: p.goal_fan_radius ?? 0,\n goalCircleRadius: p.goal_circle_radius,\n lineThickness: p.goal_fan_line_thickness ?? 0,\n npoints,\n }),\n col(\"goal_fan\"),\n gx,\n 0,\n true,\n false,\n );\n for (const sep of p.goal_fan_hash_mark_separation_from_center ?? []) {\n const thetaBuild = sep / ((p.goal_fan_radius ?? 1) + p.goal_circle_radius); // radians (features-list site, R 576)\n const thetaPlace = sep / (p.goal_fan_radius ?? 1) / Math.PI; // units of π (placement site, R 1042) — R uses two formulas; both preserved\n const R = (p.goal_fan_radius ?? 0) + p.goal_circle_radius;\n const mark = F.goalFanHashMark({\n goalFanHashMarkLength: p.goal_fan_hash_mark_length ?? 0,\n lineThickness: p.goal_fan_hash_mark_line_thickness ?? 0,\n rotationalAngle: (-thetaBuild * 180) / Math.PI,\n });\n add(\n \"goal_fan_hash_mark\",\n mark,\n col(\"goal_fan_hash_mark\"),\n gx + p.goal_circle_radius + R * Math.cos((1 - thetaPlace) * Math.PI),\n R * Math.sin((1 - thetaPlace) * Math.PI),\n true,\n true,\n );\n }\n add(\n \"goal_mouth\",\n F.goalMouth({\n goalMouthRadius: p.goal_mouth_radius ?? 0,\n lineThickness: p.goal_mouth_line_thickness ?? 0,\n goalMouthSemiCircleSeparation: p.goal_mouth_semi_circle_separation ?? 0,\n npoints,\n }),\n col(\"goal_mouth\"),\n gx,\n 0,\n true,\n false,\n );\n add(\n \"goal_mouth_hash_mark\",\n F.goalMouthHashMark({\n goalMouthHashMarkLength: p.goal_mouth_hash_mark_length ?? 0,\n lineThickness: p.goal_mouth_hash_mark_line_thickness ?? 0,\n }),\n col(\"goal_mouth_hash_mark\"),\n gx,\n p.goal_fan_radius ?? 0,\n true,\n true,\n );\n add(\n \"below_goal_marking\",\n F.belowGoalMarking({ belowGoalMarkingRadius: p.below_goal_marking_radius ?? 0, npoints }),\n col(\"below_goal_marking\"),\n gx + (p.below_goal_marking_to_goal_line ?? 0),\n (p.goal_fan_radius ?? 0) / 2,\n true,\n true,\n );\n const goal = {\n goalFrameOpeningInterior: p.goal_frame_opening_interior,\n goalPostThickness: p.goal_post_thickness,\n goalDepth: p.goal_depth,\n };\n add(\"goal_net\", F.goalNet(goal), col(\"goal_net\"), gx, 0, true, false);\n add(\"goal_frame\", F.goalFrame(goal), col(\"goal_frame\"), gx, 0, true, false);\n add(\n \"goal_line\",\n F.goalLine({\n goalFrameWidth: p.goal_frame_width,\n lineThickness: p.goal_line_thickness,\n goalLineFullDiameter: Boolean(p.goal_line_full_diameter),\n goalCircleRadius: p.goal_circle_radius,\n npoints,\n }),\n col(\"goal_line\"),\n gx,\n 0,\n true,\n false,\n );\n add(\n \"face_off_marker\",\n F.faceOffMarker({\n shape: p.center_face_off_marker_shape ?? \"O\",\n featureThickness: p.center_face_off_marker_side_width ?? 0,\n sideLength: p.center_face_off_marker_side_length ?? 0,\n featureRadius: CENTER_FACE_OFF_MARKER_RADIUS,\n npoints,\n }),\n col(\"center_face_off_marker\"),\n 0,\n 0,\n false,\n false,\n );\n add(\n \"face_off_marker\",\n F.faceOffMarker({\n shape: p.corner_face_off_marker_shape ?? \"O\",\n featureThickness: CORNER_FACE_OFF_MARKER_BAR_WIDTH,\n sideLength: CORNER_FACE_OFF_MARKER_BAR_LENGTH,\n featureRadius: p.corner_face_off_marker_radius ?? 0,\n npoints,\n }),\n col(\"corner_face_off_marker\"),\n (p.restraining_line_outer_edge_to_center ?? 0) + (p.corner_face_off_marker_to_attack_line_outer ?? 0) / 2,\n W / 2 - (p.corner_face_off_marker_to_boards ?? 0),\n true,\n true,\n );\n // Display range (geom-lacrosse.R 1202-1308) in native units; then converted (documented divergence 1), translated, rotated.\n const hfl = L / 2 + p.field_apron_thickness;\n const hfw = W / 2 + p.field_apron_thickness;\n const boards = p.boards_thickness ?? 0;\n const inX = [-(L / 2 + boards), L / 2 + boards] as const;\n const off = [0, hfl] as const;\n const def = [-hfl, 0] as const;\n const X: Readonly<Record<LacrosseDisplayRange, readonly [number, number]>> = {\n full: [-hfl, hfl],\n in_bounds_only: inX,\n \"in bounds only\": inX,\n offense: off,\n offence: off,\n offensivehalffield: off,\n offensive_half_field: off,\n \"offensive half field\": off,\n defense: def,\n defence: def,\n defensivehalffield: def,\n defensive_half_field: def,\n \"defensive half field\": def,\n };\n const inBounds = range === \"in_bounds_only\" || range === \"in bounds only\"; // every other key keeps y = ±hfw\n const [cx, cy] = convertLimits(\n X[range],\n inBounds ? [-(W / 2 + boards), W / 2 + boards] : [-hfw, hfw],\n from,\n units,\n );\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // R: NULL = none; transparent stands in\n return {\n sport: \"lacrosse\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle } from \"../shapes.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). Same helper as basketball/features.ts. */\ntype Arc = { npoints?: number | undefined };\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\n/** soccer_half_pitch: one half of the playing surface. */\nexport function halfPitch({\n pitchLength = 0,\n pitchWidth = 0,\n}: { pitchLength?: number; pitchWidth?: number } = {}): Point[] {\n return createRectangle(-pitchLength / 4, pitchLength / 4, -pitchWidth / 2, pitchWidth / 2);\n}\n\n/** soccer_pitch_apron: 9-point half outline including goal_depth padding. */\nexport function pitchApron({\n pitchLength = 0,\n pitchWidth = 0,\n pitchApronTouchline = 0,\n pitchApronGoalLine = 0,\n goalDepth = 0,\n}: {\n pitchLength?: number;\n pitchWidth?: number;\n pitchApronTouchline?: number;\n pitchApronGoalLine?: number;\n goalDepth?: number;\n} = {}): Point[] {\n const L = pitchLength / 2;\n const W = pitchWidth / 2;\n const x = L + pitchApronGoalLine + goalDepth;\n const y = W + pitchApronTouchline + goalDepth;\n return [\n [0, W],\n [L, W],\n [L, -W],\n [0, -W],\n [0, -y],\n [x, -y],\n [x, y],\n [0, y],\n [0, W],\n ];\n}\n\n/** soccer_touchline (features-soccer.R 105). */\nexport function touchline({\n pitchLength = 0,\n featureThickness = 0,\n}: { pitchLength?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(-pitchLength / 2, pitchLength / 2, -featureThickness, 0);\n}\n\n/** soccer_goal_line (R 129). */\nexport function goalLine({\n pitchWidth = 0,\n featureThickness = 0,\n}: { pitchWidth?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(-featureThickness, 0, -pitchWidth / 2, pitchWidth / 2);\n}\n\n/** soccer_halfway_line (R 160). */\nexport function halfwayLine({\n pitchWidth = 0,\n featureThickness = 0,\n}: { pitchWidth?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(-featureThickness / 2, featureThickness / 2, -pitchWidth / 2, pitchWidth / 2);\n}\n\n/** soccer_penalty_box (features-soccer.R 194): box outline + the penalty arc (outer arc then inner arc back), x <= 0 half, anchored at the goal line. */\nexport function penaltyBox({\n featureRadius = 0,\n featureThickness = 0,\n boxLength = 0,\n penaltyMarkDist = 0,\n goalWidth = 0,\n goalPostToBoxEdge = 0,\n npoints,\n}: {\n featureRadius?: number;\n featureThickness?: number;\n boxLength?: number;\n penaltyMarkDist?: number;\n goalWidth?: number;\n goalPostToBoxEdge?: number;\n} & Arc = {}): Point[] {\n const halfBoxWidth = goalWidth / 2 + goalPostToBoxEdge;\n const xOut = boxLength - penaltyMarkDist;\n const rInner = featureRadius - featureThickness;\n let startOuter = 0.5;\n let startInner = 0.5;\n if (featureRadius !== 0 && !(Math.abs(xOut / featureRadius) > 1 || Math.abs(xOut / rInner) > 1)) {\n startOuter = 1 - Math.acos(xOut / featureRadius) / Math.PI;\n startInner = 1 - Math.acos(xOut / rInner) / Math.PI;\n }\n return [\n [-featureThickness, halfBoxWidth],\n [-boxLength, halfBoxWidth],\n ...circle({ center: [-penaltyMarkDist, 0], start: startOuter, end: 1, r: featureRadius, npoints }),\n ...circle({ center: [-penaltyMarkDist, 0], start: 1, end: startInner, r: rInner, npoints }),\n [-boxLength, 0],\n [-(boxLength - featureThickness), 0],\n [-(boxLength - featureThickness), halfBoxWidth - featureThickness],\n [-featureThickness, halfBoxWidth - featureThickness],\n [-featureThickness, halfBoxWidth],\n ];\n}\n\n/** soccer_goal_box (R 272). */\nexport function goalBox({\n featureThickness: t = 0,\n boxLength: b = 0,\n goalWidth = 0,\n goalPostToBoxEdge = 0,\n}: {\n featureThickness?: number;\n boxLength?: number;\n goalWidth?: number;\n goalPostToBoxEdge?: number;\n} = {}): Point[] {\n const h = goalWidth / 2 + goalPostToBoxEdge;\n return [\n [-t, h],\n [-b, h],\n [-b, -h],\n [-t, -h],\n [-t, -(h - t)],\n [-(b - t), -(h - t)],\n [-(b - t), h - t],\n [-t, h - t],\n [-t, h],\n ];\n}\n\n/** soccer_corner_arc: quarter ring from pi to 1.5pi and back. */\nexport function cornerArc({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: 1, end: 1.5, r: featureRadius, npoints }),\n ...circle({ center: [0, 0], start: 1.5, end: 1, r: featureRadius - featureThickness, npoints }),\n ];\n}\n\n/** soccer_center_circle: ring, outer 0.5 -> 1.5, inner back. */\nexport function centerCircle({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r: featureRadius, npoints }),\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: featureRadius - featureThickness, npoints }),\n ];\n}\n\n/** soccer_center_mark (R 389): a full disc. */\nexport function centerMark({ featureRadius = 0, npoints }: { featureRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n}\n\n/** soccer_penalty_mark (R 410): a full disc. */\nexport function penaltyMark({ featureRadius = 0, npoints }: { featureRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n}\n\n/** soccer_corner_defensive_marks (features-soccer.R 445): a short tick perpendicular to the touchline or to the goal line; empty when neither flag is set (R returns a 0-row frame). */\nexport function cornerDefensiveMarks({\n featureThickness = 0,\n isTouchline = false,\n isGoalLine = false,\n depth = 0,\n separationFromLine = 0,\n}: {\n featureThickness?: number;\n isTouchline?: boolean;\n isGoalLine?: boolean;\n depth?: number;\n separationFromLine?: number;\n} = {}): Point[] {\n if (isTouchline)\n return createRectangle(\n -featureThickness / 2,\n featureThickness / 2,\n separationFromLine,\n separationFromLine + depth,\n );\n if (isGoalLine)\n return createRectangle(\n separationFromLine,\n separationFromLine + depth,\n -featureThickness / 2,\n featureThickness / 2,\n );\n return [];\n}\n\n/** soccer_goal: 9-point goal frame. */\nexport function goal({\n featureThickness: t = 0,\n goalWidth: w = 0,\n goalDepth: d = 0,\n}: { featureThickness?: number; goalWidth?: number; goalDepth?: number } = {}): Point[] {\n return [\n [0, w / 2 + t],\n [d + t, w / 2 + t],\n [d + t, -(w / 2 + t)],\n [0, -(w / 2 + t)],\n [0, -w / 2],\n [d, -w / 2],\n [d, w / 2],\n [0, w / 2],\n [0, w / 2 + t],\n ];\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `soccer_*` builder (prefix dropped), as used in `PolygonFeature.name` (13). */\nexport const SOCCER_FEATURES = [\n \"half_pitch\",\n \"pitch_apron\",\n \"touchline\",\n \"goal_line\",\n \"corner_arc\",\n \"halfway_line\",\n \"penalty_box\",\n \"goal_box\",\n \"center_circle\",\n \"penalty_mark\",\n \"center_mark\",\n \"corner_defensive_marks\",\n \"goal\",\n] as const;\nexport type SoccerFeature = (typeof SOCCER_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_soccer()` (13). */\nexport const SOCCER_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalfpitch\",\n \"offensive_half_pitch\",\n \"offensive half pitch\",\n \"defense\",\n \"defence\",\n \"defensivehalfpitch\",\n \"defensive_half_pitch\",\n \"defensive half pitch\",\n] as const;\nexport type SoccerDisplayRange = (typeof SOCCER_DISPLAY_RANGES)[number];\n\n/** The 15 argument names of `soccer_features_set_colors()`, in R's declaration order (colour keys are NOT feature names). */\nexport const SOCCER_COLOR_KEYS = [\n \"plot_background\",\n \"offensive_half_pitch\",\n \"defensive_half_pitch\",\n \"pitch_apron\",\n \"touchline\",\n \"goal_line\",\n \"corner_arc\",\n \"halfway_line\",\n \"center_circle\",\n \"center_mark\",\n \"penalty_box\",\n \"goal_box\",\n \"penalty_mark\",\n \"corner_defensive_mark\",\n \"goal\",\n] as const;\nexport type SoccerColorKey = (typeof SOCCER_COLOR_KEYS)[number];\n\n/** Defaults of `soccer_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const SOCCER_DEFAULT_COLORS: Readonly<Record<SoccerColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n offensive_half_pitch: \"#195f0c\",\n defensive_half_pitch: \"#195f0c\",\n pitch_apron: \"#195f0c\",\n touchline: \"#ffffff\",\n goal_line: \"#ffffff\",\n corner_arc: \"#ffffff\",\n halfway_line: \"#ffffff\",\n center_circle: \"#ffffff\",\n center_mark: \"#ffffff\",\n penalty_box: \"#ffffff\",\n goal_box: \"#ffffff\",\n penalty_mark: \"#ffffff\",\n corner_defensive_mark: \"#ffffff\",\n goal: \"#ffffff\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { SOCCER_LEAGUES, SOCCER_SPECS, type SoccerLeague, type SoccerParamUpdates } from \"../specs/soccer.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n SOCCER_DEFAULT_COLORS,\n SOCCER_DISPLAY_RANGES,\n type SoccerColorKey,\n type SoccerDisplayRange,\n type SoccerFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/**\n * Port of sportyR `geom_soccer()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` also converts the anchors and display limits.\n */\nexport function soccerPitch(\n league: SoccerLeague | (string & {}),\n opts: SurfaceOptions<SoccerParamUpdates, SoccerColorKey, SoccerDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(SOCCER_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown soccer league \"${league}\"; expected one of: ${SOCCER_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase(); // R: tolower() only — no trim\n if (!isOneOf(SOCCER_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown soccer display range \"${opts.displayRange}\"; expected one of: ${SOCCER_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(SOCCER_SPECS[key], opts.updates, []); // soccer has no array fields\n const colors = mergeColors(SOCCER_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: SoccerColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.pitch_units || \"ft\"); // R: pitch_units %or% \"ft\" (custom's \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.pitch_length;\n const W = p.pitch_width;\n const t = p.line_thickness;\n const features: Feature[] = [];\n const add = (\n name: SoccerFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n // Layers, in R's add_feature order (geom-soccer.R 326-545).\n const half = F.halfPitch({ pitchLength: L, pitchWidth: W });\n add(\"half_pitch\", half, col(\"defensive_half_pitch\"), -0.25 * L, 0, false, false);\n add(\"half_pitch\", half, col(\"offensive_half_pitch\"), 0.25 * L, 0, false, false);\n add(\n \"pitch_apron\",\n F.pitchApron({\n pitchLength: L,\n pitchWidth: W,\n pitchApronTouchline: p.pitch_apron_touchline,\n pitchApronGoalLine: p.pitch_apron_goal_line,\n goalDepth: p.goal_depth,\n }),\n col(\"pitch_apron\"),\n 0,\n 0,\n true,\n false,\n { stroke: col(\"pitch_apron\") },\n );\n add(\n \"touchline\",\n F.touchline({ pitchLength: L, featureThickness: t }),\n col(\"touchline\"),\n 0,\n W / 2,\n false,\n true,\n );\n add(\n \"goal_line\",\n F.goalLine({ pitchWidth: W, featureThickness: t }),\n col(\"goal_line\"),\n L / 2,\n 0,\n true,\n false,\n );\n add(\n \"corner_arc\",\n F.cornerArc({ featureRadius: p.corner_arc_radius, featureThickness: t, npoints }),\n col(\"corner_arc\"),\n L / 2 - t / 2,\n W / 2 - t / 2,\n true,\n true,\n );\n add(\n \"halfway_line\",\n F.halfwayLine({ pitchWidth: W, featureThickness: t }),\n col(\"halfway_line\"),\n 0,\n 0,\n false,\n false,\n );\n add(\n \"penalty_box\",\n F.penaltyBox({\n featureRadius: p.penalty_circle_radius,\n featureThickness: t,\n boxLength: p.penalty_box_length,\n penaltyMarkDist: p.penalty_mark_dist,\n goalWidth: p.goal_width,\n goalPostToBoxEdge: p.interior_of_goal_post_to_penalty_box,\n npoints,\n }),\n col(\"penalty_box\"),\n L / 2,\n 0,\n true,\n true,\n );\n add(\n \"goal_box\",\n F.goalBox({\n featureThickness: t,\n boxLength: p.goal_box_length,\n goalWidth: p.goal_width,\n goalPostToBoxEdge: p.interior_of_goal_post_to_goal_box,\n }),\n col(\"goal_box\"),\n L / 2,\n 0,\n true,\n false,\n );\n add(\n \"center_circle\",\n F.centerCircle({ featureRadius: p.center_circle_radius, featureThickness: t, npoints }),\n col(\"center_circle\"),\n 0,\n 0,\n true,\n false,\n );\n add(\n \"penalty_mark\",\n F.penaltyMark({ featureRadius: p.penalty_mark_radius, npoints }),\n col(\"penalty_mark\"),\n L / 2 - p.penalty_mark_dist,\n 0,\n true,\n false,\n );\n add(\n \"center_mark\",\n F.centerMark({ featureRadius: p.center_mark_radius, npoints }),\n col(\"center_mark\"),\n 0,\n 0,\n true,\n false,\n );\n const mark = {\n featureThickness: t,\n depth: p.defensive_mark_depth,\n separationFromLine: p.defensive_mark_separation_from_line ?? 0,\n };\n if (p.touchline_defensive_mark_visible)\n add(\n \"corner_defensive_marks\",\n F.cornerDefensiveMarks({ ...mark, isTouchline: true }),\n col(\"corner_defensive_mark\"),\n L / 2 - p.defensive_mark_distance,\n W / 2,\n true,\n true,\n );\n if (p.goal_line_defensive_mark_visible)\n add(\n \"corner_defensive_marks\",\n F.cornerDefensiveMarks({ ...mark, isGoalLine: true }),\n col(\"corner_defensive_mark\"),\n L / 2,\n W / 2 - p.defensive_mark_distance,\n true,\n true,\n );\n add(\n \"goal\",\n F.goal({ featureThickness: t, goalWidth: p.goal_width, goalDepth: p.goal_depth }),\n col(\"goal\"),\n L / 2 - t,\n 0,\n true,\n false,\n );\n // Display range (geom-soccer.R 547-677) in native units (the +5 is NOT scaled — R); then converted (documented divergence 1), translated, rotated.\n const hpl = L / 2 + 5;\n const hpw = W / 2 + 5;\n const inX = [-(L / 2 + t), L / 2 + t] as const;\n const off = [0, hpl] as const;\n const def = [-hpl, 0] as const;\n const X: Readonly<Record<SoccerDisplayRange, readonly [number, number]>> = {\n full: [-hpl, hpl],\n in_bounds_only: inX,\n \"in bounds only\": inX,\n offense: off,\n offence: off,\n offensivehalfpitch: off,\n offensive_half_pitch: off,\n \"offensive half pitch\": off,\n defense: def,\n defence: def,\n defensivehalfpitch: def,\n defensive_half_pitch: def,\n \"defensive half pitch\": def,\n };\n const inBounds = range === \"in_bounds_only\" || range === \"in bounds only\"; // every other key keeps y = ±hpw\n const [cx, cy] = convertLimits(X[range], inBounds ? [-(W / 2 + t), W / 2 + t] : [-hpw, hpw], from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // R: NULL = none; transparent stands in\n return {\n sport: \"soccer\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createRectangle } from \"../shapes.js\";\n\n/** tennis_frontcourt_half: one quarter of the service area (ad or deuce side of one half), x 0..serviceline. */\nexport const frontcourtHalf = ({\n servicelineDistance = 0,\n singlesWidth = 0,\n}: { servicelineDistance?: number; singlesWidth?: number } = {}): Point[] =>\n createRectangle(0, servicelineDistance, -singlesWidth / 4, singlesWidth / 4);\n\n/** tennis_backcourt: baseline-to-serviceline strip of one half. */\nexport const backcourt = ({\n courtLength = 0,\n servicelineDistance = 0,\n singlesWidth = 0,\n}: { courtLength?: number; servicelineDistance?: number; singlesWidth?: number } = {}): Point[] =>\n createRectangle(0, courtLength / 2 - servicelineDistance, -singlesWidth / 2, singlesWidth / 2);\n\n/** tennis_doubles_alley: one doubles alley strip along the full length. */\nexport const doublesAlley = ({\n courtLength = 0,\n featureThickness = 0,\n}: { courtLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-courtLength / 2, courtLength / 2, 0, featureThickness);\n\n/** tennis_baseline: baseline, drawn inward of the anchor. */\nexport const baseline = ({\n courtWidth = 0,\n featureThickness = 0,\n}: { courtWidth?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-featureThickness, 0, -courtWidth / 2, courtWidth / 2);\n\n/** tennis_sideline: sideline along the full length, drawn inward of the anchor. */\nexport const sideline = ({\n courtLength = 0,\n featureThickness = 0,\n}: { courtLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-courtLength / 2, courtLength / 2, -featureThickness, 0);\n\n/** tennis_court_apron: 9-point half frame — inner court edge then the backstop/sidestop outer edge back to the start. */\nexport function courtApron({\n courtLength = 0,\n courtWidth = 0,\n backstopDistance = 0,\n sidestopDistance = 0,\n}: {\n courtLength?: number;\n courtWidth?: number;\n backstopDistance?: number;\n sidestopDistance?: number;\n} = {}): Point[] {\n const L = courtLength / 2;\n const W = courtWidth / 2;\n return [\n [0, W],\n [L, W],\n [L, -W],\n [0, -W],\n [0, -(W + sidestopDistance)],\n [L + backstopDistance, -(W + sidestopDistance)],\n [L + backstopDistance, W + sidestopDistance],\n [0, W + sidestopDistance],\n [0, W],\n ];\n}\n\n/** tennis_serviceline: the line across the court at the service distance. */\nexport const serviceline = ({\n singlesWidth = 0,\n featureThickness = 0,\n}: { singlesWidth?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-featureThickness, 0, -singlesWidth / 2, singlesWidth / 2);\n\n/** tennis_center_serviceline: line splitting the service boxes. */\nexport const centerServiceline = ({\n centerServicelineLength = 0,\n featureThickness = 0,\n}: { centerServicelineLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(0, centerServicelineLength, -featureThickness / 2, featureThickness / 2);\n\n/** tennis_center_mark: tick at the baseline centre. */\nexport const centerMark = ({\n centerMarkLength = 0,\n featureThickness = 0,\n}: { centerMarkLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-centerMarkLength, 0, -featureThickness / 2, featureThickness / 2);\n\n/** tennis_net: thin rectangle along y at x = 0. */\nexport const net = ({\n featureThickness = 0,\n netLength = 0,\n}: { featureThickness?: number; netLength?: number } = {}): Point[] =>\n createRectangle(-featureThickness / 2, featureThickness / 2, -netLength / 2, netLength / 2);\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `tennis_*` builder (prefix dropped), as used in `PolygonFeature.name` (10). */\nexport const TENNIS_FEATURES = [\n \"court_apron\",\n \"doubles_alley\",\n \"backcourt\",\n \"frontcourt_half\",\n \"baseline\",\n \"sideline\",\n \"serviceline\",\n \"center_serviceline\",\n \"center_mark\",\n \"net\",\n] as const;\nexport type TennisFeature = (typeof TENNIS_FEATURES)[number];\n\n/** Keys of the `switch(tolower(display_range))` in sportyR `geom_tennis()` (R's 19, incl. the `receivice*` typos) plus the 3 correct spellings (documented divergence 4). */\nexport const TENNIS_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"serve\",\n \"serving\",\n \"servicehalf\",\n \"service_half\",\n \"service half\",\n \"servinghalf\",\n \"serving_half\",\n \"serving half\",\n \"receive\",\n \"receiving\",\n \"receivicehalf\",\n \"receivice_half\",\n \"receivice half\",\n \"receivinghalf\",\n \"receiving_half\",\n \"receiving half\",\n \"receivehalf\",\n \"receive_half\",\n \"receive half\",\n] as const;\nexport type TennisDisplayRange = (typeof TENNIS_DISPLAY_RANGES)[number];\n\n/** The 13 argument names of `tennis_features_set_colors()`, in R's declaration order. */\nexport const TENNIS_COLOR_KEYS = [\n \"plot_background\",\n \"baseline\",\n \"singles_sideline\",\n \"doubles_sideline\",\n \"serviceline\",\n \"center_serviceline\",\n \"center_mark\",\n \"ad_court\",\n \"deuce_court\",\n \"backcourt\",\n \"doubles_alley\",\n \"court_apron\",\n \"net\",\n] as const;\nexport type TennisColorKey = (typeof TENNIS_COLOR_KEYS)[number];\n\n/** Defaults of `tennis_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const TENNIS_DEFAULT_COLORS: Readonly<Record<TennisColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n baseline: \"#ffffff\",\n singles_sideline: \"#ffffff\",\n doubles_sideline: \"#ffffff\",\n serviceline: \"#ffffff\",\n center_serviceline: \"#ffffff\",\n center_mark: \"#ffffff\",\n ad_court: \"#395d33\",\n deuce_court: \"#395d33\",\n backcourt: \"#395d33\",\n doubles_alley: \"#395d33\",\n court_apron: \"#395d33\",\n net: \"#d3d3d3\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { TENNIS_LEAGUES, TENNIS_SPECS, type TennisLeague, type TennisParamUpdates } from \"../specs/tennis.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n TENNIS_DEFAULT_COLORS,\n TENNIS_DISPLAY_RANGES,\n type TennisColorKey,\n type TennisDisplayRange,\n type TennisFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\ntype Side = \"serve\" | \"receive\" | \"full\" | \"in\";\nconst SIDE: Readonly<Record<TennisDisplayRange, Side>> = {\n full: \"full\",\n in_bounds_only: \"in\",\n \"in bounds only\": \"in\",\n serve: \"serve\",\n serving: \"serve\",\n servicehalf: \"serve\",\n service_half: \"serve\",\n \"service half\": \"serve\",\n servinghalf: \"serve\",\n serving_half: \"serve\",\n \"serving half\": \"serve\",\n receive: \"receive\",\n receiving: \"receive\",\n receivicehalf: \"receive\",\n receivice_half: \"receive\",\n \"receivice half\": \"receive\",\n receivinghalf: \"receive\",\n receiving_half: \"receive\",\n \"receiving half\": \"receive\",\n receivehalf: \"receive\",\n receive_half: \"receive\",\n \"receive half\": \"receive\",\n};\n\n/**\n * Port of sportyR `geom_tennis()`: one PolygonFeature per ggplot layer R adds, in R's layer order (23 polygons).\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); the correctly spelled\n * `receive(-| )half` keys are accepted (R only has the `receivice*` typos); `units` also converts the anchors and display limits.\n */\nexport function tennisCourt(\n league: TennisLeague | (string & {}),\n opts: SurfaceOptions<TennisParamUpdates, TennisColorKey, TennisDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(TENNIS_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown tennis league \"${league}\"; expected one of: ${TENNIS_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase(); // R: tolower() only, no trim\n if (!isOneOf(TENNIS_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown tennis display range \"${opts.displayRange}\"; expected one of: ${TENNIS_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(TENNIS_SPECS[key], opts.updates, []); // tennis has no array fields\n const colors = mergeColors(TENNIS_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: TennisColorKey): Color => colorAt(colors[k], 0);\n const from = normalizeUnit(p.court_units || \"ft\"); // R: court_units %or% \"ft\" (custom's \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.court_length;\n const S = p.singles_width;\n const D = p.doubles_width;\n const t = p.line_thickness;\n const sl = p.serviceline_distance;\n const features: Feature[] = [];\n const add = (\n name: TennisFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n // Layers, in R's add_feature order (geom-tennis.R 286-480).\n add(\n \"court_apron\",\n F.courtApron({\n courtLength: L,\n courtWidth: D,\n backstopDistance: p.backstop_distance,\n sidestopDistance: p.sidestop_distance,\n }),\n col(\"court_apron\"),\n 0,\n 0,\n true,\n false,\n { stroke: col(\"court_apron\") },\n );\n add(\n \"doubles_alley\",\n F.doublesAlley({ courtLength: L, featureThickness: (D - S) / 2 }),\n col(\"doubles_alley\"),\n 0,\n S / 2,\n false,\n true,\n );\n add(\n \"backcourt\",\n F.backcourt({ courtLength: L, servicelineDistance: sl, singlesWidth: S }),\n col(\"backcourt\"),\n sl,\n 0,\n true,\n false,\n );\n const quarter = F.frontcourtHalf({ servicelineDistance: sl, singlesWidth: S });\n add(\"frontcourt_half\", quarter, col(\"ad_court\"), 0, 0.25 * S, false, false);\n add(\"frontcourt_half\", quarter, col(\"ad_court\"), -sl, -0.25 * S, false, false); // R: `-x %or% 0` parses as (-x) %or% 0\n add(\"frontcourt_half\", quarter, col(\"deuce_court\"), 0, -0.25 * S, false, false);\n add(\"frontcourt_half\", quarter, col(\"deuce_court\"), -sl, 0.25 * S, false, false);\n add(\"baseline\", F.baseline({ courtWidth: D, featureThickness: t }), col(\"baseline\"), L / 2, 0, true, false);\n const side = F.sideline({ courtLength: L, featureThickness: t });\n add(\"sideline\", side, col(\"doubles_sideline\"), 0, D / 2, false, true);\n add(\"sideline\", side, col(\"singles_sideline\"), 0, S / 2, false, true);\n add(\n \"serviceline\",\n F.serviceline({ singlesWidth: S, featureThickness: t }),\n col(\"serviceline\"),\n sl,\n 0,\n true,\n false,\n );\n add(\n \"center_serviceline\",\n F.centerServiceline({ centerServicelineLength: sl, featureThickness: t }),\n col(\"center_serviceline\"),\n 0,\n 0,\n true,\n false,\n );\n add(\n \"center_mark\",\n F.centerMark({ centerMarkLength: p.center_mark_length, featureThickness: t }),\n col(\"center_mark\"),\n L / 2,\n 0,\n true,\n false,\n );\n add(\"net\", F.net({ featureThickness: t, netLength: p.net_length }), col(\"net\"), 0, 0, false, false);\n // Display range (geom-tennis.R 485-560) in native units (the +5 and 1.5 are NOT scaled, as in R); then converted, translated, rotated.\n // R's `%or% 20` / `%or% 10` never fire: the vendored custom spec holds 0, not NULL (measured: custom without backstop = +-44).\n const hcl = L / 2 + p.backstop_distance + 5;\n const hcw = D / 2 + p.sidestop_distance + 5;\n const kind = SIDE[range];\n const xr: readonly [number, number] =\n kind === \"in\"\n ? [-(L / 2 + t), L / 2 + t]\n : kind === \"serve\"\n ? [-hcl, 1.5]\n : kind === \"receive\"\n ? [-1.5, hcl]\n : [-hcl, hcl];\n const yr: readonly [number, number] = kind === \"in\" ? [-(D / 2 + t), D / 2 + t] : [-hcw, hcw];\n const [cx, cy] = convertLimits(xr, yr, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\");\n return {\n sport: \"tennis\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createRectangle } from \"../shapes.js\";\n\n/** 9-point half frame: court edge, then the outer edge `padEnd`/`padSide` beyond it, back to the start. */\nfunction frame(courtLength: number, courtWidth: number, padEnd: number, padSide: number): Point[] {\n const L = courtLength / 2;\n const W = courtWidth / 2;\n return [\n [0, W],\n [L, W],\n [L, -W],\n [0, -W],\n [0, -W - padSide],\n [L + padEnd, -W - padSide],\n [L + padEnd, W + padSide],\n [0, W + padSide],\n [0, W],\n ];\n}\n\n/** volleyball_free_zone: half frame padded by the free zone. */\nexport function freeZone({\n courtLength = 0,\n courtWidth = 0,\n freeZoneEndLine = 0,\n freeZoneSideline = 0,\n}: {\n courtLength?: number;\n courtWidth?: number;\n freeZoneEndLine?: number;\n freeZoneSideline?: number;\n} = {}): Point[] {\n return frame(courtLength, courtWidth, freeZoneEndLine, freeZoneSideline);\n}\n\n/** volleyball_court_apron: half frame padded by the apron. */\nexport function courtApron({\n courtLength = 0,\n courtWidth = 0,\n courtApronEndLine = 0,\n courtApronSideline = 0,\n}: {\n courtLength?: number;\n courtWidth?: number;\n courtApronEndLine?: number;\n courtApronSideline?: number;\n} = {}): Point[] {\n return frame(courtLength, courtWidth, courtApronEndLine, courtApronSideline);\n}\n\n/** volleyball_front_zone: centre line to attack line. */\nexport function frontZone({\n attackLineEdgeToCenterLine = 0,\n courtWidth = 0,\n}: { attackLineEdgeToCenterLine?: number; courtWidth?: number } = {}): Point[] {\n return createRectangle(0, attackLineEdgeToCenterLine, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_backcourt: centred on its own midpoint (the anchor supplies the offset). */\nexport function backcourt({\n attackLineEdgeToCenterLine = 0,\n courtLength = 0,\n courtWidth = 0,\n}: { attackLineEdgeToCenterLine?: number; courtLength?: number; courtWidth?: number } = {}): Point[] {\n const len = courtLength / 2 - attackLineEdgeToCenterLine;\n return createRectangle(-len / 2, len / 2, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_end_line. */\nexport function endLine({\n courtWidth = 0,\n lineThickness = 0,\n}: { courtWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness, 0, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_sideline. */\nexport function sideline({\n courtLength = 0,\n lineThickness = 0,\n}: { courtLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-courtLength / 2, courtLength / 2, -lineThickness, 0);\n}\n\n/** volleyball_attack_line. */\nexport function attackLine({\n courtWidth = 0,\n lineThickness = 0,\n}: { courtWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness, 0, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_center_line. */\nexport function centerLine({\n courtWidth = 0,\n lineThickness = 0,\n}: { courtWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness / 2, lineThickness / 2, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_service_zone_mark. */\nexport function serviceZoneMark({\n serviceZoneMarkLength = 0,\n lineThickness = 0,\n}: { serviceZoneMarkLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(0, serviceZoneMarkLength, -lineThickness, 0);\n}\n\n/** volleyball_substitution_zone_dash: one dash of the dashed extension of the attack line beyond the sideline. */\nexport function substitutionZoneDash({\n dashLength = 0,\n lineThickness = 0,\n}: { dashLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness, 0, 0, dashLength);\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `volleyball_*` builder (prefix dropped), as used in `PolygonFeature.name` (10). */\nexport const VOLLEYBALL_FEATURES = [\n \"free_zone\",\n \"front_zone\",\n \"backcourt\",\n \"court_apron\",\n \"service_zone_mark\",\n \"attack_line\",\n \"substitution_zone_dash\",\n \"center_line\",\n \"end_line\",\n \"sideline\",\n] as const;\nexport type VolleyballFeature = (typeof VOLLEYBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_volleyball()` (13). */\nexport const VOLLEYBALL_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalfcourt\",\n \"offensive_half_court\",\n \"offensive half court\",\n \"defense\",\n \"defence\",\n \"defensivehalfcourt\",\n \"defensive_half_court\",\n \"defensive half court\",\n] as const;\nexport type VolleyballDisplayRange = (typeof VOLLEYBALL_DISPLAY_RANGES)[number];\n\n/** The 12 argument names of `volleyball_features_set_colors()` (colour keys are NOT feature names). */\nexport const VOLLEYBALL_COLOR_KEYS = [\n \"plot_background\",\n \"free_zone\",\n \"front_zone\",\n \"defensive_backcourt\",\n \"offensive_backcourt\",\n \"court_apron\",\n \"end_line\",\n \"sideline\",\n \"attack_line\",\n \"center_line\",\n \"service_zone_mark\",\n \"substitution_zone\",\n] as const;\nexport type VolleyballColorKey = (typeof VOLLEYBALL_COLOR_KEYS)[number];\n\n/** Defaults of `volleyball_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const VOLLEYBALL_DEFAULT_COLORS: Readonly<Record<VolleyballColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n free_zone: \"#d2ab6f\",\n front_zone: \"#d2ab6f\",\n defensive_backcourt: \"#d2ab6f\",\n offensive_backcourt: \"#d2ab6f\",\n court_apron: \"#d2ab6f\",\n end_line: \"#000000\",\n sideline: \"#000000\",\n attack_line: \"#000000\",\n center_line: \"#000000\",\n service_zone_mark: \"#000000\",\n substitution_zone: \"#000000\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n VOLLEYBALL_LEAGUES,\n VOLLEYBALL_SPECS,\n type VolleyballLeague,\n type VolleyballParamUpdates,\n} from \"../specs/volleyball.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n VOLLEYBALL_DEFAULT_COLORS,\n VOLLEYBALL_DISPLAY_RANGES,\n type VolleyballColorKey,\n type VolleyballDisplayRange,\n type VolleyballFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/**\n * Port of sportyR `geom_volleyball()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` also converts the anchors and display limits.\n * Preserved R quirk: the substitution-zone loop repeats `substitution_zone_rep_pattern` times (0 gives none).\n */\nexport function volleyballCourt(\n league: VolleyballLeague | (string & {}),\n opts: SurfaceOptions<VolleyballParamUpdates, VolleyballColorKey, VolleyballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(VOLLEYBALL_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown volleyball league \"${league}\"; expected one of: ${VOLLEYBALL_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(VOLLEYBALL_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown volleyball display range \"${opts.displayRange}\"; expected one of: ${VOLLEYBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(VOLLEYBALL_SPECS[key], opts.updates, []);\n const colors = mergeColors(VOLLEYBALL_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: VolleyballColorKey): Color => colorAt(colors[k], 0);\n const from = normalizeUnit(p.court_units);\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.court_length;\n const W = p.court_width;\n const t = p.line_thickness;\n const a = p.attack_line_edge_to_center_line;\n const features: Feature[] = [];\n const add = (\n name: VolleyballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n // Layers, in R's add_feature order (geom-volleyball.R 243-491).\n const fz = col(\"free_zone\");\n add(\n \"free_zone\",\n F.freeZone({\n courtLength: L,\n courtWidth: W,\n freeZoneEndLine: p.free_zone_end_line,\n freeZoneSideline: p.free_zone_sideline,\n }),\n fz,\n 0,\n 0,\n true,\n false,\n { stroke: fz },\n );\n const fr = col(\"front_zone\");\n add(\"front_zone\", F.frontZone({ attackLineEdgeToCenterLine: a, courtWidth: W }), fr, 0, 0, true, false, {\n stroke: fr,\n });\n const back = F.backcourt({ attackLineEdgeToCenterLine: a, courtLength: L, courtWidth: W });\n const mid = a + (L / 2 - a) / 2;\n add(\"backcourt\", back, col(\"defensive_backcourt\"), -mid, 0, false, false);\n add(\"backcourt\", back, col(\"offensive_backcourt\"), mid, 0, false, false);\n const ap = col(\"court_apron\");\n add(\n \"court_apron\",\n F.courtApron({\n courtLength: L,\n courtWidth: W,\n courtApronEndLine: p.court_apron_end_line,\n courtApronSideline: p.court_apron_sideline,\n }),\n ap,\n 0,\n 0,\n true,\n false,\n { stroke: ap },\n );\n add(\n \"service_zone_mark\",\n F.serviceZoneMark({ serviceZoneMarkLength: p.service_zone_mark_length, lineThickness: t }),\n col(\"service_zone_mark\"),\n L / 2 + p.service_zone_mark_to_end_line,\n W / 2,\n true,\n true,\n );\n add(\n \"attack_line\",\n F.attackLine({ courtWidth: W, lineThickness: t }),\n col(\"attack_line\"),\n a,\n 0,\n true,\n false,\n );\n // R looks the dash up as `court_features$substitution_zone` (`$` partial match resolves to the dash builder).\n let yk = W / 2 + p.substitution_zone_dash_breaks;\n const dash = F.substitutionZoneDash({ dashLength: p.substitution_zone_dash_length, lineThickness: t });\n for (let i = 0; i < p.substitution_zone_rep_pattern; i++) {\n add(\"substitution_zone_dash\", dash, col(\"substitution_zone\"), a, yk, true, true);\n yk += p.substitution_zone_dash_breaks + p.substitution_zone_dash_length;\n }\n add(\n \"center_line\",\n F.centerLine({ courtWidth: W, lineThickness: t }),\n col(\"center_line\"),\n 0,\n 0,\n false,\n false,\n );\n add(\"end_line\", F.endLine({ courtWidth: W, lineThickness: t }), col(\"end_line\"), L / 2, 0, true, false);\n add(\"sideline\", F.sideline({ courtLength: L, lineThickness: t }), col(\"sideline\"), 0, W / 2, false, true);\n // Display range (geom-volleyball.R 493-620): the free zone is the padding (no +5).\n const hcl = L / 2 + p.free_zone_end_line;\n const hcw = W / 2 + p.free_zone_sideline;\n const inX = [-(L / 2 + t), L / 2 + t] as const;\n const off = [0, hcl] as const;\n const def = [-hcl, 0] as const;\n const X: Readonly<Record<VolleyballDisplayRange, readonly [number, number]>> = {\n full: [-hcl, hcl],\n in_bounds_only: inX,\n \"in bounds only\": inX,\n offense: off,\n offence: off,\n offensivehalfcourt: off,\n offensive_half_court: off,\n \"offensive half court\": off,\n defense: def,\n defence: def,\n defensivehalfcourt: def,\n defensive_half_court: def,\n \"defensive half court\": def,\n };\n const inBounds = range === \"in_bounds_only\" || range === \"in bounds only\";\n const [cx, cy] = convertLimits(X[range], inBounds ? [-(W / 2 + t), W / 2 + t] : [-hcw, hcw], from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\");\n return {\n sport: \"volleyball\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import { baseballField } from \"./baseball/field.js\";\nimport {\n BASEBALL_COLOR_KEYS,\n BASEBALL_DISPLAY_RANGES,\n BASEBALL_FEATURES,\n type BaseballColorKey,\n type BaseballDisplayRange,\n} from \"./baseball/types.js\";\nimport { basketballCourt } from \"./basketball/court.js\";\nimport {\n BASKETBALL_COLOR_KEYS,\n BASKETBALL_DISPLAY_RANGES,\n BASKETBALL_FEATURES,\n type BasketballColorKey,\n type BasketballDisplayRange,\n} from \"./basketball/types.js\";\nimport { curlingSheet } from \"./curling/sheet.js\";\nimport {\n CURLING_COLOR_KEYS,\n CURLING_DISPLAY_RANGES,\n CURLING_FEATURES,\n type CurlingColorKey,\n type CurlingDisplayRange,\n} from \"./curling/types.js\";\nimport { UnknownLeagueError } from \"./errors.js\";\nimport { footballField } from \"./football/field.js\";\nimport {\n FOOTBALL_COLOR_KEYS,\n FOOTBALL_DISPLAY_RANGES,\n FOOTBALL_FEATURES,\n type FootballColorKey,\n type FootballDisplayRange,\n} from \"./football/types.js\";\nimport { hockeyRink } from \"./hockey/rink.js\";\nimport {\n HOCKEY_COLOR_KEYS,\n HOCKEY_DISPLAY_RANGES,\n HOCKEY_FEATURES,\n type HockeyColorKey,\n type HockeyDisplayRange,\n} from \"./hockey/types.js\";\nimport { lacrosseField } from \"./lacrosse/field.js\";\nimport {\n LACROSSE_COLOR_KEYS,\n LACROSSE_DISPLAY_RANGES,\n LACROSSE_FEATURES,\n type LacrosseColorKey,\n type LacrosseDisplayRange,\n} from \"./lacrosse/types.js\";\nimport type { Scene, Sport, SurfaceOptions } from \"./scene.js\";\nimport { soccerPitch } from \"./soccer/pitch.js\";\nimport {\n SOCCER_COLOR_KEYS,\n SOCCER_DISPLAY_RANGES,\n SOCCER_FEATURES,\n type SoccerColorKey,\n type SoccerDisplayRange,\n} from \"./soccer/types.js\";\nimport { BASEBALL_LEAGUES, type BaseballLeague, type BaseballParamUpdates } from \"./specs/baseball.js\";\nimport {\n BASKETBALL_LEAGUES,\n type BasketballLeague,\n type BasketballParamUpdates,\n} from \"./specs/basketball.js\";\nimport { CURLING_LEAGUES, type CurlingLeague, type CurlingParamUpdates } from \"./specs/curling.js\";\nimport { FOOTBALL_LEAGUES, type FootballLeague, type FootballParamUpdates } from \"./specs/football.js\";\nimport { HOCKEY_LEAGUES, type HockeyLeague, type HockeyParamUpdates } from \"./specs/hockey.js\";\nimport { LACROSSE_LEAGUES, type LacrosseLeague, type LacrosseParamUpdates } from \"./specs/lacrosse.js\";\nimport { SOCCER_LEAGUES, type SoccerLeague, type SoccerParamUpdates } from \"./specs/soccer.js\";\nimport { TENNIS_LEAGUES, type TennisLeague, type TennisParamUpdates } from \"./specs/tennis.js\";\nimport {\n VOLLEYBALL_LEAGUES,\n type VolleyballLeague,\n type VolleyballParamUpdates,\n} from \"./specs/volleyball.js\";\nimport { tennisCourt } from \"./tennis/court.js\";\nimport {\n TENNIS_COLOR_KEYS,\n TENNIS_DISPLAY_RANGES,\n TENNIS_FEATURES,\n type TennisColorKey,\n type TennisDisplayRange,\n} from \"./tennis/types.js\";\nimport { volleyballCourt } from \"./volleyball/court.js\";\nimport {\n VOLLEYBALL_COLOR_KEYS,\n VOLLEYBALL_DISPLAY_RANGES,\n VOLLEYBALL_FEATURES,\n type VolleyballColorKey,\n type VolleyballDisplayRange,\n} from \"./volleyball/types.js\";\n\n/** Every sport `surface()` accepts, alphabetical. */\nexport const SPORTS = [\n \"baseball\",\n \"basketball\",\n \"curling\",\n \"football\",\n \"hockey\",\n \"lacrosse\",\n \"soccer\",\n \"tennis\",\n \"volleyball\",\n] as const;\n\nconst unknownSport = (sport: string): UnknownLeagueError =>\n new UnknownLeagueError(`Unknown sport \"${sport}\"; expected one of: ${SPORTS.join(\", \")}`);\n\n/** League accepted by `surface(sport, …)` for sport `S` (a generated league name; any string compiles). */\nexport type LeagueOf<S extends Sport> = S extends \"baseball\"\n ? BaseballLeague | (string & {})\n : S extends \"basketball\"\n ? BasketballLeague | (string & {})\n : S extends \"curling\"\n ? CurlingLeague | (string & {})\n : S extends \"football\"\n ? FootballLeague | (string & {})\n : S extends \"hockey\"\n ? HockeyLeague | (string & {})\n : S extends \"lacrosse\"\n ? LacrosseLeague | (string & {})\n : S extends \"soccer\"\n ? SoccerLeague | (string & {})\n : S extends \"tennis\"\n ? TennisLeague | (string & {})\n : S extends \"volleyball\"\n ? VolleyballLeague | (string & {})\n : never;\n\n/** `surface()` options for sport `S`. */\nexport type OptionsOf<S extends Sport> = S extends \"baseball\"\n ? SurfaceOptions<BaseballParamUpdates, BaseballColorKey, BaseballDisplayRange>\n : S extends \"basketball\"\n ? SurfaceOptions<BasketballParamUpdates, BasketballColorKey, BasketballDisplayRange>\n : S extends \"curling\"\n ? SurfaceOptions<CurlingParamUpdates, CurlingColorKey, CurlingDisplayRange>\n : S extends \"football\"\n ? SurfaceOptions<FootballParamUpdates, FootballColorKey, FootballDisplayRange>\n : S extends \"hockey\"\n ? SurfaceOptions<HockeyParamUpdates, HockeyColorKey, HockeyDisplayRange>\n : S extends \"lacrosse\"\n ? SurfaceOptions<LacrosseParamUpdates, LacrosseColorKey, LacrosseDisplayRange>\n : S extends \"soccer\"\n ? SurfaceOptions<SoccerParamUpdates, SoccerColorKey, SoccerDisplayRange>\n : S extends \"tennis\"\n ? SurfaceOptions<TennisParamUpdates, TennisColorKey, TennisDisplayRange>\n : S extends \"volleyball\"\n ? SurfaceOptions<VolleyballParamUpdates, VolleyballColorKey, VolleyballDisplayRange>\n : never;\n\n/**\n * Build a surface scene for any of the nine sports. Options are typed per sport, so a misspelled option, colour key\n * or display range compiles to an error. A runtime `Sport` (or a union) goes through the generic overload; an unknown\n * sport (untyped callers) or league throws `UnknownLeagueError`.\n *\n * @example\n * ```ts\n * import { surface } from \"@sportsdataverse/sporty\";\n * import { toSVG } from \"@sportsdataverse/sporty/svg\";\n *\n * const rink = surface(\"hockey\", \"nhl\", { displayRange: \"offense\" });\n * toSVG(rink, { width: 480, precision: 2, arcs: \"svg\" });\n * ```\n */\nexport function surface(\n sport: \"baseball\",\n league: BaseballLeague | (string & {}),\n opts?: SurfaceOptions<BaseballParamUpdates, BaseballColorKey, BaseballDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"basketball\",\n league: BasketballLeague | (string & {}),\n opts?: SurfaceOptions<BasketballParamUpdates, BasketballColorKey, BasketballDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"curling\",\n league: CurlingLeague | (string & {}),\n opts?: SurfaceOptions<CurlingParamUpdates, CurlingColorKey, CurlingDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"football\",\n league: FootballLeague | (string & {}),\n opts?: SurfaceOptions<FootballParamUpdates, FootballColorKey, FootballDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"hockey\",\n league: HockeyLeague | (string & {}),\n opts?: SurfaceOptions<HockeyParamUpdates, HockeyColorKey, HockeyDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"lacrosse\",\n league: LacrosseLeague | (string & {}),\n opts?: SurfaceOptions<LacrosseParamUpdates, LacrosseColorKey, LacrosseDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"soccer\",\n league: SoccerLeague | (string & {}),\n opts?: SurfaceOptions<SoccerParamUpdates, SoccerColorKey, SoccerDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"tennis\",\n league: TennisLeague | (string & {}),\n opts?: SurfaceOptions<TennisParamUpdates, TennisColorKey, TennisDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"volleyball\",\n league: VolleyballLeague | (string & {}),\n opts?: SurfaceOptions<VolleyballParamUpdates, VolleyballColorKey, VolleyballDisplayRange>,\n): Scene;\nexport function surface<S extends Sport>(sport: S, league: LeagueOf<S>, opts?: OptionsOf<S>): Scene;\nexport function surface(sport: Sport, league: string, opts: object = {}): Scene {\n switch (sport) {\n case \"baseball\":\n return baseballField(league, opts);\n case \"basketball\":\n return basketballCourt(league, opts);\n case \"curling\":\n return curlingSheet(league, opts);\n case \"football\":\n return footballField(league, opts);\n case \"hockey\":\n return hockeyRink(league, opts);\n case \"lacrosse\":\n return lacrosseField(league, opts);\n case \"soccer\":\n return soccerPitch(league, opts);\n case \"tennis\":\n return tennisCourt(league, opts);\n case \"volleyball\":\n return volleyballCourt(league, opts);\n default:\n sport satisfies never;\n throw unknownSport(String(sport));\n }\n}\n\ninterface Discovery {\n leagues: readonly string[];\n features: readonly string[];\n displayRanges: readonly string[];\n colorKeys: readonly string[];\n}\n\nconst DISCOVERY: Readonly<Record<Sport, Discovery>> = {\n baseball: {\n leagues: BASEBALL_LEAGUES,\n features: BASEBALL_FEATURES,\n displayRanges: BASEBALL_DISPLAY_RANGES,\n colorKeys: BASEBALL_COLOR_KEYS,\n },\n basketball: {\n leagues: BASKETBALL_LEAGUES,\n features: BASKETBALL_FEATURES,\n displayRanges: BASKETBALL_DISPLAY_RANGES,\n colorKeys: BASKETBALL_COLOR_KEYS,\n },\n curling: {\n leagues: CURLING_LEAGUES,\n features: CURLING_FEATURES,\n displayRanges: CURLING_DISPLAY_RANGES,\n colorKeys: CURLING_COLOR_KEYS,\n },\n football: {\n leagues: FOOTBALL_LEAGUES,\n features: FOOTBALL_FEATURES,\n displayRanges: FOOTBALL_DISPLAY_RANGES,\n colorKeys: FOOTBALL_COLOR_KEYS,\n },\n hockey: {\n leagues: HOCKEY_LEAGUES,\n features: HOCKEY_FEATURES,\n displayRanges: HOCKEY_DISPLAY_RANGES,\n colorKeys: HOCKEY_COLOR_KEYS,\n },\n lacrosse: {\n leagues: LACROSSE_LEAGUES,\n features: LACROSSE_FEATURES,\n displayRanges: LACROSSE_DISPLAY_RANGES,\n colorKeys: LACROSSE_COLOR_KEYS,\n },\n soccer: {\n leagues: SOCCER_LEAGUES,\n features: SOCCER_FEATURES,\n displayRanges: SOCCER_DISPLAY_RANGES,\n colorKeys: SOCCER_COLOR_KEYS,\n },\n tennis: {\n leagues: TENNIS_LEAGUES,\n features: TENNIS_FEATURES,\n displayRanges: TENNIS_DISPLAY_RANGES,\n colorKeys: TENNIS_COLOR_KEYS,\n },\n volleyball: {\n leagues: VOLLEYBALL_LEAGUES,\n features: VOLLEYBALL_FEATURES,\n displayRanges: VOLLEYBALL_DISPLAY_RANGES,\n colorKeys: VOLLEYBALL_COLOR_KEYS,\n },\n};\n\n/** The discovery tables of `sport`; an unknown sport (untyped callers) throws `UnknownLeagueError`. */\nfunction discovery(sport: string): Discovery {\n if (!(SPORTS as readonly string[]).includes(sport)) throw unknownSport(sport);\n return DISCOVERY[sport as Sport];\n}\n\n/** League names accepted by `surface(sport, …)` (`custom` builds from all-zero defaults). */\nexport function leagues(sport: \"baseball\"): typeof BASEBALL_LEAGUES;\nexport function leagues(sport: \"basketball\"): typeof BASKETBALL_LEAGUES;\nexport function leagues(sport: \"curling\"): typeof CURLING_LEAGUES;\nexport function leagues(sport: \"football\"): typeof FOOTBALL_LEAGUES;\nexport function leagues(sport: \"hockey\"): typeof HOCKEY_LEAGUES;\nexport function leagues(sport: \"lacrosse\"): typeof LACROSSE_LEAGUES;\nexport function leagues(sport: \"soccer\"): typeof SOCCER_LEAGUES;\nexport function leagues(sport: \"tennis\"): typeof TENNIS_LEAGUES;\nexport function leagues(sport: \"volleyball\"): typeof VOLLEYBALL_LEAGUES;\nexport function leagues(sport: Sport): readonly string[];\nexport function leagues(sport: Sport): readonly string[] {\n return discovery(sport).leagues;\n}\n\n/** Feature names a scene of this sport can contain (`Feature.name`). */\nexport function features(sport: \"baseball\"): typeof BASEBALL_FEATURES;\nexport function features(sport: \"basketball\"): typeof BASKETBALL_FEATURES;\nexport function features(sport: \"curling\"): typeof CURLING_FEATURES;\nexport function features(sport: \"football\"): typeof FOOTBALL_FEATURES;\nexport function features(sport: \"hockey\"): typeof HOCKEY_FEATURES;\nexport function features(sport: \"lacrosse\"): typeof LACROSSE_FEATURES;\nexport function features(sport: \"soccer\"): typeof SOCCER_FEATURES;\nexport function features(sport: \"tennis\"): typeof TENNIS_FEATURES;\nexport function features(sport: \"volleyball\"): typeof VOLLEYBALL_FEATURES;\nexport function features(sport: Sport): readonly string[];\nexport function features(sport: Sport): readonly string[] {\n return discovery(sport).features;\n}\n\n/** Values accepted for `SurfaceOptions.displayRange`. */\nexport function displayRanges(sport: \"baseball\"): typeof BASEBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: \"basketball\"): typeof BASKETBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: \"curling\"): typeof CURLING_DISPLAY_RANGES;\nexport function displayRanges(sport: \"football\"): typeof FOOTBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: \"hockey\"): typeof HOCKEY_DISPLAY_RANGES;\nexport function displayRanges(sport: \"lacrosse\"): typeof LACROSSE_DISPLAY_RANGES;\nexport function displayRanges(sport: \"soccer\"): typeof SOCCER_DISPLAY_RANGES;\nexport function displayRanges(sport: \"tennis\"): typeof TENNIS_DISPLAY_RANGES;\nexport function displayRanges(sport: \"volleyball\"): typeof VOLLEYBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: Sport): readonly string[];\nexport function displayRanges(sport: Sport): readonly string[] {\n return discovery(sport).displayRanges;\n}\n\n/** Keys accepted by `SurfaceOptions.colorUpdates`. */\nexport function colorKeys(sport: \"baseball\"): typeof BASEBALL_COLOR_KEYS;\nexport function colorKeys(sport: \"basketball\"): typeof BASKETBALL_COLOR_KEYS;\nexport function colorKeys(sport: \"curling\"): typeof CURLING_COLOR_KEYS;\nexport function colorKeys(sport: \"football\"): typeof FOOTBALL_COLOR_KEYS;\nexport function colorKeys(sport: \"hockey\"): typeof HOCKEY_COLOR_KEYS;\nexport function colorKeys(sport: \"lacrosse\"): typeof LACROSSE_COLOR_KEYS;\nexport function colorKeys(sport: \"soccer\"): typeof SOCCER_COLOR_KEYS;\nexport function colorKeys(sport: \"tennis\"): typeof TENNIS_COLOR_KEYS;\nexport function colorKeys(sport: \"volleyball\"): typeof VOLLEYBALL_COLOR_KEYS;\nexport function colorKeys(sport: Sport): readonly string[];\nexport function colorKeys(sport: Sport): readonly string[] {\n return discovery(sport).colorKeys;\n}\n","/** A data row: column name to value. */\nexport type Row = Record<string, unknown>;\n\n/**\n * A source coordinate frame: maps a data row to surface feet. The functions receive a two-key view\n * `{ x, y }` holding the caller's chosen input columns (see {@link toSurfaceFrame}), not the full row.\n * Return `null` for a missing coordinate, never `NaN`.\n */\nexport interface Frame {\n x: (r: Row) => number | null;\n y: (r: Row) => number | null;\n description: string;\n}\n\n/** `null`/`undefined`/`NaN` to null; numbers as-is; numeric strings parsed (blank gives null); anything else gives null. */\nconst num = (v: unknown): number | null => {\n if (typeof v === \"string\") {\n const s = v.trim();\n if (s === \"\") return null;\n return Number.isNaN(Number(s)) ? null : Number(s);\n }\n return typeof v === \"number\" && !Number.isNaN(v) ? v : null;\n};\n\n/** Centre-origin `w`x`h` pixel canvas (y down) onto a 200x85 ft rink (y up). */\nconst canvasX = (v: unknown, w: number): number | null => {\n const x = num(v);\n return x === null ? null : ((x - w / 2) * 200) / w;\n};\nconst canvasY = (v: unknown, h: number): number | null => {\n const y = num(v);\n return y === null ? null : ((h / 2 - y) * 85) / h;\n};\n\n/**\n * Registry of source frames. sporty's `xTrans`/`yTrans` move the SURFACE; these move the DATA into the\n * surface frame (feet, surface origin).\n */\nexport const FRAMES: {\n /**\n * stats.nba.com legacy shots. The hoop lands at `x = -41.75`, so every shot is on the -x half: pair it with\n * `displayRange: \"defense\"` (as sdvplot's `court_coords` documents).\n */\n readonly \"nba-legacy\": Frame;\n /**\n * stats.nba.com legacy shots with the hoop at the BOTTOM (blazing-the-nets' orientation): `x = x/10`,\n * `y = -41.75 + y/10`, legacy x keeping its sign. The points come out ALREADY in the rotated (screen) frame of a\n * `rotation: 90, displayRange: \"defense\"` scene: draw them on that court as they are and never rotate them again.\n * (`\"nba-legacy\"` instead gives unrotated points.)\n */\n readonly \"nba-legacy-vertical\": Frame;\n /**\n * HockeyTech play-by-play `xLocation`/`yLocation` (PWHL, AHL, OHL, ECHL, ...): a 600x300 canvas, top-left origin,\n * y down, centre ice at (300, 150), onto a 200x85 ft rink (y up). The canvas is stylised rather than true to scale:\n * converted end-zone faceoff dots land at about ±67 ft and ±52 ft against regulation ±69 ft, so the converted feet\n * are approximate.\n */\n readonly hockeytech: Frame;\n readonly \"espn-football-0-100\": Frame;\n} = {\n \"nba-legacy\": {\n x: (r: Row): number | null => {\n const y = num(r.y);\n return y === null ? null : -47 + 5.25 + y / 10;\n },\n y: (r: Row): number | null => {\n const x = num(r.x);\n return x === null ? null : x / 10;\n },\n description:\n \"stats.nba.com shot frame: tenths of a foot, hoop origin, x across the court (sdvplot court_coords; input columns default to x_legacy/y_legacy)\",\n },\n \"nba-legacy-vertical\": {\n x: (r: Row): number | null => {\n const x = num(r.x);\n return x === null ? null : x / 10;\n },\n y: (r: Row): number | null => {\n const y = num(r.y);\n return y === null ? null : -47 + 5.25 + y / 10;\n },\n description:\n \"stats.nba.com shot frame with the hoop at the bottom: points already in a rotation-90 scene's rotated frame (do not rotate them again); x across with its sign kept, y toward half court\",\n },\n hockeytech: {\n x: (r: Row): number | null => canvasX(r.x, 600),\n y: (r: Row): number | null => canvasY(r.y, 300),\n description:\n \"HockeyTech 600x300 canvas, top-left origin -> 200x85 ft centre origin (fastRhockey hockeytech_analytics: x/3-100, 42.5-y*85/300). The canvas is stylised rather than true to scale: converted end-zone faceoff dots land at about ±67 ft and ±52 ft against regulation ±69 ft, so the converted feet are approximate\",\n },\n \"espn-football-0-100\": {\n x: (r: Row): number | null => {\n const x = num(r.x);\n return x === null ? null : x - 50;\n },\n y: (r: Row): number | null => num(r.y),\n description: \"ESPN football: x is a 0-100 yardline -> -50..50 along x; y passes through (yards)\",\n },\n};\n\nexport type FrameName = keyof typeof FRAMES;\n\n/** Origin bottom-left corner of a `length` x `width` surface to centre origin. */\nexport function frameBottomLeft(length: number, width: number): Frame {\n return {\n x: (r) => {\n const x = num(r.x);\n return x === null ? null : x - length / 2;\n },\n y: (r) => {\n const y = num(r.y);\n return y === null ? null : y - width / 2;\n },\n description: `origin bottom-left corner of a ${length} x ${width} surface`,\n };\n}\n\n/**\n * Move data rows into a surface's frame. Returns new rows (inputs untouched) with `surface_x`/`surface_y`\n * (or the names in `out`) added; missing or non-numeric inputs give `null`.\n *\n * `x`/`y` name the input columns (default `x`/`y`, or `x_legacy`/`y_legacy` for `\"nba-legacy\"` and\n * `\"nba-legacy-vertical\"`). The frame sees\n * a view `{ x: row[xCol], y: row[yCol] }`.\n *\n * @example\n * ```ts\n * import { toSurfaceFrame } from \"@sportsdataverse/sporty\";\n *\n * // two stats.nba.com shots (shotchartdetail, Lakers at Nuggets, 2023-10-24, game 0022300061, events 510 and 530):\n * // x_legacy / y_legacy are LOC_X / LOC_Y, tenths of a foot from the hoop\n * toSurfaceFrame(\n * [\n * { x_legacy: -53, y_legacy: 285, team: \"LAL\", player: \"LeBron James\" },\n * { x_legacy: -136, y_legacy: 214, team: \"DEN\", player: \"Nikola Jokić\" },\n * ],\n * { from: \"nba-legacy\" },\n * );\n * ```\n */\nexport function toSurfaceFrame<R extends Row>(\n rows: readonly R[],\n o: { from: FrameName | Frame; x?: string; y?: string; out?: { x?: string; y?: string } },\n): (R & { surface_x: number | null; surface_y: number | null })[] {\n const nba = o.from === \"nba-legacy\" || o.from === \"nba-legacy-vertical\";\n const f: Frame = typeof o.from === \"string\" ? FRAMES[o.from] : o.from;\n const xc = o.x ?? (nba ? \"x_legacy\" : \"x\");\n const yc = o.y ?? (nba ? \"y_legacy\" : \"y\");\n const ox = o.out?.x ?? \"surface_x\";\n const oy = o.out?.y ?? \"surface_y\";\n return rows.map((r) => {\n const view: Row = { x: r[xc], y: r[yc] };\n return { ...r, [ox]: f.x(view), [oy]: f.y(view) } as R & {\n surface_x: number | null;\n surface_y: number | null;\n };\n });\n}\n","import { UnknownLeagueError } from \"../errors.js\";\nimport type { Point, Polygon } from \"../scene.js\";\nimport { BASKETBALL_LEAGUES, BASKETBALL_SPECS, type BasketballLeague } from \"../specs/basketball.js\";\nimport { arcResolution } from \"../surface.js\";\n\n/**\n * The six stats.nba.com shot zones, in blazing-the-nets `main` order (`lib/data/aggregate.ts:242-249`).\n * Above-the-break threes are not split left/centre/right.\n */\nexport const BASKETBALL_ZONES = [\n \"restricted_area\",\n \"paint\",\n \"mid_range\",\n \"corner_3_left\",\n \"corner_3_right\",\n \"above_break_3\",\n] as const;\n/** One of the six shot zones in `BASKETBALL_ZONES`, as `basketballZoneOf` returns it. */\nexport type BasketballZone = (typeof BASKETBALL_ZONES)[number];\n/** Display names (blazing-the-nets `main` `lib/charts/hexShotChart.ts:35-42`). */\nexport const BASKETBALL_ZONE_LABELS: Readonly<Record<BasketballZone, string>> = {\n restricted_area: \"Restricted area\",\n paint: \"Paint (non-RA)\",\n mid_range: \"Mid-range\",\n corner_3_left: \"Left corner 3\",\n corner_3_right: \"Right corner 3\",\n above_break_3: \"Above-the-break 3\",\n};\n\n/** Basket-centred zone frame: `x` across the court (negative = left of a hoop-at-the-bottom chart), `y` toward half court. */\nexport interface ZoneOptions {\n /** Default `\"nba\"`; case-insensitive, any basketball league sporty draws. */\n league?: BasketballLeague | (string & {});\n /** Input units per spec unit: 1 = the league's own units (ft for nba), 10 = stats.nba.com legacy tenths. Default 1. */\n scale?: number;\n}\n\ninterface Geometry {\n restricted: number;\n laneHalf: number;\n freeThrow: number;\n cornerX: number;\n arc: number;\n breakY: number;\n halfWidth: number;\n baseline: number;\n halfCourt: number;\n}\n\n/** The zone lines from the league's own spec (the parameters `basketballCourt` draws and the R oracle checks). */\nfunction geometry(league: string, scale: number): Geometry {\n const key = league.toLowerCase();\n if (!(BASKETBALL_LEAGUES as readonly string[]).includes(key)) {\n throw new UnknownLeagueError(\n `Unknown basketball league \"${league}\"; expected one of: ${BASKETBALL_LEAGUES.join(\", \")}`,\n );\n }\n const p = BASKETBALL_SPECS[key as BasketballLeague];\n const arc = (p.basket_center_to_three_point_arc[0] ?? 0) * scale;\n const cornerX = (p.basket_center_to_corner_three[0] ?? 0) * scale;\n return {\n restricted: (p.restricted_arc_radius ?? 0) * scale, // main court.ts:18 (40 tenths)\n laneHalf: ((p.lane_width[0] ?? 0) / 2) * scale, // court.ts:15 (80): the painted (first) lane\n freeThrow: ((p.lane_length[0] ?? 0) - p.basket_center_to_baseline) * scale, // court.ts:16 (137.5)\n cornerX, // court.ts:19 (220)\n arc, // court.ts:20 (237.5)\n breakY: Math.sqrt(Math.max(0, arc ** 2 - cornerX ** 2)), // court.ts:24 (~89.48)\n halfWidth: (p.court_width / 2) * scale, // court.ts:9 (250)\n baseline: -p.basket_center_to_baseline * scale, // court.ts:10 (-52.5)\n halfCourt: (p.court_length / 2 - p.basket_center_to_baseline) * scale, // court.ts:11 (417.5)\n };\n}\n\n/**\n * The zone a shot falls in. A three is a corner three at or below the corner break, split by the sign of x;\n * a two is in the restricted area within its radius, then the painted lane up to the free-throw line, else\n * mid-range. Two or three comes from `shotValue` (the scorer's call), never the coordinates (blazing-the-nets\n * `main` `lib/data/aggregate.ts:253-267`).\n *\n * @example\n * ```ts\n * import { BASKETBALL_ZONES, basketballZoneOf } from \"@sportsdataverse/sporty\";\n *\n * BASKETBALL_ZONES.indexOf(basketballZoneOf(-224, 20, 3, { scale: 10 })); // a legacy-frame left corner three\n * ```\n */\nexport function basketballZoneOf(\n x: number,\n y: number,\n shotValue: number,\n o: ZoneOptions = {},\n): BasketballZone {\n const g = geometry(o.league ?? \"nba\", o.scale ?? 1);\n if (shotValue === 3) {\n if (y <= g.breakY) return x < 0 ? \"corner_3_left\" : \"corner_3_right\";\n return \"above_break_3\";\n }\n if (Math.hypot(x, y) <= g.restricted) return \"restricted_area\";\n if (Math.abs(x) <= g.laneHalf && y <= g.freeThrow) return \"paint\";\n return \"mid_range\";\n}\n\n/** One zone as a fillable ring with a label anchor (`basketballZones`). */\nexport interface BasketballZoneArea {\n readonly zone: BasketballZone;\n /** One closed ring in the zone frame. `paint` is a keyhole around the restricted area (fill it nonzero or evenodd). */\n readonly points: Polygon;\n /** Label anchor in the zone frame. */\n readonly label: Point;\n /** The corner strips are narrow: set their label vertically. */\n readonly vertical: boolean;\n}\n\n/**\n * The six zones as fillable rings, cut at depth `top` (default the half-court line). Rings and labels are\n * basket-centred, like `basketballZoneOf`'s input: the hoop at the origin, `y` toward half court, in the league's\n * units times `scale`. They are not in a surface frame, so map every point through the SAME frame as the shots\n * before drawing. For stats.nba.com legacy shots in the hoop-at-the-bottom chart, build them with `scale: 10` and\n * map each point `[x, y]` through `FRAMES[\"nba-legacy-vertical\"]` (`f.x({ x, y })`, `f.y({ x, y })`), which\n * gives `[x / 10, y / 10 - 41.75]`: feet, with the hoop moved to (0, -41.75). Unmapped, the zones miss the shots\n * by that hoop offset.\n * Port of blazing-the-nets `main` `lib/data/court.ts:141-175`.\n *\n * @example\n * ```ts\n * import { BASKETBALL_ZONE_LABELS, basketballZones } from \"@sportsdataverse/sporty\";\n *\n * basketballZones(\"nba\", { scale: 10, top: 350 }).map((z) => BASKETBALL_ZONE_LABELS[z.zone]);\n * ```\n */\nexport function basketballZones(\n league: BasketballLeague | (string & {}) = \"nba\",\n o: Omit<ZoneOptions, \"league\"> & { top?: number; arcResolution?: number } = {},\n): readonly BasketballZoneArea[] {\n const g = geometry(league, o.scale ?? 1);\n const top = o.top ?? g.halfCourt;\n const n = arcResolution(o.arcResolution);\n const arc = (r: number, from: number, to: number): Point[] =>\n Array.from({ length: n + 1 }, (_, i): Point => {\n const a = from + ((to - from) * i) / n;\n return [r * Math.cos(a), r * Math.sin(a)];\n });\n const corner = Math.atan2(g.breakY, g.cornerX);\n const { halfWidth: w, baseline: base, laneHalf: lane, freeThrow: ft, cornerX: cx, breakY: b } = g;\n // Restricted area: a full circle, counter-clockwise from its bottom (0, -r), so the paint can bridge to it.\n const rim = arc(g.restricted, -Math.PI / 2, (3 * Math.PI) / 2);\n const lanePts: Point[] = [\n [-lane, base],\n [-lane, ft],\n [lane, ft],\n [lane, base],\n ];\n // Keyhole (court.ts:170 cuts the same hole with evenodd): the lane clockwise, in along x = 0 to the circle's\n // bottom, round it counter-clockwise, back out. Opposite windings, so nonzero and evenodd both leave the hole.\n const paint: Point[] = [...lanePts, [0, base], ...rim, [0, base]];\n const insideThree: Point[] = [[-cx, base], ...arc(g.arc, Math.PI - corner, corner), [cx, base]];\n // Mid-range = inside the arc minus the lane; the lane touches the baseline, so the difference is one ring.\n const midRange: Point[] = [...insideThree, [lane, base], [lane, ft], [-lane, ft], [-lane, base]];\n const cornerStrip = (s: number): Point[] => [\n [s * w, base],\n [s * w, b],\n [s * cx, b],\n [s * cx, base],\n ];\n const aboveBreak: Point[] = [[-w, b], [-w, top], [w, top], [w, b], ...arc(g.arc, corner, Math.PI - corner)];\n // Label anchors come from the same lines, so they sit inside their zone in any league's units: the restricted\n // area's at a fifth of its radius (main court.ts:169 puts it at 8 tenths, the same for nba), the others midway\n // across their zone (main's hard-coded tenths, 95/185/285 and corner y 20, are within 0.7 ft of these for nba);\n // above the break, no further past the arc than the arc is past the free-throw line.\n const r = g.restricted;\n const labelX = (w + cx) / 2;\n const cornerY = (base + b) / 2;\n const breakLabel = (g.arc + Math.min(top, 2 * g.arc - ft)) / 2;\n return [\n { zone: \"restricted_area\", points: rim, label: [0, r / 5], vertical: false },\n { zone: \"paint\", points: paint, label: [0, (r + ft) / 2], vertical: false },\n { zone: \"mid_range\", points: midRange, label: [0, (ft + g.arc) / 2], vertical: false },\n { zone: \"corner_3_left\", points: cornerStrip(-1), label: [-labelX, cornerY], vertical: true },\n { zone: \"corner_3_right\", points: cornerStrip(1), label: [labelX, cornerY], vertical: true },\n { zone: \"above_break_3\", points: aboveBreak, label: [0, breakLabel], vertical: false },\n ];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/transform.ts","../src/shapes.ts","../src/specs/_normalize.ts","../src/units.ts","../src/surface.ts","../src/baseball/features.ts","../src/baseball/types.ts","../src/baseball/field.ts","../src/basketball/features.ts","../src/basketball/types.ts","../src/basketball/court.ts","../src/curling/features.ts","../src/curling/types.ts","../src/curling/sheet.ts","../src/football/features.ts","../src/football/types.ts","../src/football/field.ts","../src/hockey/features.ts","../src/hockey/types.ts","../src/hockey/rink.ts","../src/lacrosse/features.ts","../src/lacrosse/types.ts","../src/lacrosse/field.ts","../src/soccer/features.ts","../src/soccer/types.ts","../src/soccer/pitch.ts","../src/softball/features.ts","../src/softball/types.ts","../src/softball/field.ts","../src/tennis/features.ts","../src/tennis/types.ts","../src/tennis/court.ts","../src/volleyball/features.ts","../src/volleyball/types.ts","../src/volleyball/court.ts","../src/api.ts","../src/frames.ts","../src/basketball/zones.ts"],"names":["end","base","features","r","ex","ey","circle","isOneOf","halfCourt","sideline","raX","edgeX","edgeY","ARRAY_FIELDS","RANGE_SYNONYMS","halfField","endzone","zip","goalLine","goal","defensiveZone","neutralZone","offensiveZone","fieldApron","endLine","boards","centerLine","refereeCrease","goalFrame","playerBenchOutline","playerBenchAreaFill","penaltyBoxOutline","penaltyBoxFill","penaltyBox","goalCircle","centerCircle","battersBox","catchersBox","foulLine","courtApron","centerMark","net","frame","backcourt"],"mappings":";;;;;;AACO,IAAM,OAAA,GAAkB;;;ACCxB,SAAS,YAAA,CAAa,KAAuB,QAAA,EAA2B;AAC7E,EAAA,IAAI,QAAA,KAAa,CAAA,EAAG,OAAO,GAAA,CAAI,IAAI,CAAC,CAAA,KAAa,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAC7D,EAAA,MAAM,CAAA,GAAK,QAAA,GAAW,GAAA,GAAO,IAAA,CAAK,EAAA;AAClC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpB,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpB,EAAA,OAAO,IAAI,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAa,CAAC,CAAA,GAAI,CAAA,GAAI,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AAClE;AAGO,IAAM,aAAA,GAAgB,CAC3B,GAAA,EACA,EAAE,KAAA,GAAQ,OAAO,KAAA,GAAQ,IAAA,EAAK,KAClB,GAAA,CAAI,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAa,CAAC,KAAA,GAAQ,CAAC,CAAA,GAAI,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA,GAAI,CAAC,CAAC;AAalE,SAAS,YAAA,CAAa,QAA0B,CAAA,EAAyB;AAC9E,EAAA,MAAM,EAAE,OAAA,EAAS,EAAA,EAAI,OAAA,EAAS,EAAA,EAAI,MAAA,EAAQ,EAAA,GAAK,CAAA,EAAG,MAAA,EAAQ,EAAA,GAAK,CAAA,EAAG,QAAA,GAAW,GAAE,GAAI,CAAA;AACnF,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAa,CAAC,IAAI,EAAA,GAAK,EAAA,EAAI,CAAA,GAAI,EAAA,GAAK,EAAE,CAAC,CAAA;AACnE,EAAA,MAAM,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAa,CAAC,EAAE,IAAI,EAAA,CAAA,GAAM,EAAA,EAAI,CAAA,GAAI,EAAA,GAAK,EAAE,CAAC,CAAA;AACtE,EAAA,MAAM,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAa,CAAC,EAAE,IAAI,EAAA,CAAA,GAAM,EAAA,EAAI,EAAE,CAAA,GAAI,EAAA,CAAA,GAAM,EAAE,CAAC,CAAA;AACzE,EAAA,MAAM,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAa,CAAC,CAAA,GAAI,KAAK,EAAA,EAAI,EAAE,CAAA,GAAI,EAAA,CAAA,GAAM,EAAE,CAAC,CAAA;AACtE,EAAA,MAAM,MAAA,GACJ,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,QAAA,GAAW,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,GAAI,CAAA,CAAE,WAAW,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,CAAA,CAAE,QAAA,GAAW,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,CAAC,EAAE,CAAA;AACnG,EAAA,OAAO,OAAO,GAAA,CAAI,CAAC,MAAM,YAAA,CAAa,CAAA,EAAG,QAAQ,CAAC,CAAA;AACpD;AAGO,SAAS,UAAU,OAAA,EAA+C;AACvE,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,MAAM,CAAA,GAAI,QAAQ,WAAA,EAAY;AAC9B,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,CAAC,CAAA,EAAG;AAC5B,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AACnB,IAAA,OAAO,MAAM,IAAA,GAAO,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,MAAA;AAAA,EACtC;AACA,EAAA,OAAO,CAAA;AACT;;;AC3CO,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA,GAAS,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,EACd,OAAA,GAAU,GAAA;AAAA,EACV,CAAA,GAAI,CAAA;AAAA,EACJ,KAAA,GAAQ,CAAA;AAAA,EACR,KAAAA,IAAAA,GAAM;AACR,CAAA,GAAoF,EAAC,EAAY;AAC/F,EAAA,MAAM,MAAe,EAAC;AACtB,EAAA,MAAM,EAAA,GAAK,QAAQ,IAAA,CAAK,EAAA;AACxB,EAAA,MAAM,EAAA,GAAKA,OAAM,IAAA,CAAK,EAAA;AACtB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,EAAS,CAAA,EAAA,EAAK;AAChC,IAAA,MAAM,CAAA,GAAI,YAAY,CAAA,GAAI,EAAA,GAAK,MAAO,EAAA,GAAK,EAAA,IAAM,KAAM,OAAA,GAAU,CAAA,CAAA;AACjE,IAAA,GAAA,CAAI,KAAK,CAAC,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAI,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,GAAA;AACT;AAEO,IAAM,eAAA,GAAkB,CAAC,IAAA,EAAc,IAAA,EAAc,MAAc,IAAA,KAA0B;AAAA,EAClG,CAAC,MAAM,IAAI,CAAA;AAAA,EACX,CAAC,MAAM,IAAI,CAAA;AAAA,EACX,CAAC,MAAM,IAAI,CAAA;AAAA,EACX,CAAC,MAAM,IAAI,CAAA;AAAA,EACX,CAAC,MAAM,IAAI;AACb;AAEO,IAAM,YAAA,GAAe,CAAC,IAAA,EAAc,CAAA,GAAW,CAAC,CAAA,EAAG,CAAC,CAAA,KACzD,eAAA,CAAgB,CAAA,CAAE,CAAC,CAAA,GAAI,IAAA,GAAO,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,GAAI,IAAA,GAAO,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,GAAI,IAAA,GAAO,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,GAAI,IAAA,GAAO,CAAC;AAE7E,IAAM,aAAA,GAAgB,CAAC,CAAA,EAAW,CAAA,EAAW,IAAW,CAAC,CAAA,EAAG,CAAC,CAAA,KAAe;AAAA,EACjF,CAAC,EAAE,CAAC,CAAA,GAAI,IAAI,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EACnB,CAAC,EAAE,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,EACnB,CAAC,EAAE,CAAC,CAAA,GAAI,IAAI,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EACnB,CAAC,EAAE,CAAC,CAAA,EAAG,EAAE,CAAC,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,EACnB,CAAC,EAAE,CAAC,CAAA,GAAI,IAAI,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC;AACrB;AAEO,SAAS,YAAA,CAAa,SAAA,EAAmB,QAAA,EAAkB,WAAA,GAAc,EAAA,EAAa;AAC3F,EAAA,MAAM,CAAA,GAAI,SAAA;AACV,EAAA,MAAM,CAAA,GAAI,QAAA;AACV,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,IAAI,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,GAAG,CAAC,CAAA;AAC1G,EAAA,MAAM,EAAA,GAAK;AAAA,IACT,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA,GAAI,CAAA;AAAA,IACJ,CAAC,CAAA,GAAI,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,CAAA;AAAA,IACL,CAAC,CAAA,GAAI,CAAA;AAAA,IACL,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA,GAAI;AAAA,GACN;AACA,EAAA,OAAO,YAAA;AAAA,IACL,EAAA,CAAG,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAa,CAAC,CAAA,EAAG,EAAA,CAAG,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA;AAAA,IACvC;AAAA,GACF;AACF;;;AChEO,IAAM,OAAA,GAAU,CAAI,CAAA,EAAiC,QAAA,GAAyB,EAAC,KAAoB,CAAA,KAAM,MAAA,GAAY,QAAA,GAAW,MAAM,OAAA,CAAQ,CAAC,CAAA,GAAK,CAAA,GAAqB,CAAC,CAAM,CAAA;;;ACIhL,IAAM,WAAA,GAA+C;AAAA,EAC1D,IAAI,CAAA,GAAI,KAAA;AAAA,EACR,IAAI,CAAA,GAAI,KAAA;AAAA,EACR,GAAG,CAAA,GAAI,MAAA;AAAA,EACP,IAAI,CAAA,GAAI,EAAA;AAAA,EACR,EAAA,EAAI,CAAA;AAAA,EACJ,EAAA,EAAI;AACN;AAGA,IAAM,UAAA,GAA8C;AAAA,EAClD,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,GAAA;AAAA,EACR,MAAA,EAAQ,GAAA;AAAA,EACR,KAAA,EAAO,GAAA;AAAA,EACP,KAAA,EAAO,GAAA;AAAA,EACP,KAAA,EAAO,IAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,MAAA,EAAQ,IAAA;AAAA,EACR,IAAA,EAAM,IAAA;AAAA,EACN,WAAA,EAAa,IAAA;AAAA,EACb,WAAA,EAAa,IAAA;AAAA,EACb,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY,IAAA;AAAA,EACZ,WAAA,EAAa,IAAA;AAAA,EACb,WAAA,EAAa,IAAA;AAAA,EACb,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY;AACd,CAAA;AAGO,SAAS,cAAc,CAAA,EAAkB;AAC9C,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY;AAChC,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,WAAA,EAAa,CAAC,GAAG,OAAO,CAAA;AAC1C,EAAA,IAAI,OAAO,MAAA,CAAO,UAAA,EAAY,CAAC,CAAA,EAAG,OAAO,WAAW,CAAC,CAAA;AACrD,EAAA,MAAM,IAAI,gBAAA;AAAA,IACR,CAAA,cAAA,EAAiB,CAAC,CAAA,oBAAA,EAAuB,MAAA,CAAO,KAAK,WAAW,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,gCAAA;AAAA,GAC9E;AACF;AAEA,IAAM,OAAA,GAAU,CAAC,CAAA,EAAW,IAAA,EAAa,EAAA,KACvC,IAAA,KAAS,EAAA,GAAK,CAAA,GAAK,CAAA,GAAI,WAAA,CAAY,IAAI,CAAA,GAAK,YAAY,EAAE,CAAA;AAErD,IAAM,YAAA,GAAe,CAAC,KAAA,EAAe,IAAA,EAAa,EAAA,KACvD,OAAA,CAAQ,KAAA,EAAO,aAAA,CAAc,IAAI,CAAA,EAAG,aAAA,CAAc,EAAE,CAAC;AAEhD,SAAS,aAAA,CAAc,GAAA,EAAuB,IAAA,EAAa,EAAA,EAAoB;AACpF,EAAA,MAAM,CAAA,GAAI,cAAc,IAAI,CAAA;AAC5B,EAAA,MAAM,CAAA,GAAI,cAAc,EAAE,CAAA;AAC1B,EAAA,OAAO,IAAI,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,MAAa,CAAC,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,OAAA,CAAQ,GAAG,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AACxE;;;AC7CA,IAAM,QAAA,GAAW,CAAC,CAAA,KAAwB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAC,CAAA;AAMzE,SAAS,WAAA,CACdC,KAAAA,EACA,OAAA,EACA,WAAA,EACG;AACH,EAAA,MAAM,GAAA,GAAgC,EAAE,GAAGA,KAAAA,EAAK;AAChD,EAAA,KAAA,MAAW,KAAK,MAAA,CAAO,IAAA,CAAK,OAAA,IAAW,EAAE,CAAA,EAAkB;AACzD,IAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AACrB,IAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM;AACnC,IAAA,MAAM,IAAI,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA;AACjD,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA,CAASA,KAAAA,CAAK,CAAC,CAAC,CAAA,IAAK,CAAC,QAAA,CAAS,CAAC,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,WAAA,CACd,UACA,OAAA,EACqC;AACrC,EAAA,MAAM,GAAA,GAA2C,EAAE,GAAG,QAAA,EAAS;AAC/D,EAAA,KAAA,MAAW,KAAK,MAAA,CAAO,IAAA,CAAK,OAAA,IAAW,EAAE,CAAA,EAAU;AACjD,IAAA,MAAM,CAAA,GAAI,UAAU,CAAC,CAAA;AACrB,IAAA,IAAI,MAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,cAAc,CAAA,EAA+B;AAC3D,EAAA,MAAM,IAAI,CAAA,IAAK,GAAA;AACf,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,CAAA,GAAI,CAAA,EAAG,MAAM,IAAI,WAAA,CAAY,CAAA,2CAAA,EAA8C,CAAC,CAAA,CAAE,CAAA;AAC1G,EAAA,OAAO,CAAA;AACT;AAGO,IAAM,OAAA,GAAU,CAAC,CAAA,EAA6B,CAAA,KACnD,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAK,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,MAAM,CAAA,IAAK,WAAA;AAa3C,SAAS,UAAA,CACdC,SAAAA,EACA,IAAA,EACA,MAAA,EACA,IAAA,EACA,SAAA,EACA,EAAE,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,MAAA,EAAO,GAAoB,EAAC,EAClD;AACN,EAAA,MAAM,CAAC,IAAA,EAAM,EAAE,IAAI,KAAA,IAAS,CAAC,MAAM,IAAI,CAAA;AACvC,EAAA,MAAM,CAAA,GAAI;AAAA,IACR,GAAG,SAAA;AAAA,IACH,OAAA,EAAS,YAAA,CAAa,SAAA,CAAU,OAAA,EAAS,MAAM,EAAE,CAAA;AAAA,IACjD,OAAA,EAAS,YAAA,CAAa,SAAA,CAAU,OAAA,EAAS,MAAM,EAAE;AAAA,GACnD;AACA,EAAA,MAAM,CAAA,GAAI,UAAU,MAAM,CAAA;AAC1B,EAAA,KAAA,MAAW,IAAA,IAAQ,aAAa,aAAA,CAAc,MAAA,EAAQ,MAAM,EAAE,CAAA,EAAG,CAAC,CAAA,EAAG;AACnE,IAAAA,UAAS,IAAA,CAAK;AAAA,MACZ,IAAA,EAAM,SAAA;AAAA,MACN,IAAA;AAAA,MACA,QAAQA,SAAAA,CAAS,MAAA;AAAA,MACjB,IAAA;AAAA,MACA,MAAA,EAAQ,IAAA;AAAA,MACR,GAAI,CAAA,KAAM,MAAA,GAAY,EAAC,GAAI,EAAE,QAAQ,CAAA,EAAE;AAAA,MACvC,GAAI,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAU;AAAA,MAC/C,GAAI,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA;AAAO,KAC1C,CAAA;AAAA,EACH;AACF;AAGO,IAAM,KAAA,GAAQ,CAAI,CAAA,EAA6B,CAAA,KACpD,CAAA,KAAM,MAAA,IAAa,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AAGnC,SAAS,MACd,IAAA,EACoC;AACpC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAC,CAAA;AAC9D,EAAA,OAAO,KAAA,CAAM,IAAA;AAAA,IACX,EAAE,QAAQ,CAAA,EAAE;AAAA,IACZ,CAAC,GAAG,CAAA,KACF,MAAA,CAAO,YAAY,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAE,MAAM,CAAC,CAAC,CAAC;AAAA,GAGjF;AACF;AAGO,SAAS,OAAA,CACdA,SAAAA,EACA,IAAA,EACA,CAAA,EACM;AACN,EAAAA,SAAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQA,SAAAA,CAAS,MAAA,EAAQ,GAAG,CAAA,EAAG,CAAA;AACrE;AAGO,SAAS,WAAA,CAAY,IAAA,EAAc,IAAA,EAAc,QAAA,EAAiC;AACvF,EAAA,MAAM,GAAA,GAAM,YAAA;AAAA,IACV,eAAA,CAAgB,KAAK,GAAA,CAAI,GAAG,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,GAAG,IAAI,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAG,IAAI,CAAC,CAAA;AAAA,IAC1F;AAAA,GACF;AACA,EAAA,MAAM,KAAK,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAC,CAAA;AAC9B,EAAA,MAAM,KAAK,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAC,CAAA;AAC9B,EAAA,OAAO,CAAC,KAAK,GAAA,CAAI,GAAG,EAAE,CAAA,EAAG,IAAA,CAAK,IAAI,GAAG,EAAE,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAA,EAAG,KAAK,GAAA,CAAI,GAAG,EAAE,CAAC,CAAA;AAC5E;AAMO,IAAM,aAAA,GAAgB,CAC3B,IAAA,EACA,IAAA,EACA,MACA,EAAA,KAC+C;AAAA,EAC/C,CAAC,YAAA,CAAa,IAAA,CAAK,CAAC,GAAG,IAAA,EAAM,EAAE,CAAA,EAAG,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,EACjE,CAAC,YAAA,CAAa,IAAA,CAAK,CAAC,GAAG,IAAA,EAAM,EAAE,CAAA,EAAG,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,EAAM,EAAE,CAAC;AACnE,CAAA;;;AC1IA,IAAM,SAAS,CAAC,EAAE,OAAA,EAAS,GAAG,GAAE,KAC9B,OAAA,KAAY,MAAA,GAAY,YAAA,CAAa,CAAC,CAAA,GAAI,YAAA,CAAa,EAAE,GAAG,CAAA,EAAG,SAAS,CAAA;AAGnE,IAAM,gBAAA,GAAmB,CAAC,CAAA,EAAW,CAAA,EAAW,CAAA,KAAgC;AACrF,EAAA,MAAM,IAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,GAAI,IAAI,CAAC,CAAA;AACrC,EAAA,OAAO,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,KAAK,CAAC,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,CAAA;AAChD,CAAA;AAGO,SAAS,WAAA,CAAY;AAAA,EAC1B,qBAAA,GAAwB,CAAA;AAAA,EACxB,mBAAA,GAAsB,CAAA;AAAA,EACtB,qBAAA,GAAwB,CAAA;AAAA,EACxB,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,MAAM,OAAA,GAAU,gBAAA;AAAA,IACd,CAAA;AAAA,IACA,CAAA,GAAI,mBAAA;AAAA,IACJ,mBAAA,IAAuB,IAAI,qBAAA,IAAyB;AAAA,GACtD;AACA,EAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,GAAI,CAAC,KAAK,MAAA,CAAO,GAAA;AACjD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,GAAA,GAAM,qBAAqB,CAAA;AACpD,EAAA,MAAM,OAAA,GAAU,0BAA0B,CAAA,IAAK,MAAA,CAAO,MAAM,MAAM,CAAA,GAAI,CAAA,GAAI,MAAA,GAAS,IAAA,CAAK,EAAA;AACxF,EAAA,MAAM,OAAA,GAAU,gBAAA;AAAA,IACd,CAAA;AAAA,IACA,EAAA,GAAK,sBAAsB,CAAA,GAAI,qBAAA;AAAA,IAC/B,uBAAuB,CAAA,GACrB,CAAA,GAAI,sBAAsB,qBAAA,GAC1B,qBAAA,IAAyB,IACzB,gBAAA,IAAoB;AAAA,GACxB;AACA,EAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,GAAI,CAAC,KAAK,MAAA,CAAO,GAAA;AACjD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,GAAA,GAAM,gBAAgB,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,qBAAqB,CAAA,IAAK,MAAA,CAAO,MAAM,MAAM,CAAA,GAAI,IAAA,GAAO,MAAA,GAAS,IAAA,CAAK,EAAA;AACtF,EAAA,OAAO;AAAA,IACL,GAAG,MAAA,CAAO;AAAA,MACR,MAAA,EAAQ,CAAC,CAAA,EAAG,qBAAqB,CAAA;AAAA,MACjC,KAAA,EAAO,OAAA;AAAA,MACP,KAAK,CAAA,GAAI,OAAA;AAAA,MACT,CAAA,EAAG,gBAAA;AAAA,MACH;AAAA,KACD,CAAA;AAAA,IACD,GAAG,MAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,OAAA,EAAS,KAAK,CAAA,GAAI,OAAA,EAAS,CAAA,EAAG,qBAAA,EAAuB,SAAS;AAAA,GACnG;AACF;AAGO,SAAS,YAAA,CAAa;AAAA,EAC3B,qBAAA,GAAwB,CAAA;AAAA,EACxB,sBAAA,GAAyB,CAAA;AAAA,EACzB,gBAAA,GAAmB,CAAA;AAAA,EACnB,wBAAA,GAA2B,CAAA;AAAA,EAC3B;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,MAAM,CAAA,GAAI,sBAAA;AACV,EAAA,MAAM,EAAA,GAAK,qBAAA;AACX,EAAA,MAAM,OAAA,GAAU,iBAAiB,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,IAAK,CAAA,GAAI,MAAM,CAAC,CAAA;AAC3D,EAAA,MAAM,MAAM,OAAA,CAAQ,IAAA,CAAK,CAACC,EAAAA,KAAMA,EAAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,OAAO,CAAA,GAAI,CAAA,GAAI,KAAK,IAAA,CAAK,GAAA,GAAM,EAAE,CAAA,GAAI,IAAA,CAAK,EAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,iBAAiB,CAAA,EAAG,EAAA,GAAK,GAAG,CAAA,IAAK,CAAA,GAAI,MAAM,CAAC,CAAA;AAE5D,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,CAACA,OAAMA,EAAAA,GAAI,CAAC,CAAA,GAAI,OAAA,CAAQ,IAAA,CAAK,CAACA,EAAAA,KAAMA,EAAAA,GAAI,CAAC,CAAA,GAAI,EAAA;AACtE,EAAA,MAAM,OAAA,GAAU,EAAA,KAAO,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,IAAA,CAAA,CAAM,GAAA,IAAO,MAAA,CAAO,GAAA,IAAO,EAAE,CAAA,GAAI,IAAA,CAAK,EAAA;AAC1E,EAAA,MAAM,EAAA,GAAK,gBAAA;AACX,EAAA,MAAM,OAAA,GAAU,gBAAA;AAAA,IACd,CAAA;AAAA,IACA,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ,EAAA;AAAA,IACzB,CAAA,IAAK,IAAI,IAAA,CAAK,KAAA,GAAQ,IAAI,EAAA,GAAK,EAAA,IAAM,IAAI,wBAAA,IAA4B;AAAA,GACvE;AACA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,CAACA,OAAMA,EAAAA,GAAI,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAC,KAAK,MAAA,CAAO,GAAA;AAC1E,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,EAAA,GAAK,KAAK,GAAA,CAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAC,CAAA;AACzD,EAAA,MAAM,EAAA,GAAK,6BAA6B,CAAA,GAAI,CAAA,GAAI,KAAK,IAAA,CAAK,OAAA,GAAU,wBAAwB,CAAA,GAAI,IAAA,CAAK,EAAA;AACrG,EAAA,MAAM,CAAA,GAAI,wBAAA;AACV,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,SAAS,GAAA,EAAK,OAAA,EAAS,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AACpF,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,GAAG,MAAA,CAAO;AAAA,MACR,MAAA,EAAQ,CAAC,EAAA,GAAK,IAAA,CAAK,IAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAA,EAAG,KAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAC,CAAA;AAAA,MAC/D,OAAO,CAAA,GAAI,EAAA;AAAA,MACX,KAAK,CAAA,GAAI,EAAA;AAAA,MACT,CAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACD,GAAG,MAAA,CAAO,EAAE,QAAQ,CAAC,CAAA,EAAG,KAAK,IAAA,CAAK,KAAK,CAAA,EAAG,KAAA,EAAO,MAAM,EAAA,EAAI,GAAA,EAAK,MAAM,EAAA,EAAI,CAAA,EAAG,SAAS,CAAA;AAAA,IACtF,GAAG,MAAA,CAAO;AAAA,MACR,QAAQ,CAAC,EAAA,GAAK,IAAA,CAAK,GAAA,CAAK,IAAI,IAAA,CAAK,EAAA,GAAM,CAAC,CAAA,EAAG,KAAK,IAAA,CAAK,GAAA,CAAK,IAAI,IAAA,CAAK,EAAA,GAAM,CAAC,CAAC,CAAA;AAAA,MAC3E,KAAA,EAAO,KAAK,CAAA,GAAI,EAAA,CAAA;AAAA,MAChB,GAAA,EAAK,KAAK,CAAA,GAAI,EAAA,CAAA;AAAA,MACd,CAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACD,GAAG,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC;AAAA,GACpB;AACF;AAGO,IAAM,gBAAgB,CAAC;AAAA,EAC5B,mBAAA,GAAsB,CAAA;AAAA,EACtB;AACF,CAAA,GAA4C,EAAC,KAC3C,MAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,mBAAA,EAAqB,SAAS,CAAA;AAGvE,IAAM,SAAA,GAAY,CAAC,EAAE,mBAAA,EAAqB,IAAI,CAAA,EAAE,GAAsC,EAAC,KAAe;AAAA,EAC3G,CAAC,GAAG,CAAC,CAAA;AAAA,EACL,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,EACb,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,EACT,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,EACV,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA,EACd,CAAC,GAAG,CAAC;AACP,CAAA;AAGO,SAAS,IAAA,CAAK;AAAA,EACnB,cAAA,GAAiB,CAAA;AAAA,EACjB,WAAA,GAAc,KAAA;AAAA,EACd,YAAA,GAAe;AACjB,CAAA,GAAgF,EAAC,EAAY;AAC3F,EAAA,MAAM,GAAA,GAAO,cAAA,GAAiB,IAAA,CAAK,KAAA,GAAS,CAAA;AAC5C,EAAA,MAAM,MAAM,WAAA,GAAc,CAAC,GAAA,GAAM,CAAA,KAAM,eAAe,GAAA,GAAM,CAAA,CAAA;AAC5D,EAAA,OAAO,YAAA,CAAa,aAAa,cAAA,EAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAa,CAAC,CAAA,GAAI,EAAA,EAAI,CAAC,CAAC,CAAA;AAClG;AAGO,IAAM,gBAAgB,CAAC;AAAA,EAC5B,qBAAqB,CAAA,GAAI,CAAA;AAAA,EACzB,oBAAoB,CAAA,GAAI;AAC1B,CAAA,GAAmE,OACjE,eAAA,CAAgB,CAAC,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAG9B,SAAS,UAAA,CAAW;AAAA,EACzB,gBAAA,GAAmB,CAAA;AAAA,EACnB,eAAA,GAAkB,CAAA;AAAA,EAClB,cAAA,GAAiB,CAAA;AAAA,EACjB,qBAAqB,CAAA,GAAI;AAC3B,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,eAAA,GAAkB,CAAA;AAC5B,EAAA,MAAM,IAAI,gBAAA,GAAmB,CAAA;AAE7B,EAAA,MAAM,IAAA,GAAgB;AAAA,IACpB,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IACd,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACb,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,GAAG,gBAAgB;AAAA,GACtB;AACA,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,aAAA,CAAc,IAAA,EAAM,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,CAAE,GAAA;AAAA,IACtE,CAAC,CAAC,CAAA,EAAG,CAAC,MAAa,CAAC,CAAA,EAAG,IAAI,cAAc;AAAA,GAC3C;AACF;AAGO,SAAS,WAAA,CAAY;AAAA,EAC1B,kBAAkB,KAAA,GAAQ,CAAA;AAAA,EAC1B,kBAAkB,KAAA,GAAQ,CAAA;AAAA,EAC1B,gBAAA,GAAmB,CAAA;AAAA,EACnB,gBAAgB,GAAA,GAAM,CAAA;AAAA,EACtB,gBAAA,GAAmB,WAAA;AAAA,EACnB,sBAAsB,CAAA,GAAI,CAAA;AAAA,EAC1B,uBAAuB,EAAA,GAAK;AAC9B,CAAA,GAQI,EAAC,EAAY;AACf,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9B,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9B,EAAA,MAAM,IAAI,KAAA,GAAQ,CAAA;AAClB,EAAA,MAAM,KAAK,gBAAA,GAAmB,CAAA;AAC9B,EAAA,MAAM,OAAO,MAET;AAAA,IACE,CAAC,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACP,CAAC,CAAA,EAAG,CAAC,KAAK,CAAA;AAAA,IACV,CAAC,CAAC,CAAA,EAAG,CAAC,KAAK,CAAA;AAAA,IACX,CAAC,CAAC,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACR,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACZ,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAAA,IACnB,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAAA,IAClB,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACX,CAAC,CAAA,EAAG,CAAC,EAAE;AAAA,GACT,CACA,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAa,CAAC,CAAA,EAAG,CAAA,GAAI,GAAG,CAAC,CAAA;AACvC,EAAA,MAAM,OAAO,MAAe;AAC1B,IAAA,MAAM,GAAA,GAAM,CAAC,EAAA,GAAK,GAAA;AAClB,IAAA,MAAM,KAAK,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,CAAC,CAAA,GAAI,CAAA,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,GAAQ,CAAA;AAC1B,IAAA,MAAM,WAAW,CAAC,KAAA;AAClB,IAAA,MAAM,UAAU,CAAA,IAAK,IAAA,CAAK,IAAI,EAAA,GAAK,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,GAAI,CAAA,CAAA;AACpC,IAAA,OAAO;AAAA,MACL,CAAC,EAAA,GAAK,CAAA,EAAG,GAAG,CAAA;AAAA,MACZ,CAAC,OAAA,GAAU,CAAA,GAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AAAA,MAC9B,CAAC,CAAC,OAAA,GAAU,CAAA,GAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AAAA,MAC/B,CAAC,CAAC,EAAA,GAAK,CAAA,EAAG,GAAG,CAAA;AAAA,MACb,CAAC,CAAC,EAAA,GAAK,CAAA,GAAI,GAAG,GAAG,CAAA;AAAA,MACjB,CAAC,CAAC,OAAA,GAAU,IAAI,CAAA,GAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AAAA,MACnC,CAAC,OAAA,GAAU,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AAAA,MAClC,CAAC,EAAA,GAAK,CAAA,GAAI,CAAA,EAAG,GAAG,CAAA;AAAA,MAChB,CAAC,EAAA,GAAK,CAAA,EAAG,GAAG;AAAA,KACd;AAAA,EACF,CAAA;AACA,EAAA,QAAQ,gBAAA,CAAiB,aAAY;AAAG,IACtC,KAAK,MAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL,KAAK,aAAA;AACH,MAAA,OAAO,IAAA,EAAK;AAAA,IACd,KAAK,MAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL,KAAK,aAAA;AACH,MAAA,OAAO,IAAA,EAAK;AAAA,IACd;AACE,MAAA,MAAM,IAAI,WAAA,CAAY,CAAA,EAAG,gBAAgB,CAAA,2CAAA,CAA6C,CAAA;AAAA;AAE5F;AAGO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA,GAAW,KAAA;AAAA,EACX,YAAA,GAAe,CAAA;AAAA,EACf,gBAAA,GAAmB,CAAA;AAAA,EACnB,eAAA,GAAkB,CAAA;AAAA,EAClB,cAAA,GAAiB,CAAA;AAAA,EACjB,yBAAA,GAA4B,CAAA;AAAA,EAC5B,mBAAmB,CAAA,GAAI;AACzB,CAAA,GAQI,EAAC,EAAY;AACf,EAAA,MAAM,UAAU,eAAA,GAAkB,yBAAA;AAClC,EAAA,MAAM,OAAA,GAAU,mBAAmB,CAAA,GAAI,cAAA;AACvC,EAAA,MAAM,QAAQ,OAAA,GAAU,OAAA,GAAU,OAAA,GAAU,OAAA,GAAU,iBAAiB,CAAA,GAAI,CAAA;AAC3E,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAMC,MAAK,YAAA,GAAe,IAAA,CAAK,IAAK,CAAA,GAAI,IAAA,CAAK,KAAM,CAAC,CAAA;AACpD,IAAA,MAAMC,MAAK,YAAA,GAAe,IAAA,CAAK,IAAK,CAAA,GAAI,IAAA,CAAK,KAAM,CAAC,CAAA;AACpD,IAAA,OAAO;AAAA,MACL,CAAC,CAAC,KAAA,EAAO,KAAK,CAAA;AAAA,MACd,CAACD,KAAIC,GAAE,CAAA;AAAA,MACP,CAACD,GAAAA,GAAK,CAAA,EAAGC,GAAE,CAAA;AAAA,MACX,CAAC,CAAC,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA;AAAA,MAClB,CAAC,CAAC,KAAA,EAAO,KAAK;AAAA,KAChB;AAAA,EACF;AACA,EAAA,MAAM,KAAK,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9C,EAAA,MAAM,KAAK,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,CAAC,OAAO,KAAK,CAAA;AAAA,IACb,CAAC,IAAI,EAAE,CAAA;AAAA,IACP,CAAC,EAAA,GAAK,CAAA,EAAG,EAAE,CAAA;AAAA,IACX,CAAC,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA;AAAA,IACjB,CAAC,OAAO,KAAK;AAAA,GACf;AACF;AAGO,SAAS,WAAA,CAAY;AAAA,EAC1B,kBAAkB,CAAA,GAAI,CAAA;AAAA,EACtB,mBAAmB,CAAA,GAAI,CAAA;AAAA,EACvB,0BAA0B,CAAA,GAAI,CAAA;AAAA,EAC9B,sBAAsB,CAAA,GAAI;AAC5B,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,IAAA,CAAK,KAAA;AACf,EAAA,OAAO;AAAA,IACL,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACb,EAAE,CAAA,GAAI,CAAA,IAAK,CAAA,EAAA,CAAI,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA,IACzB,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA,IAAK,IAAI,CAAA,GAAI,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA,IACjC,CAAA,CAAE,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,IAAK,IAAI,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,IAAK,CAAC,CAAA;AAAA,IACzC,CAAA,CAAE,IAAI,CAAA,IAAK,CAAA,EAAA,CAAI,IAAI,CAAA,GAAI,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA,IACjC,EAAE,CAAA,GAAI,CAAA,IAAK,CAAA,EAAA,CAAI,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA,IACzB,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC;AAAA,GACf;AACF;;;ACvTO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,cAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAA0B,CAAC,MAAA,EAAQ,SAAS;AAIlD,IAAM,mBAAA,GAAsB;AAAA,EACjC,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAAqE;AAAA,EAChF,eAAA,EAAiB,SAAA;AAAA,EACjB,YAAA,EAAc,SAAA;AAAA,EACd,aAAA,EAAe,SAAA;AAAA,EACf,cAAA,EAAgB,SAAA;AAAA,EAChB,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,WAAA,EAAa,SAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,SAAA,EAAW,SAAA;AAAA,EACX,YAAA,EAAc;AAChB,CAAA;;;ACpBA,IAAM,UAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAGjC,SAAS,aAAA,CACd,MAAA,EACA,IAAA,GAAqF,EAAC,EAC/E;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAAC,OAAA,CAAQ,gBAAA,EAAkB,GAAG,CAAA;AAChC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,4BAA4B,MAAM,CAAA,oBAAA,EAAuB,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACtF;AACF,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAAC,OAAA,CAAQ,uBAAA,EAAyB,KAAK,CAAA;AACzC,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,mCAAmC,IAAA,CAAK,YAAY,uBAAuB,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC/G;AACF,EAAA,MAAM,CAAA,GAAI,YAAY,cAAA,CAAe,GAAG,GAAG,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,uBAAA,EAAyB,IAAA,CAAK,YAAY,CAAA;AACrE,EAAA,MAAM,MAAM,CAAC,CAAA,KAA+B,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AACjD,EAAA,MAAMH,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,MACA,OAAA,EACA,OAAA,EACA,WAAW,KAAA,KAEX,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,SAAS,OAAA,EAAS,QAAA,EAAU,UAAU,KAAA,EAAO,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACxE,IAAA,GAAO,EAAE,KAAA,EAAO,IAAA,KAAS;AAAC,GAC5B;AACF,EAAA,MAAM,KAAK,CAAA,CAAE,iBAAA;AACb,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,kBAAkB,CAAA,CAAE,kBAAA;AAAA,IACpB,iBAAiB,CAAA,CAAE,iBAAA;AAAA,IACnB,gBAAgB,CAAA,CAAE;AAAA,GACpB;AACA,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,GAAG,GAAA;AAAA,IACH,2BAA2B,CAAA,CAAE,8BAAA;AAAA,IAC7B,mBAAmB,CAAA,CAAE;AAAA,GACvB;AAEA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,WAAA,CAAY;AAAA,MACZ,uBAAuB,CAAA,CAAE,wBAAA;AAAA,MACzB,qBAAqB,CAAA,CAAE,uBAAA;AAAA,MACvB,uBAAuB,CAAA,CAAE,kCAAA;AAAA,MACzB,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,IACD,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,eAAA;AAAA,IACE,YAAA,CAAa;AAAA,MACb,uBAAuB,CAAA,CAAE,wBAAA;AAAA,MACzB,wBAAwB,CAAA,CAAE,0BAAA;AAAA,MAC1B,gBAAA,EAAkB,EAAA;AAAA,MAClB,0BAA0B,CAAA,CAAE,mCAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AAAA,IACD,IAAI,eAAe,CAAA;AAAA,IACnB,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,gBAAA;AAAA,IACE,cAAc,EAAE,mBAAA,EAAqB,CAAA,CAAE,qBAAA,EAAuB,SAAS,CAAA;AAAA,IACzE,IAAI,gBAAgB,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAA,CAAE;AAAA,GACJ;AACA,EAAA,GAAA,CAAI,YAAA,EAAgB,SAAA,CAAU,EAAE,mBAAA,EAAqB,CAAA,CAAE,sBAAA,EAAwB,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACnG,EAAA,GAAA;AAAA,IACE,MAAA;AAAA,IACE,KAAK,EAAE,cAAA,EAAgB,EAAE,gBAAA,EAAkB,WAAA,EAAa,MAAM,CAAA;AAAA,IAChE,IAAI,MAAM,CAAA;AAAA,IACV,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,IACzB,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC;AAAA,GAC3B;AACA,EAAA,GAAA,CAAI,MAAA,EAAU,IAAA,CAAK,EAAE,cAAA,EAAgB,EAAE,gBAAA,EAAkB,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,EAAG,CAAA,EAAG,EAAA,GAAK,KAAK,KAAK,CAAA;AAC3F,EAAA,GAAA;AAAA,IACE,MAAA;AAAA,IACE,KAAK,EAAE,cAAA,EAAgB,EAAE,gBAAA,EAAkB,YAAA,EAAc,MAAM,CAAA;AAAA,IACjE,IAAI,MAAM,CAAA;AAAA,IACV,KAAK,IAAA,CAAK,GAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAM,CAAC,CAAA;AAAA,IAC/B,KAAK,IAAA,CAAK,GAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAM,CAAC;AAAA,GACjC;AACA,EAAA,GAAA;AAAA,IACE,gBAAA;AAAA,IACE,aAAA,CAAc;AAAA,MACd,qBAAqB,CAAA,CAAE,qBAAA;AAAA,MACvB,oBAAoB,CAAA,CAAE;AAAA,KACvB,CAAA;AAAA,IACD,IAAI,gBAAgB,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAA,CAAE;AAAA,GACJ;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,WAAW,EAAE,GAAG,KAAK,mBAAA,EAAqB,CAAA,CAAE,YAAY,CAAA;AAAA,IAC1D,IAAI,aAAa,CAAA;AAAA,IACjB,EAAE,sBAAA,GAAyB,CAAA,GAAI,CAAA,CAAE,8BAAA,GAAiC,EAAE,iBAAA,GAAoB,CAAA;AAAA,IACxF,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,WAAA,CAAY;AAAA,MACZ,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,gBAAA,EAAkB,EAAE,kBAAA,IAAsB,CAAA;AAAA,MAC1C,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,gBAAgB,CAAA,CAAE,iBAAA;AAAA,MAClB,gBAAA,EAAkB,EAAE,kBAAA,IAAsB,WAAA;AAAA,MAC1C,sBAAsB,CAAA,CAAE,UAAA;AAAA,MACxB,uBAAuB,CAAA,CAAE;AAAA,KAC1B,CAAA;AAAA,IACD,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,QAAA,CAAS,EAAE,GAAG,IAAA,EAAM,UAAU,IAAA,EAAM,YAAA,EAAc,CAAA,CAAE,oBAAA,EAAsB,CAAA;AAAA,IAC5E,IAAI,WAAW,CAAA;AAAA,IACf,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,WAAA,EAAe,QAAA,CAAS,EAAE,GAAG,MAAM,YAAA,EAAc,CAAA,CAAE,mBAAA,EAAqB,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,EAAG,GAAG,CAAC,CAAA;AACrG,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,WAAA,CAAY;AAAA,MACZ,gBAAA,EAAkB,EAAE,kBAAA,IAAsB,CAAA;AAAA,MAC1C,iBAAA,EAAmB,EAAE,mBAAA,IAAuB,CAAA;AAAA,MAC5C,wBAAA,EAA0B,EAAE,2BAAA,IAA+B,CAAA;AAAA,MAC3D,sBAAsB,CAAA,CAAE;AAAA,KACzB,CAAA;AAAA,IACD,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,OAAO,KAAA,KAAU,MAAA;AACvB,EAAA,MAAM,EAAA,GAAgC,IAAA,GAClC,CAAC,CAAA,CAAE,mBAAA,GAAsB,IAAA,CAAK,GAAA,CAAK,CAAA,GAAI,IAAA,CAAK,EAAA,GAAM,CAAC,CAAA,EAAG,CAAA,CAAE,oBAAA,GAAuB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAC,CAAA,GACpG,CAAC,CAAC,CAAA,CAAE,kBAAA,GAAqB,CAAA,EAAG,CAAA,CAAE,kBAAA,GAAqB,CAAC,CAAA;AACxD,EAAA,MAAM,EAAA,GAAgC,OAClC,CAAC,CAAC,EAAE,eAAA,GAAkB,CAAA,EAAG,EAAE,qBAAA,GAAwB,CAAC,IACpD,CAAC,CAAC,EAAE,wBAAA,GAA2B,CAAA,EAAG,EAAE,kCAAA,GAAqC,CAAA,CAAE,qBAAqB,CAAC,CAAA;AACrG,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,cAAc,EAAA,EAAI,EAAA,EAAI,MAAM,KAAK,CAAA;AAClD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,UAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,YAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAA;AAAA,GACF;AACF;;;ACvMA,IAAM,UAAA,GAAa,CAAC,CAAA,KAAsB;AACxC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AACrB,EAAA,OAAO,OAAO,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA,GAAI,IAAI,IAAA,CAAK,EAAA;AACxC,CAAA;AAGA,IAAMI,UAAS,CAAC,EAAE,OAAA,EAAS,GAAG,GAAE,KAC9B,OAAA,KAAY,MAAA,GAAY,YAAA,CAAa,CAAC,CAAA,GAAI,YAAA,CAAa,EAAE,GAAG,CAAA,EAAG,SAAS,CAAA;AAEnE,SAAS,SAAA,CAAU;AAAA,EACxB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa;AACf,CAAA,GAAmD,EAAC,EAAY;AAC9D,EAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC3F;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,sBAAA,GAAyB,CAAA;AAAA,EACzB,yBAAA,GAA4B,CAAA;AAAA,EAC5B,aAAA,GAAgB,CAAA;AAAA,EAChB,mBAAA,GAAsB,CAAA;AAAA,EACtB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,MAAM,SAAS,yBAAA,GAA4B,aAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,MAAA,GAAS,mBAAmB,CAAA;AACrD,EAAA,OAAO;AAAA,IACL,CAAC,wBAAwB,MAAM,CAAA;AAAA,IAC/B,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,GAAI,OAAO,GAAA,EAAK,CAAA,GAAI,OAAO,CAAA,EAAG,mBAAA,EAAqB,SAAS,CAAA;AAAA,IAC/F,CAAC,sBAAA,EAAwB,CAAC,MAAM,CAAA;AAAA,IAChC,CAAC,wBAAwB,MAAM;AAAA,GACjC;AACF;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,kBAAA,GAAqB,CAAA;AAAA,EACrB,aAAA,GAAgB,CAAA;AAAA,EAChB;AACF,CAAA,GAAmE,EAAC,EAAY;AAC9E,EAAA,OAAOA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,kBAAA,GAAqB,aAAA,EAAe,SAAS,CAAA;AACpG;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,UAAA,GAAa,CAAA;AAAA,EACb,SAAA,GAAY,CAAA;AAAA,EACZ,WAAA,GAAc,CAAA;AAAA,EACd,aAAA,GAAgB;AAClB,CAAA,GAA+F,EAAC,EAAY;AAC1G,EAAA,OAAO,eAAA;AAAA,IACL,WAAA;AAAA,IACA,aAAa,aAAA,GAAgB,WAAA;AAAA,IAC7B,CAAC,SAAA,GAAY,CAAA,GAAI,aAAA,GAAgB,WAAA;AAAA,IACjC,SAAA,GAAY,IAAI,aAAA,GAAgB;AAAA,GAClC;AACF;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,qBAAA,GAAwB,CAAA;AAAA,EACxB,aAAA,GAAgB,CAAA;AAAA,EAChB;AACF,CAAA,GAAsE,EAAC,EAAY;AACjF,EAAA,OAAOA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAK,GAAA,EAAK,CAAA,EAAG,qBAAA,GAAwB,aAAA,EAAe,SAAS,CAAA;AAC3G;AAEO,SAAS,UAAA,CAAW;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,iBAAA,GAAoB,CAAA;AAAA,EACpB,kBAAA,GAAqB,CAAA;AAAA,EACrB,oBAAA,GAAuB,CAAA;AAAA,EACvB,aAAA,GAAgB;AAClB,CAAA,GAOI,EAAC,EAAY;AACf,EAAA,MAAM,MAAA,GAAS,cAAc,CAAA,GAAI,iBAAA;AACjC,EAAA,MAAM,MAAA,GAAS,WAAA,GAAc,CAAA,GAAI,aAAA,GAAgB,oBAAA;AACjD,EAAA,MAAM,MAAA,GAAS,aAAa,CAAA,GAAI,kBAAA;AAChC,EAAA,MAAM,MAAA,GAAS,UAAA,GAAa,CAAA,GAAI,aAAA,GAAgB,oBAAA;AAChD,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,MAAM,CAAA;AAAA,IACV,CAAC,QAAQ,MAAM,CAAA;AAAA,IACf,CAAC,MAAA,EAAQ,CAAC,UAAA,GAAa,IAAI,kBAAkB,CAAA;AAAA,IAC7C,CAAC,CAAA,EAAG,CAAC,UAAA,GAAa,IAAI,kBAAkB,CAAA;AAAA,IACxC,CAAC,CAAA,EAAG,CAAC,MAAM,CAAA;AAAA,IACX,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAA;AAAA,IAChB,CAAC,QAAQ,MAAM,CAAA;AAAA,IACf,CAAC,GAAG,MAAM,CAAA;AAAA,IACV,CAAC,GAAG,MAAM;AAAA,GACZ;AACF;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB;AAClB,CAAA,GAAqD,EAAC,EAAY;AAChE,EAAA,OAAO,eAAA,CAAgB,GAAG,aAAA,EAAe,CAAC,aAAa,CAAA,GAAI,aAAA,EAAe,UAAA,GAAa,CAAA,GAAI,aAAa,CAAA;AAC1G;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,WAAA,GAAc,CAAA;AAAA,EACd,aAAA,GAAgB;AAClB,CAAA,GAAsD,EAAC,EAAY;AACjE,EAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,GAAI,eAAe,WAAA,GAAc,CAAA,GAAI,aAAA,EAAe,CAAA,EAAG,aAAa,CAAA;AAC5G;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,kBAAA,GAAqB,CAAA;AAAA,EACrB,aAAA,GAAgB,CAAA;AAAA,EAChB;AACF,CAAA,GAAmE,EAAC,EAAY;AAC9E,EAAA,OAAO;AAAA,IACL,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,kBAAA,EAAoB,SAAS,CAAA;AAAA;AAAA,IAClF,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAK,GAAA,EAAK,CAAA,EAAG,kBAAA,GAAqB,aAAA,EAAe,SAAS;AAAA;AAAA,GACpG;AACF;AAEO,SAAS,YAAA,CAAa;AAAA,EAC3B,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB,CAAA;AAAA,EAChB,qBAAA,GAAwB;AAC1B,CAAA,GAAqF,EAAC,EAAY;AAEhG,EAAA,OAAO,wBAAwB,CAAA,GAC3B,eAAA;AAAA,IACE,CAAC,aAAA,GAAgB,CAAA;AAAA,IACjB,aAAA,GAAgB,CAAA;AAAA,IAChB,CAAC,UAAA,GAAa,CAAA,GAAI,qBAAA,GAAwB,aAAA;AAAA,IAC1C,UAAA,GAAa,IAAI,qBAAA,GAAwB;AAAA,GAC3C,GACA,eAAA,CAAgB,CAAC,aAAA,GAAgB,CAAA,EAAG,aAAA,GAAgB,CAAA,EAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC5F;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,sBAAA,GAAyB,CAAA;AAAA,EACzB,yBAAA,GAA4B,CAAA;AAAA,EAC5B,aAAA,GAAgB,CAAA;AAAA,EAChB,oBAAA,GAAuB,CAAA;AAAA,EACvB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,MAAM,WAAA,GAAc,yBAAA;AACpB,EAAA,MAAM,cAAc,WAAA,GAAc,aAAA;AAClC,EAAA,MAAM,MAAA,GAAS,oBAAA;AACf,EAAA,MAAM,SAAS,MAAA,GAAS,aAAA;AACxB,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,WAAA,GAAc,MAAM,CAAA;AAClD,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,WAAA,GAAc,MAAM,CAAA;AAClD,EAAA,OAAO;AAAA,IACL,CAAC,wBAAwB,WAAW,CAAA;AAAA,IACpC,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,GAAI,YAAY,GAAA,EAAK,CAAA,GAAI,YAAY,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,IAC5F,CAAC,sBAAA,EAAwB,CAAC,WAAW,CAAA;AAAA,IACrC,CAAC,sBAAA,EAAwB,CAAC,WAAW,CAAA;AAAA,IACrC,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,GAAI,YAAY,GAAA,EAAK,CAAA,GAAI,YAAY,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,IAC5F,CAAC,wBAAwB,WAAW,CAAA;AAAA,IACpC,CAAC,wBAAwB,WAAW;AAAA,GACtC;AACF;AAEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,UAAA,GAAa,CAAA;AAAA,EACb,SAAA,GAAY,CAAA;AAAA,EACZ,aAAA,GAAgB;AAClB,CAAA,GAAyE,EAAC,EAAY;AACpF,EAAA,OAAO;AAAA,IACL,CAAC,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA;AAAA,IACjB,CAAC,CAAC,UAAA,EAAY,SAAA,GAAY,CAAC,CAAA;AAAA,IAC3B,CAAC,CAAC,UAAA,EAAY,CAAC,YAAY,CAAC,CAAA;AAAA,IAC5B,CAAC,CAAA,EAAG,CAAC,SAAA,GAAY,CAAC,CAAA;AAAA,IAClB,CAAC,CAAA,EAAG,CAAC,SAAA,GAAY,IAAI,aAAa,CAAA;AAAA,IAClC,CAAC,CAAC,UAAA,GAAa,eAAe,CAAC,SAAA,GAAY,IAAI,aAAa,CAAA;AAAA,IAC5D,CAAC,CAAC,UAAA,GAAa,aAAA,EAAe,SAAA,GAAY,IAAI,aAAa,CAAA;AAAA,IAC3D,CAAC,CAAA,EAAG,SAAA,GAAY,CAAA,GAAI,aAAa,CAAA;AAAA,IACjC,CAAC,CAAA,EAAG,SAAA,GAAY,CAAC;AAAA,GACnB;AACF;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,QAAA,GAAW,CAAA;AAAA,EACX,qBAAA,GAAwB,CAAA;AAAA,EACxB,aAAA,GAAgB,CAAA;AAAA,EAChB;AACF,CAAA,GAAyF,EAAC,EAAY;AAEpG,EAAA,MAAM,CAAA,GAAI,QAAA,GAAW,qBAAA,GAAwB,IAAA,CAAK,EAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,IAAI,CAAA,GAAI,CAAA;AACpC,EAAA,MAAM,aAAa,GAAA,GAAM,KAAA;AACzB,EAAA,MAAM,WAAW,GAAA,GAAM,KAAA;AACvB,EAAA,OAAO;AAAA,IACL,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,YAAY,GAAA,EAAK,QAAA,EAAU,CAAA,EAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,IACjG,GAAGA,OAAAA,CAAO;AAAA,MACR,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,MACb,KAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAK,UAAA;AAAA,MACL,GAAG,qBAAA,GAAwB,aAAA;AAAA,MAC3B;AAAA,KACD;AAAA,GACH;AACF;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,aAAA,GAAgB,CAAA;AAAA,EAChB,aAAA,GAAgB,CAAA;AAAA,EAChB,UAAA,GAAa,CAAA;AAAA,EACb,QAAA,GAAW,CAAA;AAAA,EACX;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,OAAO;AAAA,IACL,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,YAAY,GAAA,EAAK,QAAA,EAAU,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IACzF,GAAGA,OAAAA,CAAO;AAAA,MACR,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,MACb,KAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAK,UAAA;AAAA,MACL,GAAG,aAAA,GAAgB,aAAA;AAAA,MACnB;AAAA,KACD;AAAA,GACH;AACF;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,gBAAA,GAAmB,CAAA;AAAA,EACnB,SAAA,GAAY;AACd,CAAA,GAAuD,EAAC,EAAY;AAClE,EAAA,OAAO,eAAA,CAAgB,CAAC,gBAAA,EAAkB,CAAA,EAAG,GAAG,SAAS,CAAA;AAC3D;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,aAAA,GAAgB,CAAA;AAAA,EAChB,SAAA,GAAY,CAAA;AAAA,EACZ,cAAA,GAAiB,CAAA;AAAA,EACjB,cAAA,GAAiB;AACnB,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,OAAO,cAAA,CAAe,aAAY,KAAM,UAAA,GACpC,gBAAgB,CAAC,aAAA,EAAe,GAAG,CAAC,SAAA,EAAW,iBAAiB,aAAa,CAAA,GAC7E,gBAAgB,CAAC,aAAA,EAAe,GAAG,EAAE,cAAA,GAAiB,gBAAgB,SAAS,CAAA;AACrF;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,aAAA,GAAgB,CAAA;AAAA,EAChB,qBAAA,GAAwB,CAAA;AAAA,EACxB,cAAA,GAAiB;AACnB,CAAA,GAAyF,EAAC,EAAY;AAEpG,EAAA,OAAO,eAAe,WAAA,EAAY,KAAM,cACpC,eAAA,CAAgB,CAAA,EAAG,CAAC,aAAA,EAAe,CAAA,EAAG,wBAAwB,aAAa,CAAA,GAC3E,gBAAgB,CAAA,EAAG,CAAC,eAAe,EAAE,qBAAA,GAAwB,gBAAgB,CAAC,CAAA;AACpF;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,aAAA,GAAgB,CAAA;AAAA,EAChB,SAAA,GAAY,CAAA;AAAA,EACZ,cAAA,GAAiB;AACnB,CAAA,GAA6E,EAAC,EAAY;AAExF,EAAA,OAAO,eAAe,WAAA,EAAY,KAAM,WAAA,GACpC,eAAA,CAAgB,GAAG,aAAA,EAAe,CAAA,EAAG,SAAS,CAAA,GAC9C,gBAAgB,CAAA,EAAG,CAAC,aAAA,EAAe,CAAC,WAAW,CAAC,CAAA;AACtD;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,aAAA,GAAgB,CAAA;AAAA,EAChB,aAAA,GAAgB,CAAA;AAAA,EAChB,yBAAA,GAA4B,CAAA;AAAA,EAC5B;AACF,CAAA,GAIU,EAAC,EAAY;AACrB,EAAA,MAAM,CAAA,GAAW,CAAC,CAAC,yBAAA,EAA2B,CAAC,CAAA;AAC/C,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,aAAa,CAAA;AAAA,IACjB,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,aAAA,EAAe,OAAA,EAAS,CAAA;AAAA,IACxE,CAAC,CAAA,EAAG,CAAC,aAAa,CAAA;AAAA,IAClB,CAAC,CAAA,EAAG,EAAE,aAAA,GAAgB,aAAA,CAAc,CAAA;AAAA,IACpC,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,aAAA,GAAgB,aAAA,EAAe,SAAS,CAAA;AAAA,IACxF,CAAC,CAAA,EAAG,aAAA,GAAgB,aAAa,CAAA;AAAA,IACjC,CAAC,GAAG,aAAa;AAAA,GACnB;AACF;AAEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,cAAA,GAAiB,EAAA;AAAA,EACjB,SAAA,GAAY,CAAA;AAAA,EACZ,aAAA,GAAgB;AAClB,CAAA,GAA6E,EAAC,EAAY;AACxF,EAAA,MAAM,CAAA,GAAI,eAAe,WAAA,EAAY;AACrC,EAAA,IAAI,CAAA,KAAM,iBAAiB,OAAO,eAAA,CAAgB,CAAC,SAAA,EAAW,CAAA,EAAG,GAAG,aAAa,CAAA;AAEjF,EAAA,IAAI,CAAA,KAAM,YAAY,OAAO,eAAA,CAAgB,CAAC,aAAA,EAAe,CAAA,EAAG,WAAW,CAAC,CAAA;AAE5E,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mDAAA,EAAsD,cAAc,CAAA,CAAA,CAAG,CAAA;AACzF;AAEO,SAAS,SAAA,CAAU;AAAA,EACxB,cAAA,GAAiB,CAAA;AAAA,EACjB,kBAAA,GAAqB;AACvB,CAAA,GAA8D,EAAC,EAAY;AACzE,EAAA,OAAO,gBAAgB,CAAA,EAAG,kBAAA,EAAoB,CAAC,cAAA,GAAiB,CAAA,EAAG,iBAAiB,CAAC,CAAA;AACvF;AAEO,SAAS,UAAA,CAAW;AAAA,EACzB,wBAAA,GAA2B,CAAA;AAAA,EAC3B,uBAAA,GAA0B,CAAA;AAAA,EAC1B,qBAAA,GAAwB,CAAA;AAAA,EACxB,mBAAA,GAAsB,CAAA;AAAA,EACtB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,MAAM,SAAS,qBAAA,GAAwB,mBAAA;AACvC,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,wBAAA,GAA2B,CAAA,GAAI,MAAM,CAAA;AACnE,EAAA,MAAM,WAAW,CAAA,GAAI,UAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,CAAC,uBAAA,GAA0B,MAAA,GAAS,KAAK,GAAA,CAAI,UAAA,GAAa,KAAK,EAAE,CAAA;AAC/E,EAAA,MAAM,IAAI,wBAAA,GAA2B,CAAA;AACrC,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,OAAO,CAAC,CAAA;AAAA,IACT,GAAGA,OAAAA,CAAO;AAAA,MACR,MAAA,EAAQ,CAAC,CAAC,uBAAA,EAAyB,CAAC,CAAA;AAAA,MACpC,KAAA,EAAO,UAAA;AAAA,MACP,GAAA,EAAK,QAAA;AAAA,MACL,CAAA,EAAG,MAAA;AAAA,MACH;AAAA,KACD,CAAA;AAAA,IACD,CAAC,KAAA,EAAO,CAAC,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAEO,SAAS,GAAA,CAAI;AAAA,EAClB,qBAAA,GAAwB,CAAA;AAAA,EACxB;AACF,CAAA,GAA8C,EAAC,EAAY;AACzD,EAAA,OAAOA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,qBAAA,EAAuB,SAAS,CAAA;AACvF;;;AC7WO,IAAM,mBAAA,GAAsB;AAAA,EACjC,YAAA;AAAA,EACA,aAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,0BAAA;AAAA,EACA,iBAAA;AAAA,EACA,wBAAA;AAAA,EACA,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA,gBAAA;AAAA,EACA,0BAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AAIO,IAAM,yBAAA,GAA4B;AAAA,EACvC,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF;AAGA,IAAM,OAAA,GAAU,SAAA;AAChB,IAAM,IAAA,GAAO,SAAA;AAON,IAAM,qBAAA,GAAwB;AAAA,EACnC,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,aAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,2BAAA;AAAA,EACA,wBAAA;AAAA,EACA,wBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,8BAAA;AAAA,EACA,0BAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AAIO,IAAM,yBAAA,GAAyE;AAAA,EACpF,eAAA,EAAiB,WAAA;AAAA,EACjB,oBAAA,EAAsB,OAAA;AAAA,EACtB,oBAAA,EAAsB,OAAA;AAAA,EACtB,WAAA,EAAa,OAAA;AAAA,EACb,qBAAA,EAAuB,IAAA;AAAA,EACvB,kBAAA,EAAoB,OAAA;AAAA,EACpB,aAAA,EAAe,IAAA;AAAA,EACf,OAAA,EAAS,IAAA;AAAA,EACT,QAAA,EAAU,IAAA;AAAA,EACV,eAAA,EAAiB,OAAA;AAAA,EACjB,gBAAA,EAAkB,IAAA;AAAA,EAClB,YAAA,EAAc,OAAA;AAAA,EACd,aAAA,EAAe,IAAA;AAAA,EACf,yBAAA,EAA2B,IAAA;AAAA,EAC3B,sBAAA,EAAwB,OAAA;AAAA,EACxB,sBAAA,EAAwB,IAAA;AAAA,EACxB,eAAA,EAAiB,IAAA;AAAA,EACjB,eAAA,EAAiB,IAAA;AAAA,EACjB,iBAAA,EAAmB,IAAA;AAAA,EACnB,4BAAA,EAA8B,IAAA;AAAA,EAC9B,wBAAA,EAA0B,IAAA;AAAA,EAC1B,eAAA,EAAiB,IAAA;AAAA,EACjB,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,IAAA;AAAA,EACX,WAAA,EAAa,SAAA;AAAA,EACb,GAAA,EAAK;AACP,CAAA;;;ACrHA,IAAM,MAAA,GAAS,WAAA;AACf,IAAM,MAAM,gBAAA,CAAiB,GAAA;AAC7B,IAAM,YAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAiC,MAAA,CAAO,CAAC,CAAA,KAAM,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAEzG,IAAMC,WAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAYxC,IAAM,cAAA,GAAuD;AAAA,EAC3D,OAAA,EAAS,SAAA;AAAA,EACT,kBAAA,EAAoB,SAAA;AAAA,EACpB,OAAA,EAAS,SAAA;AAAA,EACT,kBAAA,EAAoB,SAAA;AAAA,EACpB,YAAA,EAAc,cAAA;AAAA,EACd,YAAA,EAAc,cAAA;AAAA,EACd,cAAA,EAAgB,gBAAA;AAAA,EAChB,aAAA,EAAe,gBAAA;AAAA,EACf,aAAA,EAAe,gBAAA;AAAA,EACf,cAAA,EAAgB,gBAAA;AAAA,EAChB,aAAA,EAAe,gBAAA;AAAA,EACf,aAAA,EAAe;AACjB,CAAA;AAMO,SAAS,eAAA,CACd,MAAA,EACA,IAAA,GAA2F,EAAC,EACrF;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACA,QAAAA,CAAQ,kBAAA,EAAoB,GAAG,CAAA,EAAG;AACrC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,8BAA8B,MAAM,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC1F;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,QAAAA,CAAQ,yBAAA,EAA2B,KAAK,CAAA,EAAG;AAC9C,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,qCAAqC,IAAA,CAAK,YAAY,uBAAuB,yBAAA,CAA0B,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACnH;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,WAAA,CAAY,gBAAA,CAAiB,GAAG,CAAA,EAAG,IAAA,CAAK,SAAS,YAAY,CAAA;AACvE,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,yBAAA,EAA2B,IAAA,CAAK,YAAY,CAAA;AACvE,EAAA,MAAM,MAAM,CAAC,CAAA,KAAiC,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAClE,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AAEjD,EAAA,MAAM,IAAI,CAAA,CAAE,YAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,WAAA;AACZ,EAAA,MAAM,KAAK,CAAA,CAAE,cAAA;AACb,EAAA,MAAM,MAAM,CAAA,CAAE,yBAAA;AACd,EAAA,MAAM,MAAM,CAAA,CAAE,0BAAA;AACd,EAAA,MAAM,MAAM,CAAA,CAAE,wBAAA;AAEd,EAAA,MAAML,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,IAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,KAAA,GAAiE,EAAC,KAElE,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,OAAA,EAAS,OAAA,EAAS,UAAU,QAAA,EAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACjE,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAK,GAAI;AAAA,GACrC;AAGF,EAAA,MAAM,gBAAgB,KAAA,CAAM;AAAA,IAC1B,MAAA,EAAQ,KAAA,CAAM,CAAA,CAAE,oBAAA,EAAsB,CAAC,CAAA;AAAA,IACvC,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,qBAAqB,CAAA;AAAA,IAC7C,IAAA,EAAM,OAAA,CAAQ,MAAA,CAAO,kBAAkB;AAAA,GACxC,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAM,CAAA;AAErC,EAAA,MAAM,iBAAiB,KAAA,CAAM;AAAA,IAC3B,MAAA,EAAQ,KAAA,CAAM,CAAA,CAAE,gCAAA,EAAkC,CAAC,CAAA;AAAA,IACnD,MAAA,EAAQ,KAAA,CAAM,CAAA,CAAE,6BAAA,EAA+B,CAAC,CAAA;AAAA;AAAA,IAChD,IAAA,EAAM,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA;AAAA,IACrC,aAAA,EAAe,OAAA,CAAQ,MAAA,CAAO,eAAe;AAAA,GAC9C,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAM,CAAA;AAErC,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,CAAA,CAAE,WAAA,EAAa,CAAC,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,GAAA,CAAI,MAAM,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAQ,KAAA,CAAM;AAAA,IAClB,MAAA,EAAQ,UAAA;AAAA,IACR,KAAA,EAAO,KAAA,CAAM,CAAA,CAAE,UAAA,EAAY,CAAC,CAAA;AAAA,IAC5B,WAAA,EAAa,KAAA,CAAM,CAAA,CAAE,YAAA,EAAc,CAAC,CAAA;AAAA,IACpC,aAAA,EAAe,OAAA,CAAQ,MAAA,CAAO,aAAa,CAAA;AAAA,IAC3C,WAAA,EAAa,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA;AAAA,IACxC,iBAAiB,CAAA,CAAE,wBAAA,CAAyB,MAAA,GAAS,CAAA,GAAI,EAAE,wBAAA,GAA2B,SAAA;AAAA,IACtF,gBAAgB,CAAA,CAAE,uBAAA,CAAwB,MAAA,GAAS,CAAA,GAAI,EAAE,uBAAA,GAA0B;AAAA,GACpF,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAG1D,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,CAAO,eAAe,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,EAAE,uBAAA,CAAwB,MAAA;AACxC,EAAA,MAAM,WAAW,CAAA,CAAE,uBAAA,CAAwB,GAAA,CAAI,CAAC,SAAS,CAAA,KAAM;AAE7D,IAAA,MAAM,KAAA,GAAA,CAAS,KAAA,GAAQ,CAAA,IAAK,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,SAAA,CAAU,CAAC,CAAA,GAAI,SAAA,CAAU,CAAC,CAAA,KAAM,MAAA;AACnF,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,CAAA,MAAO;AAAA,MACjC,UAAU,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,IAAK,OAAO,GAAA,IAAO,CAAA;AAAA,MAC3C,MAAA;AAAA,MACA,KAAA,EAAO,CAAA,CAAE,sBAAA,CAAuB,CAAC,KAAK,MAAA,CAAO,GAAA;AAAA,MAC7C,YAAY,CAAA,CAAE,2BAAA,CAA4B,CAAC,CAAA,GAAI,CAAC,KAAK,MAAA,CAAO,GAAA;AAAA,MAC5D,KAAA;AAAA,MACA,OAAA,EAAS,CAAA,CAAE,0BAAA,CAA2B,CAAC,CAAA,KAAM;AAAA,KAC/C,CAAE,CAAA;AAAA,EACJ,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,EAAE,0BAAA,IAA8B,CAAA;AACjD,EAAA,MAAM,mBAAmB,GAAA,KAAQ,CAAA,GAAI,MAAM,QAAA,GAAW,GAAA,GAAM,KAAK,EAAA,GAAK,GAAA;AAEtE,EAAA,MAAM,QAAA,GAAW,CAAA,CAAE,UAAA,CAAW,WAAA,EAAY,KAAM,KAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,WAAW,CAAA,GAAI,EAAA;AAC7B,EAAA,MAAM,cAAA,GAAiB,WAAW,WAAA,GAAc,UAAA;AAChD,EAAA,MAAM,kBAAkB,KAAA,CAAM;AAAA,IAC5B,UAAA,EAAY,KAAA,CAAM,CAAA,CAAE,2BAAA,EAA6B,CAAC,CAAA;AAAA,IAClD,SAAA,EAAW,KAAA,CAAM,CAAA,CAAE,2BAAA,EAA6B,CAAC,CAAA;AAAA,IACjD,cAAA,EAAgB,KAAA,CAAM,CAAA,CAAE,iCAAA,EAAmC,CAAC,CAAA;AAAA,IAC5D,SAAA,EAAW,KAAA,CAAM,CAAA,CAAE,yBAAA,EAA2B,KAAK,CAAA;AAAA,IACnD,UAAA,EAAY,KAAA,CAAM,CAAA,CAAE,2BAAA,EAA6B,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAO,QAAA,GAAW,CAAA,GAAI,EAAA,GAAK,CAAE;AAAA,GACvF,CAAA;AAGD,EAAA,MAAMM,aAAc,SAAA,CAAU,EAAE,aAAa,CAAA,EAAG,UAAA,EAAY,GAAG,CAAA;AAC/D,EAAA,GAAA,CAAI,YAAA,EAAcA,YAAW,GAAA,CAAI,sBAAsB,GAAG,KAAA,GAAQ,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACpF,EAAA,GAAA,CAAI,YAAA,EAAcA,YAAW,GAAA,CAAI,sBAAsB,GAAG,IAAA,GAAO,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACnF,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,mBAAmB,CAAA,CAAE,mBAAA;AAAA,MACrB,oBAAoB,CAAA,CAAE,oBAAA;AAAA,MACtB,sBAAsB,CAAA,CAAE,uBAAA;AAAA,MACxB,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,MAAA,EAAQ,GAAA,CAAI,aAAa,CAAA;AAAE,GAC/B;AAEA,EAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AAE9B,IAAA,MAAM,OAAS,gBAAA,CAAiB;AAAA,MAC9B,oBAAoB,CAAA,CAAE,MAAA;AAAA,MACtB,aAAA,EAAe,CAAA,KAAM,CAAA,GAAI,EAAA,GAAK,CAAA;AAAA,MAC9B;AAAA,KACD,CAAA;AACD,IAAA,GAAA,CAAI,sBAAsB,IAAA,EAAM,CAAA,CAAE,MAAM,CAAA,EAAG,CAAA,EAAG,MAAM,KAAK,CAAA;AACzD,IAAA,MAAM,OAAA,GAAY,oBAAoB,EAAE,kBAAA,EAAoB,EAAE,MAAA,EAAQ,aAAA,EAAe,EAAA,EAAI,OAAA,EAAS,CAAA;AAClG,IAAA,GAAA,CAAI,yBAAyB,OAAA,EAAS,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA,EAAG,MAAM,KAAK,CAAA;AAAA,EACpE,CAAC,CAAA;AAED,EAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAEjC,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,gCAAA,CAAiC,CAAC,CAAA,IAAK,CAAA;AACxD,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,sBAAA,EAAwB,GAAA;AAAA,MACxB,yBAAA,EAA2B,CAAA,CAAE,6BAAA,CAA8B,CAAC,CAAA,IAAK,CAAA;AAAA,MACjE,aAAA,EAAe,EAAA;AAAA,MACf;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE,iBAAA;AAAA,MACE,cAAc,EAAE,GAAG,KAAA,EAAO,mBAAA,EAAqB,QAAQ,CAAA;AAAA,MACzD,GAAA,CAAI,aAAA;AAAA,MACJ,IAAI,CAAA,GAAI,GAAA;AAAA,MACR,CAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE,kBAAA;AAAA,MACE,eAAe,EAAE,GAAG,KAAA,EAAO,oBAAA,EAAsB,QAAQ,CAAA;AAAA,MAC3D,GAAA,CAAI,IAAA;AAAA,MACJ,IAAI,CAAA,GAAI,GAAA;AAAA,MACR,CAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,GAAA,GAAM,CAAA,CAAE,4BAAA;AAC5B,EAAA,GAAA;AAAA,IACE,wBAAA;AAAA,IACE,oBAAoB,EAAE,qBAAA,EAAuB,KAAK,aAAA,EAAe,EAAA,EAAI,SAAS,CAAA;AAAA,IAChF,IAAI,wBAAwB,CAAA;AAAA,IAC5B,GAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,mBAAA;AAAA,IACE,gBAAgB,EAAE,qBAAA,EAAuB,KAAK,aAAA,EAAe,EAAA,EAAI,SAAS,CAAA;AAAA,IAC5E,IAAI,2BAA2B,CAAA;AAAA,IAC/B,MAAM,EAAA,GAAK,CAAA;AAAA,IACX,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,EAAE,UAAA,EAAY,IAAA,CAAK,QAAQ,SAAA,EAAW,IAAA,CAAK,KAAA,EAAO,aAAA,EAAe,EAAA,EAAG;AAClF,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,cAAA,KAAmB,IAAA,GAAO,KAAK,WAAA,GAAc,MAAA;AACpE,IAAA,GAAA;AAAA,MACE,cAAA;AAAA,MACE,YAAY,EAAE,GAAG,OAAO,WAAA,EAAa,IAAA,CAAK,aAAa,CAAA;AAAA,MACzD,SAAA;AAAA,MACA,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,EAAA;AAAA,MACtB,CAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,eAAA,KAAoB,IAAA,GAAO,KAAK,aAAA,GAAgB,MAAA;AAC1E,IAAA,GAAA,CAAI,0BAAA,EAA8B,sBAAsB,KAAK,CAAA,EAAG,cAAc,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AAAA,EACrG;AAEA,EAAA,MAAM,OAAA,GAAU,EAAE,0BAAA,IAA8B,CAAA;AAChD,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,MAAM,IAAA,GAAO,CAAC,UAAA,EAAoB,QAAA,KAC9B,mBAAA,CAAoB,EAAE,aAAA,EAAe,GAAA,EAAK,aAAA,EAAe,EAAA,EAAI,UAAA,EAAY,QAAA,EAAU,SAAS,CAAA;AAChG,IAAA,GAAA;AAAA,MACE,wBAAA;AAAA,MACA,IAAA,CAAK,KAAK,gBAAgB,CAAA;AAAA,MAC1B,IAAI,wBAAwB,CAAA;AAAA,MAC5B,GAAA;AAAA,MACA,CAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,WAAA,GAAc,QAAQ,CAAA,GAAA,CAAK,CAAA,CAAE,0BAA0B,CAAA,IAAK,GAAA,GAAM,KAAK,EAAA,GAAK,CAAA;AAClF,IAAA,MAAM,WAAA,GAAc,QAAQ,CAAA,GAAA,CAAK,CAAA,CAAE,2BAA2B,CAAA,IAAK,GAAA,GAAM,KAAK,EAAA,GAAK,CAAA;AACnF,IAAA,IAAI,KAAA,GAAQ,QAAQ,CAAA,GAAI,GAAA,GAAM,WAAW,GAAA,GAAM,IAAA,CAAK,EAAA,GAAK,WAAA,GAAc,GAAA,GAAM,WAAA;AAC7E,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,OAAA,EAAS,CAAA,EAAA,EAAK;AAEjC,MAAA,GAAA;AAAA,QACE,wBAAA;AAAA,QACA,IAAA,CAAK,KAAA,EAAO,KAAA,GAAQ,WAAW,CAAA;AAAA,QAC/B,IAAI,wBAAwB,CAAA;AAAA,QAC5B,MAAM,EAAA,GAAK,CAAA;AAAA,QACX,CAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,KAAA,GAAQ,QAAQ,WAAA,GAAc,WAAA;AAAA,IAChC;AAAA,EACF;AAGA,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACtB,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,CAAC,CAAA,IAAK,EAAC;AAC5B,IAAA,IAAI,CAAA,GAAI,IAAI,CAAA,GAAI,GAAA;AAChB,IAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,MAAA,CAAA,GAAI,IAAI,CAAA,CAAE,UAAA;AAEV,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,KAAA,GAAQ,MAAA;AACnC,MAAA,GAAA;AAAA,QACE,iBAAA;AAAA,QACE,aAAA,CAAc,EAAE,gBAAA,EAAkB,CAAA,CAAE,QAAQ,SAAA,EAAW,CAAA,CAAE,OAAO,CAAA;AAAA,QAClE,IAAA;AAAA,QACA,CAAA;AAAA,QACA,CAAA,CAAE,OAAA;AAAA,QACF,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,WAAW,EAAE,SAAA,EAAW,EAAE,kCAAA,IAAsC,CAAA,EAAG,eAAe,EAAA,EAAG;AAC3F,EAAA,GAAA;AAAA,IACE,0BAAA;AAAA,IACE,sBAAsB,EAAE,GAAG,QAAA,EAAU,cAAA,EAAgB,iBAAiB,CAAA;AAAA,IACxE,IAAI,8BAA8B,CAAA;AAAA,IAClC,CAAA,GAAI,CAAA;AAAA,IAAA,CACH,CAAA,CAAE,8CAA8C,CAAA,IAAK,CAAA;AAAA,IACtD,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,0BAAA;AAAA,IACE,sBAAsB,EAAE,GAAG,QAAA,EAAU,cAAA,EAAgB,YAAY,CAAA;AAAA,IAAA,CAClE,EAAE,yCAAA,IAA6C,KAAA,MAAW,IAAA,GACvD,GAAA,CAAI,0BAA0B,CAAA,GAC9B,MAAA;AAAA,IACJ,CAAA,GAAI,CAAA,IAAK,CAAA,CAAE,0CAAA,IAA8C,CAAA,CAAA;AAAA,IAAA,CACxD,CAAA,CAAE,0CAA0C,CAAA,IAAK,CAAA;AAAA,IAClD,IAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,GAAA,CAAI,WAAa,OAAA,CAAQ,EAAE,UAAA,EAAY,CAAA,EAAG,eAAe,EAAA,EAAI,CAAA,EAAG,GAAA,CAAI,SAAS,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,MAAM,KAAK,CAAA;AACrG,EAAA,GAAA,CAAI,YAAc,QAAA,CAAS,EAAE,WAAA,EAAa,CAAA,EAAG,eAAe,EAAA,EAAI,CAAA,EAAG,GAAA,CAAI,UAAU,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,OAAO,IAAI,CAAA;AAEzG,EAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAClC,IAAA,MAAM,QAAU,cAAA,CAAe;AAAA,MAC7B,aAAA,EAAe,EAAA;AAAA,MACf,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,cAAA,EAAgB,IAAA,CAAK,UAAA,GAAa,CAAA,GAAI,WAAA,GAAc;AAAA,KACrD,CAAA;AACD,IAAA,GAAA;AAAA,MACE,iBAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAI,iBAAiB,CAAA;AAAA,MACrB,CAAA,GAAI,IAAI,IAAA,CAAK,UAAA;AAAA,MACZ,CAAA,GAAI,IAAK,IAAA,CAAK,UAAA;AAAA,MACf,IAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAEA,EAAA,GAAA;AAAA,IACE,mBAAA;AAAA,IACE,gBAAA,CAAiB;AAAA,MACjB,aAAA,EAAe,EAAA;AAAA,MACf,qBAAA,EAAuB,EAAE,uBAAA,IAA2B,CAAA;AAAA,MACpD,cAAA,EAAgB;AAAA,KACjB,CAAA;AAAA,IACD,IAAI,mBAAmB,CAAA;AAAA,IAAA,CACtB,CAAA,CAAE,6BAA6B,CAAA,IAAK,CAAA;AAAA,IACpC,QAAQ,CAAA,GAAK,CAAA;AAAA,IACd,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,iBAAA;AAAA,IACE,aAAA,CAAc;AAAA,MACd,aAAA,EAAe,EAAA;AAAA,MACf,SAAA,EAAW,EAAE,mBAAA,IAAuB,CAAA;AAAA,MACpC,cAAA,EAAgB;AAAA,KACjB,CAAA;AAAA,IACD,IAAI,iBAAiB,CAAA;AAAA,IACrB,CAAA,GAAI,CAAA;AAAA,IACJ,KAAA,IAAS,IAAI,CAAA,GAAI,EAAA,CAAA;AAAA,IACjB,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,eAAA;AAAA,IACE,YAAA,CAAa;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,aAAA,EAAe,EAAA;AAAA,MACf,qBAAA,EAAuB,EAAE,uBAAA,IAA2B;AAAA,KACrD,CAAA;AAAA,IACD,IAAI,eAAe,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,OAAO,CAAC,EAAA,KAAuB,YAAA,CAAa,EAAA,EAAI,MAAM,KAAK,CAAA;AACjE,EAAA,GAAA;AAAA,IACE,gBAAA;AAAA,IACE,aAAA,CAAc;AAAA,MACd,aAAA,EAAe,EAAE,qBAAA,IAAyB,CAAA;AAAA,MAC1C,aAAA,EAAe,EAAA;AAAA,MACf,2BAA2B,GAAA,GAAM,GAAA;AAAA,MACjC;AAAA,KACD,CAAA;AAAA,IACD,IAAI,gBAAgB,CAAA;AAAA,IACpB,IAAI,CAAA,GAAI,GAAA;AAAA,IACR,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,0BAA0B,CAAA,CAAE,2BAAA;AAAA,MAC5B,yBAAyB,GAAA,GAAM,GAAA;AAAA,MAC/B,uBAAuB,CAAA,CAAE,wBAAA;AAAA,MACzB,qBAAqB,CAAA,CAAE,qBAAA;AAAA,MACvB;AAAA,KACD,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,IAAI,CAAA,GAAI,GAAA;AAAA,IACR,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,CAAK,EAAE,CAAA;AAAE,GACxB;AACA,EAAA,GAAA;AAAA,IACE,KAAA;AAAA,IACE,IAAI,EAAE,qBAAA,EAAuB,CAAA,CAAE,wBAAA,EAA0B,SAAS,CAAA;AAAA,IACpE,IAAI,KAAK,CAAA;AAAA,IACT,IAAI,CAAA,GAAI,GAAA;AAAA,IACR,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,CAAK,EAAA,GAAK,GAAG,CAAA;AAAE,GAC9B;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,SAAA,CAAU,EAAE,cAAA,EAAgB,CAAA,CAAE,iBAAiB,kBAAA,EAAoB,CAAA,CAAE,qBAAqB,CAAA;AAAA,IAC5F,IAAI,WAAW,CAAA;AAAA,IACf,IAAI,CAAA,GAAI,GAAA;AAAA,IACR,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAA;AAAE,GACtB;AAGA,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,mBAAA;AACtB,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,oBAAA;AACtB,EAAA,MAAM,IAAA,GAAO,IAAI,CAAA,GAAI,GAAA,GAAM,KAAK,GAAA,CAAI,GAAG,CAAA,CAAE,gCAAgC,CAAA,GAAI,CAAA;AAC7E,EAAA,MAAM,MAAA,GAAS,IAAI,CAAA,GAAI,IAAA,CAAK,IAAI,GAAG,CAAA,CAAE,WAAW,CAAA,GAAI,GAAA;AACpD,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAE,UAAU,CAAA,GAAI,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA;AACxB,EAAA,MAAM,SAAS,CAAC,CAAC,QAAA,GAAW,GAAA,EAAK,WAAW,GAAG,CAAA;AAC/C,EAAA,MAAM,MAAA,GAA8F;AAAA,IAClG,MAAM,CAAC,CAAC,CAAC,GAAA,EAAK,GAAG,GAAG,KAAK,CAAA;AAAA,IACzB,YAAA,EAAc;AAAA,MACZ,CAAC,EAAE,CAAA,GAAI,IAAI,EAAA,CAAA,EAAK,CAAA,GAAI,IAAI,EAAE,CAAA;AAAA,MAC1B,CAAC,EAAE,CAAA,GAAI,IAAI,EAAA,CAAA,EAAK,CAAA,GAAI,IAAI,EAAE;AAAA,KAC5B;AAAA,IACA,SAAS,CAAC,CAAC,CAAA,EAAG,GAAG,GAAG,KAAK,CAAA;AAAA,IACzB,SAAS,CAAC,CAAC,CAAC,GAAA,EAAK,CAAC,GAAG,KAAK,CAAA;AAAA,IAC1B,cAAc,CAAC,CAAC,IAAA,EAAM,GAAG,GAAG,KAAK,CAAA;AAAA,IACjC,YAAA,EAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;AAAA,IACnC,gBAAgB,CAAC,CAAC,MAAA,EAAQ,GAAG,GAAG,MAAM,CAAA;AAAA,IACtC,cAAA,EAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAAA,GAC1C;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC1C,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,OAAO,cAAA,CAAe,QAAQ,KAAM,QAAuB,CAAA;AAC5E,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,cAAc,EAAA,EAAI,EAAA,EAAI,MAAM,KAAK,CAAA;AAClD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AAGzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAN;AAAA,GACF;AACF;;;AC9eA,IAAMI,UAAS,CAAC,EAAE,OAAA,EAAS,GAAG,GAAE,KAC9B,OAAA,KAAY,MAAA,GAAY,YAAA,CAAa,CAAC,CAAA,GAAI,YAAA,CAAa,EAAE,GAAG,CAAA,EAAG,SAAS,CAAA;AAGnE,SAAS,GAAA,CAAI;AAAA,EAClB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,eAAA,GAAkB,CAAA;AAAA,EAClB,gBAAA,GAAmB,CAAA;AAAA,EACnB,cAAA,GAAiB;AACnB,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,MAAM,SAAA,GAAY,WAAA,GAAc,CAAA,GAAI,eAAA,GAAkB,gBAAA;AACtD,EAAA,OAAO,cAAA,CAAe,aAAY,KAAM,QAAA,GACpC,gBAAgB,CAAC,UAAA,GAAa,GAAG,UAAA,GAAa,CAAA,EAAG,GAAG,SAAS,CAAA,GAC7D,gBAAgB,CAAC,UAAA,GAAa,GAAG,UAAA,GAAa,CAAA,EAAG,CAAC,SAAA,EAAW,CAAC,CAAA;AACpE;AAGO,SAAS,UAAA,CAAW;AAAA,EACzB,UAAA,GAAa,CAAA;AAAA,EACb,eAAA,GAAkB,CAAA;AAAA,EAClB,gBAAA,GAAmB;AACrB,CAAA,GAAkF,EAAC,EAAY;AAC7F,EAAA,MAAM,IAAI,eAAA,GAAkB,gBAAA;AAC5B,EAAA,OAAO,eAAA,CAAgB,CAAC,UAAA,GAAa,CAAA,EAAG,aAAa,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAC/D;AAGO,SAAS,UAAA,CAAW;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,eAAA,GAAkB,CAAA;AAAA,EAClB,cAAA,GAAiB;AACnB,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,UAAA,GAAa,CAAA;AACvB,EAAA,MAAM,IAAI,WAAA,GAAc,CAAA;AACxB,EAAA,MAAM,KAAK,CAAA,GAAI,cAAA;AACf,EAAA,MAAM,KAAK,CAAA,GAAI,eAAA;AACf,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,IAAI,CAAC,CAAA;AAAA,IACN,CAAC,IAAI,EAAE,CAAA;AAAA,IACP,CAAC,CAAC,EAAA,EAAI,EAAE,CAAA;AAAA,IACR,CAAC,CAAC,EAAA,EAAI,CAAC,CAAA;AAAA,IACP,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACN,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACN,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAAS,UAAA,CAAW;AAAA,EACzB,aAAA,GAAgB,CAAA;AAAA,EAChB,eAAA,GAAkB,CAAA;AAAA,EAClB,mBAAA,GAAsB;AACxB,CAAA,GAAwF,EAAC,EAAY;AACnG,EAAA,MAAM,IAAI,eAAA,GAAkB,mBAAA;AAC5B,EAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,GAAgB,CAAA,EAAG,gBAAgB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AACrE;AAGO,IAAM,UAAU,CAAC;AAAA,EACtB,aAAA,GAAgB,CAAA;AAAA,EAChB,UAAA,GAAa;AACf,CAAA,GAAqD,EAAC,KACpD,eAAA,CAAgB,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAA,EAAG,CAAC,aAAA,GAAgB,CAAA,EAAG,aAAA,GAAgB,CAAC,CAAA;AAGjF,IAAM,WAAW,CAAC;AAAA,EACvB,aAAA,GAAgB,CAAA;AAAA,EAChB,UAAA,GAAa;AACf,CAAA,GAAqD,OACnD,eAAA,CAAgB,CAAC,aAAa,CAAA,EAAG,UAAA,GAAa,CAAA,EAAG,CAAA,EAAG,aAAa,CAAA;AAG5D,IAAM,UAAU,CAAC;AAAA,EACtB,aAAA,GAAgB,CAAA;AAAA,EAChB,UAAA,GAAa;AACf,CAAA,GAAqD,OACnD,eAAA,CAAgB,CAAC,aAAa,CAAA,EAAG,UAAA,GAAa,CAAA,EAAG,CAAA,EAAG,aAAa,CAAA;AAG5D,IAAM,WAAW,CAAC;AAAA,EACvB,aAAA,GAAgB,CAAA;AAAA,EAChB,SAAA,GAAY;AACd,CAAA,GAAoD,EAAC,KACnD,eAAA,CAAgB,CAAC,SAAA,GAAY,GAAG,SAAA,GAAY,CAAA,EAAG,CAAC,aAAA,EAAe,CAAC,CAAA;AAG3D,IAAM,eAAe,CAAC;AAAA,EAC3B,aAAA,GAAgB,CAAA;AAAA,EAChB,UAAA,GAAa;AACf,CAAA,GAAqD,OACnD,eAAA,CAAgB,CAAC,YAAY,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAG5C,IAAM,eAAe,CAAC;AAAA,EAC3B,aAAA,GAAgB,CAAA;AAAA,EAChB,aAAA,GAAgB;AAClB,CAAA,GAAwD,EAAC,KACvD,eAAA,CAAgB,GAAG,aAAA,EAAe,CAAC,eAAe,CAAC,CAAA;AAG9C,IAAM,MAAA,GAAS,CAAC,EAAE,aAAA,GAAgB,GAAG,OAAA,EAAQ,GAAsC,EAAC,KACzFA,OAAAA,CAAO,EAAE,QAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,OAAA,EAAS,CAAA;AAGjE,IAAM,SAAA,GAAY,CAAC,EAAE,aAAA,GAAgB,GAAG,OAAA,EAAQ,GAAsC,EAAC,KAC5FA,OAAAA,CAAO,EAAE,QAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,OAAA,EAAS,CAAA;;;AC5HjE,IAAM,gBAAA,GAAmB;AAAA,EAC9B,aAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF;AAIO,IAAM,sBAAA,GAAyB,CAAC,MAAA,EAAQ,gBAAA,EAAkB,kBAAkB,OAAO;AAInF,IAAM,kBAAA,GAAqB;AAAA,EAChC,iBAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAIO,IAAM,sBAAA,GAAsF;AAAA,EACjG,eAAA,EAAiB,WAAA;AAAA,EACjB,KAAA,EAAO,SAAA;AAAA,EACP,WAAA,EAAa,SAAA;AAAA,EACb,KAAA,EAAO,SAAA;AAAA,EACP,WAAA,EAAa,SAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,QAAA,EAAU,SAAA;AAAA,EACV,SAAA,EAAW,SAAA;AAAA,EACX,QAAA,EAAU,SAAA;AAAA,EACV,SAAA,EAAW,SAAA;AAAA,EACX,aAAA,EAAe,SAAA;AAAA,EACf,IAAA,EAAM,SAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,WAAA,EAAa,CAAC,SAAA,EAAW,SAAA,EAAW,SAAS;AAC/C,CAAA;;;AC9BA,IAAMC,WAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAQjC,SAAS,YAAA,CACd,MAAA,EACA,IAAA,GAAkF,EAAC,EAC5E;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACA,QAAAA,CAAQ,eAAA,EAAiB,GAAG,CAAA;AAC/B,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,2BAA2B,MAAM,CAAA,oBAAA,EAAuB,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACpF;AACF,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,QAAAA,CAAQ,sBAAA,EAAwB,KAAK,CAAA;AACxC,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,kCAAkC,IAAA,CAAK,YAAY,uBAAuB,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC7G;AACF,EAAA,MAAM,CAAA,GAAI,YAAY,aAAA,CAAc,GAAG,GAAG,IAAA,CAAK,OAAA,EAAS,CAAC,kBAAkB,CAAC,CAAA;AAC5E,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,sBAAA,EAAwB,IAAA,CAAK,YAAY,CAAA;AACpE,EAAA,MAAM,MAAM,CAAC,CAAA,KAA8B,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AACjD,EAAA,MAAM,IAAI,CAAA,CAAE,YAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,WAAA;AACZ,EAAA,MAAM,MAAM,CAAA,CAAE,kBAAA;AACd,EAAA,MAAM,MAAM,CAAA,CAAE,oBAAA;AACd,EAAA,MAAML,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,IAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,KAAA,GAA4B,EAAC,KAE7B,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,OAAA,EAAS,OAAA,EAAS,UAAU,QAAA,EAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACjE,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAK,GAAI;AAAA,GACrC;AAEF,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,iBAAiB,CAAA,CAAE,iBAAA;AAAA,MACnB,gBAAgB,CAAA,CAAE;AAAA,KACnB,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,MAAA,EAAQ,GAAA,CAAI,aAAa,CAAA;AAAE,GAC/B;AACA,EAAA,MAAM,OAAA,GAAU,EAAE,WAAA,EAAa,CAAA,EAAG,YAAY,CAAA,EAAG,eAAA,EAAiB,GAAA,EAAK,gBAAA,EAAkB,GAAA,EAAI;AAC7F,EAAA,GAAA,CAAI,OAAS,GAAA,CAAI,EAAE,GAAG,OAAA,EAAS,gBAAgB,UAAA,EAAY,CAAA,EAAG,GAAA,CAAI,OAAO,CAAA,EAAG,CAAA,EAAG,CAAC,GAAA,GAAM,GAAA,EAAK,OAAO,KAAK,CAAA;AACvG,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW,EAAE,UAAA,EAAY,CAAA,EAAG,iBAAiB,GAAA,EAAK,gBAAA,EAAkB,KAAK,CAAA;AAAA,IAC3E,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,OAAS,GAAA,CAAI,EAAE,GAAG,OAAA,EAAS,gBAAgB,QAAA,EAAU,CAAA,EAAG,GAAA,CAAI,OAAO,CAAA,EAAG,CAAA,EAAG,GAAA,GAAM,GAAA,EAAK,OAAO,KAAK,CAAA;AACpG,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,CAAA,CAAE,gBAAgB,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC1D,EAAA,KAAA,CAAM,OAAA;AAAA,IAAQ,CAAC,GAAG,CAAA,KAChB,GAAA;AAAA,MACE,YAAA;AAAA,MACE,SAAA,CAAU,EAAE,aAAA,EAAe,CAAA,EAAG,SAAS,CAAA;AAAA,MACzC,OAAA,CAAQ,MAAA,CAAO,WAAA,EAAa,CAAC,CAAA;AAAA,MAC7B,CAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA;AACF,GACF;AACA,EAAA,GAAA,CAAI,QAAA,EAAY,MAAA,CAAO,EAAE,aAAA,EAAe,EAAE,aAAA,EAAe,OAAA,EAAS,CAAA,EAAG,IAAI,QAAQ,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,OAAO,IAAI,CAAA;AACvG,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACE,QAAQ,EAAE,aAAA,EAAe,EAAE,kBAAA,EAAoB,UAAA,EAAY,GAAG,CAAA;AAAA,IAChE,IAAI,UAAU,CAAA;AAAA,IACd,CAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,SAAS,EAAE,aAAA,EAAe,EAAE,mBAAA,EAAqB,UAAA,EAAY,GAAG,CAAA;AAAA,IAClE,IAAI,WAAW,CAAA;AAAA,IACf,CAAA;AAAA,IACA,MAAM,CAAA,CAAE,qBAAA;AAAA,IACR,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACE,QAAQ,EAAE,aAAA,EAAe,EAAE,kBAAA,EAAoB,UAAA,EAAY,GAAG,CAAA;AAAA,IAChE,IAAI,UAAU,CAAA;AAAA,IACd,CAAA;AAAA,IACA,GAAA,GAAM,GAAA;AAAA,IACN,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,eAAe,CAAA,CAAE,qBAAA;AAAA,MACjB,eAAA,EAAiB,GAAA;AAAA,MACjB,qBAAqB,CAAA,CAAE;AAAA,KACxB,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,QAAA,CAAS;AAAA,MACT,eAAe,CAAA,CAAE,mBAAA;AAAA,MACjB,SAAA,EAAW,CAAA,GAAI,CAAA,CAAE,mBAAA,GAAsB,CAAA,CAAE;AAAA,KAC1C,CAAA;AAAA,IACD,IAAI,WAAW,CAAA;AAAA,IACf,CAAA;AAAA,IACA,MAAM,CAAA,CAAE,qBAAA;AAAA,IACR,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,eAAA;AAAA,IACE,YAAA,CAAa,EAAE,aAAA,EAAe,CAAA,CAAE,yBAAyB,UAAA,EAAY,CAAA,CAAE,sBAAsB,CAAA;AAAA,IAC/F,IAAI,eAAe,CAAA;AAAA,IACnB,CAAA,GAAI,CAAA;AAAA,IACJ,GAAA,GAAM,MAAM,CAAA,CAAE,yBAAA;AAAA,IACd,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,eAAA;AAAA,IACE,YAAA,CAAa,EAAE,aAAA,EAAe,CAAA,CAAE,qBAAqB,aAAA,EAAe,CAAA,CAAE,qBAAqB,CAAA;AAAA,IAC7F,IAAI,MAAM,CAAA;AAAA,IACV,CAAA,CAAE,iBAAA;AAAA,IACF,MAAM,CAAA,CAAE,qBAAA;AAAA,IACR,IAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,iBAAA,GAAoB,CAAA;AAC1C,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,gBAAA,GAAmB,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,GAAA,GAAM,GAAA,GAAM,CAAA,CAAE,yBAAA;AAChC,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,gBAAA,IAAoB,KAAA,KAAU,gBAAA;AACzD,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,aAAA;AAAA,IACf,QAAA,GAAW,CAAC,EAAE,CAAA,GAAI,CAAA,GAAI,GAAA,CAAA,EAAM,CAAA,GAAI,CAAA,GAAI,GAAG,CAAA,GAAI,CAAC,CAAC,KAAK,GAAG,CAAA;AAAA,IACrD,WAAW,CAAC,EAAE,IAAI,CAAA,GAAI,GAAA,CAAA,EAAM,IAAI,CAAA,GAAI,GAAG,IAAI,KAAA,KAAU,OAAA,GAAU,CAAC,SAAA,EAAW,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAA;AAAA,IAC5F,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAA;AAAA,GACF;AACF;;;AClNA,IAAM,GAAA,GAAM,CAAC,EAAA,EAAuB,EAAA,KAClC,GAAG,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAa,CAAC,CAAA,EAAG,EAAA,CAAG,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA;AAEzC,IAAM,aAAA,GAAgB,CAAC,UAAA,KACrB,CAAC,WAAA,EAAa,aAAa,CAAA,CAAE,QAAA,CAAS,UAAA,CAAW,WAAA,EAAa,CAAA;AAMhE,SAAS,aACP,UAAA,EACA,aAAA,EACA,WACA,wBAAA,EACA,uBAAA,EACA,gBACA,4BAAA,EACQ;AACR,EAAA,MAAM,EAAA,GAAK,wBAAA,GAA2B,CAAA,GAAI,4BAAA,GAA+B,SAAA;AACzE,EAAA,IACE,cAAc,UAAU,CAAA,IACxB,EAAE,cAAA,GAAiB,MACnB,uBAAA,KAA4B,wBAAA;AAE5B,IAAA,OAAO,EAAA;AACT,EAAA,MAAM,CAAA,GAAI,cAAA,IAAkB,uBAAA,GAA0B,CAAA,GAAI,wBAAA,GAA2B,CAAA,CAAA;AACrF,EAAA,MAAM,KAAK,aAAA,GAAgB,SAAA;AAC3B,EAAA,MAAM,EAAA,GAAK,gBAAgB,cAAA,GAAiB,4BAAA;AAC5C,EAAA,OAAA,CAAQ,EAAA,GAAK,MAAM,CAAA,GAAI,EAAA;AACzB;AAoBO,SAAS,SAAA,CAAU;AAAA,EACxB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa;AACf,CAAA,GAAmD,EAAC,EAAY;AAC9D,EAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC3F;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB;AAClB,CAAA,GAAqD,EAAC,EAAY;AAChE,EAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,GAAgB,CAAA,EAAG,aAAA,GAAgB,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC/F;AAGO,SAAS,UAAA,CAAW;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB,CAAA;AAAA,EAChB,iBAAA,GAAoB,CAAA;AAAA,EACpB,oBAAA,GAAuB,CAAA;AAAA,EACvB,oBAAA,GAAuB,CAAA;AAAA,EACvB,mBAAA,GAAsB,CAAA;AAAA,EACtB,iBAAA,GAAoB,CAAA;AAAA,EACpB,gBAAA,GAAmB,CAAA;AAAA,EACnB,wBAAA,GAA2B,CAAA;AAAA,EAC3B,uBAAA,GAA0B,CAAA;AAAA,EAC1B,cAAA,GAAiB,CAAA;AAAA,EACjB,4BAAA,GAA+B,CAAA;AAAA,EAC/B,iBAAA,GAAoB,CAAA;AAAA,EACpB,UAAA,GAAa;AACf,CAAA,GAII,EAAC,EAAY;AACf,EAAA,MAAM,GAAA,GAAM,oBAAA;AACZ,EAAA,MAAM,EAAA,GAAK,4BAAA;AACX,EAAA,MAAM,IAAA,GAAO,WAAA,GAAc,CAAA,GAAI,aAAA,GAAgB,oBAAoB,GAAA,GAAM,iBAAA;AACzE,EAAA,MAAM,QACJ,UAAA,GAAa,CAAA,GAAI,oBAAoB,mBAAA,GAAsB,gBAAA,GAAmB,iBAAiB,EAAA,GAAK,GAAA;AACtG,EAAA,MAAM,OAAO,KAAA,GAAQ,iBAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,YAAA;AAAA,IACZ,UAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,wBAAA;AAAA,IACA,uBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAS,wBAAA,GAA2B,CAAA,GAAI,EAAA,GAAK,GAAA;AACnD,EAAA,MAAM,MAAA,GAAS,iBAAA,GAAoB,CAAA,GAAI,EAAA,GAAK,GAAA;AAC5C,EAAA,MAAM,WAAA,GAAc,oBAAA,GAAuB,CAAA,GAAI,EAAA,GAAK,GAAA;AACpD,EAAA,MAAM,KAAA,GAAQ,WAAA,GAAc,CAAA,GAAI,aAAA,GAAgB,iBAAA,GAAoB,GAAA;AACpE,EAAA,MAAM,MAAA,GAAS,UAAA,GAAa,CAAA,GAAI,iBAAA,GAAoB,mBAAA,GAAsB,gBAAA;AAC1E,EAAA,MAAM,MAAA,GAAS,UAAA,GAAa,CAAA,GAAI,iBAAA,GAAoB,mBAAA;AACpD,EAAA,MAAM,KAAA,GAAQ,UAAA,GAAa,CAAA,GAAI,iBAAA,GAAoB,GAAA;AACnD,EAAA,OAAO,GAAA;AAAA,IACL;AAAA,MACE,CAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAA;AAAA,MACA,CAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,CAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA;AAAA,MACE,KAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAC,KAAA;AAAA,MACD,CAAC,KAAA;AAAA,MACD,CAAC,MAAA;AAAA,MACD,CAAC,MAAA;AAAA,MACD,CAAC,KAAA;AAAA,MACD,CAAC,KAAA;AAAA,MACD,CAAC,IAAA;AAAA,MACD,CAAC,IAAA;AAAA,MACD,IAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAIO,SAAS,OAAA,CAAQ;AAAA,EACtB,gBAAA,GAAmB,CAAA;AAAA,EACnB,UAAA,GAAa;AACf,CAAA,GAAwD,EAAC,EAAY;AACnE,EAAA,OAAO,eAAA;AAAA,IACL,CAAA;AAAA,IACA,gBAAA;AAAA,IACA,EAAE,aAAa,CAAA,GAAI,gBAAA,CAAA;AAAA,IACnB,aAAa,CAAA,GAAI;AAAA,GACnB;AACF;AAEO,SAASO,SAAAA,CAAS;AAAA,EACvB,gBAAA,GAAmB,CAAA;AAAA,EACnB,WAAA,GAAc,CAAA;AAAA,EACd,aAAA,GAAgB;AAClB,CAAA,GAAiF,EAAC,EAAY;AAC5F,EAAA,OAAO,eAAA;AAAA,IACL,EAAE,cAAc,CAAA,GAAI,aAAA,CAAA;AAAA,IACpB,cAAc,CAAA,GAAI,aAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB,CAAA;AAAA,EACnB,aAAA,GAAgB,CAAA;AAAA,EAChB,qBAAA,GAAwB,CAAA;AAAA,EACxB,oBAAA,GAAuB,CAAA;AAAA,EACvB,mBAAA,GAAsB,CAAA;AAAA,EACtB,iBAAA,GAAoB,CAAA;AAAA,EACpB,gBAAA,GAAmB,CAAA;AAAA,EACnB,wBAAA,GAA2B,CAAA;AAAA,EAC3B,uBAAA,GAA0B,CAAA;AAAA,EAC1B,cAAA,GAAiB,CAAA;AAAA,EACjB,4BAAA,GAA+B,CAAA;AAAA,EAC/B,sBAAA,GAAyB,KAAA;AAAA,EACzB,UAAA,GAAa;AACf,CAAA,GAII,EAAC,EAAY;AACf,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,EAAA,GAAK,4BAAA;AACX,EAAA,MAAM,GAAA,GAAM,qBAAA;AACZ,EAAA,MAAM,GAAA,GAAM,uBAAuB,CAAA,GAAI,EAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,WAAA,GAAc,CAAA,GAAI,aAAA,GAAgB,GAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAa,CAAA,GAAI,GAAA;AAC/B,EAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,IAAA,OAAO,GAAA;AAAA,MACL,CAAC,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AAAA,MAC5D,CAAC,KAAA,EAAO,KAAA,EAAO,CAAC,KAAA,EAAO,CAAC,KAAA,EAAO,EAAE,KAAA,GAAQ,CAAA,CAAA,EAAI,EAAE,KAAA,GAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAG,KAAA,GAAQ,GAAG,KAAK;AAAA,KACxF;AAAA,EACF;AACA,EAAA,MAAM,QAAQ,UAAA,GAAa,CAAA,GAAI,GAAA,GAAM,mBAAA,GAAsB,mBAAmB,cAAA,GAAiB,EAAA;AAC/F,EAAA,MAAM,KAAA,GAAQ,YAAA;AAAA,IACZ,UAAA;AAAA,IACA,KAAA;AAAA,IACA,CAAA;AAAA,IACA,wBAAA;AAAA,IACA,uBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,KAAA,GAAQ,0BAA0B,CAAA,GAAI,EAAA;AAC5C,EAAA,MAAM,MAAA,GAAS,2BAA2B,CAAA,GAAI,EAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,oBAAoB,CAAA,GAAI,EAAA;AACvC,EAAA,MAAM,MAAA,GAAS,QAAQ,cAAA,GAAiB,EAAA;AACxC,EAAA,OAAO,GAAA;AAAA,IACL;AAAA,MACE,CAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAA;AAAA,MACA,CAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA,GAAS,CAAA;AAAA,MACT,MAAA,GAAS,CAAA;AAAA,MACT,GAAA,GAAM,CAAA;AAAA,MACN,KAAA,GAAQ,CAAA;AAAA,MACR,KAAA,GAAQ,CAAA;AAAA,MACR,GAAA,GAAM,CAAA;AAAA,MACN,MAAA,GAAS,CAAA;AAAA,MACT,MAAA,GAAS,CAAA;AAAA,MACT,KAAA;AAAA,MACA,CAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA;AAAA,MACE,KAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAC,aAAa,CAAA,GAAI,GAAA;AAAA,MAClB,CAAC,aAAa,CAAA,GAAI,GAAA;AAAA,MAClB,CAAC,QAAQ,cAAA,GAAiB,EAAA;AAAA,MAC1B,CAAC,QAAQ,cAAA,GAAiB,EAAA;AAAA,MAC1B,CAAC,KAAA;AAAA,MACD,CAAC,KAAA;AAAA,MACD,CAAC,KAAA,GAAQ,CAAA;AAAA,MACT,CAAC,KAAA,GAAQ,CAAA;AAAA,MACT,CAAC,QAAQ,cAAA,GAAiB,EAAA;AAAA,MAC1B,CAAC,KAAA,GAAQ,cAAA,GAAiB,EAAA,GAAK,gBAAA;AAAA,MAC/B,CAAC,UAAA,GAAa,CAAA,GAAI,GAAA,GAAM,CAAA;AAAA,MACxB,CAAC,UAAA,GAAa,CAAA,GAAI,GAAA,GAAM,CAAA;AAAA,MACxB,KAAA,GAAQ,CAAA;AAAA,MACR,KAAA,GAAQ,CAAA;AAAA,MACR,KAAA,GAAQ,iBAAiB,EAAA,GAAK,gBAAA;AAAA,MAC9B,QAAQ,cAAA,GAAiB,EAAA;AAAA,MACzB,KAAA,GAAQ,CAAA;AAAA,MACR,KAAA,GAAQ,CAAA;AAAA,MACR;AAAA;AACF,GACF;AACF;AAEO,SAAS,kBAAA,CAAmB;AAAA,EACjC,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB,CAAA;AAAA,EACnB,aAAA,GAAgB,CAAA;AAAA,EAChB,qBAAA,GAAwB,CAAA;AAAA,EACxB,oBAAA,GAAuB,CAAA;AAAA,EACvB,mBAAA,GAAsB,CAAA;AAAA,EACtB,iBAAA,GAAoB,CAAA;AAAA,EACpB,gBAAA,GAAmB,CAAA;AAAA,EACnB,wBAAA,GAA2B,CAAA;AAAA,EAC3B,uBAAA,GAA0B,CAAA;AAAA,EAC1B,cAAA,GAAiB,CAAA;AAAA,EACjB,4BAAA,GAA+B,CAAA;AAAA,EAC/B,oBAAA,GAAuB,CAAA;AAAA,EACvB,sBAAA,GAAyB,IAAA;AAAA,EACzB,UAAA,GAAa;AACf,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,EAAA,GAAK,4BAAA;AACX,EAAA,MAAM,GAAA,GAAM,qBAAA;AACZ,EAAA,MAAM,GAAA,GAAM,oBAAA;AACZ,EAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,IAAA,MAAMC,IAAAA,GAAM,uBAAuB,CAAA,GAAI,EAAA;AACvC,IAAA,MAAMC,MAAAA,GAAQ,WAAA,GAAc,CAAA,GAAI,aAAA,GAAgB,GAAA,GAAM,GAAA;AACtD,IAAA,MAAMC,MAAAA,GAAQ,UAAA,GAAa,CAAA,GAAI,GAAA,GAAM,GAAA;AACrC,IAAA,OAAO,GAAA;AAAA,MACL,CAACF,IAAAA,EAAKC,MAAAA,EAAOA,MAAAA,EAAOD,IAAAA,EAAKA,IAAAA,EAAKC,MAAAA,GAAQ,CAAA,EAAGA,MAAAA,GAAQ,CAAA,EAAGD,IAAAA,EAAKA,IAAG,CAAA;AAAA,MAC5D,CAACE,MAAAA,EAAOA,MAAAA,EAAO,CAACA,MAAAA,EAAO,CAACA,MAAAA,EAAO,EAAEA,MAAAA,GAAQ,CAAA,CAAA,EAAI,EAAEA,MAAAA,GAAQ,CAAA,CAAA,EAAIA,SAAQ,CAAA,EAAGA,MAAAA,GAAQ,GAAGA,MAAK;AAAA,KACxF;AAAA,EACF;AACA,EAAA,MAAM,QAAQ,UAAA,GAAa,CAAA,GAAI,MAAM,mBAAA,GAAsB,gBAAA,GAAmB,iBAAiB,EAAA,GAAK,GAAA;AACpG,EAAA,MAAM,KAAA,GAAQ,YAAA;AAAA,IACZ,UAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,wBAAA;AAAA,IACA,uBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAS,wBAAA,GAA2B,CAAA,GAAI,EAAA,GAAK,GAAA;AACnD,EAAA,MAAM,MAAA,GAAS,iBAAA,GAAoB,CAAA,GAAI,EAAA,GAAK,GAAA;AAC5C,EAAA,MAAM,GAAA,GAAM,oBAAA,GAAuB,CAAA,GAAI,EAAA,GAAK,GAAA;AAC5C,EAAA,MAAM,KAAA,GAAQ,WAAA,GAAc,CAAA,GAAI,aAAA,GAAgB,GAAA,GAAM,GAAA;AACtD,EAAA,MAAM,UAAA,GAAa,WAAA,GAAc,CAAA,GAAI,GAAA,GAAM,gBAAgB,GAAA,GAAM,CAAA;AACjE,EAAA,MAAM,MAAA,GAAS,UAAA,GAAa,CAAA,GAAI,GAAA,GAAM,mBAAA,GAAsB,gBAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,UAAA,GAAa,CAAA,GAAI,GAAA,GAAM,mBAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,UAAA,GAAa,CAAA,GAAI,GAAA,GAAM,GAAA;AACrC,EAAA,MAAM,OAAO,KAAA,GAAQ,CAAA;AACrB,EAAA,OAAO,GAAA;AAAA,IACL;AAAA,MACE,CAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAA;AAAA,MACA,CAAA;AAAA,MACA,KAAA,GAAQ,CAAA;AAAA,MACR,MAAA,GAAS,CAAA;AAAA,MACT,MAAA,GAAS,CAAA;AAAA,MACT,GAAA,GAAM,CAAA;AAAA,MACN,UAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA,GAAM,CAAA;AAAA,MACN,MAAA,GAAS,CAAA;AAAA,MACT,MAAA,GAAS,CAAA;AAAA,MACT,KAAA,GAAQ,CAAA;AAAA,MACR,CAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA;AAAA,MACE,KAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,CAAC,KAAA;AAAA,MACD,CAAC,KAAA;AAAA,MACD,CAAC,MAAA;AAAA,MACD,CAAC,MAAA;AAAA,MACD,CAAC,KAAA;AAAA,MACD,CAAC,KAAA;AAAA,MACD,CAAC,IAAA;AAAA,MACD,CAAC,IAAA;AAAA,MACD,CAAC,MAAA;AAAA,MACD,CAAC,MAAA;AAAA,MACD,EAAE,KAAA,GAAQ,CAAA,CAAA;AAAA,MACV,EAAE,KAAA,GAAQ,CAAA,CAAA;AAAA,MACV,KAAA,GAAQ,CAAA;AAAA,MACR,KAAA,GAAQ,CAAA;AAAA,MACR,MAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEO,IAAM,aAAA,GAAgB,CAAC,EAAE,gBAAA,GAAmB,CAAA,EAAE,GAAmC,EAAC,KACvF,eAAA,CAAgB,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,gBAAgB,CAAA;AAErC,IAAM,oBAAA,GAAuB,CAAC,EAAE,gBAAA,GAAmB,CAAA,EAAE,GAAmC,EAAC,KAC9F,eAAA,CAAgB,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,gBAAgB,CAAA;AAIrC,IAAM,WAAW,CAAC;AAAA,EACvB,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB;AACrB,CAAA,GAAwD,OACtD,eAAA,CAAgB,CAAA,EAAG,kBAAkB,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAE/D,SAAS,aAAA,CAAc;AAAA,EAC5B,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB,CAAA;AAAA,EACnB,cAAA,GAAiB,CAAA;AAAA,EACjB,eAAA,GAAkB,CAAA;AAAA,EAClB,mBAAA,GAAsB;AACxB,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,gBAAA,GAAmB,CAAA;AAC7B,EAAA,MAAM,CAAA,GAAI,mBAAmB,CAAA,GAAI,eAAA;AACjC,EAAA,MAAM,IAAI,mBAAA,GAAsB,CAAA;AAChC,EAAA,MAAM,EAAA,GAAK,sBAAsB,CAAA,GAAI,gBAAA;AACrC,EAAA,MAAM,GAAA,GAAM,aAAa,CAAA,GAAI,cAAA;AAC7B,EAAA,OAAO,GAAA;AAAA,IACL,CAAC,CAAC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACzE,CAAC,CAAC,GAAA,EAAK,CAAC,IAAI,CAAC,EAAA,EAAI,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,IAAI,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,EAAA,EAAI,CAAC,GAAA,EAAK,CAAC,GAAG;AAAA,GAC7F;AACF;AAEO,IAAM,gBAAgB,CAAC;AAAA,EAC5B,cAAA,GAAiB,CAAA;AAAA,EACjB,gBAAA,GAAmB;AACrB,CAAA,GAA4D,OAC1D,eAAA,CAAgB,CAAC,mBAAmB,CAAA,EAAG,gBAAA,GAAmB,CAAA,EAAG,CAAA,EAAG,cAAc,CAAA;AAEzE,IAAM,UAAU,CAAC;AAAA,EACtB,YAAA,GAAe,CAAA;AAAA,EACf,gBAAA,GAAmB;AACrB,CAAA,GAA0D,EAAC,KACzD,eAAA,CAAgB,CAAC,gBAAA,GAAmB,CAAA,EAAG,gBAAA,GAAmB,CAAA,EAAG,CAAC,YAAA,GAAe,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA;AAE3F,IAAM,kBAAkB,CAAC;AAAA,EAC9B,qBAAA,GAAwB,CAAA;AAAA,EACxB,gBAAA,GAAmB;AACrB,CAAA,GAAmE,OACjE,eAAA,CAAgB,CAAC,wBAAwB,CAAA,EAAG,qBAAA,GAAwB,CAAA,EAAG,CAAA,EAAG,gBAAgB,CAAA;AAIrF,IAAM,mBAAmB,CAAC;AAAA,EAC/B,SAAA,GAAY,CAAA;AAAA,EACZ,WAAA,GAAc;AAChB,CAAA,GAAkD,EAAC,KACjD,GAAA,CAAI,CAAC,CAAA,EAAG,WAAA,EAAa,GAAG,CAAC,CAAA,EAAG,CAAC,SAAA,GAAY,GAAG,CAAA,EAAG,CAAC,YAAY,CAAA,EAAG,SAAA,GAAY,CAAC,CAAC,CAAA;AAExE,IAAM,iBAAiB,CAAC;AAAA,EAC7B,oBAAA,GAAuB,CAAA;AAAA,EACvB,gBAAA,GAAmB;AACrB,CAAA,GAAkE,OAChE,eAAA,CAAgB,CAAC,uBAAuB,CAAA,EAAG,oBAAA,GAAuB,CAAA,EAAG,CAAA,EAAG,gBAAgB,CAAA;AAEnF,IAAM,cAAc,CAAC;AAAA,EAC1B,iBAAA,GAAoB,CAAA;AAAA,EACpB,gBAAA,GAAmB;AACrB,CAAA,GAA+D,OAC7D,eAAA,CAAgB,CAAC,oBAAoB,CAAA,EAAG,iBAAA,GAAoB,CAAA,EAAG,CAAA,EAAG,gBAAgB,CAAA;AAE7E,IAAM,gBAAgB,CAAC;AAAA,EAC5B,wBAAA,GAA2B,CAAA;AAAA,EAC3B,uBAAA,GAA0B,CAAA;AAAA,EAC1B,cAAA,GAAiB;AACnB,CAAA,GAII,EAAC,KACH,GAAA;AAAA,EACE;AAAA,IACE,CAAC,wBAAA,GAA2B,CAAA;AAAA,IAC5B,wBAAA,GAA2B,CAAA;AAAA,IAC3B,uBAAA,GAA0B,CAAA;AAAA,IAC1B,CAAC,uBAAA,GAA0B,CAAA;AAAA,IAC3B,CAAC,wBAAA,GAA2B;AAAA,GAC9B;AAAA,EACA,CAAC,CAAA,EAAG,CAAA,EAAG,cAAA,EAAgB,gBAAgB,CAAC;AAC1C,CAAA;AAEK,SAAS,oBAAA,CAAqB;AAAA,EACnC,oBAAA,GAAuB,CAAA;AAAA,EACvB,mBAAA,GAAsB,CAAA;AAAA,EACtB,iBAAA,GAAoB,CAAA;AAAA,EACpB,gBAAA,GAAmB,CAAA;AAAA,EACnB,wBAAA,GAA2B,CAAA;AAAA,EAC3B,uBAAA,GAA0B,CAAA;AAAA,EAC1B,cAAA,GAAiB,CAAA;AAAA,EACjB,gBAAA,GAAmB;AACrB,CAAA,GAA+C,EAAC,EAAY;AAC1D,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,GAAI;AAAA,IACvB,oBAAA,GAAuB,CAAA;AAAA,IACvB,iBAAA,GAAoB,CAAA;AAAA,IACpB,wBAAA,GAA2B,CAAA;AAAA,IAC3B,uBAAA,GAA0B;AAAA,GAC5B;AACA,EAAA,MAAM,MAAM,mBAAA,GAAsB,gBAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,sBAAsB,gBAAA,GAAmB,cAAA;AACvD,EAAA,OAAO,GAAA;AAAA,IACL;AAAA,MACE,CAAC,EAAA;AAAA,MACD,CAAC,EAAA;AAAA,MACD,CAAC,EAAA;AAAA,MACD,CAAC,EAAA;AAAA,MACD,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA;AAAA,MACA,EAAA,GAAK,CAAA;AAAA,MACL,EAAA,GAAK,CAAA;AAAA,MACL,EAAA,GAAK,CAAA;AAAA,MACL,EAAA,GAAK,CAAA;AAAA,MACL,EAAE,EAAA,GAAK,CAAA,CAAA;AAAA,MACP,EAAE,EAAA,GAAK,CAAA,CAAA;AAAA,MACP,EAAE,EAAA,GAAK,CAAA,CAAA;AAAA,MACP,EAAE,EAAA,GAAK,CAAA,CAAA;AAAA,MACP,CAAC;AAAA,KACH;AAAA,IACA;AAAA,MACE,CAAA;AAAA,MACA,mBAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,mBAAA;AAAA,MACA,CAAA;AAAA,MACA,CAAA;AAAA,MACA,mBAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA,GAAQ,CAAA;AAAA,MACR,KAAA,GAAQ,CAAA;AAAA,MACR,GAAA;AAAA,MACA,mBAAA;AAAA,MACA,CAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;;;ACtiBO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,sBAAA;AAAA,EACA,iBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,yBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAA0B;AAAA,EACrC,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF;AAIO,IAAM,mBAAA,GAAsB;AAAA,EACjC,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,sBAAA;AAAA,EACA,iBAAA;AAAA,EACA,yBAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF;AAGA,IAAM,KAAA,GAAQ,SAAA;AACd,IAAM,KAAA,GAAQ,SAAA;AAGP,IAAM,uBAAA,GAAqE;AAAA,EAChF,eAAA,EAAiB,WAAA;AAAA,EACjB,WAAA,EAAa,KAAA;AAAA,EACb,cAAA,EAAgB,KAAA;AAAA,EAChB,cAAA,EAAgB,KAAA;AAAA,EAChB,iBAAA,EAAmB,KAAA;AAAA,EACnB,iBAAA,EAAmB,KAAA;AAAA,EACnB,QAAA,EAAU,KAAA;AAAA,EACV,QAAA,EAAU,KAAA;AAAA,EACV,YAAA,EAAc,KAAA;AAAA,EACd,oBAAA,EAAsB,WAAA;AAAA,EACtB,eAAA,EAAiB,WAAA;AAAA,EACjB,uBAAA,EAAyB,WAAA;AAAA,EACzB,eAAA,EAAiB,KAAA;AAAA,EACjB,SAAA,EAAW,KAAA;AAAA,EACX,eAAA,EAAiB,KAAA;AAAA,EACjB,iBAAA,EAAmB,KAAA;AAAA,EACnB,QAAA,EAAU,KAAA;AAAA,EACV,cAAA,EAAgB,KAAA;AAAA,EAChB,eAAA,EAAiB,KAAA;AAAA,EACjB,YAAA,EAAc,KAAA;AAAA,EACd,eAAA,EAAiB,KAAA;AAAA,EACjB,uBAAA,EAAyB,KAAA;AAAA,EACzB,iBAAA,EAAmB;AACrB,CAAA;;;ACjFA,IAAMC,aAAAA,GAAkD;AAAA,EACtD,6BAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAMN,WAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAGxC,IAAM,GAAA,GAAM,CAAC,IAAA,EAAc,EAAA,EAAY,EAAA,GAAK,CAAA,KAC1C,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAA,CAAO,EAAA,GAAK,IAAA,IAAQ,EAAA,GAAK,KAAK,CAAA,GAAI,CAAC,CAAA,EAAE,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,IAAA,GAAO,CAAA,GAAI,EAAE,CAAA;AAIvG,IAAMO,eAAAA,GAAuD;AAAA,EAC3D,OAAA,EAAS,SAAA;AAAA,EACT,kBAAA,EAAoB,SAAA;AAAA,EACpB,OAAA,EAAS,SAAA;AAAA,EACT,kBAAA,EAAoB,SAAA;AAAA,EACpB,QAAA,EAAU,SAAA;AAAA,EACV,gBAAA,EAAkB,SAAA;AAAA,EAClB,gBAAA,EAAkB;AACpB,CAAA;AAQO,SAAS,aAAA,CACd,MAAA,EACA,IAAA,GAAqF,EAAC,EAC/E;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACP,QAAAA,CAAQ,gBAAA,EAAkB,GAAG,CAAA,EAAG;AACnC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,4BAA4B,MAAM,CAAA,oBAAA,EAAuB,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACtF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,QAAAA,CAAQ,uBAAA,EAAyB,KAAK,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,mCAAmC,IAAA,CAAK,YAAY,uBAAuB,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC/G;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,WAAA,CAAY,cAAA,CAAe,GAAG,CAAA,EAAG,IAAA,CAAK,SAASM,aAAY,CAAA;AAErE,EAAA,MAAM,QAAA,GAAW,CAAA,CAAE,cAAA,GACf,EAAE,GAAG,yBAAyB,oBAAA,EAAsB,SAAA,EAAW,uBAAA,EAAyB,SAAA,EAAU,GAClG,uBAAA;AACJ,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,EAAU,IAAA,CAAK,YAAY,CAAA;AACtD,EAAA,MAAM,MAAM,CAAC,CAAA,KAA+B,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAChE,EAAA,aAAA,CAAc,KAAK,aAAa,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AAEjD,EAAA,MAAM,IAAI,CAAA,CAAE,YAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,WAAA;AACZ,EAAA,MAAM,KAAK,CAAA,CAAE,cAAA;AACb,EAAA,MAAM,MAAM,CAAA,CAAE,uBAAA;AACd,EAAA,MAAM,GAAA,GAAM,EAAE,sBAAA,IAA0B,CAAA;AACxC,EAAA,MAAM,QAAQ,CAAA,CAAE,oBAAA;AAChB,EAAA,MAAM,MAAM,CAAA,CAAE,qBAAA;AACd,EAAA,MAAM,MAAM,CAAA,CAAE,kBAAA;AACd,EAAA,MAAM,KAAK,CAAA,CAAE,4BAAA;AACb,EAAA,MAAM,MAAM,CAAA,CAAE,gBAAA;AACd,EAAA,MAAM,KAAK,CAAA,CAAE,gCAAA;AACb,EAAA,MAAM,UAAA,GAAa,EAAE,WAAA,IAAe,WAAA;AACpC,EAAA,MAAM,OAAO,CAAA,CAAE,mBAAA;AACf,EAAA,MAAM,KAAK,CAAA,CAAE,YAAA;AACb,EAAA,MAAM,KAAK,CAAA,CAAE,aAAA;AACb,EAAA,MAAM,OAAO,CAAA,CAAE,6BAAA;AACf,EAAA,MAAM,MAAM,CAAA,CAAE,eAAA;AACd,EAAA,MAAM,MAAM,CAAA,CAAE,wBAAA;AAGd,EAAA,MAAM,aAAa,GAAA,CAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,GAAG,GAAG,CAAA;AACxC,EAAA,MAAM,UAAA,GAAa,CAAC,GAAG,GAAA,CAAI,GAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,GAAI,CAAA,CAAE,2BAAA,IAA+B,EAAG,CAAA,CAAE,MAAA;AAAA,IAClF,CAAC,CAAA,KAAM,CAAA,IAAK,GAAA,IAAO,CAAA,CAAA,KAAO,KAAK,CAAA,GAAI;AAAA,GACrC;AACA,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,GAAI,GAAA,KAAQ,CAAA,IAAK,CAAA,KAAM,IAAI,CAAC,CAAA;AAC3E,EAAA,IAAI,WAAA,GAAc,IAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,CAC3B,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,GAAI,GAAA,KAAQ,CAAC,CAAA,CAC3B,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAA,GAAI,IAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AACxC,EAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,CAAC,CAAA,gBAAiB,CAAC,CAAA,EAAG,GAAG,WAAW,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AAGpF,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAwB;AACrC,IAAA,IAAI,CAAA,GAAI,MAAM,CAAA,EAAG,OAAO,MAAc,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAClD,IAAA,MAAM,OAAO,KAAA,CAAc,CAAA,GAAI,IAAI,GAAG,CAAA,CAAE,KAAK,IAAI,CAAA;AACjD,IAAA,OAAO,CAAC,GAAG,IAAA,EAAM,CAAA,EAAG,GAAG,IAAI,CAAA;AAAA,EAC7B,CAAA;AACA,EAAA,MAAM,GAAA,GAAM,CAAC,OAAA,EAA4B,cAAA,EAAwB,GAAA,KAC/D,QAAQ,MAAA,KAAW,CAAA,GACf,EAAC,GACD,KAAA,CAAM;AAAA,IACJ,OAAA,EAAS,OAAA;AAAA,IACT,cAAA,EAAgB,CAAC,cAAc,CAAA;AAAA,IAC/B,GAAA,EAAK,CAAC,GAAG,CAAA;AAAA,IACT,IAAA,EAAM,WAAA;AAAA,IACN,IAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,MAAM;AAAA,GAC3B,CAAA;AACP,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,GAAA,CAAI,EAAE,cAAA,EAAgB,CAAA,EAAG,KAAK,CAAA,EAAG,GAAG,GAAA,CAAI,CAAA,CAAE,WAAA,EAAa,GAAA,EAAK,IAAI,CAAC,CAAA;AACpF,EAAA,MAAM,QAAsE,EAAC;AAC7E,EAAA,IAAI,QAAA,GAAwC,MAAA;AAC5C,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,EAAG,QAAA,GAAW,QAAA;AAC7B,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,EAAA;AACJ,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,EAAA,GAAK,CAAA,CAAE,IAAA,GAAO,IAAA,GAAO,KAAA,GAAQ,CAAA,GAAI,EAAA;AACjC,MAAA,EAAA,GAAK,CAAA,CAAE,IAAA,GAAO,IAAA,GAAO,KAAA,GAAQ,CAAA;AAC7B,MAAA,QAAA,GAAW,OAAA;AAAA,IACb,CAAA,MAAA,IAAW,aAAa,QAAA,EAAU;AAChC,MAAA,EAAA,GAAK,CAAA,CAAE,OAAO,EAAA,GAAK,CAAA;AACnB,MAAA,EAAA,GAAK,CAAA,CAAE,OAAO,EAAA,GAAK,CAAA;AACnB,MAAA,QAAA,GAAW,MAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,EAAA,GAAK,CAAA,CAAE,IAAA,GAAO,IAAA,GAAO,KAAA,GAAQ,CAAA;AAC7B,MAAA,EAAA,GAAK,CAAA,CAAE,IAAA,GAAO,IAAA,GAAO,KAAA,GAAQ,CAAA,GAAI,EAAA;AACjC,MAAA,QAAA,GAAW,MAAA;AAAA,IACb;AACA,IAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,CAAA,CAAE,GAAA,GACf,CAAC,CAAA,GAAI,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,CAAA,GAAI,IAAA,GAAO,MAAM,EAAE,CAAA,GACtC,CAAC,CAAC,CAAA,GAAI,CAAA,GAAI,IAAA,EAAM,CAAC,CAAA,GAAI,CAAA,GAAI,IAAA,GAAO,GAAA,GAAM,EAAE,CAAA;AAC5C,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE,CAAA;AAC3C,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,gBAAgB,CAAA,CAAE,cAAA;AAAA,MAClB,MAAM,IAAA,GAAO,aAAA,CAAc,IAAA,EAAM,GAAG,IAAI,CAAA,GAAI;AAAA,KAC7C,CAAA;AAAA,EACH;AAEA,EAAA,MAAMX,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,MACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,MAAA,KAEA,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,OAAA,EAAS,OAAA,EAAS,UAAU,QAAA,EAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACjE,EAAE,GAAI,MAAA,KAAW,MAAA,GAAY,KAAK,EAAE,MAAA,EAAO,EAAI,GAAI,OAAO,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,EAAC;AAAG,GAClF;AAEF,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,oBAAA,EAAsB,EAAA;AAAA,IACtB,mBAAA,EAAqB,GAAA;AAAA,IACrB,iBAAA,EAAmB,EAAA;AAAA,IACnB,gBAAA,EAAkB,GAAA;AAAA,IAClB,wBAAA,EAA0B,EAAA;AAAA,IAC1B,yBAAyB,CAAA,CAAE,2BAAA;AAAA,IAC3B,cAAA,EAAgB,GAAA;AAAA,IAChB,4BAAA,EAA8B;AAAA,GAChC;AACA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,KAAA;AAAA,IACH,WAAA,EAAa,CAAA;AAAA,IACb,UAAA,EAAY,CAAA;AAAA,IACZ,aAAA,EAAe,EAAA;AAAA,IACf,qBAAA,EAAuB,GAAA;AAAA,IACvB,sBAAA,EAAwB,EAAE,yBAAA,IAA6B,IAAA;AAAA,IACvD;AAAA,GACF;AACA,EAAA,MAAM,KAAA,GAAQ,IAAI,CAAA,GAAI,GAAA;AACtB,EAAA,MAAMa,aAAc,SAAA,CAAU,EAAE,aAAa,CAAA,EAAG,UAAA,EAAY,GAAG,CAAA;AAC/D,EAAA,MAAMC,WAAY,OAAA,CAAQ,EAAE,YAAY,CAAA,EAAG,aAAA,EAAe,IAAI,CAAA;AAC9D,EAAA,MAAM,SAAA,GAAc,cAAc,EAAE,cAAA,EAAgB,EAAE,sBAAA,EAAwB,gBAAA,EAAkB,OAAO,CAAA;AAGvG,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,GAAG,MAAA;AAAA,MACH,iBAAA,EAAmB,GAAA;AAAA,MACnB,oBAAA,EAAsB,GAAA;AAAA,MACtB,mBAAmB,CAAA,CAAE;AAAA,KACtB,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAI,aAAa;AAAA,GACnB;AACA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,YAAY,EAAE,GAAG,MAAA,EAAQ,gBAAA,EAAkB,KAAK,CAAA;AAAA,IAClD,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAI,cAAc;AAAA,GACpB;AACA,EAAA,GAAA;AAAA,IACE,sBAAA;AAAA,IACE,kBAAA,CAAmB,EAAE,GAAG,MAAA,EAAQ,kBAAkB,KAAA,EAAO,oBAAA,EAAsB,KAAK,CAAA;AAAA,IACtF,IAAI,sBAAsB,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAI,sBAAsB;AAAA,GAC5B;AACA,EAAA,GAAA,CAAI,YAAA,EAAcD,YAAW,GAAA,CAAI,gBAAgB,GAAG,KAAA,GAAQ,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC9E,EAAA,GAAA,CAAI,YAAA,EAAcA,YAAW,GAAA,CAAI,gBAAgB,GAAG,IAAA,GAAO,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC7E,EAAA,GAAA;AAAA,IACE,iBAAA;AAAA,IACE,eAAe,EAAE,oBAAA,EAAsB,EAAA,EAAI,gBAAA,EAAkB,KAAK,CAAA;AAAA,IACpE,IAAI,iBAAiB,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAI,iBAAiB;AAAA,GACvB;AACA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,YAAY,EAAE,iBAAA,EAAmB,EAAA,EAAI,gBAAA,EAAkB,KAAK,CAAA;AAAA,IAC9D,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,KAAA,GAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAI,cAAc;AAAA,GACpB;AACA,EAAA,GAAA;AAAA,IACE,iBAAA;AAAA,IACE,cAAc,KAAK,CAAA;AAAA,IACrB,IAAI,iBAAiB,CAAA;AAAA,IACrB,CAAA;AAAA,IACA,QAAQ,GAAA,GAAM,GAAA;AAAA,IACd,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAI,iBAAiB;AAAA,GACvB;AACA,EAAA,GAAA;AAAA,IACE,mBAAA;AAAA,IACE,gBAAgB,EAAE,qBAAA,EAAuB,EAAA,EAAI,gBAAA,EAAkB,OAAO,CAAA;AAAA,IACxE,IAAI,mBAAmB,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,QAAQ,GAAA,GAAM,GAAA;AAAA,IACd,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAI,mBAAmB;AAAA,GACzB;AACA,EAAA,GAAA;AAAA,IACE,yBAAA;AAAA,IACE,qBAAqB,EAAE,GAAG,KAAA,EAAO,gBAAA,EAAkB,IAAI,CAAA;AAAA,IACzD,IAAI,yBAAyB,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAI,yBAAyB;AAAA,GAC/B;AACA,EAAA,GAAA;AAAA,IACE,iBAAA;AAAA,IACE,aAAA,CAAc,EAAE,gBAAA,EAAkB,GAAA,EAAK,CAAA;AAAA,IACzC,IAAI,iBAAiB,CAAA;AAAA,IACrB,IAAI,CAAA,GAAI,EAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAI,iBAAiB;AAAA,GACvB;AACA,EAAA,GAAA;AAAA,IACE,yBAAA;AAAA,IACE,oBAAA,CAAqB,EAAE,gBAAA,EAAkB,KAAA,EAAO,CAAA;AAAA,IAClD,IAAI,yBAAyB,CAAA;AAAA,IAC7B,IAAI,CAAA,GAAI,EAAA;AAAA,IACR,KAAA,GAAQ,GAAA;AAAA,IACR,IAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAI,yBAAyB;AAAA,GAC/B;AACA,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACEN,SAAAA,CAAS,EAAE,gBAAA,EAAkB,GAAA,EAAK,aAAa,CAAA,EAAG,aAAA,EAAe,IAAI,CAAA;AAAA,IACvE,IAAI,UAAU,CAAA;AAAA,IACd,CAAA;AAAA,IACA,CAAA,GAAI,CAAA;AAAA,IACJ,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAI,UAAU;AAAA,GAChB;AACA,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACE,QAAQ,EAAE,gBAAA,EAAkB,GAAA,EAAK,UAAA,EAAY,GAAG,CAAA;AAAA,IAClD,IAAI,UAAU,CAAA;AAAA,IACd,IAAI,CAAA,GAAI,EAAA;AAAA,IACR,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAI,UAAU;AAAA,GAChB;AACA,EAAA,GAAA,CAAI,SAAA,EAAWO,QAAAA,EAAS,GAAA,CAAI,mBAAmB,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,CAAA,GAAK,EAAA,GAAK,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACpF,EAAA,GAAA,CAAI,SAAA,EAAWA,QAAAA,EAAS,GAAA,CAAI,mBAAmB,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACjF,EAAA,MAAM,YAAc,aAAA,CAAc;AAAA,IAChC,UAAA,EAAY,CAAA;AAAA,IACZ,gBAAA,EAAkB,KAAA;AAAA,IAClB,gBAAgB,CAAA,CAAE,2BAAA;AAAA,IAClB,iBAAiB,CAAA,CAAE,6BAAA;AAAA,IACnB,qBAAqB,CAAA,CAAE;AAAA,GACxB,CAAA;AACD,EAAA,KAAA,MAAW,EAAA,IAAM,UAAA,EAAY,GAAA,CAAI,iBAAA,EAAmB,SAAA,EAAW,GAAA,CAAI,iBAAiB,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AACzG,EAAA,MAAM,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,8BAA8B,CAAA,CAAE,sBAAA;AACzD,EAAA,KAAA,MAAW,EAAA,IAAM,UAAA;AACf,IAAA,GAAA,CAAI,iBAAA,EAAmB,SAAA,EAAW,GAAA,CAAI,iBAAiB,CAAA,EAAG,IAAI,CAAA,GAAI,EAAA,EAAI,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAA;AAC1F,EAAA,KAAA,MAAW,EAAA,IAAM,UAAA;AACf,IAAA,GAAA;AAAA,MACE,iBAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAI,iBAAiB,CAAA;AAAA,MACrB,IAAI,CAAA,GAAI,EAAA;AAAA,MACR,EAAE,2BAAA,GAA8B,CAAA;AAAA,MAChC,IAAA;AAAA,MACA;AAAA,KACF;AACF,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,SAAS,EAAE,UAAA,EAAY,GAAG,gBAAA,EAAkB,CAAA,CAAE,qBAAqB,CAAA;AAAA,IACrE,IAAI,WAAW,CAAA;AAAA,IACf,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACE,OAAA,CAAQ,EAAE,YAAA,EAAc,CAAA,CAAE,kBAAkB,CAAA,EAAG,gBAAA,EAAkB,OAAO,CAAA;AAAA,IAC1E,IAAI,UAAU,CAAA;AAAA,IACd,CAAA,GAAI,CAAA,IAAK,CAAA,CAAE,iBAAA,IAAqB,CAAA,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,MAAA,GAAS,YAAA;AAAA,MACb,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAa,CAAC,CAAA,GAAI,MAAA,EAAQ,CAAA,GAAI,MAAM,CAAC,CAAA;AAAA,MACtD;AAAA,KACF;AACA,IAAA,MAAM,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAC,CAAA;AACjC,IAAA,MAAM,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAC,CAAA;AACjC,IAAA,MAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,GAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAA,EAAG,IAAA,CAAK,IAAI,GAAG,EAAE,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,CAAC,CAAA;AAChG,IAAA,UAAA,CAAWd,SAAAA,EAAU,sBAAsB,eAAA,CAAgB,GAAA,EAAK,KAAK,GAAA,EAAK,GAAG,GAAG,WAAA,EAAa;AAAA,MAC3F,OAAA,EAAS,CAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACV,CAAA;AACD,IAAA,MAAM,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA,GAAI,CAAA,CAAE,IAAA;AACrC,IAAA,OAAA,CAAQA,WAAU,gBAAA,EAAkB;AAAA,MAClC,IAAA,EAAM,IAAI,gBAAgB,CAAA;AAAA,MAC1B,CAAA,EAAA,CAAI,MAAM,GAAA,IAAO,CAAA;AAAA,MACjB,CAAA,EAAA,CAAI,MAAM,GAAA,IAAO,CAAA;AAAA,MACjB,MAAM,CAAA,CAAE,OAAA;AAAA,MACR,YAAY,CAAA,CAAE,WAAA;AAAA;AAAA,MAEd,MAAA,EAAQ,CAAC,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,GAAG,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,GAAM,GAAG,CAAC,CAAA;AAAA,MACjD,QAAA,EAAU,WAAW,CAAA,CAAE;AAAA,KACxB,CAAA;AAAA,EACH;AACA,EAAA,MAAM,KAAA,GAAU,iBAAiB,EAAE,SAAA,EAAW,EAAE,UAAA,EAAY,WAAA,EAAa,CAAA,CAAE,YAAA,EAAc,CAAA;AACzF,EAAA,MAAM,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,IAAA,GAAO,KAAK,CAAA,CAAE,mBAAA;AACrC,EAAA,KAAA,MAAW,EAAA,IAAM,UAAA;AACf,IAAA,GAAA;AAAA,MACE,mBAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAI,mBAAmB,CAAA;AAAA,MACvB,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,CAAE,kBAAA;AAAA,MACf,MAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAGF,EAAA,MAAM,GAAA,GAAM,EAAE,mBAAA,IAAuB,CAAA;AACrC,EAAA,MAAM,MAAM,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,GAAA,GAAM,MAAM,KAAA,GAAQ,GAAA;AAC7C,EAAA,MAAM,GAAA,GAAM,IAAI,CAAA,GAAI,GAAA,GAAM,MAAM,GAAA,GAAM,GAAA,GAAM,GAAA,GAAM,EAAA,GAAK,KAAA,GAAQ,GAAA;AAC/D,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA;AACxB,EAAA,MAAM,MAAA,GAA8F;AAAA,IAClG,MAAM,CAAC,CAAC,CAAC,GAAA,EAAK,GAAG,GAAG,KAAK,CAAA;AAAA,IACzB,YAAA,EAAc;AAAA,MACZ,CAAC,EAAE,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,CAAA,EAAM,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA;AAAA,MACtC,CAAC,EAAE,CAAA,GAAI,IAAI,GAAA,CAAA,EAAM,CAAA,GAAI,IAAI,GAAG;AAAA,KAC9B;AAAA,IACA,SAAS,CAAC,CAAC,CAAA,EAAG,GAAG,GAAG,KAAK,CAAA;AAAA,IACzB,SAAS,CAAC,CAAC,CAAC,GAAA,EAAK,CAAC,GAAG,KAAK,CAAA;AAAA,IAC1B,OAAA,EAAS,CAAC,CAAC,CAAA,GAAI,IAAI,EAAA,EAAI,GAAG,GAAG,KAAK,CAAA;AAAA,IAClC,QAAA,EAAU,CAAC,CAAC,CAAC,GAAA,EAAK,EAAE,CAAA,GAAI,CAAA,CAAA,GAAK,EAAE,CAAA,EAAG,KAAK;AAAA,GACzC;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC1C,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,OAAOY,eAAAA,CAAe,QAAQ,KAAM,QAAuB,CAAA;AAC5E,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,cAAc,EAAA,EAAI,EAAA,EAAI,MAAM,KAAK,CAAA;AAClD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AAGzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,UAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAZ;AAAA,GACF;AACF;;;AChcA,IAAMI,UAAS,CAAC,EAAE,OAAA,EAAS,GAAG,GAAE,KAC9B,OAAA,KAAY,MAAA,GAAY,YAAA,CAAa,CAAC,CAAA,GAAI,YAAA,CAAa,EAAE,GAAG,CAAA,EAAG,SAAS,CAAA;AAG1E,IAAMW,IAAAA,GAAM,CAAC,EAAA,EAAuB,EAAA,KAClC,GAAG,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAa,CAAC,CAAA,EAAG,EAAA,CAAG,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA;AAWlC,SAAS,aAAA,CAAc;AAAA,EAC5B,UAAA,GAAa,CAAA;AAAA,EACb,SAAA,GAAY,CAAA;AAAA,EACZ,aAAA,GAAgB,CAAA;AAAA,EAChB,WAAA,GAAc,CAAA;AAAA,EACd;AACF,CAAA,GAAc,EAAC,EAAY;AACzB,EAAA,MAAM,aAAa,UAAA,GAAa,CAAA;AAChC,EAAA,MAAM,YAAY,SAAA,GAAY,CAAA;AAC9B,EAAA,MAAM,KAAK,UAAA,GAAa,aAAA;AACxB,EAAA,MAAM,KAAK,SAAA,GAAY,aAAA;AACvB,EAAA,OAAO;AAAA,IACL,CAAC,CAAC,WAAA,GAAc,CAAA,EAAG,SAAS,CAAA;AAAA,IAC5B,GAAGX,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC9E,CAAC,CAAC,UAAA,EAAY,CAAC,CAAA;AAAA,IACf,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAC,EAAA,EAAI,CAAC,EAAE,CAAA,EAAG,OAAO,CAAA,EAAG,GAAA,EAAK,KAAK,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC/E,CAAC,CAAC,WAAA,GAAc,CAAA,EAAG,CAAC,SAAS,CAAA;AAAA,IAC7B,CAAC,CAAC,WAAA,GAAc,CAAA,EAAG,SAAS;AAAA,GAC9B;AACF;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA,GAAY,CAAA;AAAA,EACZ,gBAAA,GAAmB;AACrB,CAAA,GAAuD,EAAC,EAAY;AAClE,EAAA,OAAO,eAAA,CAAgB,CAAC,gBAAA,GAAmB,CAAA,EAAG,gBAAA,GAAmB,GAAG,CAAC,SAAA,GAAY,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA;AACnG;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,UAAA,GAAa,CAAA;AAAA,EACb,SAAA,GAAY,CAAA;AAAA,EACZ,aAAA,GAAgB,CAAA;AAAA,EAChB,WAAA,GAAc,CAAA;AAAA,EACd;AACF,CAAA,GAAc,EAAC,EAAY;AACzB,EAAA,MAAM,aAAa,UAAA,GAAa,CAAA;AAChC,EAAA,MAAM,YAAY,SAAA,GAAY,CAAA;AAC9B,EAAA,MAAM,KAAK,UAAA,GAAa,aAAA;AACxB,EAAA,MAAM,KAAK,SAAA,GAAY,aAAA;AACvB,EAAA,OAAO;AAAA,IACL,CAAC,WAAA,GAAc,CAAA,EAAG,SAAS,CAAA;AAAA,IAC3B,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC7E,CAAC,YAAY,CAAC,CAAA;AAAA,IACd,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,IAAA,EAAM,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC/E,CAAC,WAAA,GAAc,CAAA,EAAG,CAAC,SAAS,CAAA;AAAA,IAC5B,CAAC,WAAA,GAAc,CAAA,EAAG,SAAS;AAAA,GAC7B;AACF;AAIO,SAAS,MAAA,CAAO;AAAA,EACrB,UAAA,GAAa,CAAA;AAAA,EACb,SAAA,GAAY,CAAA;AAAA,EACZ,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,MAAM,aAAa,UAAA,GAAa,CAAA;AAChC,EAAA,MAAM,YAAY,SAAA,GAAY,CAAA;AAC9B,EAAA,MAAM,KAAK,UAAA,GAAa,aAAA;AACxB,EAAA,MAAM,KAAK,SAAA,GAAY,aAAA;AACvB,EAAA,MAAM,QAAQ,aAAA,GAAgB,gBAAA;AAC9B,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,SAAS,CAAA;AAAA,IACb,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC7E,CAAC,YAAY,CAAC,CAAA;AAAA,IACd,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,IAAA,EAAM,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC/E,CAAC,CAAA,EAAG,CAAC,SAAS,CAAA;AAAA,IACd,CAAC,CAAA,EAAG,CAAC,SAAA,GAAY,gBAAgB,CAAA;AAAA,IACjC,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,MAAM,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,SAAS,CAAA;AAAA,IACvE,CAAC,UAAA,GAAa,gBAAA,EAAkB,CAAC,CAAA;AAAA,IACjC,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,SAAS,CAAA;AAAA,IACrE,CAAC,CAAA,EAAG,SAAA,GAAY,gBAAgB,CAAA;AAAA,IAChC,CAAC,GAAG,SAAS;AAAA,GACf;AACF;AAIO,SAAS,UAAA,CAAW;AAAA,EACzB,gBAAA,GAAmB,CAAA;AAAA,EACnB,SAAA,GAAY,CAAA;AAAA,EACZ,oBAAA,GAAuB;AACzB,CAAA,GAAsF,EAAC,EAAY;AACjG,EAAA,OAAO,eAAA;AAAA,IACL,CAAC,gBAAA,GAAmB,CAAA;AAAA,IACpB,gBAAA,GAAmB,CAAA;AAAA,IACnB,oBAAA,GAAuB,CAAA;AAAA,IACvB,SAAA,GAAY;AAAA,GACd;AACF;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAAiE,EAAC,EAAY;AAC5E,EAAA,OAAO;AAAA,IACL,CAAC,eAAe,CAAC,CAAA;AAAA,IACjB,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IACzE,CAAC,CAAC,aAAA,EAAe,CAAC,CAAA;AAAA,IAClB,CAAC,CAAC,aAAA,GAAgB,gBAAA,EAAkB,CAAC,CAAA;AAAA,IACrC,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,aAAA,GAAgB,gBAAA,EAAkB,SAAS,CAAA;AAAA,IAC5F,CAAC,eAAe,CAAC;AAAA,GACnB;AACF;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,SAAA,GAAY,CAAA;AAAA,EACZ,gBAAA,GAAmB;AACrB,CAAA,GAAuD,EAAC,EAAY;AAClE,EAAA,OAAO,gBAAgB,CAAA,EAAG,gBAAA,EAAkB,CAAC,SAAA,GAAY,CAAA,EAAG,YAAY,CAAC,CAAA;AAC3E;AAGO,SAASY,SAAAA,CAAS;AAAA,EACvB,UAAA,GAAa,CAAA;AAAA,EACb,SAAA,GAAY,CAAA;AAAA,EACZ,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB,OAAA,GAAU,CAAA;AAAA,EACV;AACF,CAAA,GAMU,EAAC,EAAY;AACrB,EAAA,MAAM,aAAa,UAAA,GAAa,CAAA;AAChC,EAAA,MAAM,YAAY,SAAA,GAAY,CAAA;AAC9B,EAAA,MAAM,KAAK,UAAA,GAAa,aAAA;AACxB,EAAA,MAAM,KAAK,SAAA,GAAY,aAAA;AACvB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,OAAO,IAAI,gBAAA,GAAmB,CAAA;AACpD,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,eAAA,CAAgB,CAAC,gBAAA,GAAmB,CAAA,EAAG,mBAAmB,CAAA,EAAG,CAAC,WAAW,SAAS,CAAA;AAAA,EAC3F;AACA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,GAAI,EAAA;AAClC,EAAA,MAAM,MAAA,GAAS,QAAQ,gBAAA,GAAmB,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,QAAQ,gBAAA,GAAmB,CAAA;AAExC,EAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,aAAa,IAAI,IAAA,CAAK,EAAA;AAC5D,EAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,aAAa,IAAI,IAAA,CAAK,EAAA;AACxD,EAAA,OAAO;AAAA,IACL,GAAGZ,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,EAAE,CAAA,EAAG,KAAA,EAAO,GAAA,GAAM,YAAY,GAAA,EAAK,GAAA,GAAM,UAAU,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IACvG,GAAGA,OAAAA,CAAO;AAAA,MACR,MAAA,EAAQ,CAAC,EAAA,EAAI,CAAC,EAAE,CAAA;AAAA,MAChB,OAAO,IAAA,GAAO,QAAA;AAAA,MACd,KAAK,IAAA,GAAO,UAAA;AAAA,MACZ,CAAA,EAAG,aAAA;AAAA,MACH;AAAA,KACD;AAAA,GACH,CAAE,GAAA,CAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAa,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG,CAAC,CAAC,CAAA;AACrD;AAEO,SAAS,yBAAA,CAA0B;AAAA,EACxC,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB,CAAA;AAAA,EACnB,cAAA,GAAiB,CAAA;AAAA,EACjB,aAAA,GAAgB,CAAA;AAAA,EAChB,OAAA,GAAU;AACZ,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,MAAM,KAAK,cAAA,GAAiB,CAAA;AAC5B,EAAA,MAAM,KAAK,aAAA,GAAgB,CAAA;AAC3B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAC3B,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,EAAA,GAAK;AAAA,IACT,EAAA;AAAA,IACA,UAAA,GAAa,CAAA;AAAA,IACb,UAAA,GAAa,CAAA;AAAA,IACb,KAAK,CAAA,GAAI,CAAA;AAAA,IACT,KAAK,CAAA,GAAI,CAAA;AAAA,IACT,UAAA,GAAa,CAAA;AAAA,IACb,UAAA,GAAa,CAAA;AAAA,IACb,EAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,KAAK,CAAC,EAAA,EAAI,IAAI,EAAA,GAAK,CAAA,EAAG,KAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,IAAI,EAAE,CAAA;AAClE,EAAA,OAAOW,IAAAA;AAAA,IACL,EAAA,CAAG,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,EAAE,CAAA;AAAA,IACpB;AAAA,GACF;AACF;AAEO,SAAS,kBAAA,CAAmB;AAAA,EACjC,gBAAA,GAAmB,CAAA;AAAA,EACnB,gBAAA,GAAmB,CAAA;AAAA,EACnB,gBAAA,GAAmB,CAAA;AAAA,EACnB,iBAAA,GAAoB,CAAA;AAAA,EACpB,gBAAA,GAAmB;AACrB,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,MAAM,EAAA,GAAK,gBAAA;AACX,EAAA,MAAM,EAAA,GAAK,gBAAA;AACX,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,IAAA,GAAOA,IAAAA;AAAA,IACX,CAAC,EAAA,EAAI,EAAA,GAAK,iBAAA,EAAmB,EAAA,GAAK,iBAAA,EAAmB,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,IAC3E,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,gBAAA,EAAkB,EAAA,GAAK,gBAAA,EAAkB,EAAE;AAAA,GAC3E;AACA,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,aAAA,CAAc,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,CAAC,CAAA;AACxE;AAIO,SAAS,iBAAA,CAAkB;AAAA,EAChC,aAAA,GAAgB,CAAA;AAAA,EAChB;AACF,CAAA,GAAsC,EAAC,EAAY;AACjD,EAAA,OAAOX,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAC/E;AAaA,IAAM,cAAc,CAAC,aAAA,EAAuB,oBAC1C,aAAA,KAAkB,CAAA,IAAK,KAAK,GAAA,CAAI,eAAA,GAAkB,aAAa,CAAA,GAAI,IAC/D,CAAA,GACA,IAAA,CAAK,KAAK,eAAA,GAAkB,aAAa,IAAI,IAAA,CAAK,EAAA;AAGjD,SAAS,iBAAA,CAAkB;AAAA,EAChC,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB,WAAA,GAAc,EAAA;AAAA,EACd,YAAA,GAAe,CAAA;AAAA,EACf,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,UAAA,GAAa,CAAA;AAAA,EACb;AACF,CAAA,GAAgB,EAAC,EAAY;AAC3B,EAAA,MAAM,KAAK,WAAA,GAAc,CAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,aAAA,EAAe,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,EAAA,GAAK,UAAA;AACX,EAAA,MAAM,CAAA,GAAI,aAAA;AACV,EAAA,MAAM,KAAK,aAAA,GAAgB,gBAAA;AAC3B,EAAA,MAAM,MAAM,CAAC,KAAA,EAAeN,MAAa,EAAA,KACvCM,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,GAAG,KAAA,EAAO,GAAA,EAAAN,MAAK,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AACvD,EAAA,QAAQ,WAAA,CAAY,aAAY;AAAG,IACjC,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAGiB,IAAAA,CAAI,CAAC,CAAA,EAAG,CAAC,YAAY,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAAA,QACnC,GAAG,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,GAAA,GAAM,OAAO,CAAC,CAAA;AAAA,QAClC,GAAGA,IAAAA;AAAA,UACD,CAAC,CAAC,YAAA,EAAc,CAAA,EAAG,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,EAAA,EAAI,EAAE,KAAK,CAAA,CAAA,EAAI,EAAE,EAAA,GAAK,CAAA,CAAA,EAAI,CAAC,YAAY,CAAA;AAAA,UACnE,CAAC,CAAC,EAAA,EAAI,CAAC,EAAA,EAAI,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,KAAK,CAAA,GAAI,UAAA,EAAY,CAAC,EAAA,GAAK,CAAA,GAAI,UAAA,EAAY,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAC;AAAA,SAC3F;AAAA,QACA,GAAG,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,GAAA,GAAM,OAAO,EAAE,CAAA;AAAA,QACnC,GAAGA,IAAAA;AAAA,UACD,CAAC,CAAC,YAAA,EAAc,EAAE,KAAK,CAAA,CAAA,EAAI,EAAE,EAAA,GAAK,CAAA,CAAA,EAAI,CAAC,EAAA,EAAI,CAAC,EAAA,EAAI,GAAG,CAAC,CAAA;AAAA,UACpD,CAAC,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,GAAG,EAAA,GAAK,CAAA,GAAI,UAAA,EAAY,EAAA,GAAK,IAAI,UAAA,EAAY,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,GAAG,EAAE;AAAA;AAC/E,OACF;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,CAAC,CAAA;AAAA,QAClB,GAAG,GAAA,CAAI,GAAA,EAAK,GAAA,GAAM,OAAO,EAAE,CAAA;AAAA,QAC3B,GAAGA,IAAAA;AAAA,UACD,CAAC,CAAC,EAAA,GAAK,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,IAAI,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAAA,UAC1C,CAAC,CAAC,EAAA,EAAI,CAAC,IAAI,CAAC,EAAA,GAAK,GAAG,CAAC,EAAA,GAAK,GAAG,CAAC,EAAA,GAAK,IAAI,UAAA,EAAY,CAAC,KAAK,CAAA,GAAI,UAAA,EAAY,CAAC,EAAE;AAAA,SAC9E;AAAA,QACA,GAAG,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,GAAA,GAAM,OAAO,EAAE,CAAA;AAAA,QACnC,GAAGA,IAAAA;AAAA,UACD,CAAC,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,EAAA,EAAI,CAAA,EAAG,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAAA,UAC1C,CAAC,EAAA,EAAI,EAAA,GAAK,CAAA,GAAI,UAAA,EAAY,EAAA,GAAK,CAAA,GAAI,UAAA,EAAY,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,CAAA,EAAG,IAAI,EAAE;AAAA,SACvE;AAAA,QACA,GAAG,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,KAAK,EAAE,CAAA;AAAA,QAC3B,GAAGA,IAAAA,CAAI,CAAC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC;AAAA,OAC3B;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAG,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,CAAC,CAAA;AAAA,QAClB,GAAG,GAAA,CAAI,GAAA,EAAK,GAAA,GAAM,OAAO,EAAE,CAAA;AAAA,QAC3B,GAAGA,IAAAA;AAAA,UACD,CAAC,CAAC,EAAA,EAAI,CAAC,KAAK,UAAA,EAAY,CAAC,KAAK,UAAA,EAAY,CAAC,IAAI,CAAC,EAAA,EAAI,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,UACzE,CAAC,CAAC,EAAA,EAAI,CAAC,IAAI,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,GAAI,YAAY,CAAC,EAAA,GAAK,IAAI,UAAA,EAAY,CAAC,EAAA,EAAI,CAAC,EAAE;AAAA,SACnF;AAAA,QACA,GAAG,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,GAAA,GAAM,OAAO,EAAE,CAAA;AAAA,QACnC,GAAGA,IAAAA;AAAA,UACD,CAAC,CAAC,EAAA,EAAI,CAAC,KAAK,UAAA,EAAY,CAAC,KAAK,UAAA,EAAY,CAAC,IAAI,CAAC,EAAA,EAAI,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,UACzE,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,GAAK,GAAG,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,CAAA,GAAI,UAAA,EAAY,EAAA,GAAK,CAAA,GAAI,UAAA,EAAY,IAAI,EAAE;AAAA,SAC3E;AAAA,QACA,GAAG,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,KAAK,EAAE,CAAA;AAAA,QAC3B,GAAGA,IAAAA,CAAI,CAAC,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC;AAAA,OAC3B;AAAA,IACF;AACE,MAAA,OAAO,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA;AAEpB;AAGO,SAAS,cAAA,CAAe;AAAA,EAC7B,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB,WAAA,GAAc,EAAA;AAAA,EACd,YAAA,GAAe,CAAA;AAAA,EACf,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,UAAA,GAAa,CAAA;AAAA,EACb;AACF,CAAA,GAAgB,EAAC,EAAY;AAC3B,EAAA,MAAM,KAAK,WAAA,GAAc,CAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,aAAA,EAAe,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,EAAA,GAAK,UAAA;AACX,EAAA,MAAM,KAAK,aAAA,GAAgB,gBAAA;AAC3B,EAAA,MAAM,MAAM,CAAC,KAAA,EAAejB,IAAAA,KAAyBM,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,GAAG,KAAA,EAAO,GAAA,EAAAN,MAAK,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAC1G,EAAA,QAAQ,WAAA,CAAY,aAAY;AAAG,IACjC,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAGiB,IAAAA;AAAA,UACD,CAAC,CAAA,EAAG,CAAC,EAAA,EAAI,CAAC,EAAA,EAAI,EAAE,EAAA,GAAK,CAAA,CAAA,EAAI,EAAE,EAAA,GAAK,CAAA,CAAE,CAAA;AAAA,UAClC,CAAC,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,CAAA,EAAG,EAAA,GAAK,CAAA,GAAI,UAAA,EAAY,EAAA,GAAK,CAAA,GAAI,UAAA,EAAY,EAAA,GAAK,CAAC;AAAA,SACnE;AAAA,QACA,GAAG,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,QAC/B,GAAGA,IAAAA;AAAA,UACD,CAAC,EAAE,EAAA,GAAK,CAAA,CAAA,EAAI,EAAE,EAAA,GAAK,CAAA,CAAA,EAAI,CAAC,EAAA,EAAI,CAAC,EAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AAAA,UACrC,CAAC,CAAC,EAAA,GAAK,GAAG,CAAC,EAAA,GAAK,IAAI,UAAA,EAAY,CAAC,KAAK,CAAA,GAAI,UAAA,EAAY,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,EAAA,GAAK,CAAA,EAAG,KAAK,CAAC;AAAA;AAChF,OACF;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAO;AAAA,QACL,GAAGA,IAAAA,CAAI,CAAC,CAAA,EAAG,CAAC,YAAY,CAAA,EAAG,CAAC,EAAA,EAAI,EAAE,CAAC,CAAA;AAAA,QACnC,GAAG,GAAA,CAAI,GAAA,GAAM,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,QAC/B,GAAGA,IAAAA,CAAI,CAAC,CAAC,YAAA,EAAc,CAAC,CAAA,EAAG,CAAC,CAAC,EAAA,EAAI,CAAC,EAAE,CAAC;AAAA,OACvC;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAO,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,IACrB;AACE,MAAA,OAAO,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA;AAEpB;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAAiE,EAAC,EAAY;AAC5E,EAAA,OAAO;AAAA,IACL,GAAGX,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC7E,CAAC,CAAA,EAAG,CAAC,aAAa,CAAA;AAAA,IAClB,CAAC,CAAA,EAAG,CAAC,aAAA,GAAgB,gBAAgB,CAAA;AAAA,IACrC,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAK,GAAA,EAAK,CAAA,EAAG,aAAA,GAAgB,gBAAA,EAAkB,SAAS;AAAA,GAClG;AACF;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB,aAAA,GAAgB,CAAA;AAAA,EAChB,kBAAA,GAAqB,CAAA;AAAA,EACrB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,MAAM,MAAM,kBAAA,GAAqB,CAAA;AACjC,EAAA,MAAM,MAAM,GAAA,GAAM,gBAAA;AAClB,EAAA,MAAM,QAAQ,aAAA,KAAkB,CAAA,IAAK,KAAK,GAAA,CAAI,GAAA,GAAM,aAAa,CAAA,GAAI,CAAA;AACrE,EAAA,MAAM,MAAA,GAAS,QAAQ,CAAA,GAAI,IAAA,CAAK,KAAK,GAAA,GAAM,aAAa,IAAI,IAAA,CAAK,EAAA;AACjE,EAAA,MAAM,MAAA,GAAS,QAAQ,CAAA,GAAI,IAAA,CAAK,KAAK,GAAA,GAAM,aAAa,IAAI,IAAA,CAAK,EAAA;AACjE,EAAA,MAAM,CAAA,GAAI,aAAA;AACV,EAAA,MAAM,MAAM,CAAC,KAAA,EAAeN,MAAa,EAAA,KACvCM,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,GAAG,KAAA,EAAO,GAAA,EAAAN,MAAK,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AACvD,EAAA,MAAM,IAAA,GAAgB;AAAA,IACpB,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,GAAG,GAAA,CAAI,GAAA,EAAK,GAAA,GAAM,QAAQ,CAAC,CAAA;AAAA,IAC3B,CAAC,CAAC,GAAA,EAAK,CAAA,GAAI,aAAa,CAAA;AAAA,IACxB,CAAC,CAAC,GAAA,EAAK,CAAA,GAAI,aAAa,CAAA;AAAA,IACxB,GAAG,GAAA,CAAI,GAAA,GAAM,MAAA,EAAQ,GAAA,GAAM,QAAQ,CAAC,CAAA;AAAA,IACpC,CAAC,CAAC,GAAA,EAAK,CAAC,IAAI,aAAa,CAAA;AAAA,IACzB,CAAC,CAAC,GAAA,EAAK,CAAC,IAAI,aAAa,CAAA;AAAA,IACzB,GAAG,GAAA,CAAI,GAAA,GAAM,MAAA,EAAQ,KAAK,CAAC,CAAA;AAAA,IAC3B,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,gBAAgB,CAAA;AAAA,IACzB,GAAG,GAAA,CAAI,GAAA,EAAK,GAAA,EAAK,IAAI,gBAAgB,CAAA;AAAA,IACrC,CAAC,GAAG,CAAC;AAAA,GACP;AACA,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,aAAA,CAAc,IAAA,EAAM,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AACxE;AAEO,SAAS,sBAAA,CAAuB;AAAA,EACrC,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAAiE,EAAC,EAAY;AAC5E,EAAA,MAAM,IAAA,GAAgB;AAAA,IACpB,GAAGM,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC7E,CAAC,CAAA,EAAG,CAAC,aAAA,GAAgB,gBAAgB,CAAA;AAAA,IACrC,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAK,GAAA,EAAK,CAAA,EAAG,aAAA,GAAgB,gBAAA,EAAkB,SAAS,CAAA;AAAA,IAChG,CAAC,CAAA,EAAG,aAAA,GAAgB,gBAAgB,CAAA;AAAA,IACpC,CAAC,GAAG,aAAa;AAAA,GACnB;AACA,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,aAAA,CAAc,IAAA,EAAM,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AACxE;AAEO,SAAS,wBAAA,CAAyB;AAAA,EACvC,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB,QAAA,GAAW,CAAA;AAAA,EACX;AACF,CAAA,GAAoF,EAAC,EAAY;AAC/F,EAAA,MAAM,QAAQ,aAAA,GAAgB,gBAAA;AAC9B,EAAA,MAAM,SAAS,KAAA,GAAQ,QAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,aAAA,KAAkB,CAAA,IAAK,IAAA,CAAK,IAAI,MAAA,GAAS,KAAK,CAAA,GAAI,CAAA,GAAI,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,KAAK,IAAI,IAAA,CAAK,EAAA;AACzG,EAAA,OAAO;AAAA,IACL,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,GAAM,OAAO,GAAA,EAAK,GAAA,GAAM,OAAO,CAAA,EAAG,KAAA,EAAO,SAAS,CAAA;AAAA,IACrF,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,GAAM,OAAO,GAAA,EAAK,GAAA,GAAM,OAAO,CAAA,EAAG,KAAA,EAAO,SAAS;AAAA,GACvF;AACF;AAUO,SAAS,SAAA,CAAU;AAAA,EACxB,aAAA,GAAgB,CAAA;AAAA,EAChB,cAAA,GAAiB,CAAA;AAAA,EACjB,aAAA,GAAgB,CAAA;AAAA,EAChB,SAAA,GAAY,CAAA;AAAA,EACZ,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAAc,EAAC,EAAY;AACzB,EAAA,MAAM,KAAK,cAAA,GAAiB,CAAA;AAC5B,EAAA,MAAM,EAAA,GAAK,YAAY,aAAA,GAAgB,gBAAA;AACvC,EAAA,MAAM,EAAA,GAAK,aAAA,GAAgB,CAAA,GAAI,aAAA,GAAgB,gBAAA,GAAmB,CAAA;AAClE,EAAA,MAAM,KAAK,aAAA,GAAgB,gBAAA;AAC3B,EAAA,OAAO;AAAA,IACL,CAAC,CAAA,EAAG,EAAA,GAAK,gBAAgB,CAAA;AAAA,IACzB,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,MAAM,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC9E,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAChF,CAAC,CAAA,EAAG,EAAE,EAAA,GAAK,gBAAA,CAAiB,CAAA;AAAA,IAC5B,CAAC,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACP,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,OAAO,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAA,IACrE,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAA,IACnE,CAAC,GAAG,EAAE,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,EAAA,GAAK,gBAAgB;AAAA,GAC3B;AACF;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,aAAA,GAAgB,CAAA;AAAA,EAChB,cAAA,GAAiB,CAAA;AAAA,EACjB,aAAA,GAAgB,CAAA;AAAA,EAChB,SAAA,GAAY,CAAA;AAAA,EACZ,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAAc,EAAC,EAAY;AACzB,EAAA,MAAM,KAAK,cAAA,GAAiB,CAAA;AAC5B,EAAA,MAAM,EAAA,GAAK,YAAY,aAAA,GAAgB,gBAAA;AACvC,EAAA,MAAM,EAAA,GAAK,aAAA,GAAgB,CAAA,GAAI,aAAA,GAAgB,gBAAA,GAAmB,CAAA;AAClE,EAAA,MAAM,KAAK,aAAA,GAAgB,gBAAA;AAC3B,EAAA,OAAO;AAAA,IACL,CAAC,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACP,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,OAAO,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAA,IACrE,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,IAAA,EAAM,CAAA,EAAG,EAAA,EAAI,SAAS,CAAA;AAAA,IACnE,CAAC,GAAG,EAAE;AAAA,GACR;AACF;AAIO,SAAS,kBAAA,CAAmB;AAAA,EACjC,gBAAA,GAAmB,CAAA;AAAA,EACnB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa;AACf,CAAA,GAAa,EAAC,EAAY;AACxB,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,OAAOW,IAAAA;AAAA,IACL,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,CAAA,EAAG,WAAA,EAAa,WAAA,EAAa,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,IAC5E,CAAC,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,YAAY,CAAA,GAAI,CAAA,GAAI,UAAA,EAAY,CAAA,EAAG,GAAG,CAAA,GAAI,UAAA,EAAY,CAAA,GAAI,UAAA,EAAY,GAAG,CAAC;AAAA,GACxF;AACF;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,gBAAA,GAAmB,CAAA;AAAA,EACnB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa;AACf,CAAA,GAAa,EAAC,EAAY;AACxB,EAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,EAAG,cAAc,CAAA,EAAG,gBAAA,EAAkB,mBAAmB,UAAU,CAAA;AAC3G;AAEO,SAAS,iBAAA,CAAkB;AAAA,EAChC,gBAAA,GAAmB,CAAA;AAAA,EACnB,gBAAA,GAAmB,CAAA;AAAA,EACnB,oBAAA,GAAuB,CAAA;AAAA,EACvB,eAAA,GAAkB;AACpB,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,IAAI,oBAAA,GAAuB,CAAA;AACjC,EAAA,MAAM,CAAA,GAAI,eAAA;AACV,EAAA,OAAOA,IAAAA;AAAA,IACL;AAAA,MACE,CAAA;AAAA,MACA,IAAI,gBAAA,GAAmB,CAAA;AAAA,MACvB,IAAI,gBAAA,GAAmB,CAAA;AAAA,MACvB,CAAA,GAAI,gBAAA;AAAA,MACJ,CAAA,GAAI,gBAAA;AAAA,MACJ,CAAA,GAAI,CAAA;AAAA,MACJ,CAAA,GAAI,CAAA;AAAA,MACJ,CAAA;AAAA,MACA,CAAA;AAAA,MACA,CAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,CAAC,EAAE,CAAA,GAAI,CAAA,GAAI,IAAI,EAAE,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,EAAE,CAAA,GAAI,IAAI,CAAA,CAAE;AAAA,GACnG;AACF;AAGO,SAAS,cAAA,CAAe;AAAA,EAC7B,gBAAA,GAAmB,CAAA;AAAA,EACnB,gBAAA,GAAmB,CAAA;AAAA,EACnB,eAAA,GAAkB;AACpB,CAAA,GAAwF,EAAC,EAAY;AACnG,EAAA,OAAO,eAAA;AAAA,IACL,CAAC,gBAAA,GAAmB,CAAA;AAAA,IACpB,gBAAA,GAAmB,CAAA;AAAA,IACnB,CAAC,gBAAA;AAAA,IACD,EAAE,gBAAA,GAAmB,eAAA;AAAA,GACvB;AACF;AAEO,SAAS,kBAAA,CAAmB;AAAA,EACjC,gBAAA,GAAmB,CAAA;AAAA,EACnB,kBAAA,GAAqB,CAAA;AAAA,EACrB,iBAAA,GAAoB;AACtB,CAAA,GAA4F,EAAC,EAAY;AACvG,EAAA,OAAO,eAAA;AAAA,IACL,CAAC,kBAAA,GAAqB,CAAA;AAAA,IACtB,kBAAA,GAAqB,CAAA;AAAA,IACrB,CAAC,gBAAA;AAAA,IACD,EAAE,gBAAA,GAAmB,iBAAA;AAAA,GACvB;AACF;;;AC9kBO,IAAM,eAAA,GAAkB;AAAA,EAC7B,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,6BAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,2BAAA;AAAA,EACA,6BAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,wBAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;AAIO,IAAM,qBAAA,GAAwB;AAAA,EACnC,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF;AAGA,IAAM,GAAA,GAAM,SAAA;AACZ,IAAM,IAAA,GAAO,SAAA;AACb,IAAM,GAAA,GAAM,SAAA;AAGL,IAAM,iBAAA,GAAoB;AAAA,EAC/B,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,qBAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF;AAIO,IAAM,qBAAA,GAAiE;AAAA,EAC5E,eAAA,EAAiB,WAAA;AAAA,EACjB,MAAA,EAAQ,SAAA;AAAA,EACR,SAAA,EAAW,GAAA;AAAA,EACX,SAAA,EAAW,GAAA;AAAA,EACX,SAAA,EAAW,GAAA;AAAA,EACX,WAAA,EAAa,GAAA;AAAA,EACb,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,GAAA;AAAA,EACX,oBAAA,EAAsB,GAAA;AAAA,EACtB,mBAAA,EAAqB,GAAA;AAAA,EACrB,gBAAA,EAAkB,SAAA;AAAA,EAClB,cAAA,EAAgB,GAAA;AAAA,EAChB,mBAAA,EAAqB,IAAA;AAAA,EACrB,iBAAA,EAAmB,GAAA;AAAA,EACnB,mBAAA,EAAqB,GAAA;AAAA,EACrB,qBAAA,EAAuB,IAAA;AAAA,EACvB,qBAAA,EAAuB,GAAA;AAAA,EACvB,YAAA,EAAc,GAAA;AAAA,EACd,UAAA,EAAY,GAAA;AAAA,EACZ,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc,GAAA;AAAA,EACd,YAAA,EAAc,GAAA;AAAA,EACd,kBAAA,EAAoB,GAAA;AAAA,EACpB,kBAAA,EAAoB,GAAA;AAAA,EACpB,qBAAA,EAAuB;AACzB,CAAA;;;AC/FA,IAAMV,WAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAIxC,IAAMO,eAAAA,GAAuD;AAAA,EAC3D,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,OAAA;AAAA,EACb,aAAA,EAAe,OAAA;AAAA,EACf,aAAA,EAAe,OAAA;AAAA,EACf,aAAA,EAAe,OAAA;AAAA,EACf,aAAA,EAAe;AACjB,CAAA;AAMO,SAAS,UAAA,CACd,MAAA,EACA,IAAA,GAA+E,EAAC,EACzE;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACP,QAAAA,CAAQ,cAAA,EAAgB,GAAG,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,0BAA0B,MAAM,CAAA,oBAAA,EAAuB,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAClF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,QAAAA,CAAQ,qBAAA,EAAuB,KAAK,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,iCAAiC,IAAA,CAAK,YAAY,uBAAuB,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC3G;AAAA,EACF;AAGA,EAAA,MAAM,CAAA,GAAI,YAAY,YAAA,CAAa,GAAG,GAAG,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AACzD,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,qBAAA,EAAuB,IAAA,CAAK,YAAY,CAAA;AACnE,EAAA,MAAM,MAAM,CAAC,CAAA,KAA6B,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC9D,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,UAAA,IAAc,IAAI,CAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AACjD,EAAA,MAAM,OAAO,CAAC,EAAA,KAAuB,YAAA,CAAa,EAAA,EAAI,MAAM,KAAK,CAAA;AAEjE,EAAA,MAAM,IAAI,CAAA,CAAE,WAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,UAAA;AACZ,EAAA,MAAM,KAAK,CAAA,CAAE,eAAA;AACb,EAAA,MAAM,QAAQ,CAAA,CAAE,oBAAA;AAChB,EAAA,MAAM,QAAQ,CAAA,CAAE,oBAAA;AAChB,EAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,mBAAA;AACxB,EAAA,MAAM,OAAA,GAAU,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,6BAAA;AAC1B,EAAA,MAAM,UAAA,GAAa,CAAA,CAAE,YAAA,GAAe,CAAA,GAAI,CAAA,CAAE,+BAAA;AAC1C,EAAA,MAAM,QAAQ,CAAA,CAAE,wBAAA;AAEhB,EAAA,MAAML,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,IAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,KAAA,GAA6B,EAAC,KAE9B,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,OAAA,EAAS,OAAA,EAAS,UAAU,QAAA,EAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACjE,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAK,GAAI;AAAA,GACrC;AAEF,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,UAAA,EAAY,CAAA;AAAA,IACZ,SAAA,EAAW,CAAA;AAAA,IACX,eAAe,CAAA,CAAE,aAAA;AAAA,IACjB,aAAa,CAAA,CAAE,YAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,eAAe,CAAA,CAAE,kBAAA;AAAA,IACjB,gBAAA,EAAkB,KAAA;AAAA,IAClB,WAAA,EAAa,EAAE,iBAAA,IAAqB,EAAA;AAAA,IACpC,cAAc,CAAA,CAAE,kBAAA;AAAA,IAChB,aAAa,CAAA,CAAE,iBAAA;AAAA,IACf,YAAY,CAAA,CAAE,wBAAA;AAAA,IACd,YAAY,CAAA,CAAE,uBAAA;AAAA,IACd;AAAA,GACF;AACA,EAAA,MAAMiB,KAAAA,GAAO;AAAA,IACX,eAAe,CAAA,CAAE,WAAA;AAAA,IACjB,gBAAgB,CAAA,CAAE,gBAAA;AAAA,IAClB,eAAe,CAAA,CAAE,eAAA;AAAA,IACjB,WAAW,CAAA,CAAE,UAAA;AAAA,IACb,kBAAkB,CAAA,CAAE,kBAAA;AAAA,IACpB;AAAA,GACF;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,gBAAA,EAAkB,KAAA;AAAA,IAClB,kBAAkB,CAAA,CAAE,mBAAA;AAAA,IACpB,kBAAkB,CAAA,CAAE;AAAA,GACtB;AACA,EAAA,MAAM,OAAS,sBAAA,CAAuB;AAAA,IACpC,eAAe,CAAA,CAAE,6BAAA;AAAA,IACjB,gBAAA,EAAkB,KAAA;AAAA,IAClB;AAAA,GACD,CAAA;AACD,EAAA,MAAM,SAAW,wBAAA,CAAyB;AAAA,IACxC,eAAe,CAAA,CAAE,6BAAA;AAAA,IACjB,gBAAA,EAAkB,KAAA;AAAA,IAClB,UAAU,CAAA,CAAE,gCAAA;AAAA,IACZ;AAAA,GACD,CAAA;AACD,EAAA,MAAM,KAAA,GAAQ,EAAE,gBAAA,EAAkB,EAAA,EAAI,aAAa,CAAA,CAAE,YAAA,EAAc,UAAA,EAAY,CAAA,CAAE,WAAA,EAAY;AAC7F,EAAA,MAAM,MAAA,GAAS,CAAA,CAAE,gBAAA,GAAmB,CAAA,GAAI,EAAE,YAAA,GAAe,CAAA;AACzD,EAAA,MAAM,OAAO,CAAA,CAAE,sBAAA,GAAyB,CAAA,GAAI,EAAA,GAAK,EAAE,kBAAA,GAAqB,CAAA;AACxE,EAAA,MAAM,UAAY,cAAA,CAAe;AAAA,IAC/B,gBAAA,EAAkB,EAAA;AAAA,IAClB,kBAAkB,CAAA,CAAE,kBAAA;AAAA,IACpB,iBAAiB,CAAA,CAAE;AAAA,GACpB,CAAA;AAGD,EAAA,GAAA,CAAI,gBAAA,EAAoB,aAAA,CAAc,IAAI,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACjF,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,YAAY,EAAE,SAAA,EAAW,GAAG,gBAAA,EAAkB,CAAA,CAAE,cAAc,CAAA;AAAA,IAChE,IAAI,WAAW,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,gBAAA,EAAoB,aAAA,CAAc,IAAI,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACjF,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,gBAAA,EAAkB,KAAA;AAAA,MAClB,SAAA,EAAW,CAAA;AAAA,MACX,oBAAA,EAAsB,EAAE,uBAAA,IAA2B;AAAA,KACpD,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,SAAS,EAAE,SAAA,EAAW,CAAA,EAAG,gBAAA,EAAkB,OAAO,CAAA;AAAA,IACpD,IAAI,WAAW,CAAA;AAAA,IACf,EAAE,YAAA,GAAe,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,IAAI,EAAE,aAAA,EAAe;AACnB,IAAA,GAAA;AAAA,MACE,6BAAA;AAAA,MACE,yBAAA,CAA0B;AAAA,QAC1B,UAAA,EAAY,CAAA;AAAA,QACZ,gBAAA,EAAkB,KAAA;AAAA,QAClB,gBAAgB,CAAA,CAAE,gBAAA;AAAA,QAClB,eAAe,CAAA,CAAE,eAAA;AAAA,QACjB,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,MACD,IAAI,sBAAsB,CAAA;AAAA,MAC1B,KAAA;AAAA,MACA,CAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,GAAA,CAAI,kBAAA,EAAsB,cAAA,CAAe,MAAM,CAAA,EAAG,GAAA,CAAI,kBAAkB,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AAChG,EAAA,GAAA,CAAI,qBAAA,EAAyB,iBAAA,CAAkB,MAAM,CAAA,EAAG,GAAA,CAAI,qBAAqB,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AACzG,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACED,SAAAA,CAAS;AAAA,MACT,UAAA,EAAY,CAAA;AAAA,MACZ,SAAA,EAAW,CAAA;AAAA,MACX,eAAe,CAAA,CAAE,aAAA;AAAA,MACjB,gBAAA,EAAkB,KAAA;AAAA,MAClB,OAAA,EAAS,KAAA;AAAA,MACT;AAAA,KACD,CAAA;AAAA,IACD,IAAI,WAAW,CAAA;AAAA,IACf,KAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,iBAAA,EAAqB,aAAA,CAAcC,KAAI,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AACrF,EAAA,GAAA,CAAI,cAAgB,SAAA,CAAUA,KAAI,CAAA,EAAG,GAAA,CAAI,YAAY,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,IAAA,EAAM,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,CAAC,GAAG,CAAA;AAClG,EAAA,GAAA;AAAA,IACE,uBAAA;AAAA,IACE,mBAAA,CAAoB;AAAA,MACpB,eAAe,CAAA,CAAE,qBAAA;AAAA,MACjB,gBAAA,EAAkB,KAAA;AAAA,MAClB,eAAe,CAAA,CAAE,cAAA;AAAA,MACjB,oBAAoB,CAAA,CAAE,oBAAA;AAAA,MACtB;AAAA,KACD,CAAA;AAAA,IACD,IAAI,uBAAuB,CAAA;AAAA,IAC3B,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,6BAAA,EAA+B,QAAQ,GAAA,CAAI,qBAAqB,GAAG,OAAA,EAAS,KAAA,EAAO,MAAM,IAAI,CAAA;AACjG,EAAA,GAAA,CAAI,2BAAA,EAA6B,MAAM,GAAA,CAAI,mBAAmB,GAAG,OAAA,EAAS,KAAA,EAAO,MAAM,IAAI,CAAA;AAC3F,EAAA,GAAA;AAAA,IACE,sBAAA;AAAA,IACE,kBAAA,CAAmB;AAAA,MACnB,GAAG,KAAA;AAAA,MACH,kBAAkB,CAAA,CAAE,mBAAA;AAAA,MACpB,mBAAmB,CAAA,CAAE;AAAA,KACtB,CAAA;AAAA,IACD,IAAI,cAAc,CAAA;AAAA,IAClB,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,sBAAA;AAAA,IACE,kBAAA,CAAmB;AAAA,MACnB,GAAG,KAAA;AAAA,MACH,gBAAA,EAAkB,KAAK,CAAA,CAAE,mBAAA;AAAA,MACzB,iBAAA,EAAmB,KAAK,CAAA,CAAE;AAAA,KAC3B,CAAA;AAAA,IACD,IAAI,cAAc,CAAA;AAAA,IAClB,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,6BAAA,EAA+B,QAAQ,GAAA,CAAI,qBAAqB,GAAG,UAAA,EAAY,KAAA,EAAO,MAAM,IAAI,CAAA;AACpG,EAAA,GAAA,CAAI,2BAAA,EAA6B,MAAM,GAAA,CAAI,mBAAmB,GAAG,UAAA,EAAY,KAAA,EAAO,MAAM,IAAI,CAAA;AAC9F,EAAA,GAAA;AAAA,IACE,uBAAA;AAAA,IACE,mBAAA,CAAoB,EAAE,aAAA,EAAe,CAAA,CAAE,uBAAuB,gBAAA,EAAkB,KAAA,EAAO,SAAS,CAAA;AAAA,IAClG,IAAI,uBAAuB,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,gBAAA;AAAA,IACE,aAAA,CAAc,EAAE,aAAA,EAAe,CAAA,CAAE,uBAAuB,gBAAA,EAAkB,KAAA,EAAO,SAAS,CAAA;AAAA,IAC5F,IAAI,gBAAgB,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,CAAA,GAAI,CAAA;AAAA,IACL,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,qBAAA;AAAA,IACE,kBAAkB,EAAE,aAAA,EAAe,CAAA,CAAE,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAC5E,IAAI,qBAAqB,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,SAAA,GAAc,oBAAoB,KAAK,CAAA;AAC7C,EAAA,GAAA,CAAI,wBAAA,EAA0B,SAAA,EAAW,GAAA,CAAI,cAAc,CAAA,EAAG,CAAC,MAAA,EAAQ,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC1F,EAAA,GAAA,CAAI,wBAAA,EAA0B,WAAW,GAAA,CAAI,cAAc,GAAG,MAAA,EAAQ,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACzF,EAAA,GAAA;AAAA,IACE,sBAAA;AAAA,IACE,mBAAmB,KAAK,CAAA;AAAA,IAC1B,IAAI,QAAQ,CAAA;AAAA,IACZ,EAAE,gBAAA,GAAmB,CAAA;AAAA,IACrB,CAAA,GAAI,CAAA;AAAA,IACJ,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,kBAAA,EAAoB,OAAA,EAAS,GAAA,CAAI,oBAAoB,CAAA,EAAG,CAAC,IAAA,EAAM,CAAC,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACvF,EAAA,GAAA,CAAI,kBAAA,EAAoB,OAAA,EAAS,GAAA,CAAI,oBAAoB,CAAA,EAAG,MAAM,CAAC,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACtF,EAAA,GAAA;AAAA,IACE,qBAAA;AAAA,IACE,iBAAA,CAAkB;AAAA,MAClB,gBAAA,EAAkB,EAAA;AAAA,MAClB,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,iBAAiB,CAAA,CAAE,iBAAA;AAAA,MACnB,sBAAsB,CAAA,CAAE;AAAA,KACzB,CAAA;AAAA,IACD,IAAI,QAAQ,CAAA;AAAA,IACZ,CAAA;AAAA,IACA,EAAE,CAAA,GAAI,CAAA,CAAA;AAAA,IACN,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,uBAAA;AAAA,IACE,kBAAA,CAAmB;AAAA,MACnB,gBAAA,EAAkB,EAAA;AAAA,MAClB,oBAAoB,CAAA,CAAE,sBAAA;AAAA,MACtB,mBAAmB,CAAA,CAAE;AAAA,KACtB,CAAA;AAAA,IACD,IAAI,uBAAuB,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,EAAE,CAAA,GAAI,CAAA,CAAA;AAAA,IACN,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,QAAA;AAAA,IACE,MAAA,CAAO,EAAE,UAAA,EAAY,CAAA,EAAG,SAAA,EAAW,CAAA,EAAG,aAAA,EAAe,CAAA,CAAE,aAAA,EAAe,gBAAA,EAAkB,EAAA,EAAI,OAAA,EAAS,CAAA;AAAA,IACvG,IAAI,QAAQ,CAAA;AAAA,IACZ,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAA;AAAE,GACtB;AAGA,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,iBAAiB,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA;AAC5E,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,YAAA,GAAe,CAAA,GAAI,KAAA,GAAQ,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA;AACxB,EAAA,MAAM,MAAA,GAA8F;AAAA,IAClG,MAAM,CAAC,CAAC,CAAC,GAAA,EAAK,GAAG,GAAG,KAAK,CAAA;AAAA,IACzB,YAAA,EAAc;AAAA,MACZ,CAAC,EAAE,CAAA,GAAI,IAAI,EAAA,CAAA,EAAK,CAAA,GAAI,IAAI,EAAE,CAAA;AAAA,MAC1B,CAAC,EAAE,CAAA,GAAI,IAAI,EAAA,CAAA,EAAK,CAAA,GAAI,IAAI,EAAE;AAAA,KAC5B;AAAA,IACA,SAAS,CAAC,CAAC,CAAA,EAAG,GAAG,GAAG,KAAK,CAAA;AAAA,IACzB,SAAS,CAAC,CAAC,CAAC,GAAA,EAAK,CAAC,GAAG,KAAK,CAAA;AAAA,IAC1B,OAAO,CAAC,CAAC,CAAC,GAAA,EAAK,GAAG,GAAG,KAAK,CAAA;AAAA,IAC1B,KAAA,EAAO,CAAC,CAAC,GAAA,GAAM,QAAQ,EAAA,EAAI,GAAG,GAAG,KAAK,CAAA;AAAA,IACtC,KAAA,EAAO,CAAC,CAAC,CAAC,GAAA,EAAK,CAAC,GAAA,GAAM,KAAA,GAAQ,EAAE,CAAA,EAAG,KAAK;AAAA,GAC1C;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA;AAC1C,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,OAAOL,eAAAA,CAAe,QAAQ,KAAM,QAAuB,CAAA;AAC5E,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,cAAc,EAAA,EAAI,EAAA,EAAI,MAAM,KAAK,CAAA;AAClD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AAGzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAZ;AAAA,GACF;AACF;;;ACpXA,IAAMI,UAAS,CAAC,EAAE,OAAA,EAAS,GAAG,GAAE,KAC9B,OAAA,KAAY,MAAA,GAAY,YAAA,CAAa,CAAC,CAAA,GAAI,YAAA,CAAa,EAAE,GAAG,CAAA,EAAG,SAAS,CAAA;AAWnE,SAASc,cAAAA,CAAc;AAAA,EAC5B,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,YAAA,GAAe,CAAA;AAAA,EACf,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,WAAA;AAAA,EACb;AACF,CAAA,GAAU,EAAC,EAAY;AACrB,EAAA,IAAI,UAAA,CAAW,aAAY,KAAM,MAAA;AAC/B,IAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,EAAG,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC7E,EAAA,MAAM,KAAK,WAAA,GAAc,CAAA;AACzB,EAAA,MAAM,KAAK,UAAA,GAAa,CAAA;AACxB,EAAA,MAAM,KAAK,EAAA,GAAK,YAAA;AAChB,EAAA,MAAM,KAAK,EAAA,GAAK,YAAA;AAChB,EAAA,OAAO;AAAA,IACL,CAAC,CAAC,WAAA,GAAc,CAAA,EAAG,EAAE,CAAA;AAAA,IACrB,GAAGd,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,YAAA,EAAc,SAAS,CAAA;AAAA,IAC7E,CAAC,CAAC,EAAA,EAAI,CAAC,CAAA;AAAA,IACP,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAC,EAAA,EAAI,CAAC,EAAE,CAAA,EAAG,OAAO,CAAA,EAAG,GAAA,EAAK,KAAK,CAAA,EAAG,YAAA,EAAc,SAAS,CAAA;AAAA,IAC9E,CAAC,CAAC,WAAA,GAAc,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACtB,CAAC,CAAC,WAAA,GAAc,CAAA,EAAG,EAAE;AAAA,GACvB;AACF;AAGO,SAASe,YAAAA,CAAY;AAAA,EAC1B,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa;AACf,CAAA,GAAmD,EAAC,EAAY;AAC9D,EAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC3F;AAGO,SAASC,cAAAA,CAAc;AAAA,EAC5B,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,YAAA,GAAe,CAAA;AAAA,EACf,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,WAAA;AAAA,EACb;AACF,CAAA,GAAU,EAAC,EAAY;AACrB,EAAA,IAAI,UAAA,CAAW,aAAY,KAAM,MAAA;AAC/B,IAAA,OAAO,eAAA,CAAgB,GAAG,WAAA,GAAc,CAAA,EAAG,CAAC,UAAA,GAAa,CAAA,EAAG,aAAa,CAAC,CAAA;AAC5E,EAAA,MAAM,KAAK,WAAA,GAAc,CAAA;AACzB,EAAA,MAAM,KAAK,UAAA,GAAa,CAAA;AACxB,EAAA,MAAM,KAAK,EAAA,GAAK,YAAA;AAChB,EAAA,MAAM,KAAK,EAAA,GAAK,YAAA;AAChB,EAAA,OAAO;AAAA,IACL,CAAC,WAAA,GAAc,CAAA,EAAG,EAAE,CAAA;AAAA,IACpB,GAAGhB,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,YAAA,EAAc,SAAS,CAAA;AAAA,IAC5E,CAAC,IAAI,CAAC,CAAA;AAAA,IACN,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,IAAA,EAAM,CAAA,EAAG,YAAA,EAAc,SAAS,CAAA;AAAA,IAC9E,CAAC,WAAA,GAAc,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACrB,CAAC,WAAA,GAAc,CAAA,EAAG,EAAE;AAAA,GACtB;AACF;AAGO,SAASiB,WAAAA,CAAW;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,mBAAA,GAAsB,CAAA;AAAA,EACtB,UAAA,GAAa;AACf,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,IAAI,UAAA,CAAW,aAAY,KAAM,WAAA,SAAoB,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAC5D,EAAA,MAAM,IAAI,WAAA,GAAc,CAAA;AACxB,EAAA,MAAM,IAAI,UAAA,GAAa,CAAA;AACvB,EAAA,MAAM,CAAA,GAAI,mBAAA;AACV,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IACd,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACb,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAASd,SAAAA,CAAS;AAAA,EACvB,WAAA,GAAc,CAAA;AAAA,EACd,aAAA,GAAgB;AAClB,CAAA,GAAsD,EAAC,EAAY;AACjE,EAAA,OAAO,gBAAgB,CAAC,WAAA,GAAc,GAAG,WAAA,GAAc,CAAA,EAAG,GAAG,aAAa,CAAA;AAC5E;AAGO,SAASe,QAAAA,CAAQ;AAAA,EACtB,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB;AAClB,CAAA,GAAqD,EAAC,EAAY;AAChE,EAAA,OAAO,gBAAgB,CAAA,EAAG,aAAA,EAAe,CAAC,UAAA,GAAa,CAAA,EAAG,aAAa,CAAC,CAAA;AAC1E;AAGO,SAASC,OAAAA,CAAO;AAAA,EACrB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,YAAA,GAAe,CAAA;AAAA,EACf,iBAAA,GAAoB,CAAA;AAAA,EACpB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,MAAM,KAAK,WAAA,GAAc,CAAA;AACzB,EAAA,MAAM,KAAK,UAAA,GAAa,CAAA;AACxB,EAAA,MAAM,KAAK,EAAA,GAAK,YAAA;AAChB,EAAA,MAAM,KAAK,EAAA,GAAK,YAAA;AAChB,EAAA,MAAM,CAAA,GAAI,iBAAA;AACV,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,EAAE,CAAA;AAAA,IACN,GAAGnB,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,YAAA,EAAc,SAAS,CAAA;AAAA,IAC5E,CAAC,IAAI,CAAC,CAAA;AAAA,IACN,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,IAAA,EAAM,CAAA,EAAG,YAAA,EAAc,SAAS,CAAA;AAAA,IAC9E,CAAC,CAAA,EAAG,CAAC,EAAE,CAAA;AAAA,IACP,CAAC,CAAA,EAAG,CAAC,EAAA,GAAK,CAAC,CAAA;AAAA,IACX,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,CAAC,EAAE,CAAA,EAAG,KAAA,EAAO,MAAM,GAAA,EAAK,CAAA,EAAG,GAAG,YAAA,GAAe,CAAA,EAAG,SAAS,CAAA;AAAA,IAClF,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,CAAA;AAAA,IACV,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,IAAI,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAK,GAAA,EAAK,CAAA,EAAG,YAAA,GAAe,CAAA,EAAG,SAAS,CAAA;AAAA,IAChF,CAAC,CAAA,EAAG,EAAA,GAAK,CAAC,CAAA;AAAA,IACV,CAAC,GAAG,EAAE;AAAA,GACR;AACF;AAGO,SAASoB,WAAAA,CAAW;AAAA,EACzB,eAAA,GAAkB,CAAA;AAAA,EAClB,aAAA,GAAgB;AAClB,CAAA,GAA0D,EAAC,EAAY;AACrE,EAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,GAAgB,CAAA,EAAG,aAAA,GAAgB,GAAG,CAAC,eAAA,GAAkB,CAAA,EAAG,eAAA,GAAkB,CAAC,CAAA;AACzG;AAGO,SAAS,QAAA,CAAS;AAAA,EACvB,cAAA,GAAiB,CAAA;AAAA,EACjB,aAAA,GAAgB;AAClB,CAAA,GAAyD,EAAC,EAAY;AACpE,EAAA,OAAO,gBAAgB,CAAC,cAAA,GAAiB,GAAG,cAAA,GAAiB,CAAA,EAAG,GAAG,aAAa,CAAA;AAClF;AAGO,SAAS,eAAA,CAAgB;AAAA,EAC9B,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB;AAClB,CAAA,GAAqD,EAAC,EAAY;AAChE,EAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,EAAe,CAAA,EAAG,CAAC,UAAA,GAAa,CAAA,EAAG,aAAa,CAAC,CAAA;AAC3E;AAGO,SAAS,iBAAA,CAAkB;AAAA,EAChC,uBAAA,GAA0B,CAAA;AAAA,EAC1B,aAAA,GAAgB;AAClB,CAAA,GAAkE,EAAC,EAAY;AAC7E,EAAA,OAAO,eAAA,CAAgB,CAAA,EAAG,uBAAA,EAAyB,CAAA,EAAG,aAAa,CAAA;AACrE;AAGO,SAASR,SAAAA,CAAS;AAAA,EACvB,cAAA,GAAiB,CAAA;AAAA,EACjB,aAAA,GAAgB,CAAA;AAAA,EAChB,oBAAA,GAAuB,KAAA;AAAA,EACvB,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,IAAI,CAAC,oBAAA;AACH,IAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,GAAgB,CAAA,EAAG,aAAA,GAAgB,GAAG,CAAC,cAAA,GAAiB,CAAA,EAAG,cAAA,GAAiB,CAAC,CAAA;AACvG,EAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,gBAAgB,CAAA,GAAI,gBAAgB,IAAI,IAAA,CAAK,EAAA;AACnE,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,OAAO;AAAA,IACL,GAAGZ,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,GAAM,KAAK,GAAA,EAAK,GAAA,GAAM,GAAA,EAAK,CAAA,EAAG,SAAS,CAAA;AAAA,IAC1E,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,IAAA,GAAO,KAAK,GAAA,EAAK,IAAA,GAAO,GAAA,EAAK,CAAA,EAAG,SAAS;AAAA,GAC9E;AACF;AAGO,SAASqB,cAAAA,CAAc;AAAA,EAC5B,mBAAA,GAAsB,CAAA;AAAA,EACtB,aAAA,GAAgB,CAAA;AAAA,EAChB;AACF,CAAA,GAAoE,EAAC,EAAY;AAC/E,EAAA,MAAM,CAAA,GAAI,mBAAA;AACV,EAAA,MAAM,CAAA,GAAI,aAAA;AACV,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,GAAGrB,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA;AAAA,IAC1D,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACN,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IACV,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,SAAS,CAAA;AAAA,IACjE,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAAS,iBAAA,CAAkB;AAAA,EAChC,mBAAA,GAAsB,CAAA;AAAA,EACtB;AACF,CAAA,GAAoE,EAAC,EAAY;AAC/E,EAAA,OAAOA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,mBAAA,EAAqB,SAAS,CAAA;AACrF;AAWO,SAAS,UAAA,CAAW;AAAA,EACzB,gBAAA,GAAmB,CAAA;AAAA,EACnB,aAAA,GAAgB,CAAA;AAAA,EAChB,iBAAA,GAAoB,IAAA;AAAA,EACpB,SAAA,GAAY,CAAA;AAAA,EACZ,iBAAA,GAAoB,CAAA;AAAA,EACpB;AACF,CAAA,GAAgB,EAAC,EAAY;AAC3B,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,CAAA,GAAI,aAAA;AACV,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,MAAM,IAAA,GAAgB;AAAA,MACpB,CAAC,GAAG,CAAC,CAAA;AAAA,MACL,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,CAAA,EAAG,SAAS,CAAA;AAAA,MAC/D,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACN,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,MACV,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,IAAA,EAAM,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,SAAS,CAAA;AAAA,MACtE,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,MACT,CAAC,GAAG,CAAC;AAAA,KACP;AACA,IAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,aAAA,CAAc,IAAA,EAAM,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAAA,EACxE;AACA,EAAA,MAAM,QAAQ,iBAAA,GAAoB,SAAA;AAClC,EAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,CAAC,IAAI,IAAA,CAAK,EAAA;AAC1C,EAAA,MAAMN,OAAM,CAAA,GAAI,KAAA;AAChB,EAAA,OAAO;AAAA,IACL,CAAC,OAAO,CAAC,CAAA;AAAA,IACT,GAAGM,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAAN,IAAAA,EAAK,CAAA,EAAG,SAAS,CAAA;AAAA,IACpD,CAAC,OAAO,CAAC,CAAA;AAAA,IACT,CAAC,KAAA,GAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,IACb,GAAGM,OAAAA,CAAO,EAAE,QAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,GAAI,KAAA,EAAO,KAAK,CAAA,GAAIN,IAAAA,EAAK,GAAG,CAAA,GAAI,CAAA,EAAG,SAAS,CAAA;AAAA,IAC/E,CAAC,KAAA,GAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,IACb,CAAC,OAAO,CAAC;AAAA,GACX;AACF;AAGO,SAAS,cAAA,CAAe;AAAA,EAC7B,gBAAA,GAAmB,CAAA;AAAA,EACnB,aAAA,GAAgB,CAAA;AAAA,EAChB,iBAAA,GAAoB,IAAA;AAAA,EACpB,SAAA,GAAY,CAAA;AAAA,EACZ,iBAAA,GAAoB,CAAA;AAAA,EACpB;AACF,CAAA,GAAgB,EAAC,EAAY;AAC3B,EAAA,MAAM,IAAI,gBAAA,GAAmB,aAAA;AAC7B,EAAA,IAAI,iBAAA,EAAmB,OAAOM,OAAAA,CAAO,EAAE,QAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA;AACrF,EAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAA,CAAM,oBAAoB,SAAA,IAAa,gBAAgB,IAAI,IAAA,CAAK,EAAA;AACnF,EAAA,MAAMN,OAAM,CAAA,GAAI,KAAA;AAChB,EAAA,OAAOM,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,GAAI,OAAO,GAAA,EAAK,CAAA,GAAIN,IAAAA,EAAK,CAAA,EAAG,SAAS,CAAA;AAC9E;AAGO,SAAS,OAAA,CAAQ;AAAA,EACtB,gBAAA,GAAmB,CAAA;AAAA,EACnB,aAAA,GAAgB,CAAA;AAAA,EAChB,eAAe,CAAA,GAAI,CAAA;AAAA,EACnB,2BAAA;AAAA,EACA;AACF,CAAA,GAMU,EAAC,EAAY;AACrB,EAAA,MAAM,CAAA,GAAI,gBAAA;AACV,EAAA,MAAM,CAAA,GAAI,aAAA;AACV,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,2BAAA,IAA+B,GAAG,CAAC,CAAA;AAC3D,EAAA,MAAM,SAAS,MAAA,GAAS,CAAA;AACxB,EAAA,MAAM,SAAS,CAAA,GAAI,CAAA;AAEnB,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,IAAK,CAAA,GAAI,MAAA,IAAU,CAAA,EAAG,CAAC,CAAC,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAA,IAAU,CAAA,GAAI,MAAA,IAAU,CAAA,EAAG,CAAC,CAAC,CAAA;AAChE,EAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAM,IAAI,IAAA,CAAK,EAAA;AACrD,EAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAM,IAAI,IAAA,CAAK,EAAA;AACrD,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,MAAM,CAAA;AAAA,IACV,CAAC,QAAQ,MAAM,CAAA;AAAA,IACf,GAAGM,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,YAAY,GAAA,EAAK,CAAA,GAAI,UAAA,EAAY,CAAA,EAAG,SAAS,CAAA;AAAA,IAChF,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAA;AAAA,IAChB,CAAC,CAAA,EAAG,CAAC,MAAM,CAAA;AAAA,IACX,CAAC,CAAA,EAAG,CAAC,MAAM,CAAA;AAAA,IACX,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAA;AAAA,IAChB,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,GAAI,YAAY,GAAA,EAAK,UAAA,EAAY,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,IACxF,CAAC,QAAQ,MAAM,CAAA;AAAA,IACf,CAAC,GAAG,MAAM,CAAA;AAAA,IACV,CAAC,GAAG,MAAM;AAAA,GACZ;AACF;AAOO,SAAS,OAAA,CAAQ;AAAA,EACtB,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB,aAAA,GAAgB,CAAA;AAAA,EAChB;AACF,CAAA,GAAyF,EAAC,EAAY;AACpG,EAAA,IAAI,aAAA,IAAiB,gBAAA,EAAkB,OAAO,EAAC;AAC/C,EAAA,MAAM,GAAA,GAAa,CAAC,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AAEvD,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,EAAU,MAAA,KAA2B;AACrD,IAAA,MAAM,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AACtC,IAAA,OAAO,CAAC,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,IAAK,CAAA,CAAE,CAAC,CAAA,IAAK,IAAI,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAA,GAAK,UAAU,CAAC,CAAA;AAAA,EACtE,CAAA;AACA,EAAA,MAAM,QAAQ,CAAC,CAAA,EAAU,MAAqB,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,GAAI,GAAA,CAAI,CAAC,GAAG,CAAA,CAAE,CAAC,IAAI,CAAA,GAAI,GAAA,CAAI,CAAC,CAAC,CAAA;AACnF,EAAA,MAAM,MAAA,GAAgB,CAAC,CAAA,EAAG,gBAAgB,CAAA;AAC1C,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,aAAa,CAAC,CAAA;AAC5D,EAAA,MAAML,KAAAA,GAAc;AAAA,IAClB,OAAO,CAAC,CAAA,GAAK,gBAAgB,EAAA,GAAM,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,IAC9C,OAAO,CAAC,CAAA,GAAK,gBAAgB,EAAA,GAAM,IAAA,CAAK,KAAK,CAAC;AAAA,GAChD;AACA,EAAA,MAAM,SAAS,KAAA,CAAMA,KAAAA,EAAM,QAAA,CAASA,KAAAA,EAAM,gBAAgB,CAAC,CAAA;AAC3D,EAAA,MAAM,SAAS,KAAA,CAAMA,KAAAA,EAAM,SAASA,KAAAA,EAAM,aAAA,GAAgB,aAAa,CAAC,CAAA;AACxE,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,IAAA,CAAK,EAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,IAAA,CAAK,EAAA;AAC3D,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAGK,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,UAAA,EAAY,KAAK,CAAA,GAAI,UAAA,EAAY,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC/F,CAAC,MAAA,CAAO,CAAC,GAAG,CAAC,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACtB,CAAC,MAAA,CAAO,CAAC,GAAG,CAAC,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACtB,CAAC,MAAA,CAAO,CAAC,GAAG,CAAC,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACtB,CAAC,MAAA,CAAO,CAAC,GAAG,CAAC,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACtB,GAAGA,OAAAA,CAAO;AAAA,MACR,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,MACb,OAAO,CAAA,GAAI,UAAA;AAAA,MACX,GAAA,EAAK,UAAA;AAAA,MACL,GAAG,aAAA,GAAgB,aAAA;AAAA,MACnB;AAAA,KACD,CAAA;AAAA,IACD,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAGO,SAAS,eAAA,CAAgB;AAAA,EAC9B,qBAAA,GAAwB,CAAA;AAAA,EACxB,aAAA,GAAgB,CAAA;AAAA,EAChB,eAAA,GAAkB;AACpB,CAAA,GAA0F,EAAC,EAAY;AACrG,EAAA,OAAO,YAAA;AAAA,IACL,eAAA;AAAA,MACE,CAAC,qBAAA,GAAwB,CAAA;AAAA,MACzB,qBAAA,GAAwB,CAAA;AAAA,MACxB,CAAC,aAAA,GAAgB,CAAA;AAAA,MACjB,aAAA,GAAgB;AAAA,KAClB;AAAA,IACA;AAAA,GACF;AACF;AAGO,SAAS,iBAAA,CAAkB;AAAA,EAChC,uBAAA,GAA0B,CAAA;AAAA,EAC1B,aAAA,GAAgB;AAClB,CAAA,GAAkE,EAAC,EAAY;AAC7E,EAAA,OAAO,gBAAgB,CAAC,uBAAA,EAAyB,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AACvE;AAGO,SAAS,SAAA,CAAU;AAAA,EACxB,eAAA,GAAkB,CAAA;AAAA,EAClB,aAAA,GAAgB,CAAA;AAAA,EAChB,6BAAA,GAAgC,CAAA;AAAA,EAChC;AACF,CAAA,GAIU,EAAC,EAAY;AACrB,EAAA,MAAM,CAAA,GAAI,eAAA;AACV,EAAA,MAAM,CAAA,GAAI,aAAA;AACV,EAAA,MAAM,CAAA,GAAI,6BAAA;AACV,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,SAAS,CAAA;AAAA,IAC9D,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACP,CAAC,CAAC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IACX,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,SAAS,CAAA;AAAA,IACrE,CAAC,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACN,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,sBAAA,GAAyB,CAAA;AAAA,EACzB;AACF,CAAA,GAA+C,EAAC,EAAY;AAC1D,EAAA,OAAOA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,sBAAA,EAAwB,SAAS,CAAA;AACxF;AAKO,SAASsB,UAAAA,CAAU;AAAA,EACxB,0BAA0B,CAAA,GAAI,CAAA;AAAA,EAC9B,mBAAmB,CAAA,GAAI,CAAA;AAAA,EACvB,WAAW,CAAA,GAAI;AACjB,CAAA,GAAU,EAAC,EAAY;AACrB,EAAA,OAAO;AAAA,IACL,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IACT,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,IACd,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA;AAAA,IACb,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAAS,OAAA,CAAQ;AAAA,EACtB,0BAA0B,CAAA,GAAI,CAAA;AAAA,EAC9B,mBAAmB,CAAA,GAAI,CAAA;AAAA,EACvB,WAAW,CAAA,GAAI;AACjB,CAAA,GAAU,EAAC,EAAY;AACrB,EAAA,OAAO;AAAA,IACL,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IACT,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAAS,YAAA,CAAa;AAAA,EAC3B,kBAAA,GAAqB,CAAA;AAAA,EACrB,qBAAA,GAAwB,CAAA;AAAA,EACxB;AACF,CAAA,GAA2E,EAAC,EAAY;AACtF,EAAA,MAAM,CAAA,GAAI,kBAAA;AACV,EAAA,MAAM,CAAA,GAAI,qBAAA;AACV,EAAA,OAAO;AAAA,IACL,GAAGtB,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,SAAS,CAAA;AAAA,IAC9D,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAK,GAAA,EAAK,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,SAAS;AAAA,GACvE;AACF;AAKO,SAASuB,mBAAAA,CAAmB;AAAA,EACjC,2BAA2B,CAAA,GAAI,CAAA;AAAA,EAC/B,aAAa,CAAA,GAAI,CAAA;AAAA,EACjB,YAAY,CAAA,GAAI;AAClB,CAAA,GAAW,EAAC,EAAY;AACtB,EAAA,OAAO;AAAA,IACL,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACN,CAAC,CAAC,CAAA,EAAG,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,IACd,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,IACjB,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IACT,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAASC,oBAAAA,CAAoB;AAAA,EAClC,2BAA2B,CAAA,GAAI,CAAA;AAAA,EAC/B,aAAa,CAAA,GAAI,CAAA;AAAA,EACjB,YAAY,CAAA,GAAI;AAClB,CAAA,GAAW,EAAC,EAAY;AACtB,EAAA,OAAO,eAAA,CAAgB,CAAC,CAAA,GAAI,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,IAAI,CAAC,CAAA;AAChD;AAGO,SAASC,kBAAAA,CAAkB;AAAA,EAChC,4BAA4B,CAAA,GAAI,CAAA;AAAA,EAChC,kBAAkB,CAAA,GAAI,CAAA;AAAA,EACtB,sBAAsB,CAAA,GAAI,CAAA;AAAA,EAC1B,iBAAiB,CAAA,GAAI;AACvB,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,CAAA,GAAI,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IAChB,CAAC,IAAI,CAAA,GAAI,CAAA,GAAI,GAAG,EAAE,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IAC5B,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IAClB,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACd,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,EAAE,IAAI,CAAA,CAAE,CAAA;AAAA,IACpB,CAAC,CAAA,GAAI,CAAA,EAAG,EAAE,IAAI,CAAA,CAAE,CAAA;AAAA,IAChB,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,IACZ,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,IACZ,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,IAAI,CAAA,CAAE;AAAA,GAClB;AACF;AAGO,SAASC,eAAAA,CAAe;AAAA,EAC7B,4BAA4B,CAAA,GAAI,CAAA;AAAA,EAChC,kBAAkB,CAAA,GAAI,CAAA;AAAA,EACtB,iBAAiB,CAAA,GAAI;AACvB,CAAA,GAII,EAAC,EAAY;AACf,EAAA,OAAO,eAAA,CAAgB,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AACpD;AAGO,SAAS,oBAAA,CAAqB;AAAA,EACnC,uBAAuB,CAAA,GAAI,CAAA;AAAA,EAC3B,oBAAoB,CAAA,GAAI,CAAA;AAAA,EACxB,mBAAmB,CAAA,GAAI;AACzB,CAAA,GAII,EAAC,EAAY;AACf,EAAA,OAAO,eAAA,CAAgB,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AACpD;AAGO,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA,GAAQ,GAAA;AAAA,EACR,gBAAA,GAAmB,CAAA;AAAA,EACnB,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB,CAAA;AAAA,EAChB;AACF,CAAA,GAKU,EAAC,EAAY;AACrB,EAAA,QAAQ,KAAA,CAAM,aAAY;AAAG,IAC3B,KAAK,GAAA;AACH,MAAA,OAAO1B,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC/E,KAAK,GAAA;AACH,MAAA,OAAO,YAAA,CAAa,UAAA,EAAY,gBAAA,EAAkB,EAAE,CAAA;AAAA,IACtD,KAAK,QAAA;AACH,MAAA,OAAO,aAAa,UAAU,CAAA;AAAA,IAChC;AACE,MAAA,MAAM,IAAI,WAAA,CAAY,CAAA,+BAAA,EAAkC,KAAK,CAAA,0BAAA,CAA4B,CAAA;AAAA;AAE/F;AAGO,SAAS,iBAAA,CAAkB;AAAA,EAChC,kBAAkB,CAAA,GAAI,CAAA;AAAA,EACtB,iBAAiB,CAAA,GAAI,CAAA;AAAA,EACrB,kBAAkB,CAAA,GAAI;AACxB,CAAA,GAAwF,EAAC,EAAY;AACnG,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,IACZ,CAAC,CAAA,GAAI,CAAA,EAAG,EAAE,IAAI,CAAA,CAAE,CAAA;AAAA,IAChB,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IACT,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAAS,cAAA,CAAe;AAAA,EAC7B,kBAAkB,CAAA,GAAI,CAAA;AAAA,EACtB,iBAAiB,CAAA,GAAI;AACvB,CAAA,GAA6D,EAAC,EAAY;AACxE,EAAA,OAAO,eAAA,CAAgB,CAAA,EAAG,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AACpC;;;ACpnBO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,qBAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,YAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAA0B;AAAA,EACrC,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;AAIO,IAAM,mBAAA,GAAsB;AAAA,EACjC,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,yBAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,qBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,wBAAA;AAAA,EACA,wBAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAAqE;AAAA,EAChF,eAAA,EAAiB,WAAA;AAAA,EACjB,WAAA,EAAa,SAAA;AAAA,EACb,cAAA,EAAgB,SAAA;AAAA,EAChB,YAAA,EAAc,SAAA;AAAA,EACd,cAAA,EAAgB,SAAA;AAAA,EAChB,YAAA,EAAc,WAAA;AAAA,EACd,YAAA,EAAc,WAAA;AAAA,EACd,kBAAA,EAAoB,WAAA;AAAA,EACpB,kBAAA,EAAoB,WAAA;AAAA,EACpB,uBAAA,EAAyB,SAAA;AAAA,EACzB,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,SAAA;AAAA,EACV,WAAA,EAAa,SAAA;AAAA,EACb,SAAA,EAAW,SAAA;AAAA,EACX,gBAAA,EAAkB,SAAA;AAAA,EAClB,mBAAA,EAAqB,SAAA;AAAA,EACrB,SAAA,EAAW,SAAA;AAAA,EACX,cAAA,EAAgB,SAAA;AAAA,EAChB,mBAAA,EAAqB,SAAA;AAAA,EACrB,WAAA,EAAa,SAAA;AAAA,EACb,gBAAA,EAAkB,SAAA;AAAA,EAClB,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,SAAA;AAAA,EACV,kBAAA,EAAoB,SAAA;AAAA,EACpB,oBAAA,EAAsB,SAAA;AAAA,EACtB,UAAA,EAAY,SAAA;AAAA,EACZ,kBAAA,EAAoB,SAAA;AAAA,EACpB,UAAA,EAAY,SAAA;AAAA,EACZ,QAAA,EAAU,WAAA;AAAA,EACV,aAAA,EAAe,SAAA;AAAA,EACf,sBAAA,EAAwB,SAAA;AAAA,EACxB,sBAAA,EAAwB,SAAA;AAAA,EACxB,mBAAA,EAAqB,SAAA;AAAA,EACrB,gBAAA,EAAkB;AACpB,CAAA;;;AC3GA,IAAMC,WAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAGxC,IAAM,6BAAA,GAAgC,CAAA;AACtC,IAAM,gCAAA,GAAmC,CAAA;AACzC,IAAM,iCAAA,GAAoC,CAAA;AAOnC,SAAS,aAAA,CACd,MAAA,EACA,IAAA,GAAqF,EAAC,EAC/E;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACA,QAAAA,CAAQ,gBAAA,EAAkB,GAAG,CAAA;AAChC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,4BAA4B,MAAM,CAAA,oBAAA,EAAuB,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACtF;AACF,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,QAAAA,CAAQ,uBAAA,EAAyB,KAAK,CAAA;AACzC,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,mCAAmC,IAAA,CAAK,YAAY,uBAAuB,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC/G;AACF,EAAA,MAAM,CAAA,GAAI,YAAY,cAAA,CAAe,GAAG,GAAG,IAAA,CAAK,OAAA,EAAS,CAAC,2CAA2C,CAAC,CAAA;AAGtG,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,uBAAA,EAAyB,IAAA,CAAK,YAAY,CAAA;AACrE,EAAA,MAAM,UACH,CAAA,CAAE,wCAAA,IAA4C,KAAA,KAC/C,IAAA,CAAK,cAAc,sBAAA,KAA2B,MAAA,IAC9C,MAAA,CAAO,sBAAA,KAA2B,OAAO,WAAA,GACrC,EAAE,GAAG,MAAA,EAAQ,sBAAA,EAAwB,WAAU,GAC/C,MAAA;AACN,EAAA,MAAM,MAAM,CAAC,CAAA,KAA+B,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AACjD,EAAA,MAAM,IAAI,CAAA,CAAE,YAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,WAAA;AACZ,EAAA,MAAM,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,4BAAA;AACrB,EAAA,MAAML,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,IAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,KAAA,GAA4B,EAAC,KAE7B,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,OAAA,EAAS,OAAA,EAAS,UAAU,QAAA,EAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACjE,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAK,GAAI;AAAA,GACrC;AACF,EAAA,MAAM,UAAU,CAAC,CAAA,MAA4C,EAAE,MAAA,EAAQ,GAAA,CAAI,CAAC,CAAA,EAAE,CAAA;AAE9E,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,WAAA,EAAa,CAAA;AAAA,IACb,UAAA,EAAY,CAAA;AAAA,IACZ,YAAA,EAAc,EAAE,aAAA,IAAiB,CAAA;AAAA,IACjC,WAAA,EAAa,EAAE,mBAAA,IAAuB,CAAA;AAAA,IACtC,YAAY,CAAA,CAAE,WAAA;AAAA,IACd;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACEqB,WAAAA,CAAW;AAAA,MACX,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,qBAAqB,CAAA,CAAE,qBAAA;AAAA,MACvB,YAAY,CAAA,CAAE;AAAA,KACf,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,aAAa;AAAA,GACvB;AACA,EAAA,GAAA;AAAA,IACE,gBAAA;AAAA,IACEH,eAAc,IAAI,CAAA;AAAA,IACpB,IAAI,gBAAgB,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,gBAAgB;AAAA,GAC1B;AACA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACEC,YAAAA,CAAY,EAAE,WAAA,EAAa,CAAA,CAAE,uBAAuB,CAAA,EAAG,UAAA,EAAY,GAAG,CAAA;AAAA,IACxE,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,gBAAA;AAAA,IACEC,eAAc,IAAI,CAAA;AAAA,IACpB,IAAI,gBAAgB,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,gBAAgB;AAAA,GAC1B;AACA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,mBAAA,EAAqB,EAAE,qBAAA,IAAyB,CAAA;AAAA,IAChD,aAAA,EAAe,EAAE,wBAAA,IAA4B,CAAA;AAAA,IAC7C;AAAA,GACF;AACA,EAAA,GAAA,CAAI,qBAAA,EAAyB,iBAAA,CAAkB,MAAM,CAAA,EAAG,GAAA,CAAI,qBAAqB,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AAC1G,EAAA,MAAM,QAAA,GAAW,EAAE,kBAAA,IAAsB,CAAA;AACzC,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACEb,UAAS,EAAE,WAAA,EAAa,CAAA,EAAG,aAAA,EAAe,UAAU,CAAA;AAAA,IACrD,CAAA,CAAE,aAAA,IAAiB,IAAA,GAAQ,GAAA,CAAI,UAAU,CAAA,GAAI,WAAA;AAAA,IAC9C,CAAA;AAAA,IACA,CAAA,GAAI,CAAA;AAAA,IACJ,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACEe,SAAQ,EAAE,UAAA,EAAY,CAAA,EAAG,aAAA,EAAe,UAAU,CAAA;AAAA,IACnD,CAAA,CAAE,YAAA,IAAgB,IAAA,GAAQ,GAAA,CAAI,UAAU,CAAA,GAAI,WAAA;AAAA,IAC7C,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,gBAAA,GAAA,CACH,EAAE,gBAAA,IAAoB,CAAA,IAAK,KAAK,CAAA,CAAE,YAAA,IAAgB,CAAA,CAAA,IAAM,CAAA,CAAE,qBAAA,IAAyB,CAAA,CAAA;AACtF,EAAA,MAAM,eAAA,GAAkB,EAAE,iBAAA,IAAqB,CAAA;AAC/C,EAAA,GAAA;AAAA,IACE,qBAAA;AAAA,IACE,iBAAA,CAAkB;AAAA,MAClB,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAA,EAAkB,EAAE,6BAAA,IAAiC;AAAA,KACtD,CAAA;AAAA,IACD,IAAI,qBAAqB,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAA,GAAI,CAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,qBAAqB;AAAA,GAC/B;AACA,EAAA,GAAA;AAAA,IACE,kBAAA;AAAA,IACE,cAAA,CAAe,EAAE,gBAAA,EAAkB,eAAA,EAAiB,CAAA;AAAA,IACtD,IAAI,kBAAkB,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAA,GAAI,CAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAQ,kBAAkB;AAAA,GAC5B;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACEE,WAAAA,CAAW,EAAE,eAAA,EAAiB,CAAA,CAAE,mBAAmB,aAAA,EAAe,CAAA,CAAE,uBAAuB,CAAA;AAAA,IAC7F,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,yBAAA,EAA2B,EAAE,gBAAA,IAAoB,CAAA;AAAA,IACjD,WAAA,EAAa,EAAE,YAAA,IAAgB,CAAA;AAAA,IAC/B,UAAA,EAAY,EAAE,WAAA,IAAe;AAAA,GAC/B;AACA,EAAA,MAAM,UAAU,CAAA,CAAE,gBAAA,IAAoB,KAAK,CAAA,GAAA,CAAK,CAAA,CAAE,gBAAgB,CAAA,IAAK,CAAA;AACvE,EAAA,MAAM,SAAA,GAAcI,qBAAoB,KAAK,CAAA;AAC7C,EAAA,GAAA,CAAI,wBAAA,EAA0B,SAAA,EAAW,GAAA,CAAI,cAAc,CAAA,EAAG,CAAC,MAAA,EAAQ,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC1F,EAAA,GAAA,CAAI,wBAAA,EAA0B,WAAW,GAAA,CAAI,cAAc,GAAG,MAAA,EAAQ,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACzF,EAAA,GAAA;AAAA,IACE,sBAAA;AAAA,IACED,oBAAmB,KAAK,CAAA;AAAA,IAC1B,IAAI,QAAQ,CAAA;AAAA,IAAA,CACX,CAAA,CAAE,oBAAoB,CAAA,IAAK,CAAA;AAAA,IAC5B,CAAA,GAAI,CAAA;AAAA,IACJ,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAMI,WAAAA,GAAa;AAAA,IACjB,0BAAA,EAA4B,EAAE,gBAAA,IAAoB,CAAA;AAAA,IAClD,gBAAA,EAAkB,EAAE,kBAAA,IAAsB,CAAA;AAAA,IAC1C,eAAA,EAAiB,EAAE,iBAAA,IAAqB;AAAA,GAC1C;AACA,EAAA,MAAM,QAAA,GAAA,CACH,CAAA,CAAE,sBAAA,IAA0B,CAAA,IAAK,CAAA,IAAK,EAAE,gBAAA,IAAoB,CAAA,CAAA,GAAA,CAAM,CAAA,CAAE,kBAAA,IAAsB,CAAA,IAAK,CAAA;AAClG,EAAA,MAAM,WAAA,GAAgBD,gBAAeC,WAAU,CAAA;AAC/C,EAAA,GAAA,CAAI,kBAAA,EAAoB,WAAA,EAAa,GAAA,CAAI,oBAAoB,CAAA,EAAG,CAAC,QAAA,EAAU,CAAC,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC/F,EAAA,GAAA,CAAI,kBAAA,EAAoB,WAAA,EAAa,GAAA,CAAI,oBAAoB,CAAA,EAAG,UAAU,CAAC,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC9F,EAAA,GAAA;AAAA,IACE,qBAAA;AAAA,IACEF,kBAAAA,CAAkB,EAAE,GAAGE,WAAAA,EAAY,sBAAsB,CAAA,CAAE,sBAAA,IAA0B,GAAG,CAAA;AAAA,IAC1F,IAAI,QAAQ,CAAA;AAAA,IACZ,CAAA;AAAA,IACA,EAAE,CAAA,GAAI,CAAA,CAAA;AAAA,IACN,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,yBAAA;AAAA,IACE,oBAAA,CAAqB;AAAA,MACrB,qBAAA,EAAuB,EAAE,gBAAA,IAAoB,CAAA;AAAA,MAC7C,kBAAA,EAAoB,EAAE,sBAAA,IAA0B,CAAA;AAAA,MAChD,iBAAA,EAAmB,EAAE,iBAAA,IAAqB;AAAA,KAC3C,CAAA;AAAA,IACD,IAAI,yBAAyB,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,EAAE,CAAA,GAAI,CAAA,CAAA;AAAA,IACN,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,QAAA;AAAA,IACER,OAAAA,CAAO;AAAA,MACP,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,YAAA,EAAc,EAAE,aAAA,IAAiB,CAAA;AAAA,MACjC,iBAAA,EAAmB,EAAE,gBAAA,IAAoB,CAAA;AAAA,MACzC;AAAA,KACD,CAAA;AAAA,IACD,IAAI,QAAQ,CAAA;AAAA,IACZ,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,QAAS,CAAA,CAAE,UAAA,IAAc,QAAS,GAAA,CAAI,QAAQ,IAAI,WAAA;AAAY,GAClE;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,QAAA,CAAS,EAAE,cAAA,EAAgB,CAAA,CAAE,gBAAA,IAAoB,GAAG,aAAA,EAAe,CAAA,CAAE,mBAAA,IAAuB,CAAA,EAAG,CAAA;AAAA,IACjG,IAAI,WAAW,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAA,GAAI,CAAA,IAAK,CAAA,CAAE,4BAAA,IAAgC,CAAA,CAAA;AAAA,IAC3C,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,kBAAA;AAAA,IACE,eAAA,CAAgB,EAAE,UAAA,EAAY,CAAA,EAAG,eAAe,CAAA,CAAE,0BAAA,IAA8B,GAAG,CAAA;AAAA,IACrF,IAAI,kBAAkB,CAAA;AAAA,IACtB,EAAE,qCAAA,IAAyC,CAAA;AAAA,IAC3C,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,qBAAA;AAAA,IACE,iBAAA,CAAkB;AAAA,MAClB,uBAAA,EAAyB,EAAE,0BAAA,IAA8B,CAAA;AAAA,MACzD,aAAA,EAAe,EAAE,6BAAA,IAAiC;AAAA,KACnD,CAAA;AAAA,IACD,IAAI,qBAAqB,CAAA;AAAA,IACzB,CAAA,GAAI,CAAA,IAAK,CAAA,CAAE,0BAAA,IAA8B,CAAA,CAAA;AAAA,IACzC,CAAA,GAAI,CAAA,IAAK,CAAA,CAAE,sCAAA,IAA0C,CAAA,CAAA;AAAA,IACrD,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,gBAAA,EAAoBE,cAAAA,CAAc,MAAM,CAAA,EAAG,GAAA,CAAI,gBAAgB,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AAC5F,EAAA,GAAA;AAAA,IACE,eAAA;AAAA,IACE,YAAA,CAAa;AAAA,MACb,kBAAA,EAAoB,EAAE,oBAAA,IAAwB,CAAA;AAAA,MAC9C,qBAAA,EAAuB,EAAE,uBAAA,IAA2B,CAAA;AAAA,MACpD;AAAA,KACD,CAAA;AAAA,IACD,IAAI,eAAe,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAMO,WAAAA,GAAa;AAAA,IACjB,kBAAkB,CAAA,CAAE,kBAAA;AAAA,IACpB,eAAe,CAAA,CAAE,qBAAA;AAAA,IACjB,mBAAmB,CAAA,CAAE,oBAAA;AAAA,IACrB,WAAW,CAAA,CAAE,UAAA;AAAA,IACb,iBAAA,EAAmB,EAAE,oBAAA,IAAwB,CAAA;AAAA,IAC7C;AAAA,GACF;AACA,EAAA,GAAA,CAAI,kBAAA,EAAsB,cAAA,CAAeA,WAAU,CAAA,EAAG,GAAA,CAAI,kBAAkB,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,IAAI,CAAA;AAChG,EAAA,GAAA,CAAI,aAAA,EAAiB,UAAA,CAAWA,WAAU,CAAA,EAAG,GAAA,CAAI,aAAa,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,IAAI,CAAA;AAClF,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACE,OAAA,CAAQ;AAAA,MACR,gBAAA,EAAkB,EAAE,kBAAA,IAAsB,CAAA;AAAA,MAC1C,aAAA,EAAe,EAAE,eAAA,IAAmB,CAAA;AAAA,MACpC,aAAA,EAAe,EAAE,uBAAA,IAA2B,CAAA;AAAA,MAC5C,6BAA6B,CAAA,CAAE,gCAAA;AAAA,MAC/B;AAAA,KACD,CAAA;AAAA,IACD,IAAI,UAAU,CAAA;AAAA,IACd,EAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,MAAQ,OAAA,CAAQ;AAAA,IACpB,aAAA,EAAe,EAAE,eAAA,IAAmB,CAAA;AAAA,IACpC,kBAAkB,CAAA,CAAE,kBAAA;AAAA,IACpB,aAAA,EAAe,EAAE,uBAAA,IAA2B,CAAA;AAAA,IAC5C;AAAA,GACD,CAAA;AAED,EAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,GAAA,CAAI,UAAA,EAAY,GAAA,EAAK,GAAA,CAAI,UAAU,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AAC5E,EAAA,KAAA,MAAW,GAAA,IAAO,CAAA,CAAE,yCAAA,IAA6C,EAAC,EAAG;AAInE,IAAA,MAAM,KAAK,CAAA,CAAE,eAAA,IAAmB,CAAA,IAAA,CAAM,CAAA,CAAE,2BAA2B,CAAA,IAAK,CAAA;AACxE,IAAA,MAAM,aAAa,GAAA,GAAM,CAAA;AACzB,IAAA,MAAM,UAAA,GAAa,aAAa,IAAA,CAAK,EAAA;AACrC,IAAA,MAAM,OAAS,eAAA,CAAgB;AAAA,MAC7B,qBAAA,EAAuB,EAAE,yBAAA,IAA6B,CAAA;AAAA,MACtD,aAAA,EAAe,EAAE,iCAAA,IAAqC,CAAA;AAAA,MACtD,eAAA,EAAkB,CAAC,UAAA,GAAa,GAAA,GAAO,IAAA,CAAK;AAAA,KAC7C,CAAA;AACD,IAAA,GAAA;AAAA,MACE,oBAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAI,oBAAoB,CAAA;AAAA,MACxB,KAAK,CAAA,GAAI,IAAA,CAAK,KAAK,CAAA,GAAI,UAAA,IAAc,KAAK,EAAE,CAAA;AAAA,MAC5C,IAAI,IAAA,CAAK,GAAA,CAAA,CAAK,CAAA,GAAI,UAAA,IAAc,KAAK,EAAE,CAAA;AAAA,MACvC,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,GAAA;AAAA,IACE,YAAA;AAAA,IACE,SAAA,CAAU;AAAA,MACV,eAAA,EAAiB,EAAE,iBAAA,IAAqB,CAAA;AAAA,MACxC,aAAA,EAAe,EAAE,yBAAA,IAA6B,CAAA;AAAA,MAC9C,6BAAA,EAA+B,EAAE,iCAAA,IAAqC,CAAA;AAAA,MACtE;AAAA,KACD,CAAA;AAAA,IACD,IAAI,YAAY,CAAA;AAAA,IAChB,EAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,sBAAA;AAAA,IACE,iBAAA,CAAkB;AAAA,MAClB,uBAAA,EAAyB,EAAE,2BAAA,IAA+B,CAAA;AAAA,MAC1D,aAAA,EAAe,EAAE,mCAAA,IAAuC;AAAA,KACzD,CAAA;AAAA,IACD,IAAI,sBAAsB,CAAA;AAAA,IAC1B,EAAA;AAAA,IACA,EAAE,eAAA,IAAmB,CAAA;AAAA,IACrB,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,oBAAA;AAAA,IACE,iBAAiB,EAAE,sBAAA,EAAwB,EAAE,yBAAA,IAA6B,CAAA,EAAG,SAAS,CAAA;AAAA,IACxF,IAAI,oBAAoB,CAAA;AAAA,IACxB,EAAA,IAAM,EAAE,+BAAA,IAAmC,CAAA,CAAA;AAAA,IAAA,CAC1C,CAAA,CAAE,mBAAmB,CAAA,IAAK,CAAA;AAAA,IAC3B,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAMf,KAAAA,GAAO;AAAA,IACX,0BAA0B,CAAA,CAAE,2BAAA;AAAA,IAC5B,mBAAmB,CAAA,CAAE,mBAAA;AAAA,IACrB,WAAW,CAAA,CAAE;AAAA,GACf;AACA,EAAA,GAAA,CAAI,UAAA,EAAc,OAAA,CAAQA,KAAI,CAAA,EAAG,GAAA,CAAI,UAAU,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AACpE,EAAA,GAAA,CAAI,YAAA,EAAgBS,UAAAA,CAAUT,KAAI,CAAA,EAAG,GAAA,CAAI,YAAY,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AAC1E,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACED,SAAAA,CAAS;AAAA,MACT,gBAAgB,CAAA,CAAE,gBAAA;AAAA,MAClB,eAAe,CAAA,CAAE,mBAAA;AAAA,MACjB,oBAAA,EAAsB,OAAA,CAAQ,CAAA,CAAE,uBAAuB,CAAA;AAAA,MACvD,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,IACD,IAAI,WAAW,CAAA;AAAA,IACf,EAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,iBAAA;AAAA,IACE,aAAA,CAAc;AAAA,MACd,KAAA,EAAO,EAAE,4BAAA,IAAgC,GAAA;AAAA,MACzC,gBAAA,EAAkB,EAAE,iCAAA,IAAqC,CAAA;AAAA,MACzD,UAAA,EAAY,EAAE,kCAAA,IAAsC,CAAA;AAAA,MACpD,aAAA,EAAe,6BAAA;AAAA,MACf;AAAA,KACD,CAAA;AAAA,IACD,IAAI,wBAAwB,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,iBAAA;AAAA,IACE,aAAA,CAAc;AAAA,MACd,KAAA,EAAO,EAAE,4BAAA,IAAgC,GAAA;AAAA,MACzC,gBAAA,EAAkB,gCAAA;AAAA,MAClB,UAAA,EAAY,iCAAA;AAAA,MACZ,aAAA,EAAe,EAAE,6BAAA,IAAiC,CAAA;AAAA,MAClD;AAAA,KACD,CAAA;AAAA,IACD,IAAI,wBAAwB,CAAA;AAAA,IAAA,CAC3B,CAAA,CAAE,qCAAA,IAAyC,CAAA,IAAA,CAAM,CAAA,CAAE,+CAA+C,CAAA,IAAK,CAAA;AAAA,IACxG,CAAA,GAAI,CAAA,IAAK,CAAA,CAAE,gCAAA,IAAoC,CAAA,CAAA;AAAA,IAC/C,IAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAMO,OAAAA,GAAS,EAAE,gBAAA,IAAoB,CAAA;AACrC,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AAAA,IACf,CAAA,GAAI,IAAI,CAAA,CAAE,qBAAA;AAAA,IAAA,CACT,EAAE,gBAAA,IAAoB,CAAA,IAAK,CAAA,IAAK,CAAA,CAAE,gBAAgB,CAAA,CAAA,GAAKA,OAAAA;AAAA,IAAA,CACvD,EAAE,sBAAA,IAA0B,CAAA,IAAK,KAAK,CAAA,CAAE,kBAAA,IAAsB,KAAK,CAAA,GAAIA;AAAA;AAAA,GAC1E;AACA,EAAA,MAAM,MACJ,CAAA,GAAI,CAAA,GACJ,IAAA,CAAK,GAAA,CAAI,EAAE,qBAAA,EAAuB,CAAA,GAAIA,OAAAA,GAAS,IAAA,CAAK,IAAI,CAAA,CAAE,WAAA,IAAe,GAAG,CAAA,CAAE,iBAAA,IAAqB,CAAC,CAAC,CAAA;AACvG,EAAA,MAAM,GAAA,GAAM,CAAC,EAAE,CAAA,GAAI,IAAIA,OAAAA,CAAAA,EAAS,CAAA,GAAI,IAAIA,OAAM,CAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,EAAG,GAAG,CAAA;AACnB,EAAA,MAAM,GAAA,GAAM,CAAC,CAAC,GAAA,EAAK,CAAC,CAAA;AACpB,EAAA,MAAM,CAAA,GAAuE;AAAA,IAC3E,IAAA,EAAM,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA;AAAA,IAChB,cAAA,EAAgB,GAAA;AAAA,IAChB,gBAAA,EAAkB,GAAA;AAAA,IAClB,OAAA,EAAS,GAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA,IACT,kBAAA,EAAoB,GAAA;AAAA,IACpB,oBAAA,EAAsB,GAAA;AAAA,IACtB,sBAAA,EAAwB,GAAA;AAAA,IACxB,OAAA,EAAS,GAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA,IACT,kBAAA,EAAoB,GAAA;AAAA,IACpB,oBAAA,EAAsB,GAAA;AAAA,IACtB,sBAAA,EAAwB;AAAA,GAC1B;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,gBAAA,IAAoB,KAAA,KAAU,gBAAA;AACzD,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,aAAA;AAAA,IACf,EAAE,KAAK,CAAA;AAAA,IACP,QAAA,GAAW,CAAC,EAAE,CAAA,GAAI,CAAA,GAAIA,OAAAA,CAAAA,EAAS,CAAA,GAAI,CAAA,GAAIA,OAAM,CAAA,GAAI,CAAC,CAAC,KAAK,GAAG,CAAA;AAAA,IAC3D,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,UAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAvB;AAAA,GACF;AACF;;;ACtfA,IAAMI,UAAS,CAAC,EAAE,OAAA,EAAS,GAAG,GAAE,KAC9B,OAAA,KAAY,MAAA,GAAY,YAAA,CAAa,CAAC,CAAA,GAAI,YAAA,CAAa,EAAE,GAAG,CAAA,EAAG,SAAS,CAAA;AAGnE,SAAS,SAAA,CAAU;AAAA,EACxB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa;AACf,CAAA,GAAmD,EAAC,EAAY;AAC9D,EAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC3F;AAGO,SAAS,UAAA,CAAW;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,mBAAA,GAAsB,CAAA;AAAA,EACtB,kBAAA,GAAqB,CAAA;AAAA,EACrB,SAAA,GAAY;AACd,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,WAAA,GAAc,CAAA;AACxB,EAAA,MAAM,IAAI,UAAA,GAAa,CAAA;AACvB,EAAA,MAAM,CAAA,GAAI,IAAI,kBAAA,GAAqB,SAAA;AACnC,EAAA,MAAM,CAAA,GAAI,IAAI,mBAAA,GAAsB,SAAA;AACpC,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAAS,SAAA,CAAU;AAAA,EACxB,WAAA,GAAc,CAAA;AAAA,EACd,gBAAA,GAAmB;AACrB,CAAA,GAAyD,EAAC,EAAY;AACpE,EAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,EAAG,cAAc,CAAA,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAChF;AAGO,SAASY,SAAAA,CAAS;AAAA,EACvB,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB;AACrB,CAAA,GAAwD,EAAC,EAAY;AACnE,EAAA,OAAO,eAAA,CAAgB,CAAC,gBAAA,EAAkB,CAAA,EAAG,CAAC,UAAA,GAAa,CAAA,EAAG,aAAa,CAAC,CAAA;AAC9E;AAGO,SAAS,WAAA,CAAY;AAAA,EAC1B,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB;AACrB,CAAA,GAAwD,EAAC,EAAY;AACnE,EAAA,OAAO,eAAA,CAAgB,CAAC,gBAAA,GAAmB,CAAA,EAAG,gBAAA,GAAmB,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AACrG;AAGO,SAAS,UAAA,CAAW;AAAA,EACzB,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB,SAAA,GAAY,CAAA;AAAA,EACZ,eAAA,GAAkB,CAAA;AAAA,EAClB,SAAA,GAAY,CAAA;AAAA,EACZ,iBAAA,GAAoB,CAAA;AAAA,EACpB;AACF,CAAA,GAOU,EAAC,EAAY;AACrB,EAAA,MAAM,YAAA,GAAe,YAAY,CAAA,GAAI,iBAAA;AACrC,EAAA,MAAM,OAAO,SAAA,GAAY,eAAA;AACzB,EAAA,MAAM,SAAS,aAAA,GAAgB,gBAAA;AAC/B,EAAA,IAAI,UAAA,GAAa,GAAA;AACjB,EAAA,IAAI,UAAA,GAAa,GAAA;AACjB,EAAA,IAAI,aAAA,KAAkB,CAAA,IAAK,EAAE,IAAA,CAAK,IAAI,IAAA,GAAO,aAAa,CAAA,GAAI,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,IAAA,GAAO,MAAM,IAAI,CAAA,CAAA,EAAI;AAC/F,IAAA,UAAA,GAAa,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,aAAa,IAAI,IAAA,CAAK,EAAA;AACxD,IAAA,UAAA,GAAa,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,MAAM,IAAI,IAAA,CAAK,EAAA;AAAA,EACnD;AACA,EAAA,OAAO;AAAA,IACL,CAAC,CAAC,gBAAA,EAAkB,YAAY,CAAA;AAAA,IAChC,CAAC,CAAC,SAAA,EAAW,YAAY,CAAA;AAAA,IACzB,GAAGZ,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAC,eAAA,EAAiB,CAAC,CAAA,EAAG,KAAA,EAAO,YAAY,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IACjG,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAC,eAAA,EAAiB,CAAC,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,UAAA,EAAY,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,IAC1F,CAAC,CAAC,SAAA,EAAW,CAAC,CAAA;AAAA,IACd,CAAC,EAAE,SAAA,GAAY,gBAAA,CAAA,EAAmB,CAAC,CAAA;AAAA,IACnC,CAAC,EAAE,SAAA,GAAY,gBAAA,CAAA,EAAmB,eAAe,gBAAgB,CAAA;AAAA,IACjE,CAAC,CAAC,gBAAA,EAAkB,YAAA,GAAe,gBAAgB,CAAA;AAAA,IACnD,CAAC,CAAC,gBAAA,EAAkB,YAAY;AAAA,GAClC;AACF;AAGO,SAAS,OAAA,CAAQ;AAAA,EACtB,kBAAkB,CAAA,GAAI,CAAA;AAAA,EACtB,WAAW,CAAA,GAAI,CAAA;AAAA,EACf,SAAA,GAAY,CAAA;AAAA,EACZ,iBAAA,GAAoB;AACtB,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,MAAM,CAAA,GAAI,YAAY,CAAA,GAAI,iBAAA;AAC1B,EAAA,OAAO;AAAA,IACL,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACN,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACN,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACP,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACP,CAAC,CAAC,CAAA,EAAG,EAAE,IAAI,CAAA,CAAE,CAAA;AAAA,IACb,CAAC,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,CAAE,CAAA;AAAA,IACnB,CAAC,EAAE,CAAA,GAAI,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA;AAAA,IAChB,CAAC,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAC,CAAA,EAAG,CAAC;AAAA,GACR;AACF;AAGO,SAAS,SAAA,CAAU;AAAA,EACxB,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAAiE,EAAC,EAAY;AAC5E,EAAA,OAAO;AAAA,IACL,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAG,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC3E,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAK,CAAA,EAAG,CAAA,EAAG,aAAA,GAAgB,gBAAA,EAAkB,SAAS;AAAA,GAChG;AACF;AAGO,SAAS6B,aAAAA,CAAa;AAAA,EAC3B,aAAA,GAAgB,CAAA;AAAA,EAChB,gBAAA,GAAmB,CAAA;AAAA,EACnB;AACF,CAAA,GAAiE,EAAC,EAAY;AAC5E,EAAA,OAAO;AAAA,IACL,GAAG7B,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,KAAK,GAAA,EAAK,GAAA,EAAK,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAAA,IAC7E,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,GAAA,EAAK,KAAK,GAAA,EAAK,CAAA,EAAG,aAAA,GAAgB,gBAAA,EAAkB,SAAS;AAAA,GAClG;AACF;AAGO,SAAS,WAAW,EAAE,aAAA,GAAgB,GAAG,OAAA,EAAQ,GAAsC,EAAC,EAAY;AACzG,EAAA,OAAOA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAC/E;AAGO,SAAS,YAAY,EAAE,aAAA,GAAgB,GAAG,OAAA,EAAQ,GAAsC,EAAC,EAAY;AAC1G,EAAA,OAAOA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,aAAA,EAAe,SAAS,CAAA;AAC/E;AAGO,SAAS,oBAAA,CAAqB;AAAA,EACnC,gBAAA,GAAmB,CAAA;AAAA,EACnB,WAAA,GAAc,KAAA;AAAA,EACd,UAAA,GAAa,KAAA;AAAA,EACb,KAAA,GAAQ,CAAA;AAAA,EACR,kBAAA,GAAqB;AACvB,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,IAAI,WAAA;AACF,IAAA,OAAO,eAAA;AAAA,MACL,CAAC,gBAAA,GAAmB,CAAA;AAAA,MACpB,gBAAA,GAAmB,CAAA;AAAA,MACnB,kBAAA;AAAA,MACA,kBAAA,GAAqB;AAAA,KACvB;AACF,EAAA,IAAI,UAAA;AACF,IAAA,OAAO,eAAA;AAAA,MACL,kBAAA;AAAA,MACA,kBAAA,GAAqB,KAAA;AAAA,MACrB,CAAC,gBAAA,GAAmB,CAAA;AAAA,MACpB,gBAAA,GAAmB;AAAA,KACrB;AACF,EAAA,OAAO,EAAC;AACV;AAGO,SAAS,IAAA,CAAK;AAAA,EACnB,kBAAkB,CAAA,GAAI,CAAA;AAAA,EACtB,WAAW,CAAA,GAAI,CAAA;AAAA,EACf,WAAW,CAAA,GAAI;AACjB,CAAA,GAA2E,EAAC,EAAY;AACtF,EAAA,OAAO;AAAA,IACL,CAAC,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA;AAAA,IACb,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,IACjB,CAAC,CAAA,GAAI,CAAA,EAAG,EAAE,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IACpB,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IAChB,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC;AAAA,GACf;AACF;;;ACxNO,IAAM,eAAA,GAAkB;AAAA,EAC7B,YAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF;AAIO,IAAM,qBAAA,GAAwB;AAAA,EACnC,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;AAIO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF;AAIO,IAAM,qBAAA,GAAiE;AAAA,EAC5E,eAAA,EAAiB,WAAA;AAAA,EACjB,oBAAA,EAAsB,SAAA;AAAA,EACtB,oBAAA,EAAsB,SAAA;AAAA,EACtB,WAAA,EAAa,SAAA;AAAA,EACb,SAAA,EAAW,SAAA;AAAA,EACX,SAAA,EAAW,SAAA;AAAA,EACX,UAAA,EAAY,SAAA;AAAA,EACZ,YAAA,EAAc,SAAA;AAAA,EACd,aAAA,EAAe,SAAA;AAAA,EACf,WAAA,EAAa,SAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,QAAA,EAAU,SAAA;AAAA,EACV,YAAA,EAAc,SAAA;AAAA,EACd,qBAAA,EAAuB,SAAA;AAAA,EACvB,IAAA,EAAM;AACR,CAAA;;;ACpDA,IAAMC,WAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAMjC,SAAS,WAAA,CACd,MAAA,EACA,IAAA,GAA+E,EAAC,EACzE;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACA,QAAAA,CAAQ,cAAA,EAAgB,GAAG,CAAA;AAC9B,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,0BAA0B,MAAM,CAAA,oBAAA,EAAuB,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAClF;AACF,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,QAAAA,CAAQ,qBAAA,EAAuB,KAAK,CAAA;AACvC,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,iCAAiC,IAAA,CAAK,YAAY,uBAAuB,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC3G;AACF,EAAA,MAAM,CAAA,GAAI,YAAY,YAAA,CAAa,GAAG,GAAG,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AACzD,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,qBAAA,EAAuB,IAAA,CAAK,YAAY,CAAA;AACnE,EAAA,MAAM,MAAM,CAAC,CAAA,KAA6B,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC9D,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AACjD,EAAA,MAAM,IAAI,CAAA,CAAE,YAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,WAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,cAAA;AACZ,EAAA,MAAML,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,IAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,KAAA,GAA4B,EAAC,KAE7B,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,OAAA,EAAS,OAAA,EAAS,UAAU,QAAA,EAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACjE,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAK,GAAI;AAAA,GACrC;AAEF,EAAA,MAAM,OAAS,SAAA,CAAU,EAAE,aAAa,CAAA,EAAG,UAAA,EAAY,GAAG,CAAA;AAC1D,EAAA,GAAA,CAAI,YAAA,EAAc,MAAM,GAAA,CAAI,sBAAsB,GAAG,KAAA,GAAQ,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC/E,EAAA,GAAA,CAAI,YAAA,EAAc,MAAM,GAAA,CAAI,sBAAsB,GAAG,IAAA,GAAO,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC9E,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,qBAAqB,CAAA,CAAE,qBAAA;AAAA,MACvB,oBAAoB,CAAA,CAAE,qBAAA;AAAA,MACtB,WAAW,CAAA,CAAE;AAAA,KACd,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,MAAA,EAAQ,GAAA,CAAI,aAAa,CAAA;AAAE,GAC/B;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,UAAU,EAAE,WAAA,EAAa,CAAA,EAAG,gBAAA,EAAkB,GAAG,CAAA;AAAA,IACnD,IAAI,WAAW,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAA,GAAI,CAAA;AAAA,IACJ,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACEgB,UAAS,EAAE,UAAA,EAAY,CAAA,EAAG,gBAAA,EAAkB,GAAG,CAAA;AAAA,IACjD,IAAI,WAAW,CAAA;AAAA,IACf,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,YAAA;AAAA,IACE,SAAA,CAAU,EAAE,aAAA,EAAe,CAAA,CAAE,mBAAmB,gBAAA,EAAkB,CAAA,EAAG,SAAS,CAAA;AAAA,IAChF,IAAI,YAAY,CAAA;AAAA,IAChB,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAAA,IACZ,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAAA,IACZ,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,YAAY,EAAE,UAAA,EAAY,CAAA,EAAG,gBAAA,EAAkB,GAAG,CAAA;AAAA,IACpD,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,eAAe,CAAA,CAAE,qBAAA;AAAA,MACjB,gBAAA,EAAkB,CAAA;AAAA,MAClB,WAAW,CAAA,CAAE,kBAAA;AAAA,MACb,iBAAiB,CAAA,CAAE,iBAAA;AAAA,MACnB,WAAW,CAAA,CAAE,UAAA;AAAA,MACb,mBAAmB,CAAA,CAAE,oCAAA;AAAA,MACrB;AAAA,KACD,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,UAAA;AAAA,IACE,OAAA,CAAQ;AAAA,MACR,gBAAA,EAAkB,CAAA;AAAA,MAClB,WAAW,CAAA,CAAE,eAAA;AAAA,MACb,WAAW,CAAA,CAAE,UAAA;AAAA,MACb,mBAAmB,CAAA,CAAE;AAAA,KACtB,CAAA;AAAA,IACD,IAAI,UAAU,CAAA;AAAA,IACd,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,eAAA;AAAA,IACEiB,aAAAA,CAAa,EAAE,aAAA,EAAe,CAAA,CAAE,sBAAsB,gBAAA,EAAkB,CAAA,EAAG,SAAS,CAAA;AAAA,IACtF,IAAI,eAAe,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,YAAY,EAAE,aAAA,EAAe,CAAA,CAAE,mBAAA,EAAqB,SAAS,CAAA;AAAA,IAC/D,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA,GAAI,IAAI,CAAA,CAAE,iBAAA;AAAA,IACV,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,WAAW,EAAE,aAAA,EAAe,CAAA,CAAE,kBAAA,EAAoB,SAAS,CAAA;AAAA,IAC7D,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,gBAAA,EAAkB,CAAA;AAAA,IAClB,OAAO,CAAA,CAAE,oBAAA;AAAA,IACT,kBAAA,EAAoB,EAAE,mCAAA,IAAuC;AAAA,GAC/D;AACA,EAAA,IAAI,CAAA,CAAE,gCAAA;AACJ,IAAA,GAAA;AAAA,MACE,wBAAA;AAAA,MACE,qBAAqB,EAAE,GAAG,IAAA,EAAM,WAAA,EAAa,MAAM,CAAA;AAAA,MACrD,IAAI,uBAAuB,CAAA;AAAA,MAC3B,CAAA,GAAI,IAAI,CAAA,CAAE,uBAAA;AAAA,MACV,CAAA,GAAI,CAAA;AAAA,MACJ,IAAA;AAAA,MACA;AAAA,KACF;AACF,EAAA,IAAI,CAAA,CAAE,gCAAA;AACJ,IAAA,GAAA;AAAA,MACE,wBAAA;AAAA,MACE,qBAAqB,EAAE,GAAG,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AAAA,MACpD,IAAI,uBAAuB,CAAA;AAAA,MAC3B,CAAA,GAAI,CAAA;AAAA,MACJ,CAAA,GAAI,IAAI,CAAA,CAAE,uBAAA;AAAA,MACV,IAAA;AAAA,MACA;AAAA,KACF;AACF,EAAA,GAAA;AAAA,IACE,MAAA;AAAA,IACE,IAAA,CAAK,EAAE,gBAAA,EAAkB,CAAA,EAAG,SAAA,EAAW,EAAE,UAAA,EAAY,SAAA,EAAW,CAAA,CAAE,UAAA,EAAY,CAAA;AAAA,IAChF,IAAI,MAAM,CAAA;AAAA,IACV,IAAI,CAAA,GAAI,CAAA;AAAA,IACR,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,GAAA,GAAM,IAAI,CAAA,GAAI,CAAA;AACpB,EAAA,MAAM,GAAA,GAAM,IAAI,CAAA,GAAI,CAAA;AACpB,EAAA,MAAM,GAAA,GAAM,CAAC,EAAE,CAAA,GAAI,IAAI,CAAA,CAAA,EAAI,CAAA,GAAI,IAAI,CAAC,CAAA;AACpC,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,EAAG,GAAG,CAAA;AACnB,EAAA,MAAM,GAAA,GAAM,CAAC,CAAC,GAAA,EAAK,CAAC,CAAA;AACpB,EAAA,MAAM,CAAA,GAAqE;AAAA,IACzE,IAAA,EAAM,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA;AAAA,IAChB,cAAA,EAAgB,GAAA;AAAA,IAChB,gBAAA,EAAkB,GAAA;AAAA,IAClB,OAAA,EAAS,GAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA,IACT,kBAAA,EAAoB,GAAA;AAAA,IACpB,oBAAA,EAAsB,GAAA;AAAA,IACtB,sBAAA,EAAwB,GAAA;AAAA,IACxB,OAAA,EAAS,GAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA,IACT,kBAAA,EAAoB,GAAA;AAAA,IACpB,oBAAA,EAAsB,GAAA;AAAA,IACtB,sBAAA,EAAwB;AAAA,GAC1B;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,gBAAA,IAAoB,KAAA,KAAU,gBAAA;AACzD,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,aAAA,CAAc,EAAE,KAAK,CAAA,EAAG,QAAA,GAAW,CAAC,EAAE,CAAA,GAAI,IAAI,CAAA,CAAA,EAAI,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AACxG,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAjC;AAAA,GACF;AACF;;;ACzPA,IAAMI,OAAAA,GAAS,CAAC,CAAA,KAA+E;AAC7F,EAAA,MAAM,EAAE,OAAA,EAAS,GAAG,IAAA,EAAK,GAAI,CAAA;AAC7B,EAAA,OAAO,OAAA,KAAY,MAAA,GAAY,YAAA,CAAa,IAAI,CAAA,GAAI,aAAa,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,CAAA;AACvF,CAAA;AAGO,SAAS8B,WAAAA,CAAW;AAAA,EACzB,gBAAA,GAAmB,CAAA;AAAA,EACnB,eAAA,GAAkB,CAAA;AAAA,EAClB,cAAA,GAAiB,CAAA;AAAA,EACjB,qBAAqB,CAAA,GAAI;AAC3B,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,eAAA,GAAkB,CAAA;AAC5B,EAAA,MAAM,IAAI,gBAAA,GAAmB,CAAA;AAC7B,EAAA,MAAM,IAAA,GAAgB;AAAA,IACpB,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IACd,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACb,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,IACT,CAAC,GAAG,CAAC;AAAA,GACP;AACA,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,aAAA,CAAc,IAAA,EAAM,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,CAAE,GAAA;AAAA,IACtE,CAAC,CAAC,CAAA,EAAG,CAAC,MAAa,CAAC,CAAA,EAAG,IAAI,cAAc;AAAA,GAC3C;AACF;AAGO,SAASC,YAAAA,CAAY;AAAA,EAC1B,kBAAkB,KAAA,GAAQ,CAAA;AAAA,EAC1B,kBAAkB,KAAA,GAAQ,CAAA;AAAA,EAC1B,gBAAA,GAAmB,CAAA;AAAA,EACnB,cAAA,GAAiB,CAAA;AAAA,EACjB,sBAAsB,CAAA,GAAI;AAC5B,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,KAAA,GAAQ,CAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,CAAC,gBAAA,GAAmB,CAAA,GAAI,cAAA;AACtC,EAAA,MAAM,OAAO,KAAA,GAAQ,KAAA;AACrB,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,KAAK,CAAA;AAAA,IACT,CAAC,GAAG,IAAI,CAAA;AAAA,IACR,CAAC,CAAC,CAAA,EAAG,IAAI,CAAA;AAAA,IACT,CAAC,CAAC,CAAA,EAAG,KAAK,CAAA;AAAA,IACV,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA;AAAA,IACd,CAAC,CAAC,CAAA,GAAI,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,IACjB,CAAC,CAAA,GAAI,CAAA,EAAG,IAAA,GAAO,CAAC,CAAA;AAAA,IAChB,CAAC,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA;AAAA,IACb,CAAC,GAAG,KAAK;AAAA,GACX;AACF;AAGO,SAASC,SAAAA,CAAS;AAAA,EACvB,QAAA,GAAW,KAAA;AAAA,EACX,YAAA,GAAe,CAAA;AAAA,EACf,gBAAA,GAAmB,CAAA;AAAA,EACnB,eAAA,GAAkB,CAAA;AAAA,EAClB,cAAA,GAAiB,CAAA;AAAA,EACjB,yBAAA,GAA4B,CAAA;AAAA,EAC5B,mBAAA,GAAsB,CAAA;AAAA,EACtB,mBAAmB,CAAA,GAAI;AACzB,CAAA,GASI,EAAC,EAAY;AACf,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA;AAAA,IACjB,mBAAA,GAAsB,IAAI,yBAAA,GAA4B,eAAA;AAAA,IACtD,mBAAmB,CAAA,GAAI;AAAA,GACzB;AACA,EAAA,MAAM,IAAI,QAAA,GAAW,IAAA,CAAK,KAAK,CAAA,GAAK,CAAA,GAAI,KAAK,EAAA,GAAM,CAAA;AACnD,EAAA,MAAM,EAAA,GAAK,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpC,EAAA,MAAM,EAAA,GAAK,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA;AACpC,EAAA,MAAM,EAAA,GAAK,QAAA,GAAW,KAAA,GAAQ,CAAC,KAAA;AAC/B,EAAA,MAAM,EAAA,GAAK,QAAA,GAAW,CAAC,CAAA,GAAI,CAAA;AAC3B,EAAA,OAAO;AAAA,IACL,CAAC,IAAI,KAAK,CAAA;AAAA,IACV,CAAC,IAAI,EAAE,CAAA;AAAA,IACP,CAAC,EAAA,GAAK,EAAA,EAAI,EAAE,CAAA;AAAA,IACZ,CAAC,EAAA,GAAK,EAAA,EAAI,KAAK,CAAA;AAAA,IACf,CAAC,IAAI,KAAK;AAAA,GACZ;AACF;AAGO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,sBAAsB,CAAA,GAAI,CAAA;AAAA,EAC1B,yBAAyB,CAAA,GAAI,CAAA;AAAA,EAC7B;AACF,CAAA,GAA+E,EAAC,KAAe;AAAA,EAC7F,GAAGhC,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA;AAAA,EAC1D,GAAGA,OAAAA,CAAO,EAAE,MAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,SAAS;AACnE,CAAA;AAMO,SAAS,YAAA,CAAa;AAAA,EAC3B,oBAAoB,GAAA,GAAM,CAAA;AAAA,EAC1B,mBAAA,GAAsB,CAAA;AAAA,EACtB,6BAAA,GAAgC,CAAA;AAAA,EAChC,mBAAA,GAAsB,CAAA;AAAA,EACtB,yBAAA,GAA4B,CAAA;AAAA,EAC5B,gBAAA,GAAmB,CAAA;AAAA,EACnB,cAAA,GAAiB,CAAA;AAAA,EACjB,uBAAuB,CAAA,GAAI;AAC7B,CAAA,GASI,EAAC,EAAY;AACf,EAAA,MAAM,KAAK,mBAAA,GAAsB,CAAA;AACjC,EAAA,MAAM,EAAA,GAAK,mBAAA,GAAsB,CAAA,GAAI,yBAAA,GAA4B,EAAA;AACjE,EAAA,MAAM,EAAA,GAAK,gBAAA,GAAmB,CAAA,GAAI,cAAA,GAAiB,6BAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,EAAA,KAAO,CAAA,IAAK,EAAA,KAAO,CAAA,GAAI,CAAC,IAAA,CAAK,EAAA,GAAK,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AACrE,EAAA,MAAM,EAAA,GAAK,EAAA,GAAK,GAAA,GAAM,IAAA,CAAK,IAAI,KAAK,CAAA;AACpC,EAAA,MAAM,EAAA,GAAK,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAC/B,EAAA,OAAO;AAAA,IACL,CAAC,IAAI,CAAC,CAAA;AAAA,IACN,CAAC,IAAI,EAAE,CAAA;AAAA,IACP,CAAC,EAAA,GAAK,CAAA,EAAG,EAAE,CAAA;AAAA,IACX,CAAC,EAAA,GAAK,CAAA,EAAG,CAAC,CAAA;AAAA,IACV,CAAC,IAAI,CAAC;AAAA,GACR;AACF;AAGO,SAAS,UAAA,CAAW;AAAA,EACzB,gBAAA,GAAmB,CAAA;AAAA,EACnB,eAAA,GAAkB,CAAA;AAAA,EAClB,gBAAA,GAAmB,CAAA;AAAA,EACnB,eAAA,GAAkB,CAAA;AAAA,EAClB,qBAAqB,CAAA,GAAI;AAC3B,CAAA,GAMI,EAAC,EAAY;AACf,EAAA,MAAM,IAAA,GAAO,gBAAA;AACb,EAAA,MAAM,SAAS,gBAAA,GAAmB,gBAAA;AAClC,EAAA,MAAM,GAAA,GAAM,eAAA;AACZ,EAAA,MAAM,OAAO,eAAA,GAAkB,eAAA;AAC/B,EAAA,MAAM,EAAA,GAAyB;AAAA,IAC7B,CAAC,MAAM,GAAG,CAAA;AAAA,IACV,CAAC,QAAQ,GAAG,CAAA;AAAA,IACZ,CAAC,QAAQ,IAAI,CAAA;AAAA,IACb,CAAC,MAAA,GAAS,CAAA,EAAG,IAAI,CAAA;AAAA,IACjB,CAAC,MAAA,GAAS,CAAA,EAAG,GAAA,GAAM,CAAC,CAAA;AAAA,IACpB,CAAC,IAAA,EAAM,GAAA,GAAM,CAAC,CAAA;AAAA,IACd,CAAC,MAAM,GAAG;AAAA,GACZ;AACA,EAAA,OAAO,GAAG,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAa,CAAA,CAAE,CAAA,GAAI,CAAA,IAAK,KAAK,KAAA,EAAA,CAAQ,CAAA,GAAI,CAAA,IAAK,IAAA,CAAK,KAAK,CAAC,CAAA;AAC/E;;;ACxLO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,cAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAA0B,CAAC,MAAA,EAAQ,SAAS;AAIlD,IAAM,mBAAA,GAAsB;AAAA,EACjC,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF;AAIO,IAAM,uBAAA,GAAqE;AAAA,EAChF,eAAA,EAAiB,SAAA;AAAA,EACjB,YAAA,EAAc,SAAA;AAAA,EACd,IAAA,EAAM,SAAA;AAAA,EACN,cAAA,EAAgB,SAAA;AAAA,EAChB,WAAA,EAAa,SAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,SAAA,EAAW,SAAA;AAAA,EACX,YAAA,EAAc,SAAA;AAAA,EACd,eAAA,EAAiB,SAAA;AAAA,EACjB,aAAA,EAAe,SAAA;AAAA,EACf,WAAA,EAAa;AACf,CAAA;;;ACvBA,IAAMC,WAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAOjC,SAAS,aAAA,CACd,MAAA,EACA,IAAA,GAAqF,EAAC,EAC/E;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACA,QAAAA,CAAQ,gBAAA,EAAkB,GAAG,CAAA;AAChC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,4BAA4B,MAAM,CAAA,oBAAA,EAAuB,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACtF;AACF,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,QAAAA,CAAQ,uBAAA,EAAyB,KAAK,CAAA;AACzC,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,mCAAmC,IAAA,CAAK,YAAY,uBAAuB,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC/G;AACF,EAAA,MAAM,CAAA,GAAI,YAAY,cAAA,CAAe,GAAG,GAAG,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AAC3D,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,uBAAA,EAAyB,IAAA,CAAK,YAAY,CAAA;AACrE,EAAA,MAAM,MAAM,CAAC,CAAA,KAA+B,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAChE,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,aAAa,CAAA;AAChD,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AACjD,EAAA,MAAML,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,MACA,OAAA,EACA,OAAA,EACA,WAAW,KAAA,KAEX,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,SAAS,OAAA,EAAS,QAAA,EAAU,UAAU,KAAA,EAAO,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACxE,IAAA,GAAO,EAAE,KAAA,EAAO,IAAA,KAAS;AAAC,GAC5B;AACF,EAAA,MAAM,KAAK,CAAA,CAAE,iBAAA;AACb,EAAA,MAAM,MAAM,CAAA,CAAE,kCAAA;AACd,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,kBAAkB,CAAA,CAAE,kBAAA;AAAA,IACpB,iBAAiB,CAAA,CAAE,iBAAA;AAAA,IACnB,gBAAgB,CAAA,CAAE;AAAA,GACpB;AACA,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,GAAG,GAAA;AAAA,IACH,2BAA2B,CAAA,CAAE,8BAAA;AAAA,IAC7B,qBAAqB,CAAA,CAAE,sBAAA;AAAA,IACvB,mBAAmB,CAAA,CAAE;AAAA,GACvB;AAEA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,WAAA,CAAY;AAAA,MACZ,uBAAuB,CAAA,CAAE,wBAAA;AAAA,MACzB,qBAAqB,CAAA,CAAE,uBAAA;AAAA,MACvB,qBAAA,EAAuB,GAAA;AAAA,MACvB,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAAA,IACD,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,YAAA,EAAgB,SAAA,CAAU,EAAE,mBAAA,EAAqB,CAAA,CAAE,sBAAA,EAAwB,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACnG,EAAA,GAAA;AAAA,IACE,MAAA;AAAA,IACE,KAAK,EAAE,cAAA,EAAgB,EAAE,gBAAA,EAAkB,WAAA,EAAa,MAAM,CAAA;AAAA,IAChE,IAAI,MAAM,CAAA;AAAA,IACV,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,IACzB,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC;AAAA,GAC3B;AACA,EAAA,GAAA,CAAI,MAAA,EAAU,IAAA,CAAK,EAAE,cAAA,EAAgB,EAAE,gBAAA,EAAkB,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,EAAG,CAAA,EAAG,EAAA,GAAK,KAAK,KAAK,CAAA;AAC3F,EAAA,GAAA;AAAA,IACE,MAAA;AAAA,IACE,KAAK,EAAE,cAAA,EAAgB,EAAE,gBAAA,EAAkB,YAAA,EAAc,MAAM,CAAA;AAAA,IACjE,IAAI,MAAM,CAAA;AAAA,IACV,KAAK,IAAA,CAAK,GAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAM,CAAC,CAAA;AAAA,IAC/B,KAAK,IAAA,CAAK,GAAA,CAAK,CAAA,GAAI,IAAA,CAAK,KAAM,CAAC;AAAA,GACjC;AACA,EAAA,GAAA;AAAA,IACE,gBAAA;AAAA,IACE,aAAA,CAAc;AAAA,MACd,qBAAqB,CAAA,CAAE,qBAAA;AAAA,MACvB,oBAAoB,CAAA,CAAE;AAAA,KACvB,CAAA;AAAA,IACD,IAAI,gBAAgB,CAAA;AAAA,IACpB,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACEkC,YAAW,EAAE,GAAG,KAAK,mBAAA,EAAqB,CAAA,CAAE,YAAY,CAAA;AAAA,IAC1D,IAAI,aAAa,CAAA;AAAA,IACjB,EAAE,sBAAA,GAAyB,CAAA,GAAI,CAAA,CAAE,8BAAA,GAAiC,EAAE,iBAAA,GAAoB,CAAA;AAAA,IACxF,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACEC,YAAAA,CAAY;AAAA,MACZ,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,gBAAgB,CAAA,CAAE,iBAAA;AAAA,MAClB,sBAAsB,CAAA,CAAE;AAAA,KACzB,CAAA;AAAA,IACD,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACEC,SAAAA,CAAS,EAAE,GAAG,IAAA,EAAM,UAAU,IAAA,EAAM,YAAA,EAAc,CAAA,CAAE,oBAAA,EAAsB,CAAA;AAAA,IAC5E,IAAI,WAAW,CAAA;AAAA,IACf,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,WAAA,EAAeA,SAAAA,CAAS,EAAE,GAAG,MAAM,YAAA,EAAc,CAAA,CAAE,mBAAA,EAAqB,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,EAAG,GAAG,CAAC,CAAA;AACrG,EAAA,GAAA;AAAA,IACE,cAAA;AAAA,IACE,WAAA,CAAY;AAAA,MACZ,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,mBAAmB,CAAA,CAAE,mBAAA;AAAA,MACrB,0BAA0B,CAAA,CAAE,2BAAA;AAAA,MAC5B,sBAAsB,CAAA,CAAE;AAAA,KACzB,CAAA;AAAA,IACD,IAAI,cAAc,CAAA;AAAA,IAClB,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,iBAAA;AAAA,IACE,cAAA,CAAe;AAAA,MACf,sBAAsB,CAAA,CAAE,sBAAA;AAAA,MACxB,yBAAyB,CAAA,CAAE,UAAA;AAAA,MAC3B;AAAA,KACD,CAAA;AAAA,IACD,IAAI,iBAAiB,CAAA;AAAA,IACrB,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,eAAA;AAAA,IACE,YAAA,CAAa;AAAA,MACb,oBAAoB,CAAA,CAAE,oBAAA;AAAA,MACtB,qBAAqB,CAAA,CAAE,qBAAA;AAAA,MACvB,6BAAA,EAA+B,GAAA;AAAA,MAC/B,qBAAqB,CAAA,CAAE,sBAAA;AAAA,MACvB,2BAA2B,CAAA,CAAE,8BAAA;AAAA,MAC7B,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,gBAAgB,CAAA,CAAE,iBAAA;AAAA,MAClB,uBAAuB,CAAA,CAAE;AAAA,KAC1B,CAAA;AAAA,IACD,IAAI,eAAe,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,UAAA,CAAW;AAAA,MACX,gBAAA,EAAkB,EAAA;AAAA,MAClB,iBAAiB,CAAA,CAAE,iBAAA;AAAA,MACnB,kBAAkB,CAAA,CAAE,kBAAA;AAAA,MACpB,iBAAiB,CAAA,CAAE,iBAAA;AAAA,MACnB,qBAAqB,CAAA,CAAE;AAAA,KACxB,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,GAAA,GAAM,CAAA;AACZ,EAAA,MAAM,OAAO,KAAA,KAAU,MAAA;AACvB,EAAA,MAAM,EAAA,GAAgC,IAAA,GAClC,CAAC,CAAA,CAAE,mBAAA,GAAsB,IAAA,CAAK,GAAA,CAAK,CAAA,GAAI,IAAA,CAAK,EAAA,GAAM,CAAC,CAAA,EAAG,CAAA,CAAE,oBAAA,GAAuB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,GAAK,CAAC,CAAC,CAAA,GACpG,CAAC,CAAC,CAAA,CAAE,kBAAA,GAAqB,GAAA,EAAK,CAAA,CAAE,kBAAA,GAAqB,GAAG,CAAA;AAC5D,EAAA,MAAM,KAAgC,IAAA,GAClC,CAAC,CAAC,CAAA,CAAE,eAAA,GAAkB,KAAK,CAAA,CAAE,qBAAA,GAAwB,GAAG,CAAA,GACxD,CAAC,CAAC,CAAA,CAAE,wBAAA,GAA2B,KAAK,GAAA,GAAM,CAAA,CAAE,qBAAqB,GAAG,CAAA;AACxE,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,cAAc,EAAA,EAAI,EAAA,EAAI,MAAM,KAAK,CAAA;AAClD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,UAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,YAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAApC;AAAA,GACF;AACF;;;ACrOO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,mBAAA,GAAsB,CAAA;AAAA,EACtB,YAAA,GAAe;AACjB,CAAA,GAA6D,OAC3D,eAAA,CAAgB,CAAA,EAAG,qBAAqB,CAAC,YAAA,GAAe,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA;AAGtE,IAAM,YAAY,CAAC;AAAA,EACxB,WAAA,GAAc,CAAA;AAAA,EACd,mBAAA,GAAsB,CAAA;AAAA,EACtB,YAAA,GAAe;AACjB,CAAA,GAAmF,EAAC,KAClF,eAAA,CAAgB,CAAA,EAAG,WAAA,GAAc,CAAA,GAAI,mBAAA,EAAqB,CAAC,YAAA,GAAe,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA;AAGxF,IAAM,eAAe,CAAC;AAAA,EAC3B,WAAA,GAAc,CAAA;AAAA,EACd,gBAAA,GAAmB;AACrB,CAAA,GAAyD,OACvD,eAAA,CAAgB,CAAC,cAAc,CAAA,EAAG,WAAA,GAAc,CAAA,EAAG,CAAA,EAAG,gBAAgB,CAAA;AAGjE,IAAM,WAAW,CAAC;AAAA,EACvB,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB;AACrB,CAAA,GAAwD,EAAC,KACvD,eAAA,CAAgB,CAAC,gBAAA,EAAkB,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAGhE,IAAMO,YAAW,CAAC;AAAA,EACvB,WAAA,GAAc,CAAA;AAAA,EACd,gBAAA,GAAmB;AACrB,CAAA,GAAyD,EAAC,KACxD,eAAA,CAAgB,CAAC,WAAA,GAAc,GAAG,WAAA,GAAc,CAAA,EAAG,CAAC,gBAAA,EAAkB,CAAC,CAAA;AAGlE,SAAS8B,WAAAA,CAAW;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,gBAAA,GAAmB,CAAA;AAAA,EACnB,gBAAA,GAAmB;AACrB,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,MAAM,IAAI,WAAA,GAAc,CAAA;AACxB,EAAA,MAAM,IAAI,UAAA,GAAa,CAAA;AACvB,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,gBAAA,CAAiB,CAAA;AAAA,IAC3B,CAAC,CAAA,GAAI,gBAAA,EAAkB,EAAE,IAAI,gBAAA,CAAiB,CAAA;AAAA,IAC9C,CAAC,CAAA,GAAI,gBAAA,EAAkB,CAAA,GAAI,gBAAgB,CAAA;AAAA,IAC3C,CAAC,CAAA,EAAG,CAAA,GAAI,gBAAgB,CAAA;AAAA,IACxB,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,IAAM,cAAc,CAAC;AAAA,EAC1B,YAAA,GAAe,CAAA;AAAA,EACf,gBAAA,GAAmB;AACrB,CAAA,GAA0D,EAAC,KACzD,eAAA,CAAgB,CAAC,gBAAA,EAAkB,GAAG,CAAC,YAAA,GAAe,CAAA,EAAG,YAAA,GAAe,CAAC,CAAA;AAGpE,IAAM,oBAAoB,CAAC;AAAA,EAChC,uBAAA,GAA0B,CAAA;AAAA,EAC1B,gBAAA,GAAmB;AACrB,CAAA,GAAqE,OACnE,eAAA,CAAgB,CAAA,EAAG,yBAAyB,CAAC,gBAAA,GAAmB,CAAA,EAAG,gBAAA,GAAmB,CAAC,CAAA;AAGlF,IAAMC,cAAa,CAAC;AAAA,EACzB,gBAAA,GAAmB,CAAA;AAAA,EACnB,gBAAA,GAAmB;AACrB,CAAA,GAA8D,EAAC,KAC7D,eAAA,CAAgB,CAAC,gBAAA,EAAkB,GAAG,CAAC,gBAAA,GAAmB,CAAA,EAAG,gBAAA,GAAmB,CAAC,CAAA;AAG5E,IAAMC,OAAM,CAAC;AAAA,EAClB,gBAAA,GAAmB,CAAA;AAAA,EACnB,SAAA,GAAY;AACd,CAAA,GAAuD,EAAC,KACtD,eAAA,CAAgB,CAAC,gBAAA,GAAmB,CAAA,EAAG,gBAAA,GAAmB,CAAA,EAAG,CAAC,SAAA,GAAY,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA;;;ACzFrF,IAAM,eAAA,GAAkB;AAAA,EAC7B,aAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,oBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AAIO,IAAM,qBAAA,GAAwB;AAAA,EACnC,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF;AAIO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,oBAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AAIO,IAAM,qBAAA,GAAiE;AAAA,EAC5E,eAAA,EAAiB,WAAA;AAAA,EACjB,QAAA,EAAU,SAAA;AAAA,EACV,gBAAA,EAAkB,SAAA;AAAA,EAClB,gBAAA,EAAkB,SAAA;AAAA,EAClB,WAAA,EAAa,SAAA;AAAA,EACb,kBAAA,EAAoB,SAAA;AAAA,EACpB,WAAA,EAAa,SAAA;AAAA,EACb,QAAA,EAAU,SAAA;AAAA,EACV,WAAA,EAAa,SAAA;AAAA,EACb,SAAA,EAAW,SAAA;AAAA,EACX,aAAA,EAAe,SAAA;AAAA,EACf,WAAA,EAAa,SAAA;AAAA,EACb,GAAA,EAAK;AACP,CAAA;;;ACvDA,IAAMlC,WAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAGxC,IAAM,IAAA,GAAmD;AAAA,EACvD,IAAA,EAAM,MAAA;AAAA,EACN,cAAA,EAAgB,IAAA;AAAA,EAChB,gBAAA,EAAkB,IAAA;AAAA,EAClB,KAAA,EAAO,OAAA;AAAA,EACP,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,OAAA;AAAA,EACb,YAAA,EAAc,OAAA;AAAA,EACd,cAAA,EAAgB,OAAA;AAAA,EAChB,WAAA,EAAa,OAAA;AAAA,EACb,YAAA,EAAc,OAAA;AAAA,EACd,cAAA,EAAgB,OAAA;AAAA,EAChB,OAAA,EAAS,SAAA;AAAA,EACT,SAAA,EAAW,SAAA;AAAA,EACX,aAAA,EAAe,SAAA;AAAA,EACf,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB,SAAA;AAAA,EAClB,aAAA,EAAe,SAAA;AAAA,EACf,cAAA,EAAgB,SAAA;AAAA,EAChB,gBAAA,EAAkB,SAAA;AAAA,EAClB,WAAA,EAAa,SAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,cAAA,EAAgB;AAClB,CAAA;AAOO,SAAS,WAAA,CACd,MAAA,EACA,IAAA,GAA+E,EAAC,EACzE;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACA,QAAAA,CAAQ,cAAA,EAAgB,GAAG,CAAA;AAC9B,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,0BAA0B,MAAM,CAAA,oBAAA,EAAuB,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAClF;AACF,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,QAAAA,CAAQ,qBAAA,EAAuB,KAAK,CAAA;AACvC,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,iCAAiC,IAAA,CAAK,YAAY,uBAAuB,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC3G;AACF,EAAA,MAAM,CAAA,GAAI,YAAY,YAAA,CAAa,GAAG,GAAG,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AACzD,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,qBAAA,EAAuB,IAAA,CAAK,YAAY,CAAA;AACnE,EAAA,MAAM,MAAM,CAAC,CAAA,KAA6B,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAC9D,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,IAAI,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AACjD,EAAA,MAAM,IAAI,CAAA,CAAE,YAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,aAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,aAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,cAAA;AACZ,EAAA,MAAM,KAAK,CAAA,CAAE,oBAAA;AACb,EAAA,MAAML,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,IAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,KAAA,GAA4B,EAAC,KAE7B,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,OAAA,EAAS,OAAA,EAAS,UAAU,QAAA,EAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACjE,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAK,GAAI;AAAA,GACrC;AAEF,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACEqC,WAAAA,CAAW;AAAA,MACX,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,kBAAkB,CAAA,CAAE,iBAAA;AAAA,MACpB,kBAAkB,CAAA,CAAE;AAAA,KACrB,CAAA;AAAA,IACD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,MAAA,EAAQ,GAAA,CAAI,aAAa,CAAA;AAAE,GAC/B;AACA,EAAA,GAAA;AAAA,IACE,eAAA;AAAA,IACE,YAAA,CAAa,EAAE,WAAA,EAAa,CAAA,EAAG,mBAAmB,CAAA,GAAI,CAAA,IAAK,GAAG,CAAA;AAAA,IAChE,IAAI,eAAe,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAA,GAAI,CAAA;AAAA,IACJ,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,SAAA,CAAU,EAAE,WAAA,EAAa,CAAA,EAAG,qBAAqB,EAAA,EAAI,YAAA,EAAc,GAAG,CAAA;AAAA,IACxE,IAAI,WAAW,CAAA;AAAA,IACf,EAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,UAAY,cAAA,CAAe,EAAE,qBAAqB,EAAA,EAAI,YAAA,EAAc,GAAG,CAAA;AAC7E,EAAA,GAAA,CAAI,iBAAA,EAAmB,SAAS,GAAA,CAAI,UAAU,GAAG,CAAA,EAAG,IAAA,GAAO,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC1E,EAAA,GAAA,CAAI,iBAAA,EAAmB,OAAA,EAAS,GAAA,CAAI,UAAU,CAAA,EAAG,CAAC,EAAA,EAAI,KAAA,GAAQ,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC7E,EAAA,GAAA,CAAI,iBAAA,EAAmB,SAAS,GAAA,CAAI,aAAa,GAAG,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC9E,EAAA,GAAA,CAAI,iBAAA,EAAmB,OAAA,EAAS,GAAA,CAAI,aAAa,CAAA,EAAG,CAAC,EAAA,EAAI,IAAA,GAAO,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAC/E,EAAA,GAAA,CAAI,YAAc,QAAA,CAAS,EAAE,UAAA,EAAY,CAAA,EAAG,kBAAkB,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,UAAU,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,MAAM,KAAK,CAAA;AAC1G,EAAA,MAAM,OAAS9B,SAAAA,CAAS,EAAE,aAAa,CAAA,EAAG,gBAAA,EAAkB,GAAG,CAAA;AAC/D,EAAA,GAAA,CAAI,UAAA,EAAY,MAAM,GAAA,CAAI,kBAAkB,GAAG,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,IAAI,CAAA;AACpE,EAAA,GAAA,CAAI,UAAA,EAAY,MAAM,GAAA,CAAI,kBAAkB,GAAG,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,KAAA,EAAO,IAAI,CAAA;AACpE,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,YAAY,EAAE,YAAA,EAAc,CAAA,EAAG,gBAAA,EAAkB,GAAG,CAAA;AAAA,IACtD,IAAI,aAAa,CAAA;AAAA,IACjB,EAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,oBAAA;AAAA,IACE,kBAAkB,EAAE,uBAAA,EAAyB,EAAA,EAAI,gBAAA,EAAkB,GAAG,CAAA;AAAA,IACxE,IAAI,oBAAoB,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE+B,YAAW,EAAE,gBAAA,EAAkB,EAAE,kBAAA,EAAoB,gBAAA,EAAkB,GAAG,CAAA;AAAA,IAC5E,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA,GAAI,CAAA;AAAA,IACJ,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,OAASC,IAAAA,CAAI,EAAE,gBAAA,EAAkB,CAAA,EAAG,WAAW,CAAA,CAAE,UAAA,EAAY,CAAA,EAAG,IAAI,KAAK,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,OAAO,KAAK,CAAA;AAGlG,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,iBAAA,GAAoB,CAAA;AAC1C,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,iBAAA,GAAoB,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,KAAK,KAAK,CAAA;AACvB,EAAA,MAAM,EAAA,GACJ,IAAA,KAAS,IAAA,GACL,CAAC,EAAE,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA,EAAI,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,GACxB,IAAA,KAAS,OAAA,GACP,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,GACV,IAAA,KAAS,SAAA,GACP,CAAC,IAAA,EAAM,GAAG,CAAA,GACV,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA;AACpB,EAAA,MAAM,EAAA,GAAgC,IAAA,KAAS,IAAA,GAAO,CAAC,EAAE,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA,EAAI,CAAA,GAAI,IAAI,CAAC,CAAA,GAAI,CAAC,CAAC,KAAK,GAAG,CAAA;AAC5F,EAAA,MAAM,CAAC,IAAI,EAAE,CAAA,GAAI,cAAc,EAAA,EAAI,EAAA,EAAI,MAAM,KAAK,CAAA;AAClD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAvC;AAAA,GACF;AACF;;;ACnMA,SAASwC,MAAAA,CAAM,WAAA,EAAqB,UAAA,EAAoB,MAAA,EAAgB,OAAA,EAA0B;AAChG,EAAA,MAAM,IAAI,WAAA,GAAc,CAAA;AACxB,EAAA,MAAM,IAAI,UAAA,GAAa,CAAA;AACvB,EAAA,OAAO;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,GAAG,CAAC,CAAA;AAAA,IACL,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,IACN,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,OAAO,CAAA;AAAA,IAChB,CAAC,CAAA,GAAI,MAAA,EAAQ,CAAC,IAAI,OAAO,CAAA;AAAA,IACzB,CAAC,CAAA,GAAI,MAAA,EAAQ,CAAA,GAAI,OAAO,CAAA;AAAA,IACxB,CAAC,CAAA,EAAG,CAAA,GAAI,OAAO,CAAA;AAAA,IACf,CAAC,GAAG,CAAC;AAAA,GACP;AACF;AAGO,SAAS,QAAA,CAAS;AAAA,EACvB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,eAAA,GAAkB,CAAA;AAAA,EAClB,gBAAA,GAAmB;AACrB,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,OAAOA,MAAAA,CAAM,WAAA,EAAa,UAAA,EAAY,eAAA,EAAiB,gBAAgB,CAAA;AACzE;AAGO,SAASH,WAAAA,CAAW;AAAA,EACzB,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa,CAAA;AAAA,EACb,iBAAA,GAAoB,CAAA;AAAA,EACpB,kBAAA,GAAqB;AACvB,CAAA,GAKI,EAAC,EAAY;AACf,EAAA,OAAOG,MAAAA,CAAM,WAAA,EAAa,UAAA,EAAY,iBAAA,EAAmB,kBAAkB,CAAA;AAC7E;AAGO,SAAS,SAAA,CAAU;AAAA,EACxB,0BAAA,GAA6B,CAAA;AAAA,EAC7B,UAAA,GAAa;AACf,CAAA,GAAkE,EAAC,EAAY;AAC7E,EAAA,OAAO,gBAAgB,CAAA,EAAG,0BAAA,EAA4B,CAAC,UAAA,GAAa,CAAA,EAAG,aAAa,CAAC,CAAA;AACvF;AAGO,SAASC,UAAAA,CAAU;AAAA,EACxB,0BAAA,GAA6B,CAAA;AAAA,EAC7B,WAAA,GAAc,CAAA;AAAA,EACd,UAAA,GAAa;AACf,CAAA,GAAwF,EAAC,EAAY;AACnG,EAAA,MAAM,GAAA,GAAM,cAAc,CAAA,GAAI,0BAAA;AAC9B,EAAA,OAAO,eAAA,CAAgB,CAAC,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC3E;AAGO,SAASnB,QAAAA,CAAQ;AAAA,EACtB,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB;AAClB,CAAA,GAAqD,EAAC,EAAY;AAChE,EAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,EAAe,CAAA,EAAG,CAAC,UAAA,GAAa,CAAA,EAAG,aAAa,CAAC,CAAA;AAC3E;AAGO,SAASf,SAAAA,CAAS;AAAA,EACvB,WAAA,GAAc,CAAA;AAAA,EACd,aAAA,GAAgB;AAClB,CAAA,GAAsD,EAAC,EAAY;AACjE,EAAA,OAAO,eAAA,CAAgB,CAAC,WAAA,GAAc,CAAA,EAAG,cAAc,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAC7E;AAGO,SAAS,UAAA,CAAW;AAAA,EACzB,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB;AAClB,CAAA,GAAqD,EAAC,EAAY;AAChE,EAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,EAAe,CAAA,EAAG,CAAC,UAAA,GAAa,CAAA,EAAG,aAAa,CAAC,CAAA;AAC3E;AAGO,SAASiB,WAAAA,CAAW;AAAA,EACzB,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB;AAClB,CAAA,GAAqD,EAAC,EAAY;AAChE,EAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,GAAgB,CAAA,EAAG,aAAA,GAAgB,GAAG,CAAC,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,CAAC,CAAA;AAC/F;AAGO,SAAS,eAAA,CAAgB;AAAA,EAC9B,qBAAA,GAAwB,CAAA;AAAA,EACxB,aAAA,GAAgB;AAClB,CAAA,GAAgE,EAAC,EAAY;AAC3E,EAAA,OAAO,eAAA,CAAgB,CAAA,EAAG,qBAAA,EAAuB,CAAC,eAAe,CAAC,CAAA;AACpE;AAGO,SAAS,oBAAA,CAAqB;AAAA,EACnC,UAAA,GAAa,CAAA;AAAA,EACb,aAAA,GAAgB;AAClB,CAAA,GAAqD,EAAC,EAAY;AAChE,EAAA,OAAO,eAAA,CAAgB,CAAC,aAAA,EAAe,CAAA,EAAG,GAAG,UAAU,CAAA;AACzD;;;AC/GO,IAAM,mBAAA,GAAsB;AAAA,EACjC,WAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,aAAA;AAAA,EACA,wBAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF;AAIO,IAAM,yBAAA,GAA4B;AAAA,EACvC,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;AAIO,IAAM,qBAAA,GAAwB;AAAA,EACnC,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF;AAIO,IAAM,yBAAA,GAAyE;AAAA,EACpF,eAAA,EAAiB,WAAA;AAAA,EACjB,SAAA,EAAW,SAAA;AAAA,EACX,UAAA,EAAY,SAAA;AAAA,EACZ,mBAAA,EAAqB,SAAA;AAAA,EACrB,mBAAA,EAAqB,SAAA;AAAA,EACrB,WAAA,EAAa,SAAA;AAAA,EACb,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,SAAA;AAAA,EACV,WAAA,EAAa,SAAA;AAAA,EACb,WAAA,EAAa,SAAA;AAAA,EACb,iBAAA,EAAmB,SAAA;AAAA,EACnB,iBAAA,EAAmB;AACrB,CAAA;;;ACvCA,IAAMnB,YAAU,CAAmB,IAAA,EAAoB,CAAA,KACpD,IAAA,CAA2B,SAAS,CAAC,CAAA;AAOjC,SAAS,eAAA,CACd,MAAA,EACA,IAAA,GAA2F,EAAC,EACrF;AACP,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAACA,SAAAA,CAAQ,kBAAA,EAAoB,GAAG,CAAA;AAClC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,8BAA8B,MAAM,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC1F;AACF,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,CAAK,YAAA,IAAgB,MAAA,EAAQ,WAAA,EAAY;AACxD,EAAA,IAAI,CAACA,SAAAA,CAAQ,yBAAA,EAA2B,KAAK,CAAA;AAC3C,IAAA,MAAM,IAAI,wBAAA;AAAA,MACR,qCAAqC,IAAA,CAAK,YAAY,uBAAuB,yBAAA,CAA0B,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACnH;AACF,EAAA,MAAM,CAAA,GAAI,YAAY,gBAAA,CAAiB,GAAG,GAAG,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,yBAAA,EAA2B,IAAA,CAAK,YAAY,CAAA;AACvE,EAAA,MAAM,MAAM,CAAC,CAAA,KAAiC,QAAQ,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAClE,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAA,CAAE,WAAW,CAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,KAAA,IAAS,IAAI,CAAA;AAC9C,EAAA,MAAM,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAa,CAAC,MAAM,KAAK,CAAA;AACvD,EAAA,MAAM,EAAE,QAAA,GAAW,CAAA,EAAG,SAAS,CAAA,EAAG,MAAA,GAAS,GAAE,GAAI,IAAA;AACjD,EAAA,MAAM,IAAI,CAAA,CAAE,YAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,WAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,cAAA;AACZ,EAAA,MAAM,IAAI,CAAA,CAAE,+BAAA;AACZ,EAAA,MAAML,YAAsB,EAAC;AAC7B,EAAA,MAAM,GAAA,GAAM,CACV,IAAA,EACA,GAAA,EACA,IAAA,EACA,OAAA,EACA,OAAA,EACA,QAAA,EACA,QAAA,EACA,KAAA,GAA4B,EAAC,KAE7B,UAAA;AAAA,IACEA,SAAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,EAAE,OAAA,EAAS,OAAA,EAAS,UAAU,QAAA,EAAU,MAAA,EAAQ,QAAQ,QAAA,EAAS;AAAA,IACjE,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,MAAK,GAAI;AAAA,GACrC;AAEF,EAAA,MAAM,EAAA,GAAK,IAAI,WAAW,CAAA;AAC1B,EAAA,GAAA;AAAA,IACE,WAAA;AAAA,IACE,QAAA,CAAS;AAAA,MACT,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,iBAAiB,CAAA,CAAE,kBAAA;AAAA,MACnB,kBAAkB,CAAA,CAAE;AAAA,KACrB,CAAA;AAAA,IACD,EAAA;AAAA,IACA,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,QAAQ,EAAA;AAAG,GACf;AACA,EAAA,MAAM,EAAA,GAAK,IAAI,YAAY,CAAA;AAC3B,EAAA,GAAA,CAAI,YAAA,EAAgB,SAAA,CAAU,EAAE,0BAAA,EAA4B,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,CAAA,EAAG,MAAM,KAAA,EAAO;AAAA,IACtG,MAAA,EAAQ;AAAA,GACT,CAAA;AACD,EAAA,MAAM,IAAA,GAASyC,WAAU,EAAE,0BAAA,EAA4B,GAAG,WAAA,EAAa,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,CAAA;AACzF,EAAA,MAAM,GAAA,GAAM,CAAA,GAAA,CAAK,CAAA,GAAI,CAAA,GAAI,CAAA,IAAK,CAAA;AAC9B,EAAA,GAAA,CAAI,WAAA,EAAa,MAAM,GAAA,CAAI,qBAAqB,GAAG,CAAC,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACxE,EAAA,GAAA,CAAI,WAAA,EAAa,MAAM,GAAA,CAAI,qBAAqB,GAAG,GAAA,EAAK,CAAA,EAAG,OAAO,KAAK,CAAA;AACvE,EAAA,MAAM,EAAA,GAAK,IAAI,aAAa,CAAA;AAC5B,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACEJ,WAAAA,CAAW;AAAA,MACX,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,mBAAmB,CAAA,CAAE,oBAAA;AAAA,MACrB,oBAAoB,CAAA,CAAE;AAAA,KACvB,CAAA;AAAA,IACD,EAAA;AAAA,IACA,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,EAAE,QAAQ,EAAA;AAAG,GACf;AACA,EAAA,GAAA;AAAA,IACE,mBAAA;AAAA,IACE,gBAAgB,EAAE,qBAAA,EAAuB,EAAE,wBAAA,EAA0B,aAAA,EAAe,GAAG,CAAA;AAAA,IACzF,IAAI,mBAAmB,CAAA;AAAA,IACvB,CAAA,GAAI,IAAI,CAAA,CAAE,6BAAA;AAAA,IACV,CAAA,GAAI,CAAA;AAAA,IACJ,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACE,WAAW,EAAE,UAAA,EAAY,CAAA,EAAG,aAAA,EAAe,GAAG,CAAA;AAAA,IAChD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,6BAAA;AACnB,EAAA,MAAM,IAAA,GAAS,qBAAqB,EAAE,UAAA,EAAY,EAAE,6BAAA,EAA+B,aAAA,EAAe,GAAG,CAAA;AACrG,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,+BAA+B,CAAA,EAAA,EAAK;AACxD,IAAA,GAAA,CAAI,wBAAA,EAA0B,MAAM,GAAA,CAAI,mBAAmB,GAAG,CAAA,EAAG,EAAA,EAAI,MAAM,IAAI,CAAA;AAC/E,IAAA,EAAA,IAAM,CAAA,CAAE,gCAAgC,CAAA,CAAE,6BAAA;AAAA,EAC5C;AACA,EAAA,GAAA;AAAA,IACE,aAAA;AAAA,IACEb,YAAW,EAAE,UAAA,EAAY,CAAA,EAAG,aAAA,EAAe,GAAG,CAAA;AAAA,IAChD,IAAI,aAAa,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,GAAA,CAAI,YAAcF,QAAAA,CAAQ,EAAE,UAAA,EAAY,CAAA,EAAG,eAAe,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,UAAU,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAG,MAAM,KAAK,CAAA;AACtG,EAAA,GAAA,CAAI,YAAcf,SAAAA,CAAS,EAAE,WAAA,EAAa,CAAA,EAAG,eAAe,CAAA,EAAG,CAAA,EAAG,GAAA,CAAI,UAAU,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,OAAO,IAAI,CAAA;AAExG,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,kBAAA;AACtB,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,kBAAA;AACtB,EAAA,MAAM,GAAA,GAAM,CAAC,EAAE,CAAA,GAAI,IAAI,CAAA,CAAA,EAAI,CAAA,GAAI,IAAI,CAAC,CAAA;AACpC,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,EAAG,GAAG,CAAA;AACnB,EAAA,MAAM,GAAA,GAAM,CAAC,CAAC,GAAA,EAAK,CAAC,CAAA;AACpB,EAAA,MAAM,CAAA,GAAyE;AAAA,IAC7E,IAAA,EAAM,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA;AAAA,IAChB,cAAA,EAAgB,GAAA;AAAA,IAChB,gBAAA,EAAkB,GAAA;AAAA,IAClB,OAAA,EAAS,GAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA,IACT,kBAAA,EAAoB,GAAA;AAAA,IACpB,oBAAA,EAAsB,GAAA;AAAA,IACtB,sBAAA,EAAwB,GAAA;AAAA,IACxB,OAAA,EAAS,GAAA;AAAA,IACT,OAAA,EAAS,GAAA;AAAA,IACT,kBAAA,EAAoB,GAAA;AAAA,IACpB,oBAAA,EAAsB,GAAA;AAAA,IACtB,sBAAA,EAAwB;AAAA,GAC1B;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,gBAAA,IAAoB,KAAA,KAAU,gBAAA;AACzD,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,aAAA,CAAc,EAAE,KAAK,CAAA,EAAG,QAAA,GAAW,CAAC,EAAE,CAAA,GAAI,IAAI,CAAA,CAAA,EAAI,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,GAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,IAAA,EAAM,KAAK,CAAA;AACxG,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,EAAA,CAAG,CAAC,CAAA,GAAI,MAAA,EAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,MAAM,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,IAAI,iBAAiB,CAAA;AACxC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,YAAA;AAAA,IACP,MAAA,EAAQ,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAA,EAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACtC,MAAA,EAAQ,QAAA;AAAA,IACR,GAAI,oBAAoB,IAAA,CAAK,UAAU,IAAI,EAAC,GAAI,EAAE,UAAA,EAAW;AAAA,IAC7D,QAAA,EAAAP;AAAA,GACF;AACF;;;ACzFO,IAAM,MAAA,GAAS;AAAA,EACpB,UAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF;AAEA,IAAM,YAAA,GAAe,CAAC,KAAA,KACpB,IAAI,kBAAA,CAAmB,CAAA,eAAA,EAAkB,KAAK,CAAA,oBAAA,EAAuB,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAiHnF,SAAS,OAAA,CAAQ,KAAA,EAAc,MAAA,EAAgB,IAAA,GAAe,EAAC,EAAU;AAC9E,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,UAAA;AACH,MAAA,OAAO,aAAA,CAAc,QAAQ,IAAI,CAAA;AAAA,IACnC,KAAK,YAAA;AACH,MAAA,OAAO,eAAA,CAAgB,QAAQ,IAAI,CAAA;AAAA,IACrC,KAAK,SAAA;AACH,MAAA,OAAO,YAAA,CAAa,QAAQ,IAAI,CAAA;AAAA,IAClC,KAAK,UAAA;AACH,MAAA,OAAO,aAAA,CAAc,QAAQ,IAAI,CAAA;AAAA,IACnC,KAAK,QAAA;AACH,MAAA,OAAO,UAAA,CAAW,QAAQ,IAAI,CAAA;AAAA,IAChC,KAAK,UAAA;AACH,MAAA,OAAO,aAAA,CAAc,QAAQ,IAAI,CAAA;AAAA,IACnC,KAAK,QAAA;AACH,MAAA,OAAO,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,IACjC,KAAK,UAAA;AACH,MAAA,OAAO,aAAA,CAAc,QAAQ,IAAI,CAAA;AAAA,IACnC,KAAK,QAAA;AACH,MAAA,OAAO,WAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,IACjC,KAAK,YAAA;AACH,MAAA,OAAO,eAAA,CAAgB,QAAQ,IAAI,CAAA;AAAA,IACrC;AAEE,MAAA,MAAM,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA;AAEtC;AASA,IAAM,SAAA,GAAgD;AAAA,EACpD,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,gBAAA;AAAA,IACT,QAAA,EAAU,iBAAA;AAAA,IACV,aAAA,EAAe,uBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,kBAAA;AAAA,IACT,QAAA,EAAU,mBAAA;AAAA,IACV,aAAA,EAAe,yBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS,eAAA;AAAA,IACT,QAAA,EAAU,gBAAA;AAAA,IACV,aAAA,EAAe,sBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,gBAAA;AAAA,IACT,QAAA,EAAU,iBAAA;AAAA,IACV,aAAA,EAAe,uBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,QAAA,EAAU,eAAA;AAAA,IACV,aAAA,EAAe,qBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,gBAAA;AAAA,IACT,QAAA,EAAU,iBAAA;AAAA,IACV,aAAA,EAAe,uBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,QAAA,EAAU,eAAA;AAAA,IACV,aAAA,EAAe,qBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,gBAAA;AAAA,IACT,QAAA,EAAU,iBAAA;AAAA,IACV,aAAA,EAAe,uBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,cAAA;AAAA,IACT,QAAA,EAAU,eAAA;AAAA,IACV,aAAA,EAAe,qBAAA;AAAA,IACf,SAAA,EAAW;AAAA,GACb;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,kBAAA;AAAA,IACT,QAAA,EAAU,mBAAA;AAAA,IACV,aAAA,EAAe,yBAAA;AAAA,IACf,SAAA,EAAW;AAAA;AAEf,CAAA;AAGA,SAAS,UAAU,KAAA,EAA0B;AAC3C,EAAA,IAAI,CAAE,MAAA,CAA6B,QAAA,CAAS,KAAK,CAAA,EAAG,MAAM,aAAa,KAAK,CAAA;AAC5E,EAAA,OAAO,UAAU,KAAc,CAAA;AACjC;AAcO,SAAS,QAAQ,KAAA,EAAiC;AACvD,EAAA,OAAO,SAAA,CAAU,KAAK,CAAA,CAAE,OAAA;AAC1B;AAcO,SAAS,SAAS,KAAA,EAAiC;AACxD,EAAA,OAAO,SAAA,CAAU,KAAK,CAAA,CAAE,QAAA;AAC1B;AAcO,SAAS,cAAc,KAAA,EAAiC;AAC7D,EAAA,OAAO,SAAA,CAAU,KAAK,CAAA,CAAE,aAAA;AAC1B;AAcO,SAAS,UAAU,KAAA,EAAiC;AACzD,EAAA,OAAO,SAAA,CAAU,KAAK,CAAA,CAAE,SAAA;AAC1B;;;AC5XA,IAAM,GAAA,GAAM,CAAC,CAAA,KAA8B;AACzC,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAK;AACjB,IAAA,IAAI,CAAA,KAAM,IAAI,OAAO,IAAA;AACrB,IAAA,OAAO,MAAA,CAAO,MAAM,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI,IAAA,GAAO,OAAO,CAAC,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAC,OAAO,KAAA,CAAM,CAAC,IAAI,CAAA,GAAI,IAAA;AACzD,CAAA;AAGA,IAAM,OAAA,GAAU,CAAC,CAAA,EAAY,CAAA,KAA6B;AACxD,EAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,EAAA,OAAO,MAAM,IAAA,GAAO,IAAA,GAAA,CAAS,CAAA,GAAI,CAAA,GAAI,KAAK,GAAA,GAAO,CAAA;AACnD,CAAA;AACA,IAAM,OAAA,GAAU,CAAC,CAAA,EAAY,CAAA,KAA6B;AACxD,EAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,EAAA,OAAO,MAAM,IAAA,GAAO,IAAA,GAAA,CAAS,CAAA,GAAI,CAAA,GAAI,KAAK,EAAA,GAAM,CAAA;AAClD,CAAA;AAMO,IAAM,MAAA,GAqBT;AAAA,EACF,YAAA,EAAc;AAAA,IACZ,CAAA,EAAG,CAAC,CAAA,KAA0B;AAC5B,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,CAAC,CAAA;AACjB,MAAA,OAAO,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,GAAA,GAAM,OAAO,CAAA,GAAI,EAAA;AAAA,IAC9C,CAAA;AAAA,IACA,CAAA,EAAG,CAAC,CAAA,KAA0B;AAC5B,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,CAAC,CAAA;AACjB,MAAA,OAAO,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,CAAA,GAAI,EAAA;AAAA,IACjC,CAAA;AAAA,IACA,WAAA,EACE;AAAA,GACJ;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,CAAA,EAAG,CAAC,CAAA,KAA0B;AAC5B,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,CAAC,CAAA;AACjB,MAAA,OAAO,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,CAAA,GAAI,EAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAA,EAAG,CAAC,CAAA,KAA0B;AAC5B,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,CAAC,CAAA;AACjB,MAAA,OAAO,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,GAAA,GAAM,OAAO,CAAA,GAAI,EAAA;AAAA,IAC9C,CAAA;AAAA,IACA,WAAA,EACE;AAAA,GACJ;AAAA,EACA,UAAA,EAAY;AAAA,IACV,GAAG,CAAC,CAAA,KAA0B,OAAA,CAAQ,CAAA,CAAE,GAAG,GAAG,CAAA;AAAA,IAC9C,GAAG,CAAC,CAAA,KAA0B,OAAA,CAAQ,CAAA,CAAE,GAAG,GAAG,CAAA;AAAA,IAC9C,WAAA,EACE;AAAA,GACJ;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,CAAA,EAAG,CAAC,CAAA,KAA0B;AAC5B,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,CAAC,CAAA;AACjB,MAAA,OAAO,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,CAAA,GAAI,EAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAA,EAAG,CAAC,CAAA,KAA0B,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,IACrC,WAAA,EAAa;AAAA;AAEjB;AAKO,SAAS,eAAA,CAAgB,QAAgB,KAAA,EAAsB;AACpE,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,CAAC,CAAA,KAAM;AACR,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,CAAC,CAAA;AACjB,MAAA,OAAO,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,CAAA,GAAI,MAAA,GAAS,CAAA;AAAA,IAC1C,CAAA;AAAA,IACA,CAAA,EAAG,CAAC,CAAA,KAAM;AACR,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,CAAC,CAAA;AACjB,MAAA,OAAO,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,CAAA,GAAI,KAAA,GAAQ,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,WAAA,EAAa,CAAA,+BAAA,EAAkC,MAAM,CAAA,GAAA,EAAM,KAAK,CAAA,QAAA;AAAA,GAClE;AACF;AAyBO,SAAS,cAAA,CACd,MACA,CAAA,EACgE;AAChE,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,IAAA,KAAS,YAAA,IAAgB,EAAE,IAAA,KAAS,qBAAA;AAClD,EAAA,MAAM,CAAA,GAAW,OAAO,CAAA,CAAE,IAAA,KAAS,WAAW,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA,CAAE,IAAA;AACjE,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,KAAM,GAAA,GAAM,UAAA,GAAa,GAAA,CAAA;AACtC,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,CAAA,KAAM,GAAA,GAAM,UAAA,GAAa,GAAA,CAAA;AACtC,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,GAAA,EAAK,CAAA,IAAK,WAAA;AACvB,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,GAAA,EAAK,CAAA,IAAK,WAAA;AACvB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM;AACrB,IAAA,MAAM,IAAA,GAAY,EAAE,CAAA,EAAG,CAAA,CAAE,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,CAAE,EAAE,CAAA,EAAE;AACvC,IAAA,OAAO,EAAE,GAAG,CAAA,EAAG,CAAC,EAAE,GAAG,CAAA,CAAE,CAAA,CAAE,IAAI,CAAA,EAAG,CAAC,EAAE,GAAG,CAAA,CAAE,CAAA,CAAE,IAAI,CAAA,EAAE;AAAA,EAIlD,CAAC,CAAA;AACH;;;ACpJO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,iBAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF;AAIO,IAAM,sBAAA,GAAmE;AAAA,EAC9E,eAAA,EAAiB,iBAAA;AAAA,EACjB,KAAA,EAAO,gBAAA;AAAA,EACP,SAAA,EAAW,WAAA;AAAA,EACX,aAAA,EAAe,eAAA;AAAA,EACf,cAAA,EAAgB,gBAAA;AAAA,EAChB,aAAA,EAAe;AACjB;AAuBA,SAAS,QAAA,CAAS,QAAgB,KAAA,EAAyB;AACzD,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,EAAY;AAC/B,EAAA,IAAI,CAAE,kBAAA,CAAyC,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5D,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,8BAA8B,MAAM,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC1F;AAAA,EACF;AACA,EAAA,MAAM,CAAA,GAAI,iBAAiB,GAAuB,CAAA;AAClD,EAAA,MAAM,GAAA,GAAA,CAAO,CAAA,CAAE,gCAAA,CAAiC,CAAC,KAAK,CAAA,IAAK,KAAA;AAC3D,EAAA,MAAM,OAAA,GAAA,CAAW,CAAA,CAAE,6BAAA,CAA8B,CAAC,KAAK,CAAA,IAAK,KAAA;AAC5D,EAAA,OAAO;AAAA,IACL,UAAA,EAAA,CAAa,CAAA,CAAE,qBAAA,IAAyB,CAAA,IAAK,KAAA;AAAA;AAAA,IAC7C,WAAY,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,IAAK,KAAK,CAAA,GAAK,KAAA;AAAA;AAAA,IACzC,aAAa,CAAA,CAAE,WAAA,CAAY,CAAC,CAAA,IAAK,CAAA,IAAK,EAAE,yBAAA,IAA6B,KAAA;AAAA;AAAA,IACrE,OAAA;AAAA;AAAA,IACA,GAAA;AAAA;AAAA,IACA,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAG,GAAA,IAAO,CAAA,GAAI,OAAA,IAAW,CAAC,CAAC,CAAA;AAAA;AAAA,IACtD,SAAA,EAAY,CAAA,CAAE,WAAA,GAAc,CAAA,GAAK,KAAA;AAAA;AAAA,IACjC,QAAA,EAAU,CAAC,CAAA,CAAE,yBAAA,GAA4B,KAAA;AAAA;AAAA,IACzC,SAAA,EAAA,CAAY,CAAA,CAAE,YAAA,GAAe,CAAA,GAAI,EAAE,yBAAA,IAA6B;AAAA;AAAA,GAClE;AACF;AAeO,SAAS,iBACd,CAAA,EACA,CAAA,EACA,SAAA,EACA,CAAA,GAAiB,EAAC,EACF;AAChB,EAAA,MAAM,IAAI,QAAA,CAAS,CAAA,CAAE,UAAU,KAAA,EAAO,CAAA,CAAE,SAAS,CAAC,CAAA;AAClD,EAAA,IAAI,cAAc,CAAA,EAAG;AACnB,IAAA,IAAI,KAAK,CAAA,CAAE,MAAA,EAAQ,OAAO,CAAA,GAAI,IAAI,eAAA,GAAkB,gBAAA;AACpD,IAAA,OAAO,eAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA,CAAE,YAAY,OAAO,iBAAA;AAC7C,EAAA,IAAI,IAAA,CAAK,IAAI,CAAC,CAAA,IAAK,EAAE,QAAA,IAAY,CAAA,IAAK,CAAA,CAAE,SAAA,EAAW,OAAO,OAAA;AAC1D,EAAA,OAAO,WAAA;AACT;AA8BO,SAAS,eAAA,CACd,MAAA,GAA2C,KAAA,EAC3C,CAAA,GAA4E,EAAC,EAC9C;AAC/B,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,MAAA,EAAQ,CAAA,CAAE,SAAS,CAAC,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,SAAA;AACvB,EAAA,MAAM,CAAA,GAAI,aAAA,CAAc,CAAA,CAAE,aAAa,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,CAACC,EAAAA,EAAW,IAAA,EAAc,OACpC,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,GAAI,CAAA,EAAE,EAAG,CAAC,GAAG,CAAA,KAAa;AAC7C,IAAA,MAAM,CAAA,GAAI,IAAA,GAAA,CAAS,EAAA,GAAK,IAAA,IAAQ,CAAA,GAAK,CAAA;AACrC,IAAA,OAAO,CAACA,EAAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,GAAGA,EAAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,EAC1C,CAAC,CAAA;AACH,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,EAAE,OAAO,CAAA;AAC7C,EAAA,MAAM,EAAE,SAAA,EAAW,CAAA,EAAG,QAAA,EAAUF,KAAAA,EAAM,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,OAAA,EAAS,EAAA,EAAI,MAAA,EAAQ,GAAE,GAAI,CAAA;AAEhG,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,CAAA,CAAE,UAAA,EAAY,CAAC,IAAA,CAAK,EAAA,GAAK,CAAA,EAAI,CAAA,GAAI,IAAA,CAAK,EAAA,GAAM,CAAC,CAAA;AAC7D,EAAA,MAAM,OAAA,GAAmB;AAAA,IACvB,CAAC,CAAC,IAAA,EAAMA,KAAI,CAAA;AAAA,IACZ,CAAC,CAAC,IAAA,EAAM,EAAE,CAAA;AAAA,IACV,CAAC,MAAM,EAAE,CAAA;AAAA,IACT,CAAC,MAAMA,KAAI;AAAA,GACb;AAGA,EAAA,MAAM,KAAA,GAAiB,CAAC,GAAG,OAAA,EAAS,CAAC,CAAA,EAAGA,KAAI,CAAA,EAAG,GAAG,GAAA,EAAK,CAAC,CAAA,EAAGA,KAAI,CAAC,CAAA;AAChE,EAAA,MAAM,cAAuB,CAAC,CAAC,CAAC,EAAA,EAAIA,KAAI,GAAG,GAAG,GAAA,CAAI,EAAE,GAAA,EAAK,IAAA,CAAK,KAAK,MAAA,EAAQ,MAAM,GAAG,CAAC,EAAA,EAAIA,KAAI,CAAC,CAAA;AAE9F,EAAA,MAAM,QAAA,GAAoB,CAAC,GAAG,WAAA,EAAa,CAAC,IAAA,EAAMA,KAAI,GAAG,CAAC,IAAA,EAAM,EAAE,CAAA,EAAG,CAAC,CAAC,IAAA,EAAM,EAAE,GAAG,CAAC,CAAC,IAAA,EAAMA,KAAI,CAAC,CAAA;AAC/F,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAuB;AAAA,IAC1C,CAAC,CAAA,GAAI,CAAA,EAAGA,KAAI,CAAA;AAAA,IACZ,CAAC,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IACT,CAAC,CAAA,GAAI,EAAA,EAAI,CAAC,CAAA;AAAA,IACV,CAAC,CAAA,GAAI,EAAA,EAAIA,KAAI;AAAA,GACf;AACA,EAAA,MAAM,UAAA,GAAsB,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,EAAG,GAAG,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,EAAG,GAAG,GAAA,CAAI,CAAA,CAAE,GAAA,EAAK,MAAA,EAAQ,IAAA,CAAK,EAAA,GAAK,MAAM,CAAC,CAAA;AAK1G,EAAA,MAAM,IAAI,CAAA,CAAE,UAAA;AACZ,EAAA,MAAM,MAAA,GAAA,CAAU,IAAI,EAAA,IAAM,CAAA;AAC1B,EAAA,MAAM,OAAA,GAAA,CAAWA,QAAO,CAAA,IAAK,CAAA;AAC7B,EAAA,MAAM,UAAA,GAAA,CAAc,CAAA,CAAE,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,CAAA,CAAE,GAAA,GAAM,EAAE,CAAA,IAAK,CAAA;AAC7D,EAAA,OAAO;AAAA,IACL,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,GAAA,EAAK,KAAA,EAAO,CAAC,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IAC3E,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,CAAC,CAAA,EAAA,CAAI,CAAA,GAAI,EAAA,IAAM,CAAC,CAAA,EAAG,UAAU,KAAA,EAAM;AAAA,IAC1E,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,UAAU,KAAA,EAAO,CAAC,CAAA,EAAA,CAAI,EAAA,GAAK,CAAA,CAAE,GAAA,IAAO,CAAC,CAAA,EAAG,UAAU,KAAA,EAAM;AAAA,IACrF,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,YAAY,EAAE,CAAA,EAAG,KAAA,EAAO,CAAC,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAG,UAAU,IAAA,EAAK;AAAA,IAC5F,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,WAAA,CAAY,CAAC,CAAA,EAAG,KAAA,EAAO,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAG,UAAU,IAAA,EAAK;AAAA,IAC3F,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAQ,UAAA,EAAY,KAAA,EAAO,CAAC,CAAA,EAAG,UAAU,CAAA,EAAG,QAAA,EAAU,KAAA;AAAM,GACvF;AACF","file":"index.js","sourcesContent":["// Injected from package.json by tsup/vitest `define`, so changesets version bumps reach VERSION.\nexport const VERSION: string = __SPORTY_VERSION__;\n","import type { Color, Point } from \"./scene.js\";\n\nexport function rotateCoords(pts: readonly Point[], angleDeg: number): Point[] {\n if (angleDeg === 0) return pts.map((p): Point => [p[0], p[1]]);\n const t = (angleDeg / 180) * Math.PI;\n const c = Math.cos(t);\n const s = Math.sin(t);\n return pts.map(([x, y]): Point => [x * c - y * s, x * s + y * c]);\n}\n\n/** Defaults follow sportyR's `reflect(df, over_x = FALSE, over_y = TRUE)`; pass `overY: false` explicitly for an X-only reflection. */\nexport const reflectCoords = (\n pts: readonly Point[],\n { overX = false, overY = true }: { overX?: boolean; overY?: boolean },\n): Point[] => pts.map(([x, y]): Point => [overY ? -x : x, overX ? -y : y]);\n\nexport interface Placement {\n xAnchor: number;\n yAnchor: number;\n reflectX?: boolean;\n reflectY?: boolean;\n xTrans?: number;\n yTrans?: number;\n rotation?: number;\n}\n\n/** R `add_feature`: 1/2/4 copies — (x+ax, y+ay), (−(x+ax), y+ay), (−(x+ax), −(y+ay)), (x+ax, −(y+ay)) — then + shift, then rotate about (0,0). */\nexport function placeFeature(points: readonly Point[], p: Placement): Point[][] {\n const { xAnchor: ax, yAnchor: ay, xTrans: tx = 0, yTrans: ty = 0, rotation = 0 } = p;\n const d1 = points.map(([x, y]): Point => [x + ax + tx, y + ay + ty]);\n const d2 = points.map(([x, y]): Point => [-(x + ax) + tx, y + ay + ty]);\n const d3 = points.map(([x, y]): Point => [-(x + ax) + tx, -(y + ay) + ty]);\n const d4 = points.map(([x, y]): Point => [x + ax + tx, -(y + ay) + ty]);\n const copies =\n p.reflectX && p.reflectY ? [d1, d2, d3, d4] : p.reflectX ? [d1, d2] : p.reflectY ? [d1, d4] : [d1];\n return copies.map((c) => rotateCoords(c, rotation));\n}\n\n/** R: 9-char hex with alpha not 00/ff → NA (no stroke); \"#ffffff00\" → undefined. */\nexport function strokeFor(outline: Color | undefined): Color | undefined {\n if (!outline) return undefined;\n const o = outline.toLowerCase();\n if (/^#[0-9a-f]{8}$/.test(o)) {\n const a = o.slice(7);\n return a === \"ff\" ? o.slice(0, 7) : undefined;\n }\n return o;\n}\n","import type { Point } from \"./scene.js\";\nimport { rotateCoords } from \"./transform.js\";\n\n/** Angles `start`/`end` are in units of π, like R. */\nexport function createCircle({\n center = [0, 0],\n npoints = 1000,\n r = 1,\n start = 0,\n end = 2,\n}: { center?: Point; npoints?: number; r?: number; start?: number; end?: number } = {}): Point[] {\n const out: Point[] = [];\n const a0 = start * Math.PI;\n const a1 = end * Math.PI;\n for (let i = 0; i < npoints; i++) {\n const t = npoints === 1 ? a0 : a0 + ((a1 - a0) * i) / (npoints - 1);\n out.push([center[0] + r * Math.cos(t), center[1] + r * Math.sin(t)]);\n }\n return out;\n}\n\nexport const createRectangle = (xMin: number, xMax: number, yMin: number, yMax: number): Point[] => [\n [xMin, yMin],\n [xMax, yMin],\n [xMax, yMax],\n [xMin, yMax],\n [xMin, yMin],\n];\n\nexport const createSquare = (side: number, c: Point = [0, 0]): Point[] =>\n createRectangle(c[0] - side / 2, c[0] + side / 2, c[1] - side / 2, c[1] + side / 2);\n\nexport const createDiamond = (h: number, w: number, c: Point = [0, 0]): Point[] => [\n [c[0] - w / 2, c[1]],\n [c[0], c[1] - h / 2],\n [c[0] + w / 2, c[1]],\n [c[0], c[1] + h / 2],\n [c[0] - w / 2, c[1]],\n];\n\nexport function createXShape(barLength: number, barWidth: number, rotationDeg = 45): Point[] {\n const L = barLength;\n const W = barWidth;\n const xs = [0, W / 2, W / 2, L / 2, L / 2, W / 2, W / 2, -W / 2, -W / 2, -L / 2, -L / 2, -W / 2, -W / 2, 0];\n const ys = [\n L / 2,\n L / 2,\n W / 2,\n W / 2,\n -W / 2,\n -W / 2,\n -L / 2,\n -L / 2,\n -W / 2,\n -W / 2,\n W / 2,\n W / 2,\n L / 2,\n L / 2,\n ];\n return rotateCoords(\n xs.map((x, i): Point => [x, ys[i] ?? 0]),\n rotationDeg,\n );\n}\n","export const asArray = <T>(v: T | readonly T[] | undefined, fallback: readonly T[] = []): readonly T[] => v === undefined ? fallback : Array.isArray(v) ? (v as readonly T[]) : [v as T];\nexport const or = <T>(v: T | undefined | null, fallback: T): T => (v === undefined || v === null ? fallback : v); // R `%or%`\n","import { UnknownUnitError } from \"./errors.js\";\nimport type { Point, Units } from \"./scene.js\";\n\n/** Feet per one unit (R `unit-conversions.R`; NOT sportypy's 340.8 bug). */\nexport const FT_PER_UNIT: Readonly<Record<Units, number>> = {\n mm: 1 / 304.8,\n cm: 1 / 30.48,\n m: 1 / 0.3048,\n in: 1 / 12,\n ft: 1,\n yd: 3,\n};\n\n/** R `convert_units` also accepts the full names (plus singular and British spellings here). */\nconst UNIT_NAMES: Readonly<Record<string, Units>> = {\n feet: \"ft\",\n foot: \"ft\",\n meters: \"m\",\n metres: \"m\",\n meter: \"m\",\n metre: \"m\",\n yards: \"yd\",\n yard: \"yd\",\n inches: \"in\",\n inch: \"in\",\n centimeters: \"cm\",\n centimetres: \"cm\",\n centimeter: \"cm\",\n centimetre: \"cm\",\n millimeters: \"mm\",\n millimetres: \"mm\",\n millimeter: \"mm\",\n millimetre: \"mm\",\n};\n\n/** Case-insensitive unit abbreviation or full name (`\"FT\"`, `\"feet\"`, `\"Metres\"`) to its `Units`; anything else throws `UnknownUnitError`. */\nexport function normalizeUnit(u: string): Units {\n const k = String(u).toLowerCase();\n if (Object.hasOwn(FT_PER_UNIT, k)) return k as Units;\n if (Object.hasOwn(UNIT_NAMES, k)) return UNIT_NAMES[k] as Units;\n throw new UnknownUnitError(\n `Unknown unit \"${u}\"; expected one of: ${Object.keys(FT_PER_UNIT).join(\", \")} (or a full name such as \"feet\")`,\n );\n}\n\nconst convert = (v: number, from: Units, to: Units): number =>\n from === to ? v : (v * FT_PER_UNIT[from]) / FT_PER_UNIT[to];\n\nexport const convertUnits = (value: number, from: Units, to: Units): number =>\n convert(value, normalizeUnit(from), normalizeUnit(to));\n\nexport function convertPoints(pts: readonly Point[], from: Units, to: Units): Point[] {\n const f = normalizeUnit(from);\n const t = normalizeUnit(to);\n return pts.map(([x, y]): Point => [convert(x, f, t), convert(y, f, t)]);\n}\n","import { SportyError } from \"./errors.js\";\nimport type { Color, Feature, Point, Scene, TextFeature, Units } from \"./scene.js\";\nimport { createRectangle } from \"./shapes.js\";\nimport { asArray } from \"./specs/_normalize.js\";\nimport { type Placement, placeFeature, rotateCoords, strokeFor } from \"./transform.js\";\nimport { convertPoints, convertUnits } from \"./units.js\";\n\nexport { SportyError, UnknownDisplayRangeError, UnknownLeagueError, UnknownUnitError } from \"./errors.js\";\n\ntype Limits = readonly [number, number];\nconst isMatrix = (v: unknown): boolean => Array.isArray(v) && Array.isArray(v[0]);\n\n/**\n * R `utils::modifyList(base, updates)`; a scalar update to an array field becomes `[value]`, a flat row to a matrix\n * field `[row]`. An `undefined`/`null` update keeps the default.\n */\nexport function mergeParams<P extends object>(\n base: P,\n updates: Partial<Record<keyof P, unknown>> | undefined,\n arrayFields: readonly (keyof P)[],\n): P {\n const out: Record<keyof P, unknown> = { ...base };\n for (const k of Object.keys(updates ?? {}) as (keyof P)[]) {\n const v = updates?.[k];\n if (v === undefined || v === null) continue;\n const w = arrayFields.includes(k) ? asArray(v) : v;\n out[k] = isMatrix(base[k]) && !isMatrix(w) ? [w] : w;\n }\n return out as P;\n}\n\n/** R `utils::modifyList(<set_colors()>, color_updates)`; an `undefined`/`null` colour keeps the default (as `mergeParams`). */\nexport function mergeColors<F extends string>(\n defaults: Readonly<Record<F, Color | readonly Color[]>>,\n updates?: Partial<Record<F, Color | readonly Color[]>>,\n): Record<F, Color | readonly Color[]> {\n const out: Record<F, Color | readonly Color[]> = { ...defaults };\n for (const k of Object.keys(updates ?? {}) as F[]) {\n const v = updates?.[k];\n if (v !== undefined && v !== null) out[k] = v;\n }\n return out;\n}\n\n/** `SurfaceOptions.arcResolution` (default 200): points per arc, an integer >= 2, else `SportyError`. */\nexport function arcResolution(n: number | undefined): number {\n const v = n ?? 200;\n if (!Number.isInteger(v) || v < 2) throw new SportyError(`arcResolution must be an integer >= 2; got ${n}`);\n return v;\n}\n\n/** R `data.frame()` recycling: colour i of a vector is `c[i % length]`. */\nexport const colorAt = (c: Color | readonly Color[], i: number): Color =>\n typeof c === \"string\" ? c : (c[i % c.length] ?? \"#00000000\");\n\nexport interface FeatureOptions {\n /** R `feature_outline_color` (default `#ffffff00` = no stroke). */\n stroke?: Color;\n /** Convert the points AND anchors before placement, as sportyR 2.4.0 scales the whole plot (#74; see `convertLimits`). */\n units?: readonly [from: Units, to: Units];\n /** 3-D hints, already in the Scene's units. */\n elevation?: number;\n height?: number;\n}\n\n/** R `add_feature`: one PolygonFeature per placed copy, zIndex = position in `features` (= R's layer index). */\nexport function addFeature(\n features: Feature[],\n name: string,\n points: readonly Point[],\n fill: Color,\n placement: Placement,\n { stroke, units, elevation, height }: FeatureOptions = {},\n): void {\n const [from, to] = units ?? [\"ft\", \"ft\"];\n const p = {\n ...placement,\n xAnchor: convertUnits(placement.xAnchor, from, to),\n yAnchor: convertUnits(placement.yAnchor, from, to),\n };\n const s = strokeFor(stroke);\n for (const copy of placeFeature(convertPoints(points, from, to), p)) {\n features.push({\n kind: \"polygon\",\n name,\n zIndex: features.length,\n fill,\n points: copy,\n ...(s === undefined ? {} : { stroke: s }),\n ...(elevation === undefined ? {} : { elevation }),\n ...(height === undefined ? {} : { height }),\n });\n }\n}\n\n/** R `vec %or% d`: an empty vector becomes the length-1 default. */\nexport const orVec = <T>(v: readonly T[] | undefined, d: T): readonly T[] =>\n v !== undefined && v.length > 0 ? v : [d];\n\n/** R `data.frame()`: every column is recycled to the longest one. */\nexport function frame<T extends Record<string, readonly unknown[]>>(\n cols: T,\n): { [K in keyof T]: T[K][number] }[] {\n const n = Math.max(...Object.values(cols).map((c) => c.length));\n return Array.from(\n { length: n },\n (_, i) =>\n Object.fromEntries(Object.entries(cols).map(([k, c]) => [k, c[i % c.length]])) as {\n [K in keyof T]: T[K][number];\n },\n );\n}\n\n/** A ggfittext label, already placed (R positions it directly, not via `add_feature`); zIndex = position in `features`. */\nexport function addText(\n features: Feature[],\n name: string,\n t: Omit<TextFeature, \"kind\" | \"name\" | \"zIndex\">,\n): void {\n features.push({ kind: \"text\", name, zIndex: features.length, ...t });\n}\n\n/** R `geom_*` tail: rotate the corners of the xlims × ylims box, then take min/max. */\nexport function displayBbox(xlim: Limits, ylim: Limits, rotation: number): Scene[\"bbox\"] {\n const box = rotateCoords(\n createRectangle(Math.min(...xlim), Math.max(...xlim), Math.min(...ylim), Math.max(...ylim)),\n rotation,\n );\n const xs = box.map((q) => q[0]);\n const ys = box.map((q) => q[1]);\n return [Math.min(...xs), Math.min(...ys), Math.max(...xs), Math.max(...ys)];\n}\n\n/**\n * Points, anchors and display limits all convert, which matches sportyR 2.4.0 (#74: it draws in rule-book units and\n * scales the whole plot once; translations are in the requested units). The units_* oracle fixtures check it.\n */\nexport const convertLimits = (\n xlim: Limits,\n ylim: Limits,\n from: Units,\n to: Units,\n): [x: [number, number], y: [number, number]] => [\n [convertUnits(xlim[0], from, to), convertUnits(xlim[1], from, to)],\n [convertUnits(ylim[0], from, to), convertUnits(ylim[1], from, to)],\n];\n","import { SportyError } from \"../errors.js\";\nimport type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle, createSquare } from \"../shapes.js\";\nimport { reflectCoords, rotateCoords } from \"../transform.js\";\n\ntype Arc = { npoints?: number | undefined };\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\n/** R math-functions.R quadratic_formula: both roots (NaN when the discriminant is negative, like R's sqrt). */\nexport const quadraticFormula = (a: number, b: number, c: number): [number, number] => {\n const d = Math.sqrt(b * b - 4 * a * c);\n return [(-b + d) / (2 * a), (-b - d) / (2 * a)];\n};\n\n/** baseball_infield_dirt (features-baseball.R 24): infield arc (about the pitcher's plate) + home-plate circle, both clipped where they meet the foul-grass line. */\nexport function infieldDirt({\n homePlateCircleRadius = 0,\n foulLineToFoulGrass = 0,\n pitchersPlateDistance = 0,\n infieldArcRadius = 0,\n npoints,\n}: {\n homePlateCircleRadius?: number;\n foulLineToFoulGrass?: number;\n pitchersPlateDistance?: number;\n infieldArcRadius?: number;\n} & Arc = {}): Point[] {\n const hpRoots = quadraticFormula(\n 2,\n 2 * foulLineToFoulGrass,\n foulLineToFoulGrass ** 2 - homePlateCircleRadius ** 2,\n );\n const hpX = hpRoots.find((r) => r < 0) ?? Number.NaN; // R: roots[which(roots < 0)]\n const hpAcos = Math.acos(hpX / homePlateCircleRadius);\n const hpStart = homePlateCircleRadius === 0 || Number.isNaN(hpAcos) ? 1 : hpAcos / Math.PI;\n const inRoots = quadraticFormula(\n 2,\n -2 * foulLineToFoulGrass - 2 * pitchersPlateDistance,\n foulLineToFoulGrass ** 2 +\n 2 * foulLineToFoulGrass * pitchersPlateDistance +\n pitchersPlateDistance ** 2 -\n infieldArcRadius ** 2,\n );\n const inX = inRoots.find((r) => r > 0) ?? Number.NaN;\n const inAcos = Math.acos(inX / infieldArcRadius);\n const inStart = infieldArcRadius === 0 || Number.isNaN(inAcos) ? 0.25 : inAcos / Math.PI;\n return [\n ...circle({\n center: [0, pitchersPlateDistance],\n start: inStart,\n end: 1 - inStart,\n r: infieldArcRadius,\n npoints,\n }),\n ...circle({ center: [0, 0], start: hpStart, end: 3 - hpStart, r: homePlateCircleRadius, npoints }),\n ];\n}\n\n/** baseball_infield_grass (features-baseball.R 123): home arc, three base arcs, then the home arc's first point again. */\nexport function infieldGrass({\n homePlateCircleRadius = 0,\n foulLineToInfieldGrass = 0,\n baselineDistance = 0,\n baseAnchorToInfieldGrass = 0,\n npoints,\n}: {\n homePlateCircleRadius?: number;\n foulLineToInfieldGrass?: number;\n baselineDistance?: number;\n baseAnchorToInfieldGrass?: number;\n} & Arc = {}): Point[] {\n const f = foulLineToInfieldGrass;\n const hr = homePlateCircleRadius;\n const roots1b = quadraticFormula(2, 2 * f, f ** 2 - hr ** 2);\n const x1b = roots1b.find((r) => r > 0) ?? hr;\n const theta1b = hr === 0 ? 0 : Math.acos(x1b / hr) / Math.PI;\n const roots3b = quadraticFormula(2, -2 * f, f ** 2 - hr ** 2);\n // R tests `> 0` for emptiness but then filters `< 0`; transcribed literally.\n const x3b = roots3b.some((r) => r > 0) ? roots3b.find((r) => r < 0) : hr;\n const theta3b = hr === 0 ? 1 : Math.acos((x3b ?? Number.NaN) / hr) / Math.PI;\n const bl = baselineDistance;\n const fbRoots = quadraticFormula(\n 2,\n 2 * f - 2 * Math.SQRT2 * bl,\n f ** 2 - Math.SQRT2 * f * bl + bl ** 2 - baseAnchorToInfieldGrass ** 2,\n );\n const fbX = fbRoots.find((r) => r < bl * Math.cos(Math.PI / 4)) ?? Number.NaN;\n const fbDelta = Math.abs(fbX - bl * Math.cos(Math.PI / 4));\n const th = baseAnchorToInfieldGrass === 0 ? 0 : Math.acos(fbDelta / baseAnchorToInfieldGrass) / Math.PI;\n const r = baseAnchorToInfieldGrass;\n const home = circle({ center: [0, 0], start: theta3b, end: theta1b, r: hr, npoints });\n return [\n ...home,\n ...circle({\n center: [bl * Math.cos(Math.PI / 4), bl * Math.sin(Math.PI / 4)],\n start: 1 + th,\n end: 1 - th,\n r,\n npoints,\n }),\n ...circle({ center: [0, bl * Math.SQRT2], start: 1.5 + th, end: 1.5 - th, r, npoints }),\n ...circle({\n center: [bl * Math.cos((3 * Math.PI) / 4), bl * Math.sin((3 * Math.PI) / 4)],\n start: 1 - (1 - th),\n end: 1 - (1 + th),\n r,\n npoints,\n }),\n ...home.slice(0, 1),\n ];\n}\n\n/** baseball_pitchers_mound. */\nexport const pitchersMound = ({\n pitchersMoundRadius = 0,\n npoints,\n}: { pitchersMoundRadius?: number } & Arc = {}): Point[] =>\n circle({ center: [0, 0], start: 0, end: 2, r: pitchersMoundRadius, npoints });\n\n/** baseball_home_plate (R 645): 6-point pentagon with its back tip at the origin. */\nexport const homePlate = ({ homePlateEdgeLength: e = 0 }: { homePlateEdgeLength?: number } = {}): Point[] => [\n [0, 0],\n [e / 2, e / 2],\n [e / 2, e],\n [-e / 2, e],\n [-e / 2, e / 2],\n [0, 0],\n];\n\n/** baseball_base (features-baseball.R 682): a square rotated 45 degrees, shifted along x for 1B (left) / 3B (right) so the bag sits inside the baseline. */\nexport function base({\n baseSideLength = 0,\n adjustXLeft = false,\n adjustXRight = false,\n}: { baseSideLength?: number; adjustXLeft?: boolean; adjustXRight?: boolean } = {}): Point[] {\n const amt = (baseSideLength * Math.SQRT2) / 2;\n const dx = (adjustXLeft ? -amt : 0) + (adjustXRight ? amt : 0);\n return rotateCoords(createSquare(baseSideLength, [0, 0]), 45).map(([x, y]): Point => [x + dx, y]);\n}\n\n/** baseball_pitchers_plate. */\nexport const pitchersPlate = ({\n pitchersPlateLength: l = 0,\n pitchersPlateWidth: w = 0,\n}: { pitchersPlateLength?: number; pitchersPlateWidth?: number } = {}): Point[] =>\n createRectangle(-l / 2, l / 2, 0, w);\n\n/** baseball_batters_box (R 291): 9-point half frame, mirrored over the y axis, shifted by the y adjustment. */\nexport function battersBox({\n battersBoxLength = 0,\n battersBoxWidth = 0,\n battersBoxYAdj = 0,\n battersBoxThickness: t = 0,\n}: {\n battersBoxLength?: number;\n battersBoxWidth?: number;\n battersBoxYAdj?: number;\n battersBoxThickness?: number;\n} = {}): Point[] {\n const w = battersBoxWidth / 2;\n const l = battersBoxLength / 2;\n // The 9th y is the FULL length: an R quirk kept for parity.\n const half: Point[] = [\n [0, l],\n [w, l],\n [w, -l],\n [0, -l],\n [0, -l + t],\n [w - t, -l + t],\n [w - t, l - t],\n [0, l - t],\n [0, battersBoxLength],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })].map(\n ([x, y]): Point => [x, y + battersBoxYAdj],\n );\n}\n\n/** baseball_catchers_box (R 357): rectangle or trapezoid, chosen by a case-insensitive shape name. */\nexport function catchersBox({\n catchersBoxDepth: depth = 0,\n catchersBoxWidth: width = 0,\n battersBoxLength = 0,\n battersBoxYAdj: adj = 0,\n catchersBoxShape = \"rectangle\",\n catchersBoxThickness: t = 0,\n homePlateCircleRadius: hr = 0,\n}: {\n catchersBoxDepth?: number;\n catchersBoxWidth?: number;\n battersBoxLength?: number;\n battersBoxYAdj?: number;\n catchersBoxShape?: string;\n catchersBoxThickness?: number;\n homePlateCircleRadius?: number;\n} = {}): Point[] {\n const c = Math.cos(Math.PI / 4);\n const s = Math.sin(Math.PI / 4);\n const w = width / 2;\n const hl = battersBoxLength / 2;\n const rect = (): Point[] =>\n (\n [\n [w, -hl],\n [w, -depth],\n [-w, -depth],\n [-w, -hl],\n [-w + t, -hl],\n [-w + t, -depth + t],\n [w - t, -depth + t],\n [w - t, -hl],\n [w, -hl],\n ] as Point[]\n ).map(([x, y]): Point => [x, y + adj]);\n const trap = (): Point[] => {\n const b1y = -hl + adj;\n const b1 = 2 * (Math.abs(b1y / c) * s);\n const b2yOuter = -depth - t;\n const b2yInner = -depth;\n const b2Inner = 2 * (Math.abs(hr - t / c) * s);\n const b2Outer = 2 * (Math.abs(hr) * s);\n return [\n [b1 / 2, b1y],\n [b2Outer / 2 - t, b2yInner + t],\n [-b2Outer / 2 + t, b2yInner + t],\n [-b1 / 2, b1y],\n [-b1 / 2 - t, b1y],\n [-b2Inner / 2 - 2 * t, b2yOuter + t],\n [b2Inner / 2 + 2 * t, b2yOuter + t],\n [b1 / 2 + t, b1y],\n [b1 / 2, b1y],\n ];\n };\n switch (catchersBoxShape.toLowerCase()) {\n case \"rect\":\n case \"rectangle\":\n case \"rectangular\":\n return rect();\n case \"trap\":\n case \"trapezoid\":\n case \"trapezoidal\":\n return trap();\n default:\n throw new SportyError(`${catchersBoxShape} is not a valid shape for the catcher's box`);\n }\n}\n\n/** baseball_foul_line (R 488): 5-point strip from the batter's box corner toward the pole. */\nexport function foulLine({\n isLine1b = false,\n lineDistance = 0,\n battersBoxLength = 0,\n battersBoxWidth = 0,\n battersBoxYAdj = 0,\n homePlateSideToBattersBox = 0,\n foulLineThickness: t = 0,\n}: {\n isLine1b?: boolean;\n lineDistance?: number;\n battersBoxLength?: number;\n battersBoxWidth?: number;\n battersBoxYAdj?: number;\n homePlateSideToBattersBox?: number;\n foulLineThickness?: number;\n} = {}): Point[] {\n const cornerX = battersBoxWidth + homePlateSideToBattersBox;\n const cornerY = battersBoxLength / 2 + battersBoxYAdj;\n const start = cornerX > cornerY ? cornerY : cornerX + battersBoxYAdj / 2 + t;\n if (!isLine1b) {\n const ex = lineDistance * Math.cos((3 * Math.PI) / 4);\n const ey = lineDistance * Math.sin((3 * Math.PI) / 4);\n return [\n [-start, start],\n [ex, ey],\n [ex + t, ey],\n [-start + t, start],\n [-start, start],\n ];\n }\n const ex = lineDistance * Math.cos(Math.PI / 4);\n const ey = lineDistance * Math.sin(Math.PI / 4);\n return [\n [start, start],\n [ex, ey],\n [ex - t, ey],\n [start - t, start],\n [start, start],\n ];\n}\n\n/** baseball_running_lane (R 572): 7-point literal, every coordinate divided by the square root of 2. */\nexport function runningLane({\n runningLaneDepth: d = 0,\n runningLaneLength: l = 0,\n runningLaneStartDistance: s = 0,\n runningLaneThickness: t = 0,\n}: {\n runningLaneDepth?: number;\n runningLaneLength?: number;\n runningLaneStartDistance?: number;\n runningLaneThickness?: number;\n} = {}): Point[] {\n const q = Math.SQRT2;\n return [\n [s / q, s / q],\n [(s + d) / q, (s - d) / q],\n [(s + d + l) / q, (s - d + l) / q],\n [(s + d + l - t) / q, (s - d + l + t) / q],\n [(s + d) / q, (s - d + 2 * t) / q],\n [(s + t) / q, (s + t) / q],\n [s / q, s / q],\n ];\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `baseball_*` builder (prefix dropped), as used in `PolygonFeature.name` (10). */\nexport const BASEBALL_FEATURES = [\n \"infield_dirt\",\n \"infield_grass\",\n \"pitchers_mound\",\n \"home_plate\",\n \"base\",\n \"pitchers_plate\",\n \"batters_box\",\n \"catchers_box\",\n \"foul_line\",\n \"running_lane\",\n] as const;\nexport type BaseballFeature = (typeof BASEBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_baseball()` (2). */\nexport const BASEBALL_DISPLAY_RANGES = [\"full\", \"infield\"] as const;\nexport type BaseballDisplayRange = (typeof BASEBALL_DISPLAY_RANGES)[number];\n\n/** The 10 argument names of `baseball_features_set_colors()`, in R's declaration order. */\nexport const BASEBALL_COLOR_KEYS = [\n \"plot_background\",\n \"infield_dirt\",\n \"infield_grass\",\n \"pitchers_mound\",\n \"base\",\n \"pitchers_plate\",\n \"batters_box\",\n \"catchers_box\",\n \"foul_line\",\n \"running_lane\",\n] as const;\nexport type BaseballColorKey = (typeof BASEBALL_COLOR_KEYS)[number];\n\n/** Defaults of `baseball_features_set_colors()` — the only sport whose plot_background default is a colour (geom-baseball.R 35). */\nexport const BASEBALL_DEFAULT_COLORS: Readonly<Record<BaseballColorKey, Color>> = {\n plot_background: \"#395d33\",\n infield_dirt: \"#9b7653\",\n infield_grass: \"#395d33\",\n pitchers_mound: \"#9b7653\",\n base: \"#ffffff\",\n pitchers_plate: \"#ffffff\",\n batters_box: \"#ffffff\",\n catchers_box: \"#ffffff\",\n foul_line: \"#ffffff\",\n running_lane: \"#ffffff\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n BASEBALL_LEAGUES,\n BASEBALL_SPECS,\n type BaseballLeague,\n type BaseballParamUpdates,\n} from \"../specs/baseball.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n BASEBALL_DEFAULT_COLORS,\n BASEBALL_DISPLAY_RANGES,\n type BaseballColorKey,\n type BaseballDisplayRange,\n type BaseballFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/** Port of sportyR `geom_baseball()`: origin = back tip of home plate, +y toward centre field; same divergences as `soccerPitch`. */\nexport function baseballField(\n league: BaseballLeague | (string & {}),\n opts: SurfaceOptions<BaseballParamUpdates, BaseballColorKey, BaseballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(BASEBALL_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown baseball league \"${league}\"; expected one of: ${BASEBALL_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(BASEBALL_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown baseball display range \"${opts.displayRange}\"; expected one of: ${BASEBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(BASEBALL_SPECS[key], opts.updates, []); // baseball has no array fields\n const colors = mergeColors(BASEBALL_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: BaseballColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.field_units || \"ft\");\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const features: Feature[] = [];\n const add = (\n name: BaseballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX = false,\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY: false, xTrans, yTrans, rotation },\n conv ? { units: conv } : {},\n );\n const bl = p.baseline_distance;\n const box = {\n battersBoxLength: p.batters_box_length,\n battersBoxWidth: p.batters_box_width,\n battersBoxYAdj: p.batters_box_y_adj,\n };\n const foul = {\n ...box,\n homePlateSideToBattersBox: p.home_plate_side_to_batters_box,\n foulLineThickness: p.line_width,\n };\n // Layers, in R's add_feature order (geom-baseball.R 300-470); base_side_length is passed without %or% in R (every generated league has it).\n add(\n \"infield_dirt\",\n F.infieldDirt({\n homePlateCircleRadius: p.home_plate_circle_radius,\n foulLineToFoulGrass: p.foul_line_to_foul_grass,\n pitchersPlateDistance: p.pitchers_plate_front_to_home_plate,\n infieldArcRadius: p.infield_arc_radius,\n npoints,\n }),\n col(\"infield_dirt\"),\n 0,\n 0,\n );\n add(\n \"infield_grass\",\n F.infieldGrass({\n homePlateCircleRadius: p.home_plate_circle_radius,\n foulLineToInfieldGrass: p.foul_line_to_infield_grass,\n baselineDistance: bl,\n baseAnchorToInfieldGrass: p.base_anchor_to_infield_grass_radius,\n npoints,\n }),\n col(\"infield_grass\"),\n 0,\n 0,\n );\n add(\n \"pitchers_mound\",\n F.pitchersMound({ pitchersMoundRadius: p.pitchers_mound_radius, npoints }),\n col(\"pitchers_mound\"),\n 0,\n p.pitchers_mound_center_to_home_plate,\n );\n add(\"home_plate\", F.homePlate({ homePlateEdgeLength: p.home_plate_edge_length }), col(\"base\"), 0, 0);\n add(\n \"base\",\n F.base({ baseSideLength: p.base_side_length, adjustXLeft: true }),\n col(\"base\"),\n bl * Math.cos(Math.PI / 4),\n bl * Math.sin(Math.PI / 4),\n ); // first base\n add(\"base\", F.base({ baseSideLength: p.base_side_length }), col(\"base\"), 0, bl * Math.SQRT2); // second base\n add(\n \"base\",\n F.base({ baseSideLength: p.base_side_length, adjustXRight: true }),\n col(\"base\"),\n bl * Math.cos((3 * Math.PI) / 4),\n bl * Math.sin((3 * Math.PI) / 4),\n ); // third base\n add(\n \"pitchers_plate\",\n F.pitchersPlate({\n pitchersPlateLength: p.pitchers_plate_length,\n pitchersPlateWidth: p.pitchers_plate_width,\n }),\n col(\"pitchers_plate\"),\n 0,\n p.pitchers_plate_front_to_home_plate,\n );\n add(\n \"batters_box\",\n F.battersBox({ ...box, battersBoxThickness: p.line_width }),\n col(\"batters_box\"),\n p.home_plate_edge_length / 2 + p.home_plate_side_to_batters_box + p.batters_box_width / 2,\n 0,\n true,\n );\n add(\n \"catchers_box\",\n F.catchersBox({\n catchersBoxDepth: p.catchers_box_depth,\n catchersBoxWidth: p.catchers_box_width ?? 0,\n battersBoxLength: p.batters_box_length,\n battersBoxYAdj: p.batters_box_y_adj,\n catchersBoxShape: p.catchers_box_shape ?? \"rectangle\",\n catchersBoxThickness: p.line_width,\n homePlateCircleRadius: p.home_plate_circle_radius,\n }),\n col(\"catchers_box\"),\n 0,\n 0,\n );\n add(\n \"foul_line\",\n F.foulLine({ ...foul, isLine1b: true, lineDistance: p.right_field_distance }),\n col(\"foul_line\"),\n 0,\n 0,\n );\n add(\"foul_line\", F.foulLine({ ...foul, lineDistance: p.left_field_distance }), col(\"foul_line\"), 0, 0);\n add(\n \"running_lane\",\n F.runningLane({\n runningLaneDepth: p.running_lane_depth ?? 0,\n runningLaneLength: p.running_lane_length ?? 0,\n runningLaneStartDistance: p.running_lane_start_distance ?? 0,\n runningLaneThickness: p.line_width,\n }),\n col(\"running_lane\"),\n 0,\n 0,\n );\n // Display range (geom-baseball.R 490-541): the +5 / -5 paddings are native feet (R).\n const full = range === \"full\";\n const xr: readonly [number, number] = full\n ? [p.left_field_distance * Math.cos((3 * Math.PI) / 4), p.right_field_distance * Math.cos(Math.PI / 4)]\n : [-p.infield_arc_radius - 5, p.infield_arc_radius + 5];\n const yr: readonly [number, number] = full\n ? [-p.backstop_radius - 5, p.center_field_distance + 5]\n : [-p.home_plate_circle_radius - 5, p.pitchers_plate_front_to_home_plate + p.infield_arc_radius + 5];\n const [cx, cy] = convertLimits(xr, yr, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // #395d33 unless hidden by the user\n return {\n sport: \"baseball\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"home_plate\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle } from \"../shapes.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). */\ntype Arc = { npoints?: number | undefined };\n\n// R: `if (is.na(asin(v))) 0 else asin(v) / pi`\nconst asinOverPi = (v: number): number => {\n const a = Math.asin(v);\n return Number.isNaN(a) ? 0 : a / Math.PI;\n};\n\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\nexport function halfCourt({\n courtLength = 0,\n courtWidth = 0,\n}: { courtLength?: number; courtWidth?: number } = {}): Point[] {\n return createRectangle(-courtLength / 4, courtLength / 4, -courtWidth / 2, courtWidth / 2);\n}\n\nexport function twoPointRange({\n basketCenterToBaseline = 0,\n basketCenterToCornerThree = 0,\n lineThickness = 0,\n twoPointRangeRadius = 0,\n npoints,\n}: {\n basketCenterToBaseline?: number;\n basketCenterToCornerThree?: number;\n lineThickness?: number;\n twoPointRangeRadius?: number;\n} & Arc = {}): Point[] {\n const startY = basketCenterToCornerThree - lineThickness;\n const angle = asinOverPi(startY / twoPointRangeRadius);\n return [\n [basketCenterToBaseline, startY],\n ...circle({ center: [0, 0], start: 1 - angle, end: 1 + angle, r: twoPointRangeRadius, npoints }),\n [basketCenterToBaseline, -startY],\n [basketCenterToBaseline, startY],\n ];\n}\n\nexport function centerCircleFill({\n centerCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { centerCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: centerCircleRadius - lineThickness, npoints });\n}\n\nexport function paintedArea({\n laneLength = 0,\n laneWidth = 0,\n paintMargin = 0,\n lineThickness = 0,\n}: { laneLength?: number; laneWidth?: number; paintMargin?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(\n paintMargin,\n laneLength - lineThickness - paintMargin,\n -laneWidth / 2 + lineThickness + paintMargin,\n laneWidth / 2 - lineThickness - paintMargin,\n );\n}\n\nexport function freeThrowCircleFill({\n freeThrowCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { freeThrowCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0.5, end: 1.5, r: freeThrowCircleRadius - lineThickness, npoints });\n}\n\nexport function courtApron({\n courtLength = 0,\n courtWidth = 0,\n courtApronEndline = 0,\n courtApronSideline = 0,\n courtApronToBoundary = 0,\n lineThickness = 0,\n}: {\n courtLength?: number;\n courtWidth?: number;\n courtApronEndline?: number;\n courtApronSideline?: number;\n courtApronToBoundary?: number;\n lineThickness?: number;\n} = {}): Point[] {\n const outerX = courtLength / 2 + courtApronEndline;\n const innerX = courtLength / 2 + lineThickness + courtApronToBoundary;\n const outerY = courtWidth / 2 + courtApronSideline;\n const innerY = courtWidth / 2 + lineThickness + courtApronToBoundary;\n return [\n [0, outerY],\n [outerX, outerY],\n [outerX, -courtWidth / 2 - courtApronSideline],\n [0, -courtWidth / 2 - courtApronSideline],\n [0, -innerY],\n [innerX, -innerY],\n [innerX, innerY],\n [0, innerY],\n [0, outerY],\n ];\n}\n\nexport function endline({\n courtWidth = 0,\n lineThickness = 0,\n}: { courtWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(0, lineThickness, -courtWidth / 2 - lineThickness, courtWidth / 2 + lineThickness);\n}\n\nexport function sideline({\n courtLength = 0,\n lineThickness = 0,\n}: { courtLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-courtLength / 2 - lineThickness, courtLength / 2 + lineThickness, 0, lineThickness);\n}\n\nexport function centerCircleOutline({\n centerCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { centerCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r: centerCircleRadius, npoints }), // outer edge\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: centerCircleRadius - lineThickness, npoints }), // inner edge, reversed\n ];\n}\n\nexport function divisionLine({\n courtWidth = 0,\n lineThickness = 0,\n divisionLineExtension = 0,\n}: { courtWidth?: number; lineThickness?: number; divisionLineExtension?: number } = {}): Point[] {\n // R quirk: with an extension both y bounds shift down by extension + thickness (not symmetric).\n return divisionLineExtension > 0\n ? createRectangle(\n -lineThickness / 2,\n lineThickness / 2,\n -courtWidth / 2 - divisionLineExtension - lineThickness,\n courtWidth / 2 - divisionLineExtension - lineThickness,\n )\n : createRectangle(-lineThickness / 2, lineThickness / 2, -courtWidth / 2, courtWidth / 2);\n}\n\nexport function threePointLine({\n basketCenterToBaseline = 0,\n basketCenterToCornerThree = 0,\n lineThickness = 0,\n threePointLineRadius = 0,\n npoints,\n}: {\n basketCenterToBaseline?: number;\n basketCenterToCornerThree?: number;\n lineThickness?: number;\n threePointLineRadius?: number;\n} & Arc = {}): Point[] {\n const startYOuter = basketCenterToCornerThree;\n const startYInner = startYOuter - lineThickness;\n const rOuter = threePointLineRadius;\n const rInner = rOuter - lineThickness;\n const angleOuter = asinOverPi(startYOuter / rOuter);\n const angleInner = asinOverPi(startYInner / rInner);\n return [\n [basketCenterToBaseline, startYOuter],\n ...circle({ center: [0, 0], start: 1 - angleOuter, end: 1 + angleOuter, r: rOuter, npoints }),\n [basketCenterToBaseline, -startYOuter],\n [basketCenterToBaseline, -startYInner],\n ...circle({ center: [0, 0], start: 1 + angleInner, end: 1 - angleInner, r: rInner, npoints }),\n [basketCenterToBaseline, startYInner],\n [basketCenterToBaseline, startYOuter],\n ];\n}\n\nexport function freeThrowLaneBoundary({\n laneLength = 0,\n laneWidth = 0,\n lineThickness = 0,\n}: { laneLength?: number; laneWidth?: number; lineThickness?: number } = {}): Point[] {\n return [\n [0, laneWidth / 2],\n [-laneLength, laneWidth / 2],\n [-laneLength, -laneWidth / 2],\n [0, -laneWidth / 2],\n [0, -laneWidth / 2 + lineThickness],\n [-laneLength + lineThickness, -laneWidth / 2 + lineThickness],\n [-laneLength + lineThickness, laneWidth / 2 - lineThickness],\n [0, laneWidth / 2 - lineThickness],\n [0, laneWidth / 2],\n ];\n}\n\nexport function freeThrowCircle({\n overhang = 0,\n freeThrowCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { overhang?: number; freeThrowCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n // R: `if (!is.na(x)) theta <- x else 0` — only NaN (0/0) is NA; ±Inf passes through.\n const t = overhang / freeThrowCircleRadius / Math.PI;\n const theta = Number.isNaN(t) ? 0 : t;\n const startAngle = 0.5 - theta;\n const endAngle = 1.5 + theta;\n return [\n ...circle({ center: [0, 0], start: startAngle, end: endAngle, r: freeThrowCircleRadius, npoints }),\n ...circle({\n center: [0, 0],\n start: endAngle,\n end: startAngle,\n r: freeThrowCircleRadius - lineThickness,\n npoints,\n }),\n ];\n}\n\nexport function freeThrowCircleDash({\n featureRadius = 0,\n lineThickness = 0,\n startAngle = 0,\n endAngle = 0,\n npoints,\n}: {\n featureRadius?: number;\n lineThickness?: number;\n startAngle?: number;\n endAngle?: number;\n} & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: startAngle, end: endAngle, r: featureRadius, npoints }),\n ...circle({\n center: [0, 0],\n start: endAngle,\n end: startAngle,\n r: featureRadius - lineThickness,\n npoints,\n }),\n ];\n}\n\nexport function laneSpaceMark({\n featureThickness = 0,\n markDepth = 0,\n}: { featureThickness?: number; markDepth?: number } = {}): Point[] {\n return createRectangle(-featureThickness, 0, 0, markDepth);\n}\n\nexport function inboundingLine({\n lineThickness = 0,\n inPlayExt = 0,\n outOfBoundsExt = 0,\n drawnDirection = \"\",\n}: {\n lineThickness?: number;\n inPlayExt?: number;\n outOfBoundsExt?: number;\n drawnDirection?: string;\n} = {}): Point[] {\n return drawnDirection.toLowerCase() === \"top_down\"\n ? createRectangle(-lineThickness, 0, -inPlayExt, outOfBoundsExt + lineThickness)\n : createRectangle(-lineThickness, 0, -(outOfBoundsExt + lineThickness), inPlayExt);\n}\n\nexport function substitutionLine({\n lineThickness = 0,\n substitutionLineWidth = 0,\n drawnDirection = \"\",\n}: { lineThickness?: number; substitutionLineWidth?: number; drawnDirection?: string } = {}): Point[] {\n // R quirk: x_min = 0 > x_max = -line_thickness (reversed bounds), kept as is.\n return drawnDirection.toLowerCase() === \"bottom_up\"\n ? createRectangle(0, -lineThickness, 0, substitutionLineWidth + lineThickness)\n : createRectangle(0, -lineThickness, -(substitutionLineWidth + lineThickness), 0);\n}\n\nexport function teamBenchLine({\n lineThickness = 0,\n extension = 0,\n drawnDirection = \"\",\n}: { lineThickness?: number; extension?: number; drawnDirection?: string } = {}): Point[] {\n // R quirk: bottom_up draws toward +x, otherwise toward -x.\n return drawnDirection.toLowerCase() === \"bottom_up\"\n ? createRectangle(0, lineThickness, 0, extension)\n : createRectangle(0, -lineThickness, -extension, 0);\n}\n\nexport function restrictedArc({\n featureRadius = 0,\n lineThickness = 0,\n backboardToCenterOfBasket = 0,\n npoints,\n}: {\n featureRadius?: number;\n lineThickness?: number;\n backboardToCenterOfBasket?: number;\n} & Arc = {}): Point[] {\n const c: Point = [-backboardToCenterOfBasket, 0];\n return [\n [0, featureRadius],\n ...circle({ center: c, start: 0.5, end: 1.5, r: featureRadius, npoints }),\n [0, -featureRadius],\n [0, -(featureRadius + lineThickness)],\n ...circle({ center: c, start: 1.5, end: 0.5, r: featureRadius + lineThickness, npoints }),\n [0, featureRadius + lineThickness],\n [0, featureRadius],\n ];\n}\n\nexport function lowerDefensiveBoxMark({\n drawnDirection = \"\",\n extension = 0,\n lineThickness = 0,\n}: { drawnDirection?: string; extension?: number; lineThickness?: number } = {}): Point[] {\n const d = drawnDirection.toLowerCase();\n if (d === \"left_to_right\") return createRectangle(-extension, 0, 0, lineThickness);\n // R quirk: y_min = extension > y_max = 0 (reversed bounds).\n if (d === \"top_down\") return createRectangle(-lineThickness, 0, extension, 0);\n // R: neither branch assigns, so `return(lower_defensive_box_mark_df)` errors \"object not found\".\n throw new Error(`lowerDefensiveBoxMark: unsupported drawnDirection \"${drawnDirection}\"`);\n}\n\nexport function backboard({\n backboardWidth = 0,\n backboardThickness = 0,\n}: { backboardWidth?: number; backboardThickness?: number } = {}): Point[] {\n return createRectangle(0, backboardThickness, -backboardWidth / 2, backboardWidth / 2);\n}\n\nexport function basketRing({\n basketRingConnectorWidth = 0,\n backboardFaceToRingCent = 0,\n basketRingInnerRadius = 0,\n basketRingThickness = 0,\n npoints,\n}: {\n basketRingConnectorWidth?: number;\n backboardFaceToRingCent?: number;\n basketRingInnerRadius?: number;\n basketRingThickness?: number;\n} & Arc = {}): Point[] {\n const rOuter = basketRingInnerRadius + basketRingThickness;\n const startAngle = asinOverPi(basketRingConnectorWidth / 2 / rOuter);\n const endAngle = 2 - startAngle;\n const joinX = -backboardFaceToRingCent + rOuter * Math.cos(startAngle * Math.PI);\n const h = basketRingConnectorWidth / 2;\n return [\n [0, h],\n [joinX, h],\n ...circle({\n center: [-backboardFaceToRingCent, 0],\n start: startAngle,\n end: endAngle,\n r: rOuter,\n npoints,\n }),\n [joinX, -h],\n [0, -h],\n [0, h],\n ];\n}\n\nexport function net({\n basketRingInnerRadius = 0,\n npoints,\n}: { basketRingInnerRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: basketRingInnerRadius, npoints });\n}\n","import type { Color } from \"../scene.js\";\n\nexport const BASKETBALL_FEATURES = [\n \"half_court\",\n \"court_apron\",\n \"center_circle_outline\",\n \"center_circle_fill\",\n \"division_line\",\n \"endline\",\n \"sideline\",\n \"two_point_range\",\n \"three_point_line\",\n \"painted_area\",\n \"free_throw_lane_boundary\",\n \"lane_space_mark\",\n \"free_throw_circle_fill\",\n \"free_throw_circle\",\n \"free_throw_circle_dash\",\n \"restricted_arc\",\n \"lower_defensive_box_mark\",\n \"inbounding_line\",\n \"substitution_line\",\n \"team_bench_line\",\n \"backboard\",\n \"basket_ring\",\n \"net\",\n] as const;\nexport type BasketballFeature = (typeof BASKETBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_basketball()` (49). */\nexport const BASKETBALL_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalfcourt\",\n \"offensive_half_court\",\n \"offensive half court\",\n \"defense\",\n \"defence\",\n \"defensivehalfcourt\",\n \"defensive_half_court\",\n \"defensive half court\",\n \"offensivekey\",\n \"offensive_key\",\n \"offensive key\",\n \"attackingkey\",\n \"attacking_key\",\n \"attacking key\",\n \"defensivekey\",\n \"defensive_key\",\n \"defensive key\",\n \"defendingkey\",\n \"defending_key\",\n \"defending key\",\n \"offensivepaint\",\n \"offensive_paint\",\n \"offensive paint\",\n \"attackingpaint\",\n \"attacking_paint\",\n \"attacking paint\",\n \"offensivelane\",\n \"offensive_lane\",\n \"offensive lane\",\n \"attackinglane\",\n \"attacking_lane\",\n \"attacking lane\",\n \"defensivepaint\",\n \"defensive_paint\",\n \"defensive paint\",\n \"defendingpaint\",\n \"defending_paint\",\n \"defending paint\",\n \"defensivelane\",\n \"defensive_lane\",\n \"defensive lane\",\n \"defendinglane\",\n \"defending_lane\",\n \"defending lane\",\n] as const;\nexport type BasketballDisplayRange = (typeof BASKETBALL_DISPLAY_RANGES)[number];\n\nconst SURFACE = \"#d2ab6f\";\nconst LINE = \"#000000\";\n\n/**\n * The 26 argument names of `basketball_features_set_colors()`, in R's declaration order.\n * Colour keys are NOT feature names: e.g. the `half_court` feature is drawn twice, coloured\n * by `offensive_half_court` / `defensive_half_court`; Task 13 maps colour to feature at `addFeature`.\n */\nexport const BASKETBALL_COLOR_KEYS = [\n \"plot_background\",\n \"defensive_half_court\",\n \"offensive_half_court\",\n \"court_apron\",\n \"center_circle_outline\",\n \"center_circle_fill\",\n \"division_line\",\n \"endline\",\n \"sideline\",\n \"two_point_range\",\n \"three_point_line\",\n \"painted_area\",\n \"lane_boundary\",\n \"free_throw_circle_outline\",\n \"free_throw_circle_fill\",\n \"free_throw_circle_dash\",\n \"lane_space_mark\",\n \"inbounding_line\",\n \"substitution_line\",\n \"baseline_lower_defensive_box\",\n \"lane_lower_defensive_box\",\n \"team_bench_line\",\n \"restricted_arc\",\n \"backboard\",\n \"basket_ring\",\n \"net\",\n] as const;\nexport type BasketballColorKey = (typeof BASKETBALL_COLOR_KEYS)[number];\n\n/** Defaults of `basketball_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const BASKETBALL_DEFAULT_COLORS: Readonly<Record<BasketballColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n defensive_half_court: SURFACE,\n offensive_half_court: SURFACE,\n court_apron: SURFACE,\n center_circle_outline: LINE,\n center_circle_fill: SURFACE,\n division_line: LINE,\n endline: LINE,\n sideline: LINE,\n two_point_range: SURFACE,\n three_point_line: LINE,\n painted_area: SURFACE,\n lane_boundary: LINE,\n free_throw_circle_outline: LINE,\n free_throw_circle_fill: SURFACE,\n free_throw_circle_dash: LINE,\n lane_space_mark: LINE,\n inbounding_line: LINE,\n substitution_line: LINE,\n baseline_lower_defensive_box: LINE,\n lane_lower_defensive_box: LINE,\n team_bench_line: LINE,\n restricted_arc: LINE,\n backboard: LINE,\n basket_ring: \"#f55b33\",\n net: \"#ffffff\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { asArray } from \"../specs/_normalize.js\";\nimport {\n BASKETBALL_LEAGUES,\n BASKETBALL_SPECS,\n type BasketballLeague,\n type BasketballParamUpdates,\n type BasketballParams,\n} from \"../specs/basketball.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n frame,\n mergeColors,\n mergeParams,\n orVec,\n} from \"../surface.js\";\nimport { convertUnits, normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n BASKETBALL_DEFAULT_COLORS,\n BASKETBALL_DISPLAY_RANGES,\n type BasketballColorKey,\n type BasketballDisplayRange,\n type BasketballFeature,\n} from \"./types.js\";\n\nconst HIDDEN = \"#00000000\";\nconst NBA = BASKETBALL_SPECS.nba;\nconst ARRAY_FIELDS = (Object.keys(NBA) as (keyof BasketballParams)[]).filter((k) => Array.isArray(NBA[k]));\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/** `display_range` keys with spaces/underscores removed, then R's synonyms folded together. */\ntype RangeGroup =\n | \"full\"\n | \"inboundsonly\"\n | \"offense\"\n | \"defense\"\n | \"offensivekey\"\n | \"defensivekey\"\n | \"offensivepaint\"\n | \"defensivepaint\";\nconst RANGE_SYNONYMS: Readonly<Record<string, RangeGroup>> = {\n offence: \"offense\",\n offensivehalfcourt: \"offense\",\n defence: \"defense\",\n defensivehalfcourt: \"defense\",\n attackingkey: \"offensivekey\",\n defendingkey: \"defensivekey\",\n attackingpaint: \"offensivepaint\",\n offensivelane: \"offensivepaint\",\n attackinglane: \"offensivepaint\",\n defendingpaint: \"defensivepaint\",\n defensivelane: \"defensivepaint\",\n defendinglane: \"defensivepaint\",\n};\n\n/**\n * Port of sportyR `geom_basketball()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` scales the points, anchors and display limits, as sportyR 2.4.0 does (#74).\n */\nexport function basketballCourt(\n league: BasketballLeague | (string & {}),\n opts: SurfaceOptions<BasketballParamUpdates, BasketballColorKey, BasketballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(BASKETBALL_LEAGUES, key)) {\n throw new UnknownLeagueError(\n `Unknown basketball league \"${league}\"; expected one of: ${BASKETBALL_LEAGUES.join(\", \")}`,\n );\n }\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(BASKETBALL_DISPLAY_RANGES, range)) {\n throw new UnknownDisplayRangeError(\n `Unknown basketball display range \"${opts.displayRange}\"; expected one of: ${BASKETBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n }\n\n const p = mergeParams(BASKETBALL_SPECS[key], opts.updates, ARRAY_FIELDS);\n const colors = mergeColors(BASKETBALL_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: BasketballColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.court_units || \"ft\"); // custom's \"\" (R would error converting from \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n\n const L = p.court_length;\n const W = p.court_width;\n const lt = p.line_thickness;\n const bcb = p.basket_center_to_baseline;\n const bfb = p.backboard_face_to_baseline;\n const ftR = p.free_throw_circle_radius;\n\n const features: Feature[] = [];\n const add = (\n name: BasketballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color; elevation?: number; height?: number } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n\n // Multi-instance tables (R 382-515). Colours are bound to rows BEFORE sorting, so they travel with them.\n const centerCircles = frame({\n radius: orVec(p.center_circle_radius, 0),\n outline: asArray(colors.center_circle_outline),\n fill: asArray(colors.center_circle_fill),\n }).sort((a, b) => b.radius - a.radius);\n\n const threePointArcs = frame({\n radius: orVec(p.basket_center_to_three_point_arc, 0),\n corner: orVec(p.basket_center_to_corner_three, 0), // unused for drawing; R counts it in nrow()\n line: asArray(colors.three_point_line),\n twoPointRange: asArray(colors.two_point_range),\n }).sort((a, b) => b.radius - a.radius);\n\n const laneLength = orVec(p.lane_length, 0);\n const allHidden = laneLength.map(() => false);\n const lanes = frame({\n length: laneLength,\n width: orVec(p.lane_width, 0),\n paintMargin: orVec(p.paint_margin, 0),\n boundaryColor: asArray(colors.lane_boundary),\n paintedArea: asArray(colors.painted_area),\n boundaryVisible: p.lane_boundary_visibility.length > 0 ? p.lane_boundary_visibility : allHidden,\n paintedVisible: p.painted_area_visibility.length > 0 ? p.painted_area_visibility : allHidden,\n }).sort((a, b) => b.length - a.length || b.width - a.width);\n\n // Lane space mark sets stay in the spec's (unsorted) order.\n const lsmColors = asArray(colors.lane_space_mark);\n const nSets = p.lane_space_mark_lengths.length;\n const markSets = p.lane_space_mark_lengths.map((lengths, i) => {\n // R ifelse() with a scalar test keeps one element: set i gets colour i only when there are several sets.\n const color = (nSets > 1 && lsmColors.length > i ? lsmColors[i] : lsmColors[0]) ?? HIDDEN;\n return lengths.map((length, j) => ({\n yAnchor: (p.lane_width[i] ?? Number.NaN) / 2,\n length,\n width: p.lane_space_mark_widths[i] ?? Number.NaN,\n separation: p.lane_space_mark_separations[i]?.[j] ?? Number.NaN,\n color,\n visible: p.lane_space_mark_visibility[i] === true,\n }));\n });\n\n const overhang = p.free_throw_circle_overhang ?? 0;\n const overhangEndTheta = ftR !== 0 ? 0.5 - overhang / ftR / Math.PI : 0.5;\n\n const benchTop = p.bench_side.toLowerCase() === \"top\";\n const bench = benchTop ? 1 : -1;\n const benchDirection = benchTop ? \"bottom_up\" : \"top_down\";\n const inboundingLines = frame({\n toBaseline: orVec(p.inbounding_line_to_baseline, 0),\n inPlayExt: orVec(p.inbounding_line_in_play_ext, 0),\n outOfBoundsExt: orVec(p.inbounding_line_out_of_bounds_ext, 0),\n symmetric: orVec(p.symmetric_inbounding_line, false),\n anchorSide: orVec(p.inbounding_line_anchor_side, 1).map((s) => (benchTop ? s : -1 * s)),\n });\n\n // Layers, in R's add_feature order (R 799-1237).\n const halfCourt = F.halfCourt({ courtLength: L, courtWidth: W });\n add(\"half_court\", halfCourt, col(\"defensive_half_court\"), -0.25 * L, 0, false, false);\n add(\"half_court\", halfCourt, col(\"offensive_half_court\"), 0.25 * L, 0, false, false);\n add(\n \"court_apron\",\n F.courtApron({\n courtLength: L,\n courtWidth: W,\n courtApronEndline: p.court_apron_endline,\n courtApronSideline: p.court_apron_sideline,\n courtApronToBoundary: p.court_apron_to_boundary,\n lineThickness: lt,\n }),\n col(\"court_apron\"),\n 0,\n 0,\n true,\n false,\n { stroke: col(\"court_apron\") },\n );\n\n centerCircles.forEach((c, i) => {\n // R passes `line_thickness[i] %or% 0`: only the largest circle's fill is inset by the line thickness.\n const fill = F.centerCircleFill({\n centerCircleRadius: c.radius,\n lineThickness: i === 0 ? lt : 0,\n npoints,\n });\n add(\"center_circle_fill\", fill, c.fill, 0, 0, true, false);\n const outline = F.centerCircleOutline({ centerCircleRadius: c.radius, lineThickness: lt, npoints });\n add(\"center_circle_outline\", outline, c.outline, 0, 0, true, false);\n });\n\n threePointArcs.forEach((arc, i) => {\n // R builds arc i from the UNSORTED spec vectors but colours it from the sorted row i.\n const radius = p.basket_center_to_three_point_arc[i] ?? 0;\n const shape = {\n basketCenterToBaseline: bcb,\n basketCenterToCornerThree: p.basket_center_to_corner_three[i] ?? 0,\n lineThickness: lt,\n npoints,\n };\n add(\n \"two_point_range\",\n F.twoPointRange({ ...shape, twoPointRangeRadius: radius }),\n arc.twoPointRange,\n L / 2 - bcb,\n 0,\n true,\n false,\n );\n add(\n \"three_point_line\",\n F.threePointLine({ ...shape, threePointLineRadius: radius }),\n arc.line,\n L / 2 - bcb,\n 0,\n true,\n false,\n );\n });\n\n const ftX = L / 2 - bfb - p.free_throw_line_to_backboard;\n add(\n \"free_throw_circle_fill\",\n F.freeThrowCircleFill({ freeThrowCircleRadius: ftR, lineThickness: lt, npoints }),\n col(\"free_throw_circle_fill\"),\n ftX,\n 0,\n true,\n false,\n );\n add(\n \"free_throw_circle\",\n F.freeThrowCircle({ freeThrowCircleRadius: ftR, lineThickness: lt, npoints }),\n col(\"free_throw_circle_outline\"),\n ftX + lt / 2,\n 0,\n true,\n false,\n );\n\n for (const lane of lanes) {\n const shape = { laneLength: lane.length, laneWidth: lane.width, lineThickness: lt };\n const paintFill = lane.paintedVisible === true ? lane.paintedArea : HIDDEN;\n add(\n \"painted_area\",\n F.paintedArea({ ...shape, paintMargin: lane.paintMargin }),\n paintFill,\n L / 2 - lane.length + lt,\n 0,\n true,\n false,\n );\n const boundaryFill = lane.boundaryVisible === true ? lane.boundaryColor : HIDDEN;\n add(\"free_throw_lane_boundary\", F.freeThrowLaneBoundary(shape), boundaryFill, L / 2, 0, true, false);\n }\n\n const nDashes = p.n_free_throw_circle_dashes ?? 0;\n if (nDashes > 0) {\n const dash = (startAngle: number, endAngle: number): Point[] =>\n F.freeThrowCircleDash({ featureRadius: ftR, lineThickness: lt, startAngle, endAngle, npoints });\n add(\n \"free_throw_circle_dash\",\n dash(0.5, overhangEndTheta),\n col(\"free_throw_circle_dash\"),\n ftX,\n 0,\n true,\n true,\n );\n const thetaDashes = ftR !== 0 ? (p.free_throw_dash_length ?? 0) / ftR / Math.PI : 0;\n const thetaSpaces = ftR !== 0 ? (p.free_throw_dash_spacing ?? 0) / ftR / Math.PI : 0;\n let start = ftR !== 0 ? 0.5 - overhang / ftR / Math.PI - thetaSpaces : 0.5 - thetaSpaces;\n for (let d = 1; d <= nDashes; d++) {\n // R quirk kept: each dash spans theta_spaces, not theta_dashes.\n add(\n \"free_throw_circle_dash\",\n dash(start, start - thetaSpaces),\n col(\"free_throw_circle_dash\"),\n ftX + lt / 2,\n 0,\n true,\n false,\n );\n start = start - thetaDashes - thetaSpaces;\n }\n }\n\n // R loops over the (sorted) lanes but picks mark set i by spec order.\n lanes.forEach((_, i) => {\n const set = markSets[i] ?? [];\n let x = L / 2 - bfb;\n for (const m of set) {\n x = x - m.separation;\n // Parent bug not ported: R reads `lane_space_mark_set[i, \"color\"]` (lane index i, NA once i > marks per set).\n const fill = m.visible ? m.color : HIDDEN;\n add(\n \"lane_space_mark\",\n F.laneSpaceMark({ featureThickness: m.length, markDepth: m.width }),\n fill,\n x,\n m.yAnchor,\n true,\n true,\n );\n }\n });\n\n const boxShape = { extension: p.lower_defensive_box_mark_extension ?? 0, lineThickness: lt };\n add(\n \"lower_defensive_box_mark\",\n F.lowerDefensiveBoxMark({ ...boxShape, drawnDirection: \"left_to_right\" }),\n col(\"baseline_lower_defensive_box\"),\n L / 2,\n (p.baseline_lower_defensive_box_marks_int_sep ?? 0) / 2,\n true,\n true,\n );\n add(\n \"lower_defensive_box_mark\",\n F.lowerDefensiveBoxMark({ ...boxShape, drawnDirection: \"top_down\" }),\n (p.lane_lower_defensive_box_marks_visibility ?? false) === true\n ? col(\"lane_lower_defensive_box\")\n : HIDDEN,\n L / 2 - (p.baseline_to_lane_lower_defensive_box_marks ?? 0),\n (p.lane_lower_defensive_box_marks_int_sep ?? 0) / 2,\n true,\n true,\n );\n\n add(\"endline\", F.endline({ courtWidth: W, lineThickness: lt }), col(\"endline\"), L / 2, 0, true, false);\n add(\"sideline\", F.sideline({ courtLength: L, lineThickness: lt }), col(\"sideline\"), 0, W / 2, false, true);\n\n for (const line of inboundingLines) {\n const shape = F.inboundingLine({\n lineThickness: lt,\n inPlayExt: line.inPlayExt,\n outOfBoundsExt: line.outOfBoundsExt,\n drawnDirection: line.anchorSide < 1 ? \"bottom_up\" : \"top_down\",\n });\n add(\n \"inbounding_line\",\n shape,\n col(\"inbounding_line\"),\n L / 2 - line.toBaseline,\n (W / 2) * line.anchorSide,\n true,\n line.symmetric,\n );\n }\n\n add(\n \"substitution_line\",\n F.substitutionLine({\n lineThickness: lt,\n substitutionLineWidth: p.substitution_line_width ?? 0,\n drawnDirection: benchDirection,\n }),\n col(\"substitution_line\"),\n (p.substitution_line_ext_sep ?? 0) / 2,\n (bench * W) / 2,\n true,\n false,\n );\n add(\n \"team_bench_line\",\n F.teamBenchLine({\n lineThickness: lt,\n extension: p.team_bench_line_ext ?? 0,\n drawnDirection: benchDirection,\n }),\n col(\"team_bench_line\"),\n L / 2,\n bench * (W / 2 + lt),\n true,\n false,\n );\n add(\n \"division_line\",\n F.divisionLine({\n courtWidth: W,\n lineThickness: lt,\n divisionLineExtension: p.division_line_extension ?? 0,\n }),\n col(\"division_line\"),\n 0,\n 0,\n false,\n true,\n );\n\n const hint = (ft: number): number => convertUnits(ft, \"ft\", units);\n add(\n \"restricted_arc\",\n F.restrictedArc({\n featureRadius: p.restricted_arc_radius ?? 0,\n lineThickness: lt,\n backboardToCenterOfBasket: bcb - bfb,\n npoints,\n }),\n col(\"restricted_arc\"),\n L / 2 - bfb,\n 0,\n true,\n false,\n );\n add(\n \"basket_ring\",\n F.basketRing({\n basketRingConnectorWidth: p.basket_ring_connector_width,\n backboardFaceToRingCent: bcb - bfb,\n basketRingInnerRadius: p.basket_ring_inner_radius,\n basketRingThickness: p.basket_ring_thickness,\n npoints,\n }),\n col(\"basket_ring\"),\n L / 2 - bfb,\n 0,\n true,\n false,\n { elevation: hint(10) },\n );\n add(\n \"net\",\n F.net({ basketRingInnerRadius: p.basket_ring_inner_radius, npoints }),\n col(\"net\"),\n L / 2 - bcb,\n 0,\n true,\n false,\n { elevation: hint(10 - 1.5) },\n );\n add(\n \"backboard\",\n F.backboard({ backboardWidth: p.backboard_width, backboardThickness: p.backboard_thickness }),\n col(\"backboard\"),\n L / 2 - bfb,\n 0,\n true,\n false,\n { height: hint(3.5) },\n );\n\n // Display range (R 1240-1652), in the spec's units; then converted, translated, rotated.\n const hcl = L / 2 + p.court_apron_endline;\n const hcw = W / 2 + p.court_apron_sideline;\n const keyX = L / 2 - bcb - Math.max(...p.basket_center_to_three_point_arc) - 3;\n const paintX = L / 2 - Math.max(...p.lane_length) - ftR;\n const laneHalf = Math.max(...p.lane_width) / 2;\n const fullY = [-hcw, hcw] as const;\n const paintY = [-laneHalf - 1.5, laneHalf + 1.5] as const;\n const ranges: Record<RangeGroup, readonly [readonly [number, number], readonly [number, number]]> = {\n full: [[-hcl, hcl], fullY],\n inboundsonly: [\n [-(L / 2 + lt), L / 2 + lt],\n [-(W / 2 + lt), W / 2 + lt],\n ],\n offense: [[0, hcl], fullY],\n defense: [[-hcl, 0], fullY],\n offensivekey: [[keyX, hcl], fullY],\n defensivekey: [[-hcl, -keyX], fullY],\n offensivepaint: [[paintX, hcl], paintY],\n defensivepaint: [[-hcl, -paintX], paintY],\n };\n const squashed = range.replace(/[ _]/g, \"\");\n const [rx, ry] = ranges[RANGE_SYNONYMS[squashed] ?? (squashed as RangeGroup)];\n const [cx, cy] = convertLimits(rx, ry, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n\n // R: plot_background NULL = none; our transparent default stands in for NULL.\n const background = col(\"plot_background\");\n return {\n sport: \"basketball\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle } from \"../shapes.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). Same helper as soccer/features.ts. */\ntype Arc = { npoints?: number | undefined };\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\n/** curling_end: the playing end beyond the hog line, hanging from (downward) or rising from (upward) y = 0; the anchor puts y = 0 on the hog line. */\nexport function end({\n sheetLength = 0,\n sheetWidth = 0,\n teeLineToCenter = 0,\n hogLineToTeeLine = 0,\n drawnDirection = \"\",\n}: {\n sheetLength?: number;\n sheetWidth?: number;\n teeLineToCenter?: number;\n hogLineToTeeLine?: number;\n drawnDirection?: string;\n} = {}): Point[] {\n const endLength = sheetLength / 2 - teeLineToCenter + hogLineToTeeLine;\n return drawnDirection.toLowerCase() === \"upward\"\n ? createRectangle(-sheetWidth / 2, sheetWidth / 2, 0, endLength)\n : createRectangle(-sheetWidth / 2, sheetWidth / 2, -endLength, 0);\n}\n\n/** curling_centre_zone: the strip between the two hog lines. */\nexport function centreZone({\n sheetWidth = 0,\n teeLineToCenter = 0,\n hogLineToTeeLine = 0,\n}: { sheetWidth?: number; teeLineToCenter?: number; hogLineToTeeLine?: number } = {}): Point[] {\n const h = teeLineToCenter - hogLineToTeeLine;\n return createRectangle(-sheetWidth / 2, sheetWidth / 2, -h, h);\n}\n\n/** curling_sheet_apron: the only 10-point shape, the y >= 0 half of the frame (mirrored over x by the assembler). */\nexport function sheetApron({\n sheetLength = 0,\n sheetWidth = 0,\n apronBehindBack = 0,\n apronAlongSide = 0,\n}: {\n sheetLength?: number;\n sheetWidth?: number;\n apronBehindBack?: number;\n apronAlongSide?: number;\n} = {}): Point[] {\n const w = sheetWidth / 2;\n const l = sheetLength / 2;\n const ox = w + apronAlongSide;\n const oy = l + apronBehindBack;\n return [\n [0, l],\n [w, l],\n [w, 0],\n [ox, 0],\n [ox, oy],\n [-ox, oy],\n [-ox, 0],\n [-w, 0],\n [-w, l],\n [0, l],\n ];\n}\n\n/** curling_centre_line. */\nexport function centreLine({\n lineThickness = 0,\n teeLineToCenter = 0,\n centreLineExtension = 0,\n}: { lineThickness?: number; teeLineToCenter?: number; centreLineExtension?: number } = {}): Point[] {\n const h = teeLineToCenter + centreLineExtension;\n return createRectangle(-lineThickness / 2, lineThickness / 2, -h, h);\n}\n\n/** curling_tee_line. */\nexport const teeLine = ({\n lineThickness = 0,\n sheetWidth = 0,\n}: { lineThickness?: number; sheetWidth?: number } = {}): Point[] =>\n createRectangle(-sheetWidth / 2, sheetWidth / 2, -lineThickness / 2, lineThickness / 2);\n\n/** curling_back_line. */\nexport const backLine = ({\n lineThickness = 0,\n sheetWidth = 0,\n}: { lineThickness?: number; sheetWidth?: number } = {}): Point[] =>\n createRectangle(-sheetWidth / 2, sheetWidth / 2, 0, lineThickness);\n\n/** curling_hog_line (same geometry as the back line in R). */\nexport const hogLine = ({\n lineThickness = 0,\n sheetWidth = 0,\n}: { lineThickness?: number; sheetWidth?: number } = {}): Point[] =>\n createRectangle(-sheetWidth / 2, sheetWidth / 2, 0, lineThickness);\n\n/** curling_hack_line. */\nexport const hackLine = ({\n lineThickness = 0,\n hackWidth = 0,\n}: { lineThickness?: number; hackWidth?: number } = {}): Point[] =>\n createRectangle(-hackWidth / 2, hackWidth / 2, -lineThickness, 0);\n\n/** curling_courtesy_line. */\nexport const courtesyLine = ({\n lineThickness = 0,\n lineLength = 0,\n}: { lineThickness?: number; lineLength?: number } = {}): Point[] =>\n createRectangle(-lineLength, 0, -lineThickness, 0);\n\n/** curling_hack_foothold. */\nexport const hackFoothold = ({\n footholdDepth = 0,\n footholdWidth = 0,\n}: { footholdDepth?: number; footholdWidth?: number } = {}): Point[] =>\n createRectangle(0, footholdWidth, -footholdDepth, 0);\n\n/** curling_button: a full disc. */\nexport const button = ({ featureRadius = 0, npoints }: { featureRadius?: number } & Arc = {}): Point[] =>\n circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n\n/** curling_house_ring: a filled disc; the assembler stacks the radii largest-first so each smaller ring paints over the last. */\nexport const houseRing = ({ featureRadius = 0, npoints }: { featureRadius?: number } & Arc = {}): Point[] =>\n circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `curling_*` builder (prefix dropped), as used in `PolygonFeature.name` (12). */\nexport const CURLING_FEATURES = [\n \"sheet_apron\",\n \"end\",\n \"centre_zone\",\n \"house_ring\",\n \"button\",\n \"tee_line\",\n \"back_line\",\n \"hog_line\",\n \"centre_line\",\n \"hack_line\",\n \"courtesy_line\",\n \"hack_foothold\",\n] as const;\nexport type CurlingFeature = (typeof CURLING_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_curling()` (4). */\nexport const CURLING_DISPLAY_RANGES = [\"full\", \"in_bounds_only\", \"in bounds only\", \"house\"] as const;\nexport type CurlingDisplayRange = (typeof CURLING_DISPLAY_RANGES)[number];\n\n/** The 14 argument names of `curling_features_set_colors()`, in R's declaration order (colour keys are NOT feature names). */\nexport const CURLING_COLOR_KEYS = [\n \"plot_background\",\n \"end_1\",\n \"centre_zone\",\n \"end_2\",\n \"sheet_apron\",\n \"centre_line\",\n \"tee_line\",\n \"back_line\",\n \"hog_line\",\n \"hack_line\",\n \"courtesy_line\",\n \"hack\",\n \"button\",\n \"house_rings\",\n] as const;\nexport type CurlingColorKey = (typeof CURLING_COLOR_KEYS)[number];\n\n/** Defaults of `curling_features_set_colors()` (R's plot_background default is NULL; transparent here). `house_rings` is a vector, recycled by `colorAt`. */\nexport const CURLING_DEFAULT_COLORS: Readonly<Record<CurlingColorKey, Color | readonly Color[]>> = {\n plot_background: \"#ffffff00\",\n end_1: \"#ffffff\",\n centre_zone: \"#ffffff\",\n end_2: \"#ffffff\",\n sheet_apron: \"#0033a0\",\n centre_line: \"#000000\",\n tee_line: \"#000000\",\n back_line: \"#000000\",\n hog_line: \"#c8102e\",\n hack_line: \"#000000\",\n courtesy_line: \"#000000\",\n hack: \"#000000\",\n button: \"#ffffff\",\n house_rings: [\"#c8102e\", \"#ffffff\", \"#0033a0\"],\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n CURLING_LEAGUES,\n CURLING_SPECS,\n type CurlingLeague,\n type CurlingParamUpdates,\n} from \"../specs/curling.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n CURLING_DEFAULT_COLORS,\n CURLING_DISPLAY_RANGES,\n type CurlingColorKey,\n type CurlingDisplayRange,\n type CurlingFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/**\n * Port of sportyR `geom_curling()`: one PolygonFeature per ggplot layer R adds, in R's layer order. The sheet is vertical\n * (`sheet_width` spans x, `sheet_length` spans y).\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` scales the points, anchors\n * and display limits, as sportyR 2.4.0 does (#74); a house-ring colour vector shorter than the ring count recycles (R yields NA).\n */\nexport function curlingSheet(\n league: CurlingLeague | (string & {}),\n opts: SurfaceOptions<CurlingParamUpdates, CurlingColorKey, CurlingDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(CURLING_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown curling league \"${league}\"; expected one of: ${CURLING_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase(); // R: tolower() only — no trim\n if (!isOneOf(CURLING_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown curling display range \"${opts.displayRange}\"; expected one of: ${CURLING_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(CURLING_SPECS[key], opts.updates, [\"house_ring_radii\"]);\n const colors = mergeColors(CURLING_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: CurlingColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.sheet_units || \"ft\"); // R: sheet_units %or% \"ft\" (custom's \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.sheet_length;\n const W = p.sheet_width;\n const tee = p.tee_line_to_center;\n const hog = p.hog_line_to_tee_line;\n const features: Feature[] = [];\n const add = (\n name: CurlingFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n // Layers, in R's add_feature order (geom-curling.R 296-470).\n add(\n \"sheet_apron\",\n F.sheetApron({\n sheetLength: L,\n sheetWidth: W,\n apronBehindBack: p.apron_behind_back,\n apronAlongSide: p.apron_along_side,\n }),\n col(\"sheet_apron\"),\n 0,\n 0,\n false,\n true,\n { stroke: col(\"sheet_apron\") },\n );\n const endOpts = { sheetLength: L, sheetWidth: W, teeLineToCenter: tee, hogLineToTeeLine: hog };\n add(\"end\", F.end({ ...endOpts, drawnDirection: \"downward\" }), col(\"end_1\"), 0, -tee + hog, false, false);\n add(\n \"centre_zone\",\n F.centreZone({ sheetWidth: W, teeLineToCenter: tee, hogLineToTeeLine: hog }),\n col(\"centre_zone\"),\n 0,\n 0,\n false,\n false,\n );\n add(\"end\", F.end({ ...endOpts, drawnDirection: \"upward\" }), col(\"end_2\"), 0, tee - hog, false, false);\n const radii = [...p.house_ring_radii].sort((a, b) => b - a); // R: house_ring_radii[rev(order(house_ring_radii))]\n radii.forEach((r, i) =>\n add(\n \"house_ring\",\n F.houseRing({ featureRadius: r, npoints }),\n colorAt(colors.house_rings, i),\n 0,\n tee,\n false,\n true,\n ),\n );\n add(\"button\", F.button({ featureRadius: p.button_radius, npoints }), col(\"button\"), 0, tee, false, true);\n add(\n \"tee_line\",\n F.teeLine({ lineThickness: p.tee_line_thickness, sheetWidth: W }),\n col(\"tee_line\"),\n 0,\n tee,\n false,\n true,\n );\n add(\n \"back_line\",\n F.backLine({ lineThickness: p.back_line_thickness, sheetWidth: W }),\n col(\"back_line\"),\n 0,\n tee + p.back_line_to_tee_line,\n false,\n true,\n );\n add(\n \"hog_line\",\n F.hogLine({ lineThickness: p.hog_line_thickness, sheetWidth: W }),\n col(\"hog_line\"),\n 0,\n tee - hog,\n false,\n true,\n );\n add(\n \"centre_line\",\n F.centreLine({\n lineThickness: p.centre_line_thickness,\n teeLineToCenter: tee,\n centreLineExtension: p.centre_line_extension,\n }),\n col(\"centre_line\"),\n 0,\n 0,\n false,\n false,\n );\n add(\n \"hack_line\",\n F.hackLine({\n lineThickness: p.hack_line_thickness,\n hackWidth: 2 * p.hack_foothold_width + p.hack_foothold_gap,\n }),\n col(\"hack_line\"),\n 0,\n tee + p.centre_line_extension,\n false,\n true,\n );\n add(\n \"courtesy_line\",\n F.courtesyLine({ lineThickness: p.courtesy_line_thickness, lineLength: p.courtesy_line_length }),\n col(\"courtesy_line\"),\n W / 2,\n tee - hog - p.courtesy_line_to_hog_line,\n true,\n true,\n );\n add(\n \"hack_foothold\",\n F.hackFoothold({ footholdDepth: p.hack_foothold_depth, footholdWidth: p.hack_foothold_width }),\n col(\"hack\"),\n p.hack_foothold_gap,\n tee + p.centre_line_extension,\n true,\n true,\n );\n // Display range (geom-curling.R 511-600) in native units (the +5 is NOT scaled — R); then converted (documented divergence 1), translated, rotated.\n const hsl = L / 2 + p.apron_behind_back + 5;\n const hsw = W / 2 + p.apron_along_side + 5;\n const endLength = tee - hog - p.courtesy_line_to_hog_line;\n const inBounds = range === \"in_bounds_only\" || range === \"in bounds only\";\n const [cx, cy] = convertLimits(\n inBounds ? [-(W / 2 + 0.5), W / 2 + 0.5] : [-hsw, hsw],\n inBounds ? [-(L / 2 + 0.5), L / 2 + 0.5] : range === \"house\" ? [endLength, hsl] : [-hsl, hsl],\n from,\n units,\n );\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // R: NULL = none; transparent stands in\n return {\n sport: \"curling\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createRectangle } from \"../shapes.js\";\n\n// No football feature has an arc, so no builder takes `npoints`.\n\n/** R `data.frame(x = c(...), y = c(...))`. */\nconst zip = (xs: readonly number[], ys: readonly number[]): Point[] =>\n xs.map((x, i): Point => [x, ys[i] ?? 0]);\n\nconst isRectangular = (benchShape: string): boolean =>\n [\"rectangle\", \"rectangular\"].includes(benchShape.toLowerCase());\n\n/**\n * R's bench-corner x for the apron/border outlines (sportyR #71): a slanted bench (not rectangular, with depth and\n * differing sides) puts the corner on the line parallel to the bench's side; any other bench uses `x1`.\n */\nfunction outerCornerX(\n benchShape: string,\n startingDepth: number,\n thickness: number,\n teamBenchLengthFieldSide: number,\n teamBenchLengthBackSide: number,\n teamBenchWidth: number,\n teamBenchAreaBorderThickness: number,\n): number {\n const x1 = teamBenchLengthFieldSide / 2 + teamBenchAreaBorderThickness + thickness;\n if (\n isRectangular(benchShape) ||\n !(teamBenchWidth > 0) ||\n teamBenchLengthBackSide === teamBenchLengthFieldSide\n )\n return x1;\n const m = teamBenchWidth / (teamBenchLengthBackSide / 2 - teamBenchLengthFieldSide / 2);\n const y2 = startingDepth + thickness;\n const y1 = startingDepth - teamBenchWidth - teamBenchAreaBorderThickness;\n return (y2 - y1) / m + x1;\n}\n\ntype BenchOpts = {\n fieldLength?: number;\n fieldWidth?: number;\n endzoneLength?: number;\n restrictedAreaLength?: number;\n restrictedAreaWidth?: number;\n coachingBoxLength?: number;\n coachingBoxWidth?: number;\n teamBenchLengthFieldSide?: number;\n teamBenchLengthBackSide?: number;\n teamBenchWidth?: number;\n teamBenchAreaBorderThickness?: number;\n benchShape?: string;\n};\n\n// Surface base features -------------------------------------------------------------------------\n\n/** Quarter-length half-field rectangle (R anchors it at ±L/4). */\nexport function halfField({\n fieldLength = 0,\n fieldWidth = 0,\n}: { fieldLength?: number; fieldWidth?: number } = {}): Point[] {\n return createRectangle(-fieldLength / 4, fieldLength / 4, -fieldWidth / 2, fieldWidth / 2);\n}\n\nexport function endzone({\n fieldWidth = 0,\n endzoneLength = 0,\n}: { fieldWidth?: number; endzoneLength?: number } = {}): Point[] {\n return createRectangle(-endzoneLength / 2, endzoneLength / 2, -fieldWidth / 2, fieldWidth / 2);\n}\n\n/** R quirk kept: the \"restricted area (top)\" vertex uses field_border_thickness, not restricted_area_width. */\nexport function fieldApron({\n fieldLength = 0,\n fieldWidth = 0,\n endzoneLength = 0,\n boundaryThickness = 0,\n fieldBorderThickness = 0,\n restrictedAreaLength = 0,\n restrictedAreaWidth = 0,\n coachingBoxLength = 0,\n coachingBoxWidth = 0,\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n teamBenchAreaBorderThickness = 0,\n extraApronPadding = 0,\n benchShape = \"\",\n}: BenchOpts & {\n boundaryThickness?: number;\n fieldBorderThickness?: number;\n extraApronPadding?: number;\n} = {}): Point[] {\n const fbt = fieldBorderThickness;\n const tb = teamBenchAreaBorderThickness;\n const extX = fieldLength / 2 + endzoneLength + boundaryThickness + fbt + extraApronPadding;\n const depth =\n fieldWidth / 2 + boundaryThickness + restrictedAreaWidth + coachingBoxWidth + teamBenchWidth + tb + fbt;\n const extY = depth + extraApronPadding;\n const outer = outerCornerX(\n benchShape,\n depth,\n fbt,\n teamBenchLengthFieldSide,\n teamBenchLengthBackSide,\n teamBenchWidth,\n tb,\n );\n const benchX = teamBenchLengthFieldSide / 2 + tb + fbt;\n const coachX = coachingBoxLength / 2 + tb + fbt;\n const restrictedX = restrictedAreaLength / 2 + tb + fbt;\n const edgeX = fieldLength / 2 + endzoneLength + boundaryThickness + fbt;\n const benchY = fieldWidth / 2 + boundaryThickness + restrictedAreaWidth + coachingBoxWidth;\n const coachY = fieldWidth / 2 + boundaryThickness + restrictedAreaWidth;\n const edgeY = fieldWidth / 2 + boundaryThickness + fbt;\n return zip(\n [\n 0,\n outer,\n benchX,\n coachX,\n restrictedX,\n edgeX,\n edgeX,\n restrictedX,\n coachX,\n benchX,\n outer,\n 0,\n 0,\n extX,\n extX,\n 0,\n 0,\n ],\n [\n depth,\n depth,\n benchY,\n coachY,\n edgeY,\n edgeY,\n -edgeY,\n -edgeY,\n -coachY,\n -benchY,\n -depth,\n -depth,\n -extY,\n -extY,\n extY,\n extY,\n depth,\n ],\n );\n}\n\n// Surface boundaries ----------------------------------------------------------------------------\n\nexport function endLine({\n featureThickness = 0,\n fieldWidth = 0,\n}: { featureThickness?: number; fieldWidth?: number } = {}): Point[] {\n return createRectangle(\n 0,\n featureThickness,\n -(fieldWidth / 2 + featureThickness),\n fieldWidth / 2 + featureThickness,\n );\n}\n\nexport function sideline({\n featureThickness = 0,\n fieldLength = 0,\n endzoneLength = 0,\n}: { featureThickness?: number; fieldLength?: number; endzoneLength?: number } = {}): Point[] {\n return createRectangle(\n -(fieldLength / 2 + endzoneLength),\n fieldLength / 2 + endzoneLength,\n 0,\n featureThickness,\n );\n}\n\nexport function fieldBorder({\n fieldLength = 0,\n fieldWidth = 0,\n featureThickness = 0,\n endzoneLength = 0,\n boundaryLineThickness = 0,\n restrictedAreaLength = 0,\n restrictedAreaWidth = 0,\n coachingBoxLength = 0,\n coachingBoxWidth = 0,\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n teamBenchAreaBorderThickness = 0,\n surroundsTeamBenchArea = false,\n benchShape = \"\",\n}: BenchOpts & {\n featureThickness?: number;\n boundaryLineThickness?: number;\n surroundsTeamBenchArea?: boolean;\n} = {}): Point[] {\n const t = featureThickness;\n const tb = teamBenchAreaBorderThickness;\n const blt = boundaryLineThickness;\n const raX = restrictedAreaLength / 2 + tb;\n const edgeX = fieldLength / 2 + endzoneLength + blt;\n const edgeY = fieldWidth / 2 + blt;\n if (!surroundsTeamBenchArea) {\n return zip(\n [raX, edgeX, edgeX, raX, raX, edgeX + t, edgeX + t, raX, raX],\n [edgeY, edgeY, -edgeY, -edgeY, -(edgeY + t), -(edgeY + t), edgeY + t, edgeY + t, edgeY],\n );\n }\n const depth = fieldWidth / 2 + blt + restrictedAreaWidth + coachingBoxWidth + teamBenchWidth + tb;\n const outer = outerCornerX(\n benchShape,\n depth,\n t,\n teamBenchLengthFieldSide,\n teamBenchLengthBackSide,\n teamBenchWidth,\n tb,\n );\n const backX = teamBenchLengthBackSide / 2 + tb;\n const benchX = teamBenchLengthFieldSide / 2 + tb;\n const coachX = coachingBoxLength / 2 + tb;\n const benchY = depth - teamBenchWidth - tb;\n return zip(\n [\n 0,\n backX,\n benchX,\n coachX,\n raX,\n edgeX,\n edgeX,\n raX,\n coachX,\n benchX,\n backX,\n 0,\n 0,\n outer,\n benchX + t,\n coachX + t,\n raX + t,\n edgeX + t,\n edgeX + t,\n raX + t,\n coachX + t,\n benchX + t,\n outer,\n 0,\n 0,\n ],\n [\n depth,\n depth,\n benchY,\n benchY,\n edgeY,\n edgeY,\n -fieldWidth / 2 - blt,\n -fieldWidth / 2 - blt,\n -depth + teamBenchWidth + tb,\n -depth + teamBenchWidth + tb,\n -depth,\n -depth,\n -depth - t,\n -depth - t,\n -depth + teamBenchWidth + tb,\n -depth + teamBenchWidth + tb + coachingBoxWidth,\n -fieldWidth / 2 - blt - t,\n -fieldWidth / 2 - blt - t,\n edgeY + t,\n edgeY + t,\n depth - teamBenchWidth - tb - coachingBoxWidth,\n depth - teamBenchWidth - tb,\n depth + t,\n depth + t,\n depth,\n ],\n );\n}\n\nexport function fieldBorderOutline({\n fieldLength = 0,\n fieldWidth = 0,\n featureThickness = 0,\n endzoneLength = 0,\n boundaryLineThickness = 0,\n restrictedAreaLength = 0,\n restrictedAreaWidth = 0,\n coachingBoxLength = 0,\n coachingBoxWidth = 0,\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n teamBenchAreaBorderThickness = 0,\n fieldBorderThickness = 0,\n surroundsTeamBenchArea = true,\n benchShape = \"\",\n}: BenchOpts & {\n featureThickness?: number;\n boundaryLineThickness?: number;\n fieldBorderThickness?: number;\n surroundsTeamBenchArea?: boolean;\n} = {}): Point[] {\n const t = featureThickness;\n const tb = teamBenchAreaBorderThickness;\n const blt = boundaryLineThickness;\n const fbt = fieldBorderThickness;\n if (!surroundsTeamBenchArea) {\n const raX = restrictedAreaLength / 2 + tb;\n const edgeX = fieldLength / 2 + endzoneLength + blt + fbt;\n const edgeY = fieldWidth / 2 + blt + fbt;\n return zip(\n [raX, edgeX, edgeX, raX, raX, edgeX + t, edgeX + t, raX, raX],\n [edgeY, edgeY, -edgeY, -edgeY, -(edgeY + t), -(edgeY + t), edgeY + t, edgeY + t, edgeY],\n );\n }\n const depth = fieldWidth / 2 + blt + restrictedAreaWidth + coachingBoxWidth + teamBenchWidth + tb + fbt;\n const outer = outerCornerX(\n benchShape,\n depth,\n fbt,\n teamBenchLengthFieldSide,\n teamBenchLengthBackSide,\n teamBenchWidth,\n tb,\n );\n const benchX = teamBenchLengthFieldSide / 2 + tb + fbt;\n const coachX = coachingBoxLength / 2 + tb + fbt;\n const raX = restrictedAreaLength / 2 + tb + fbt;\n const edgeX = fieldLength / 2 + endzoneLength + blt + fbt;\n const outerEdgeX = fieldLength / 2 + blt + endzoneLength + fbt + t;\n const benchY = fieldWidth / 2 + blt + restrictedAreaWidth + coachingBoxWidth;\n const coachY = fieldWidth / 2 + blt + restrictedAreaWidth;\n const edgeY = fieldWidth / 2 + blt + fbt;\n const outY = depth + t;\n return zip(\n [\n 0,\n outer,\n benchX,\n coachX,\n raX,\n edgeX,\n edgeX,\n raX,\n coachX,\n benchX,\n outer,\n 0,\n 0,\n outer + t,\n benchX + t,\n coachX + t,\n raX + t,\n outerEdgeX,\n outerEdgeX,\n raX + t,\n coachX + t,\n benchX + t,\n outer + t,\n 0,\n 0,\n ],\n [\n depth,\n depth,\n benchY,\n coachY,\n edgeY,\n edgeY,\n -edgeY,\n -edgeY,\n -coachY,\n -benchY,\n -depth,\n -depth,\n -outY,\n -outY,\n -benchY,\n -coachY,\n -(edgeY + t),\n -(edgeY + t),\n edgeY + t,\n edgeY + t,\n coachY,\n benchY,\n outY,\n outY,\n depth,\n ],\n );\n}\n\nexport const redZoneBorder = ({ featureThickness = 0 }: { featureThickness?: number } = {}): Point[] =>\n createRectangle(0, 20, 0, featureThickness);\n\nexport const redZoneBorderOutline = ({ featureThickness = 0 }: { featureThickness?: number } = {}): Point[] =>\n createRectangle(0, 20, 0, featureThickness);\n\n// Surface lines ---------------------------------------------------------------------------------\n\nexport const goalLine = ({\n fieldWidth = 0,\n featureThickness = 0,\n}: { fieldWidth?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(0, featureThickness, -fieldWidth / 2, fieldWidth / 2);\n\nexport function majorYardLine({\n fieldWidth = 0,\n featureThickness = 0,\n distToSideline = 0,\n crossHashLength = 0,\n crossHashSeparation = 0,\n}: {\n fieldWidth?: number;\n featureThickness?: number;\n distToSideline?: number;\n crossHashLength?: number;\n crossHashSeparation?: number;\n} = {}): Point[] {\n const h = featureThickness / 2;\n const o = featureThickness / 2 + crossHashLength;\n const s = crossHashSeparation / 2;\n const st = crossHashSeparation / 2 + featureThickness;\n const top = fieldWidth / 2 - distToSideline;\n return zip(\n [-h, -h, -o, -o, -h, -h, -o, -o, -h, -h, h, h, o, o, h, h, o, o, h, h, -h],\n [-top, -st, -st, -s, -s, s, s, st, st, top, top, st, st, s, s, -s, -s, -st, -st, -top, -top],\n );\n}\n\nexport const minorYardLine = ({\n yardLineHeight = 0,\n featureThickness = 0,\n}: { yardLineHeight?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-featureThickness / 2, featureThickness / 2, 0, yardLineHeight);\n\nexport const tryMark = ({\n tryMarkWidth = 0,\n featureThickness = 0,\n}: { tryMarkWidth?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-featureThickness / 2, featureThickness / 2, -tryMarkWidth / 2, tryMarkWidth / 2);\n\nexport const coachingBoxLine = ({\n coachingBoxLineLength = 0,\n featureThickness = 0,\n}: { coachingBoxLineLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-coachingBoxLineLength / 2, coachingBoxLineLength / 2, 0, featureThickness);\n\n// Surface features ------------------------------------------------------------------------------\n\nexport const directionalArrow = ({\n arrowBase = 0,\n arrowLength = 0,\n}: { arrowBase?: number; arrowLength?: number } = {}): Point[] =>\n zip([0, arrowLength, 0, 0], [arrowBase / 2, 0, -arrowBase / 2, arrowBase / 2]);\n\nexport const restrictedArea = ({\n restrictedAreaLength = 0,\n featureThickness = 0,\n}: { restrictedAreaLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-restrictedAreaLength / 2, restrictedAreaLength / 2, 0, featureThickness);\n\nexport const coachingBox = ({\n coachingBoxLength = 0,\n featureThickness = 0,\n}: { coachingBoxLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-coachingBoxLength / 2, coachingBoxLength / 2, 0, featureThickness);\n\nexport const teamBenchArea = ({\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n}: {\n teamBenchLengthFieldSide?: number;\n teamBenchLengthBackSide?: number;\n teamBenchWidth?: number;\n} = {}): Point[] =>\n zip(\n [\n -teamBenchLengthFieldSide / 2,\n teamBenchLengthFieldSide / 2,\n teamBenchLengthBackSide / 2,\n -teamBenchLengthBackSide / 2,\n -teamBenchLengthFieldSide / 2,\n ],\n [0, 0, teamBenchWidth, teamBenchWidth, 0],\n );\n\nexport function teamBenchAreaOutline({\n restrictedAreaLength = 0,\n restrictedAreaWidth = 0,\n coachingBoxLength = 0,\n coachingBoxWidth = 0,\n teamBenchLengthFieldSide = 0,\n teamBenchLengthBackSide = 0,\n teamBenchWidth = 0,\n featureThickness = 0,\n}: BenchOpts & { featureThickness?: number } = {}): Point[] {\n const t = featureThickness;\n const [ra, cb, fs, bs] = [\n restrictedAreaLength / 2,\n coachingBoxLength / 2,\n teamBenchLengthFieldSide / 2,\n teamBenchLengthBackSide / 2,\n ];\n const cbY = restrictedAreaWidth + coachingBoxWidth;\n const backY = restrictedAreaWidth + coachingBoxWidth + teamBenchWidth;\n return zip(\n [\n -ra,\n -cb,\n -fs,\n -bs,\n bs,\n fs,\n cb,\n ra,\n ra + t,\n cb + t,\n fs + t,\n bs + t,\n -(bs + t),\n -(fs + t),\n -(cb + t),\n -(ra + t),\n -ra,\n ],\n [\n 0,\n restrictedAreaWidth,\n cbY,\n backY,\n backY,\n cbY,\n restrictedAreaWidth,\n 0,\n 0,\n restrictedAreaWidth,\n cbY,\n backY + t,\n backY + t,\n cbY,\n restrictedAreaWidth,\n 0,\n 0,\n ],\n );\n}\n","import type { Color } from \"../scene.js\";\n\n/**\n * One name per sportyR `football_*` builder (prefix dropped), plus the two yard-number layers `geom_football()`\n * draws itself: `yardage_marker` (TextFeature) and `yardage_marker_box` (its transparent ggplot bounding box).\n */\nexport const FOOTBALL_FEATURES = [\n \"half_field\",\n \"endzone\",\n \"field_apron\",\n \"end_line\",\n \"sideline\",\n \"field_border\",\n \"field_border_outline\",\n \"red_zone_border\",\n \"red_zone_border_outline\",\n \"goal_line\",\n \"major_yard_line\",\n \"minor_yard_line\",\n \"try_mark\",\n \"coaching_box_line\",\n \"directional_arrow\",\n \"restricted_area\",\n \"coaching_box\",\n \"team_bench_area\",\n \"team_bench_area_outline\",\n \"yardage_marker\",\n \"yardage_marker_box\",\n] as const;\nexport type FootballFeature = (typeof FOOTBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_football()` (xlims and ylims share them; 22). */\nexport const FOOTBALL_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalffield\",\n \"offensive_half_field\",\n \"offensive half field\",\n \"defense\",\n \"defence\",\n \"defensivehalffield\",\n \"defensive_half_field\",\n \"defensive half field\",\n \"redzone\",\n \"red_zone\",\n \"red zone\",\n \"oredzone\",\n \"offensive_red_zone\",\n \"offensive red zone\",\n \"dredzone\",\n \"defensive_red_zone\",\n \"defensive red zone\",\n] as const;\nexport type FootballDisplayRange = (typeof FOOTBALL_DISPLAY_RANGES)[number];\n\n/** The 23 argument names of `football_features_set_colors()`, in R's declaration order. */\nexport const FOOTBALL_COLOR_KEYS = [\n \"plot_background\",\n \"field_apron\",\n \"offensive_half\",\n \"defensive_half\",\n \"offensive_endzone\",\n \"defensive_endzone\",\n \"end_line\",\n \"sideline\",\n \"field_border\",\n \"field_border_outline\",\n \"red_zone_border\",\n \"red_zone_border_outline\",\n \"major_yard_line\",\n \"goal_line\",\n \"minor_yard_line\",\n \"directional_arrow\",\n \"try_mark\",\n \"yardage_marker\",\n \"restricted_area\",\n \"coaching_box\",\n \"team_bench_area\",\n \"team_bench_area_outline\",\n \"coaching_box_line\",\n] as const;\nexport type FootballColorKey = (typeof FOOTBALL_COLOR_KEYS)[number];\n\nconst GRASS = \"#196f0c\";\nconst WHITE = \"#ffffff\";\n\n/** Defaults of `football_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const FOOTBALL_DEFAULT_COLORS: Readonly<Record<FootballColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n field_apron: GRASS,\n offensive_half: GRASS,\n defensive_half: GRASS,\n offensive_endzone: GRASS,\n defensive_endzone: GRASS,\n end_line: WHITE,\n sideline: WHITE,\n field_border: GRASS,\n field_border_outline: \"#ffffff00\",\n red_zone_border: \"#196f0c00\",\n red_zone_border_outline: \"#ffffff00\",\n major_yard_line: WHITE,\n goal_line: WHITE,\n minor_yard_line: WHITE,\n directional_arrow: WHITE,\n try_mark: WHITE,\n yardage_marker: WHITE,\n restricted_area: WHITE,\n coaching_box: WHITE,\n team_bench_area: GRASS,\n team_bench_area_outline: WHITE,\n coaching_box_line: \"#ffcb05\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { createRectangle } from \"../shapes.js\";\nimport {\n FOOTBALL_LEAGUES,\n FOOTBALL_SPECS,\n type FootballLeague,\n type FootballParamUpdates,\n type FootballParams,\n} from \"../specs/football.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n addText,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n frame,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { rotateCoords } from \"../transform.js\";\nimport { convertPoints, normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n FOOTBALL_DEFAULT_COLORS,\n FOOTBALL_DISPLAY_RANGES,\n type FootballColorKey,\n type FootballDisplayRange,\n type FootballFeature,\n} from \"./types.js\";\n\nconst ARRAY_FIELDS: readonly (keyof FootballParams)[] = [\n \"additional_minor_yard_lines\",\n \"numbers_bottom\",\n \"numbers_top\",\n];\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/** R `seq(from, to, by)` (and `from:to`) for by > 0; R errors when to < from (custom's zeros), we return []. */\nconst seq = (from: number, to: number, by = 1): number[] =>\n Array.from({ length: Math.max(0, Math.floor((to - from) / by + 1e-10) + 1) }, (_, i) => from + i * by);\n\n/** `display_range` keys with spaces/underscores removed, then R's synonyms folded together. */\ntype RangeGroup = \"full\" | \"inboundsonly\" | \"offense\" | \"defense\" | \"redzone\" | \"dredzone\";\nconst RANGE_SYNONYMS: Readonly<Record<string, RangeGroup>> = {\n offence: \"offense\",\n offensivehalffield: \"offense\",\n defence: \"defense\",\n defensivehalffield: \"defense\",\n oredzone: \"redzone\",\n offensiveredzone: \"redzone\",\n defensiveredzone: \"dredzone\",\n};\n\n/**\n * Port of sportyR `geom_football()`: one PolygonFeature per ggplot polygon layer and one TextFeature per\n * `ggfittext::geom_fit_text` layer, in R's layer order. Divergences: an unknown `displayRange` throws (R falls\n * back to \"full\"); `units` scales the points, anchors and display limits, as sportyR 2.4.0 does (#74);\n * custom's all-zero defaults give empty yard-line sets (R errors in `seq()`).\n */\nexport function footballField(\n league: FootballLeague | (string & {}),\n opts: SurfaceOptions<FootballParamUpdates, FootballColorKey, FootballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(FOOTBALL_LEAGUES, key)) {\n throw new UnknownLeagueError(\n `Unknown football league \"${league}\"; expected one of: ${FOOTBALL_LEAGUES.join(\", \")}`,\n );\n }\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(FOOTBALL_DISPLAY_RANGES, range)) {\n throw new UnknownDisplayRangeError(\n `Unknown football display range \"${opts.displayRange}\"; expected one of: ${FOOTBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n }\n\n const p = mergeParams(FOOTBALL_SPECS[key], opts.updates, ARRAY_FIELDS);\n // Bordered fields get a white border outline by default, before the user's colours (geom-football.R 667, sportyR #67)\n const defaults = p.field_bordered\n ? { ...FOOTBALL_DEFAULT_COLORS, field_border_outline: \"#ffffff\", red_zone_border_outline: \"#ffffff\" }\n : FOOTBALL_DEFAULT_COLORS;\n const colors = mergeColors(defaults, opts.colorUpdates);\n const col = (k: FootballColorKey): Color => colorAt(colors[k], 0);\n arcResolution(opts.arcResolution); // validated for a uniform API; the field draws no arcs\n const from = normalizeUnit(p.field_units || \"ft\"); // custom's \"\" (R's `%or% \"ft\"` only catches NULL)\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n\n const L = p.field_length;\n const W = p.field_width;\n const ez = p.endzone_length;\n const blt = p.boundary_line_thickness;\n const fbt = p.field_border_thickness ?? 0;\n const minor = p.minor_line_thickness;\n const raw = p.restricted_area_width;\n const cbw = p.coaching_box_width;\n const fs = p.team_bench_length_field_side;\n const tbw = p.team_bench_width;\n const tb = p.team_bench_area_border_thickness;\n const benchShape = p.bench_shape ?? \"rectangle\";\n const ntyl = p.number_to_yard_line;\n const nw = p.number_width;\n const nh = p.number_height;\n const stbn = p.sideline_to_bottom_of_numbers;\n const ald = p.arrow_line_dist;\n const myd = p.major_yard_line_distance;\n\n // Yard-line sets (geom-football.R 256-303): minor lines drop multiples of the major distance but keep negatives (CFL extras).\n const majorLines = seq(0, L / 2 - 1, myd);\n const minorLines = [...seq(0, L / 2 - 1), ...(p.additional_minor_yard_lines ?? [])].filter(\n (v) => v % (myd ?? 1) !== 0 || v < 0,\n );\n const arrowLines = seq(1, L / 2).filter((v) => v % ald === 0 && v !== L / 2);\n let markedLines = seq(1, L - 1)\n .filter((v) => v % ald === 0)\n .flatMap((v) => [v - L / 2, v - L / 2]);\n if (!markedLines.includes(0)) markedLines = [0, ...markedLines].sort((a, b) => a - b);\n\n // Yard numbers (R 305-427): an odd-length row centres its middle number on its line (dist_to_line 0).\n const dists = (n: number): number[] => {\n if (n % 2 === 0) return Array<number>(n).fill(ntyl);\n const half = Array<number>(n / 2 - 0.5).fill(ntyl);\n return [...half, 0, ...half];\n };\n const row = (numbers: readonly string[], markerRotation: number, top: boolean) =>\n numbers.length === 0\n ? []\n : frame({\n marking: numbers,\n markerRotation: [markerRotation],\n top: [top],\n line: markedLines,\n dist: dists(numbers.length),\n });\n const marked = [...row(p.numbers_bottom, 0, false), ...row(p.numbers_top, 180, true)];\n const boxes: { marking: string; markerRotation: number; rect: Point[] }[] = [];\n let lineSide: \"left\" | \"center\" | \"right\" = \"left\"; // carries over from the bottom row into the top row, as in R\n for (const m of marked) {\n if (m.dist === 0) lineSide = \"center\";\n let x0: number;\n let x1: number;\n if (lineSide === \"left\") {\n x0 = m.line - ntyl - minor / 2 - nw;\n x1 = m.line - ntyl - minor / 2;\n lineSide = \"right\";\n } else if (lineSide === \"center\") {\n x0 = m.line - nw / 2;\n x1 = m.line + nw / 2;\n lineSide = \"left\";\n } else {\n x0 = m.line + ntyl + minor / 2;\n x1 = m.line + ntyl + minor / 2 + nw;\n lineSide = \"left\";\n }\n const [y0, y1] = m.top\n ? [W / 2 - stbn, W / 2 - stbn - 1.5 * nh]\n : [-W / 2 + stbn, -W / 2 + stbn + 1.5 * nh];\n const rect = createRectangle(x0, x1, y0, y1);\n boxes.push({\n marking: m.marking,\n markerRotation: m.markerRotation,\n rect: conv ? convertPoints(rect, ...conv) : rect,\n });\n }\n\n const features: Feature[] = [];\n const add = (\n name: FootballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n stroke?: Color,\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n { ...(stroke === undefined ? {} : { stroke }), ...(conv ? { units: conv } : {}) },\n );\n\n const bench = {\n restrictedAreaLength: fs,\n restrictedAreaWidth: raw,\n coachingBoxLength: fs,\n coachingBoxWidth: cbw,\n teamBenchLengthFieldSide: fs,\n teamBenchLengthBackSide: p.team_bench_length_back_side,\n teamBenchWidth: tbw,\n teamBenchAreaBorderThickness: tb,\n };\n const border = {\n ...bench,\n fieldLength: L,\n fieldWidth: W,\n endzoneLength: ez,\n boundaryLineThickness: blt,\n surroundsTeamBenchArea: p.field_border_behind_bench ?? true,\n benchShape,\n };\n const sideY = W / 2 + blt;\n const halfField = F.halfField({ fieldLength: L, fieldWidth: W });\n const endzone = F.endzone({ fieldWidth: W, endzoneLength: ez });\n const minorLine = F.minorYardLine({ yardLineHeight: p.minor_yard_line_height, featureThickness: minor });\n\n // Layers, in R's add_feature order (R 675-1078); every call R makes with an outline passes it.\n add(\n \"field_apron\",\n F.fieldApron({\n ...border,\n boundaryThickness: blt,\n fieldBorderThickness: fbt,\n extraApronPadding: p.extra_apron_padding,\n }),\n col(\"field_apron\"),\n 0,\n 0,\n true,\n false,\n col(\"field_apron\"),\n );\n add(\n \"field_border\",\n F.fieldBorder({ ...border, featureThickness: fbt }),\n col(\"field_border\"),\n 0,\n 0,\n true,\n false,\n col(\"field_border\"),\n );\n add(\n \"field_border_outline\",\n F.fieldBorderOutline({ ...border, featureThickness: minor, fieldBorderThickness: fbt }),\n col(\"field_border_outline\"),\n 0,\n 0,\n true,\n false,\n col(\"field_border_outline\"),\n );\n add(\"half_field\", halfField, col(\"defensive_half\"), -0.25 * L, 0, false, false);\n add(\"half_field\", halfField, col(\"offensive_half\"), 0.25 * L, 0, false, false);\n add(\n \"restricted_area\",\n F.restrictedArea({ restrictedAreaLength: fs, featureThickness: raw }),\n col(\"restricted_area\"),\n 0,\n sideY,\n false,\n true,\n col(\"restricted_area\"),\n );\n add(\n \"coaching_box\",\n F.coachingBox({ coachingBoxLength: fs, featureThickness: cbw }),\n col(\"coaching_box\"),\n 0,\n sideY + raw,\n false,\n true,\n col(\"coaching_box\"),\n );\n add(\n \"team_bench_area\",\n F.teamBenchArea(bench),\n col(\"team_bench_area\"),\n 0,\n sideY + raw + cbw,\n false,\n true,\n col(\"team_bench_area\"),\n );\n add(\n \"coaching_box_line\",\n F.coachingBoxLine({ coachingBoxLineLength: fs, featureThickness: minor }),\n col(\"coaching_box_line\"),\n 0,\n sideY + raw + cbw,\n false,\n true,\n col(\"coaching_box_line\"),\n );\n add(\n \"team_bench_area_outline\",\n F.teamBenchAreaOutline({ ...bench, featureThickness: tb }),\n col(\"team_bench_area_outline\"),\n 0,\n sideY,\n false,\n true,\n col(\"team_bench_area_outline\"),\n );\n add(\n \"red_zone_border\",\n F.redZoneBorder({ featureThickness: fbt }),\n col(\"red_zone_border\"),\n L / 2 - 20,\n sideY,\n true,\n true,\n col(\"red_zone_border\"),\n );\n add(\n \"red_zone_border_outline\",\n F.redZoneBorderOutline({ featureThickness: minor }),\n col(\"red_zone_border_outline\"),\n L / 2 - 20,\n sideY + fbt,\n true,\n true,\n col(\"red_zone_border_outline\"),\n );\n add(\n \"sideline\",\n F.sideline({ featureThickness: blt, fieldLength: L, endzoneLength: ez }),\n col(\"sideline\"),\n 0,\n W / 2,\n false,\n true,\n col(\"sideline\"),\n );\n add(\n \"end_line\",\n F.endLine({ featureThickness: blt, fieldWidth: W }),\n col(\"end_line\"),\n L / 2 + ez,\n 0,\n true,\n false,\n col(\"end_line\"),\n );\n add(\"endzone\", endzone, col(\"defensive_endzone\"), -(L / 2) - ez / 2, 0, false, false);\n add(\"endzone\", endzone, col(\"offensive_endzone\"), L / 2 + ez / 2, 0, false, false);\n const majorLine = F.majorYardLine({\n fieldWidth: W,\n featureThickness: minor,\n distToSideline: p.sideline_to_major_yard_line,\n crossHashLength: p.inbound_cross_hashmark_length,\n crossHashSeparation: p.inbound_cross_hashmark_separation,\n });\n for (const yl of majorLines) add(\"major_yard_line\", majorLine, col(\"major_yard_line\"), yl, 0, true, false);\n const outerY = W / 2 - p.sideline_to_outer_yard_line - p.minor_yard_line_height;\n for (const yl of minorLines)\n add(\"minor_yard_line\", minorLine, col(\"minor_yard_line\"), L / 2 - yl, outerY, true, true);\n for (const yl of minorLines)\n add(\n \"minor_yard_line\",\n minorLine,\n col(\"minor_yard_line\"),\n L / 2 - yl,\n p.inbound_hashmark_separation / 2,\n true,\n true,\n );\n add(\n \"goal_line\",\n F.goalLine({ fieldWidth: W, featureThickness: p.goal_line_thickness }),\n col(\"goal_line\"),\n L / 2,\n 0,\n true,\n false,\n );\n add(\n \"try_mark\",\n F.tryMark({ tryMarkWidth: p.try_mark_width ?? 0, featureThickness: minor }),\n col(\"try_mark\"),\n L / 2 - (p.try_mark_distance ?? 0),\n 0,\n true,\n false,\n );\n // Yard numbers (R 1007-1057): R places them directly — shift, rotate, take the bounding box — then draws that\n // box as a transparent polygon (shifted once, sportyR #76) and fits the label into the same box.\n for (const b of boxes) {\n const placed = rotateCoords(\n b.rect.map(([x, y]): Point => [x + xTrans, y + yTrans]),\n rotation,\n );\n const xs = placed.map((q) => q[0]);\n const ys = placed.map((q) => q[1]);\n const [bx0, bx1, by0, by1] = [Math.min(...xs), Math.max(...xs), Math.min(...ys), Math.max(...ys)];\n addFeature(features, \"yardage_marker_box\", createRectangle(bx0, bx1, by0, by1), \"#ffffff00\", {\n xAnchor: 0,\n yAnchor: 0,\n });\n const [[ux0, uy0], , [ux1, uy1]] = b.rect as [Point, Point, Point];\n addText(features, \"yardage_marker\", {\n fill: col(\"yardage_marker\"),\n x: (bx0 + bx1) / 2,\n y: (by0 + by1) / 2,\n text: b.marking,\n fontFamily: p.number_font,\n // R's box before rotation: number_width × 1.5·number_height (ggfittext grow + fullheight fills it)\n fitBox: [Math.abs(ux1 - ux0), Math.abs(uy1 - uy0)],\n rotation: rotation + b.markerRotation,\n });\n }\n const arrow = F.directionalArrow({ arrowBase: p.arrow_base, arrowLength: p.arrow_length });\n const arrowY = W / 2 - stbn - nh + p.top_number_to_arrow;\n for (const al of arrowLines)\n add(\n \"directional_arrow\",\n arrow,\n col(\"directional_arrow\"),\n L / 2 - al + p.yard_line_to_arrow,\n arrowY,\n true,\n true,\n );\n\n // Display range (R 1080-1303), in the spec's units; then converted, translated, rotated.\n const pad = p.extra_apron_padding ?? 5;\n const hfl = L / 2 + ez + blt + fbt + minor + pad;\n const hfw = W / 2 + blt + raw + cbw + tbw + fbt + tb + minor + pad;\n const fullY = [-hfw, hfw] as const;\n const ranges: Record<RangeGroup, readonly [readonly [number, number], readonly [number, number]]> = {\n full: [[-hfl, hfl], fullY],\n inboundsonly: [\n [-(L / 2 + ez + blt), L / 2 + ez + blt],\n [-(W / 2 + blt), W / 2 + blt],\n ],\n offense: [[0, hfl], fullY],\n defense: [[-hfl, 0], fullY],\n redzone: [[L / 2 - 20, hfl], fullY],\n dredzone: [[-hfl, -(L / 2) + 20], fullY],\n };\n const squashed = range.replace(/[ _]/g, \"\");\n const [rx, ry] = ranges[RANGE_SYNONYMS[squashed] ?? (squashed as RangeGroup)];\n const [cx, cy] = convertLimits(rx, ry, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n\n // R: plot_background NULL = none; our transparent default stands in for NULL.\n const background = col(\"plot_background\");\n return {\n sport: \"football\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle } from \"../shapes.js\";\nimport { reflectCoords } from \"../transform.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). */\ntype Arc = { npoints?: number | undefined };\n\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\n/** R `data.frame(x = c(...), y = c(...))`. */\nconst zip = (xs: readonly number[], ys: readonly number[]): Point[] =>\n xs.map((x, i): Point => [x, ys[i] ?? 0]);\n\ntype ZoneOpts = {\n rinkLength?: number;\n rinkWidth?: number;\n featureRadius?: number;\n nzoneLength?: number;\n} & Arc;\n\n// Surface base features -------------------------------------------------------------------------\n\nexport function defensiveZone({\n rinkLength = 0,\n rinkWidth = 0,\n featureRadius = 0,\n nzoneLength = 0,\n npoints,\n}: ZoneOpts = {}): Point[] {\n const halfLength = rinkLength / 2;\n const halfWidth = rinkWidth / 2;\n const cx = halfLength - featureRadius;\n const cy = halfWidth - featureRadius;\n return [\n [-nzoneLength / 2, halfWidth],\n ...circle({ center: [-cx, cy], start: 0.5, end: 1, r: featureRadius, npoints }),\n [-halfLength, 0],\n ...circle({ center: [-cx, -cy], start: 1, end: 1.5, r: featureRadius, npoints }),\n [-nzoneLength / 2, -halfWidth],\n [-nzoneLength / 2, halfWidth],\n ];\n}\n\nexport function neutralZone({\n rinkWidth = 0,\n featureThickness = 0,\n}: { rinkWidth?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(-featureThickness / 2, featureThickness / 2, -rinkWidth / 2, rinkWidth / 2);\n}\n\nexport function offensiveZone({\n rinkLength = 0,\n rinkWidth = 0,\n featureRadius = 0,\n nzoneLength = 0,\n npoints,\n}: ZoneOpts = {}): Point[] {\n const halfLength = rinkLength / 2;\n const halfWidth = rinkWidth / 2;\n const cx = halfLength - featureRadius;\n const cy = halfWidth - featureRadius;\n return [\n [nzoneLength / 2, halfWidth],\n ...circle({ center: [cx, cy], start: 0.5, end: 0, r: featureRadius, npoints }),\n [halfLength, 0],\n ...circle({ center: [cx, -cy], start: 0, end: -0.5, r: featureRadius, npoints }),\n [nzoneLength / 2, -halfWidth],\n [nzoneLength / 2, halfWidth],\n ];\n}\n\n// Surface boundaries ----------------------------------------------------------------------------\n\nexport function boards({\n rinkLength = 0,\n rinkWidth = 0,\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: {\n rinkLength?: number;\n rinkWidth?: number;\n featureRadius?: number;\n featureThickness?: number;\n} & Arc = {}): Point[] {\n const halfLength = rinkLength / 2;\n const halfWidth = rinkWidth / 2;\n const cx = halfLength - featureRadius;\n const cy = halfWidth - featureRadius;\n const outer = featureRadius + featureThickness;\n return [\n [0, halfWidth],\n ...circle({ center: [cx, cy], start: 0.5, end: 0, r: featureRadius, npoints }),\n [halfLength, 0],\n ...circle({ center: [cx, -cy], start: 0, end: -0.5, r: featureRadius, npoints }),\n [0, -halfWidth],\n [0, -halfWidth - featureThickness],\n ...circle({ center: [cx, -cy], start: -0.5, end: 0, r: outer, npoints }),\n [halfLength + featureThickness, 0],\n ...circle({ center: [cx, cy], start: 0, end: 0.5, r: outer, npoints }),\n [0, halfWidth + featureThickness],\n [0, halfWidth],\n ];\n}\n\n// Surface lines ---------------------------------------------------------------------------------\n\nexport function centerLine({\n featureThickness = 0,\n rinkWidth = 0,\n centerFaceoffSpotGap = 0,\n}: { featureThickness?: number; rinkWidth?: number; centerFaceoffSpotGap?: number } = {}): Point[] {\n return createRectangle(\n -featureThickness / 2,\n featureThickness / 2,\n centerFaceoffSpotGap / 2,\n rinkWidth / 2,\n );\n}\n\nexport function refereeCrease({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n return [\n [featureRadius, 0],\n ...circle({ center: [0, 0], start: 0, end: 1, r: featureRadius, npoints }),\n [-featureRadius, 0],\n [-featureRadius + featureThickness, 0],\n ...circle({ center: [0, 0], start: 1, end: 0, r: featureRadius - featureThickness, npoints }),\n [featureRadius, 0],\n ];\n}\n\nexport function zoneLine({\n rinkWidth = 0,\n featureThickness = 0,\n}: { rinkWidth?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(0, featureThickness, -rinkWidth / 2, rinkWidth / 2);\n}\n\n/** Absolute value of `xAnchor` forces the right-hand (TV) side, as in R; the shape is re-anchored at x = 0. */\nexport function goalLine({\n rinkLength = 0,\n rinkWidth = 0,\n featureRadius = 0,\n featureThickness = 0,\n xAnchor = 0,\n npoints,\n}: {\n rinkLength?: number;\n rinkWidth?: number;\n featureRadius?: number;\n featureThickness?: number;\n xAnchor?: number;\n} & Arc = {}): Point[] {\n const halfLength = rinkLength / 2;\n const halfWidth = rinkWidth / 2;\n const cx = halfLength - featureRadius;\n const cy = halfWidth - featureRadius;\n const maxX = Math.abs(xAnchor) + featureThickness / 2;\n if (maxX <= cx) {\n return createRectangle(-featureThickness / 2, featureThickness / 2, -halfWidth, halfWidth);\n }\n const baseX = Math.abs(xAnchor) - cx;\n const startX = baseX - featureThickness / 2;\n const endX = baseX + featureThickness / 2;\n // R quirk kept: no guard on asin(), so |x| > r yields NaN points just as R does.\n const thetaStart = Math.asin(startX / featureRadius) / Math.PI;\n const thetaEnd = Math.asin(endX / featureRadius) / Math.PI;\n return [\n ...circle({ center: [cx, cy], start: 0.5 - thetaStart, end: 0.5 - thetaEnd, r: featureRadius, npoints }),\n ...circle({\n center: [cx, -cy],\n start: -0.5 + thetaEnd,\n end: -0.5 + thetaStart,\n r: featureRadius,\n npoints,\n }),\n ].map(([x, y]): Point => [x - Math.abs(xAnchor), y]);\n}\n\nexport function goaltendersRestrictedArea({\n rinkLength = 0,\n featureThickness = 0,\n shortBaseWidth = 0,\n longBaseWidth = 0,\n xAnchor = 0,\n}: {\n rinkLength?: number;\n featureThickness?: number;\n shortBaseWidth?: number;\n longBaseWidth?: number;\n xAnchor?: number;\n} = {}): Point[] {\n const hs = shortBaseWidth / 2;\n const hl = longBaseWidth / 2;\n const ax = Math.abs(xAnchor);\n const t = featureThickness;\n const xs = [\n ax,\n rinkLength / 2,\n rinkLength / 2,\n ax - t / 2,\n ax - t / 2,\n rinkLength / 2,\n rinkLength / 2,\n ax,\n ax,\n ];\n const ys = [hs, hl, hl - t, hs - t, -hs + t, -hl + t, -hl, -hs, hs];\n return zip(\n xs.map((x) => x - ax),\n ys,\n );\n}\n\nexport function odzoneFaceoffLines({\n featureThickness = 0,\n faceoffLineDistX = 0,\n faceoffLineDistY = 0,\n faceoffLineLength = 0,\n faceoffLineWidth = 0,\n}: {\n featureThickness?: number;\n faceoffLineDistX?: number;\n faceoffLineDistY?: number;\n faceoffLineLength?: number;\n faceoffLineWidth?: number;\n} = {}): Point[] {\n const dx = faceoffLineDistX;\n const dy = faceoffLineDistY;\n const t = featureThickness;\n const half = zip(\n [dx, dx + faceoffLineLength, dx + faceoffLineLength, dx + t, dx + t, dx, dx],\n [dy, dy, dy + t, dy + t, dy + faceoffLineWidth, dy + faceoffLineWidth, dy],\n );\n return [...half, ...reflectCoords(half, { overX: true, overY: false })];\n}\n\n// Surface features ------------------------------------------------------------------------------\n\nexport function centerFaceoffSpot({\n featureRadius = 0,\n npoints,\n}: { featureRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n}\n\ntype CreaseOpts = {\n featureRadius?: number;\n featureThickness?: number;\n creaseStyle?: string;\n creaseLength?: number;\n creaseWidth?: number;\n notchDistX?: number;\n notchWidth?: number;\n} & Arc;\n\n/** R: theta = acos(half_width / r) / pi, or 0 when r is 0 or |half_width / r| > 1. */\nconst creaseTheta = (featureRadius: number, halfCreaseWidth: number): number =>\n featureRadius === 0 || Math.abs(halfCreaseWidth / featureRadius) > 1\n ? 0\n : Math.acos(halfCreaseWidth / featureRadius) / Math.PI;\n\n/** Styles `nhl98` / `ushl1` / `nhl92` (case-insensitive); any other style is R's switch default, a single (0, 0) point. */\nexport function goalCreaseOutline({\n featureRadius = 0,\n featureThickness = 0,\n creaseStyle = \"\",\n creaseLength = 0,\n creaseWidth = 0,\n notchDistX = 0,\n notchWidth = 0,\n npoints,\n}: CreaseOpts = {}): Point[] {\n const hw = creaseWidth / 2;\n const theta = creaseTheta(featureRadius, hw);\n const t = featureThickness;\n const nx = notchDistX;\n const r = featureRadius;\n const ri = featureRadius - featureThickness;\n const arc = (start: number, end: number, rr: number): Point[] =>\n circle({ center: [0, 0], start, end, r: rr, npoints });\n switch (creaseStyle.toLowerCase()) {\n case \"nhl98\":\n return [\n ...zip([0, -creaseLength], [hw, hw]),\n ...arc(0.5 + theta, 1.5 - theta, r),\n ...zip(\n [-creaseLength, 0, 0, -nx, -nx, -(nx + t), -(nx + t), -creaseLength],\n [-hw, -hw, -hw + t, -hw + t, -hw + t + notchWidth, -hw + t + notchWidth, -hw + t, -hw + t],\n ),\n ...arc(1.5 - theta, 0.5 + theta, ri),\n ...zip(\n [-creaseLength, -(nx + t), -(nx + t), -nx, -nx, 0, 0],\n [hw - t, hw - t, hw - t - notchWidth, hw - t - notchWidth, hw - t, hw - t, hw],\n ),\n ];\n case \"ushl1\":\n return [\n ...arc(0.5, 1.5, r),\n ...arc(1.5, 1.5 - theta, ri),\n ...zip(\n [-nx - t, 0, 0, -nx, -nx, -nx - t, -nx - t],\n [-hw, -hw, -hw + t, -hw + t, -hw + t + notchWidth, -hw + t + notchWidth, -hw],\n ),\n ...arc(1.5 - theta, 0.5 + theta, ri),\n ...zip(\n [-nx - t, -nx - t, -nx, -nx, 0, 0, -nx - t],\n [hw, hw - t - notchWidth, hw - t - notchWidth, hw - t, hw - t, hw, hw],\n ),\n ...arc(0.5 + theta, 0.5, ri),\n ...zip([0, 0], [r - t, r]),\n ];\n case \"nhl92\":\n return [\n ...arc(0.5, 1.5, r),\n ...arc(1.5, 1.5 - theta, ri),\n ...zip(\n [-nx, -nx + notchWidth, -nx + notchWidth, -nx, -nx, -nx - t, -nx - t, -nx],\n [-hw, -hw, -hw + t, -hw + t, -hw + t + notchWidth, -hw + t + notchWidth, -hw, -hw],\n ),\n ...arc(1.5 - theta, 0.5 + theta, ri),\n ...zip(\n [-nx, -nx + notchWidth, -nx + notchWidth, -nx, -nx, -nx - t, -nx - t, -nx],\n [hw, hw, hw - t, hw - t, hw - t - notchWidth, hw - t - notchWidth, hw, hw],\n ),\n ...arc(0.5 + theta, 0.5, ri),\n ...zip([0, 0], [r - t, r]),\n ];\n default:\n return [[0, 0]];\n }\n}\n\n/** Same style switch as `goalCreaseOutline`; `creaseLength` is used by `ushl1` only. */\nexport function goalCreaseFill({\n featureRadius = 0,\n featureThickness = 0,\n creaseStyle = \"\",\n creaseLength = 0,\n creaseWidth = 0,\n notchDistX = 0,\n notchWidth = 0,\n npoints,\n}: CreaseOpts = {}): Point[] {\n const hw = creaseWidth / 2;\n const theta = creaseTheta(featureRadius, hw);\n const t = featureThickness;\n const nx = notchDistX;\n const ri = featureRadius - featureThickness;\n const arc = (start: number, end: number): Point[] => circle({ center: [0, 0], start, end, r: ri, npoints });\n switch (creaseStyle.toLowerCase()) {\n case \"nhl98\":\n return [\n ...zip(\n [0, -nx, -nx, -(nx + t), -(nx + t)],\n [hw - t, hw - t, hw - t - notchWidth, hw - t - notchWidth, hw - t],\n ),\n ...arc(0.5 + theta, 1.5 - theta),\n ...zip(\n [-(nx + t), -(nx + t), -nx, -nx, 0, 0],\n [-hw + t, -hw + t + notchWidth, -hw + t + notchWidth, -hw + t, -hw + t, hw - t],\n ),\n ];\n case \"ushl1\":\n return [\n ...zip([0, -creaseLength], [hw, hw]),\n ...arc(0.5 + theta, 1.5 - theta),\n ...zip([-creaseLength, 0], [-hw, -hw]),\n ];\n case \"nhl92\":\n return arc(0.5, 1.5);\n default:\n return [[0, 0]];\n }\n}\n\nexport function centerFaceoffCircle({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r: featureRadius, npoints }),\n [0, -featureRadius],\n [0, -featureRadius - featureThickness],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: featureRadius - featureThickness, npoints }),\n ];\n}\n\nexport function odzoneFaceoffCircle({\n featureRadius = 0,\n featureThickness = 0,\n hashmarkWidth = 0,\n hashmarkExtSpacing = 0,\n npoints,\n}: {\n featureRadius?: number;\n featureThickness?: number;\n hashmarkWidth?: number;\n hashmarkExtSpacing?: number;\n} & Arc = {}): Point[] {\n const ext = hashmarkExtSpacing / 2;\n const int = ext - featureThickness;\n const guard = featureRadius === 0 || Math.abs(ext / featureRadius) > 1;\n const theta1 = guard ? 0 : Math.asin(ext / featureRadius) / Math.PI;\n const theta2 = guard ? 0 : Math.asin(int / featureRadius) / Math.PI;\n const r = featureRadius;\n const arc = (start: number, end: number, rr: number): Point[] =>\n circle({ center: [0, 0], start, end, r: rr, npoints });\n const half: Point[] = [\n [0, r],\n ...arc(0.5, 0.5 + theta2, r),\n [-int, r + hashmarkWidth],\n [-ext, r + hashmarkWidth],\n ...arc(0.5 + theta1, 1.5 - theta1, r),\n [-ext, -r - hashmarkWidth],\n [-int, -r - hashmarkWidth],\n ...arc(1.5 - theta2, 1.5, r),\n [0, -r + featureThickness],\n ...arc(1.5, 0.5, r - featureThickness),\n [0, r],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })];\n}\n\nexport function nodzoneFaceoffSpotRing({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n const half: Point[] = [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r: featureRadius, npoints }),\n [0, -featureRadius + featureThickness],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: featureRadius - featureThickness, npoints }),\n [0, featureRadius - featureThickness],\n [0, featureRadius],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })];\n}\n\nexport function nodzoneFaceoffSpotStripe({\n featureRadius = 0,\n featureThickness = 0,\n gapWidth = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number; gapWidth?: number } & Arc = {}): Point[] {\n const inner = featureRadius - featureThickness;\n const stripe = inner - gapWidth;\n const theta = featureRadius === 0 || Math.abs(stripe / inner) > 1 ? 0 : Math.asin(stripe / inner) / Math.PI;\n return [\n ...circle({ center: [0, 0], start: 0.5 - theta, end: 0.5 + theta, r: inner, npoints }),\n ...circle({ center: [0, 0], start: 1.5 - theta, end: 1.5 + theta, r: inner, npoints }),\n ];\n}\n\ntype GoalOpts = {\n featureRadius?: number;\n goalMouthWidth?: number;\n goalBackWidth?: number;\n goalDepth?: number;\n goalPostDiameter?: number;\n} & Arc;\n\nexport function goalFrame({\n featureRadius = 0,\n goalMouthWidth = 0,\n goalBackWidth = 0,\n goalDepth = 0,\n goalPostDiameter = 0,\n npoints,\n}: GoalOpts = {}): Point[] {\n const hm = goalMouthWidth / 2;\n const cx = goalDepth - featureRadius - goalPostDiameter;\n const cy = goalBackWidth / 2 - featureRadius + goalPostDiameter / 2;\n const ri = featureRadius - goalPostDiameter;\n return [\n [0, hm + goalPostDiameter],\n ...circle({ center: [cx, cy], start: 0.65, end: 0, r: featureRadius, npoints }),\n ...circle({ center: [cx, -cy], start: 0, end: -0.65, r: featureRadius, npoints }),\n [0, -(hm + goalPostDiameter)],\n [0, -hm],\n ...circle({ center: [cx, -cy], start: -0.65, end: 0, r: ri, npoints }),\n ...circle({ center: [cx, cy], start: 0, end: 0.65, r: ri, npoints }),\n [0, hm],\n [0, hm + goalPostDiameter],\n ];\n}\n\nexport function goalFrameFill({\n featureRadius = 0,\n goalMouthWidth = 0,\n goalBackWidth = 0,\n goalDepth = 0,\n goalPostDiameter = 0,\n npoints,\n}: GoalOpts = {}): Point[] {\n const hm = goalMouthWidth / 2;\n const cx = goalDepth - featureRadius - goalPostDiameter;\n const cy = goalBackWidth / 2 - featureRadius + goalPostDiameter / 2;\n const ri = featureRadius - goalPostDiameter;\n return [\n [0, -hm],\n ...circle({ center: [cx, -cy], start: -0.65, end: 0, r: ri, npoints }),\n ...circle({ center: [cx, cy], start: 0, end: 0.65, r: ri, npoints }),\n [0, hm],\n ];\n}\n\ntype BoxOpts = { featureThickness?: number; benchLength?: number; benchDepth?: number };\n\nexport function playerBenchOutline({\n featureThickness = 0,\n benchLength = 0,\n benchDepth = 0,\n}: BoxOpts = {}): Point[] {\n const t = featureThickness;\n return zip(\n [-t, -t, benchLength + t, benchLength + t, benchLength, benchLength, 0, 0, t],\n [t, 2 * t + benchDepth, 2 * t + benchDepth, t, t, t + benchDepth, t + benchDepth, t, t],\n );\n}\n\nexport function playerBenchAreaFill({\n featureThickness = 0,\n benchLength = 0,\n benchDepth = 0,\n}: BoxOpts = {}): Point[] {\n return createRectangle(-benchLength / 2, benchLength / 2, featureThickness, featureThickness + benchDepth);\n}\n\nexport function penaltyBoxOutline({\n featureThickness = 0,\n penaltyBoxLength = 0,\n penaltyBoxSeparation = 0,\n penaltyBoxDepth = 0,\n}: {\n featureThickness?: number;\n penaltyBoxLength?: number;\n penaltyBoxSeparation?: number;\n penaltyBoxDepth?: number;\n} = {}): Point[] {\n const t = featureThickness;\n const s = penaltyBoxSeparation / 2;\n const d = penaltyBoxDepth;\n return zip(\n [\n 0,\n s + penaltyBoxLength + t,\n s + penaltyBoxLength + t,\n s + penaltyBoxLength,\n s + penaltyBoxLength,\n s + t,\n s + t,\n s,\n s,\n 0,\n 0,\n ],\n [-(2 * t + d), -(2 * t + d), -t, -t, -(t + d), -(t + d), -t, -t, -(t + d), -(t + d), -(2 * t + d)],\n );\n}\n\n/** R quirk kept: y_min > y_max, so the rectangle is traced clockwise. */\nexport function penaltyBoxFill({\n featureThickness = 0,\n penaltyBoxLength = 0,\n penaltyBoxDepth = 0,\n}: { featureThickness?: number; penaltyBoxLength?: number; penaltyBoxDepth?: number } = {}): Point[] {\n return createRectangle(\n -penaltyBoxLength / 2,\n penaltyBoxLength / 2,\n -featureThickness,\n -(featureThickness + penaltyBoxDepth),\n );\n}\n\nexport function offIceOfficialsBox({\n featureThickness = 0,\n officialsBoxLength = 0,\n officialsBoxDepth = 0,\n}: { featureThickness?: number; officialsBoxLength?: number; officialsBoxDepth?: number } = {}): Point[] {\n return createRectangle(\n -officialsBoxLength / 2,\n officialsBoxLength / 2,\n -featureThickness,\n -(featureThickness + officialsBoxDepth),\n );\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `hockey_*` builder (prefix dropped), as used in `PolygonFeature.name`. */\nexport const HOCKEY_FEATURES = [\n \"defensive_zone\",\n \"neutral_zone\",\n \"offensive_zone\",\n \"boards\",\n \"center_line\",\n \"referee_crease\",\n \"zone_line\",\n \"goal_line\",\n \"goaltenders_restricted_area\",\n \"odzone_faceoff_lines\",\n \"center_faceoff_spot\",\n \"goal_crease_outline\",\n \"goal_crease_fill\",\n \"center_faceoff_circle\",\n \"odzone_faceoff_circle\",\n \"nodzone_faceoff_spot_ring\",\n \"nodzone_faceoff_spot_stripe\",\n \"goal_frame\",\n \"goal_frame_fill\",\n \"player_bench_outline\",\n \"player_bench_area_fill\",\n \"penalty_box_outline\",\n \"penalty_box_fill\",\n \"off_ice_officials_box\",\n] as const;\nexport type HockeyFeature = (typeof HOCKEY_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_hockey()` (xlims and ylims share them; 21). */\nexport const HOCKEY_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"defense\",\n \"defence\",\n \"nzone\",\n \"neutral\",\n \"neutral_zone\",\n \"neutral zone\",\n \"ozone\",\n \"offensive_zone\",\n \"offensive zone\",\n \"attacking_zone\",\n \"attacking zone\",\n \"dzone\",\n \"defensive_zone\",\n \"defensive zone\",\n \"defending_zone\",\n \"defending zone\",\n] as const;\nexport type HockeyDisplayRange = (typeof HOCKEY_DISPLAY_RANGES)[number];\n\nconst RED = \"#c8102e\";\nconst BLUE = \"#0033a0\";\nconst ICE = \"#ffffff\";\n\n/** The 25 argument names of `hockey_features_set_colors()`, in R's declaration order. */\nexport const HOCKEY_COLOR_KEYS = [\n \"plot_background\",\n \"boards\",\n \"ozone_ice\",\n \"nzone_ice\",\n \"dzone_ice\",\n \"center_line\",\n \"zone_line\",\n \"goal_line\",\n \"restricted_trapezoid\",\n \"goal_crease_outline\",\n \"goal_crease_fill\",\n \"referee_crease\",\n \"center_faceoff_spot\",\n \"faceoff_spot_ring\",\n \"faceoff_spot_stripe\",\n \"center_faceoff_circle\",\n \"odzone_faceoff_circle\",\n \"faceoff_line\",\n \"goal_frame\",\n \"goal_fill\",\n \"team_a_bench\",\n \"team_b_bench\",\n \"team_a_penalty_box\",\n \"team_b_penalty_box\",\n \"off_ice_officials_box\",\n] as const;\nexport type HockeyColorKey = (typeof HOCKEY_COLOR_KEYS)[number];\n\n/** Defaults of `hockey_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const HOCKEY_DEFAULT_COLORS: Readonly<Record<HockeyColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n boards: \"#000000\",\n ozone_ice: ICE,\n nzone_ice: ICE,\n dzone_ice: ICE,\n center_line: RED,\n zone_line: BLUE,\n goal_line: RED,\n restricted_trapezoid: RED,\n goal_crease_outline: RED,\n goal_crease_fill: \"#41b6e6\",\n referee_crease: RED,\n center_faceoff_spot: BLUE,\n faceoff_spot_ring: RED,\n faceoff_spot_stripe: RED,\n center_faceoff_circle: BLUE,\n odzone_faceoff_circle: RED,\n faceoff_line: RED,\n goal_frame: RED,\n goal_fill: \"#a5acaf4d\",\n team_a_bench: ICE,\n team_b_bench: ICE,\n team_a_penalty_box: ICE,\n team_b_penalty_box: ICE,\n off_ice_officials_box: \"#a5acaf\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { HOCKEY_LEAGUES, HOCKEY_SPECS, type HockeyLeague, type HockeyParamUpdates } from \"../specs/hockey.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { convertUnits, normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n HOCKEY_DEFAULT_COLORS,\n HOCKEY_DISPLAY_RANGES,\n type HockeyColorKey,\n type HockeyDisplayRange,\n type HockeyFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/** `display_range` keys with spaces/underscores removed, then R's synonyms folded together. */\ntype RangeGroup = \"full\" | \"inboundsonly\" | \"offense\" | \"defense\" | \"nzone\" | \"ozone\" | \"dzone\";\nconst RANGE_SYNONYMS: Readonly<Record<string, RangeGroup>> = {\n offence: \"offense\",\n defence: \"defense\",\n neutral: \"nzone\",\n neutralzone: \"nzone\",\n offensivezone: \"ozone\",\n attackingzone: \"ozone\",\n defensivezone: \"dzone\",\n defendingzone: \"dzone\",\n};\n\n/**\n * Port of sportyR `geom_hockey()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` scales the points, anchors and display limits, as sportyR 2.4.0 does (#74).\n */\nexport function hockeyRink(\n league: HockeyLeague | (string & {}),\n opts: SurfaceOptions<HockeyParamUpdates, HockeyColorKey, HockeyDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(HOCKEY_LEAGUES, key)) {\n throw new UnknownLeagueError(\n `Unknown hockey league \"${league}\"; expected one of: ${HOCKEY_LEAGUES.join(\", \")}`,\n );\n }\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(HOCKEY_DISPLAY_RANGES, range)) {\n throw new UnknownDisplayRangeError(\n `Unknown hockey display range \"${opts.displayRange}\"; expected one of: ${HOCKEY_DISPLAY_RANGES.join(\", \")}`,\n );\n }\n\n // Every hockey param is a scalar: no array fields, so no multi-instance tables (unlike basketball).\n const p = mergeParams(HOCKEY_SPECS[key], opts.updates, []);\n const colors = mergeColors(HOCKEY_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: HockeyColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.rink_units || \"ft\"); // custom's \"\" (R would error converting from \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const hint = (ft: number): number => convertUnits(ft, \"ft\", units);\n\n const L = p.rink_length;\n const W = p.rink_width;\n const bt = p.board_thickness;\n const minor = p.minor_line_thickness;\n const major = p.major_line_thickness;\n const goalX = L / 2 - p.goal_line_to_boards;\n const odzoneX = L / 2 - p.odzone_faceoff_spot_to_boards;\n const nzoneSpotX = p.nzone_length / 2 - p.nzone_faceoff_spot_to_zone_line;\n const spotY = p.noncenter_faceoff_spot_y;\n\n const features: Feature[] = [];\n const add = (\n name: HockeyFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { height?: number } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n\n const zone = {\n rinkLength: L,\n rinkWidth: W,\n featureRadius: p.corner_radius,\n nzoneLength: p.nzone_length,\n npoints,\n };\n const crease = {\n featureRadius: p.goal_crease_radius,\n featureThickness: minor,\n creaseStyle: p.goal_crease_style ?? \"\",\n creaseLength: p.goal_crease_length,\n creaseWidth: p.goal_crease_width,\n notchDistX: p.goal_crease_notch_dist_x,\n notchWidth: p.goal_crease_notch_width,\n npoints,\n };\n const goal = {\n featureRadius: p.goal_radius,\n goalMouthWidth: p.goal_mouth_width,\n goalBackWidth: p.goal_back_width,\n goalDepth: p.goal_depth,\n goalPostDiameter: p.goal_post_diameter,\n npoints,\n };\n const lines = {\n featureThickness: minor,\n faceoffLineDistY: p.faceoff_line_dist_y,\n faceoffLineWidth: p.faceoff_line_width,\n };\n const ring = F.nodzoneFaceoffSpotRing({\n featureRadius: p.noncenter_faceoff_spot_radius,\n featureThickness: minor,\n npoints,\n });\n const stripe = F.nodzoneFaceoffSpotStripe({\n featureRadius: p.noncenter_faceoff_spot_radius,\n featureThickness: minor,\n gapWidth: p.noncenter_faceoff_spot_gap_width,\n npoints,\n });\n const bench = { featureThickness: bt, benchLength: p.bench_length, benchDepth: p.bench_depth };\n const benchX = p.bench_separation / 2 + p.bench_length / 2;\n const boxX = p.penalty_box_separation / 2 + bt + p.penalty_box_length / 2;\n const boxFill = F.penaltyBoxFill({\n featureThickness: bt,\n penaltyBoxLength: p.penalty_box_length,\n penaltyBoxDepth: p.penalty_box_depth,\n });\n\n // Layers, in R's add_feature order (geom-hockey.R 468-892).\n add(\"defensive_zone\", F.defensiveZone(zone), col(\"dzone_ice\"), 0, 0, false, false);\n add(\n \"neutral_zone\",\n F.neutralZone({ rinkWidth: W, featureThickness: p.nzone_length }),\n col(\"nzone_ice\"),\n 0,\n 0,\n false,\n false,\n );\n add(\"offensive_zone\", F.offensiveZone(zone), col(\"ozone_ice\"), 0, 0, false, false);\n add(\n \"center_line\",\n F.centerLine({\n featureThickness: major,\n rinkWidth: W,\n centerFaceoffSpotGap: p.center_faceoff_spot_gap ?? 0,\n }),\n col(\"center_line\"),\n 0,\n 0,\n false,\n true,\n );\n add(\n \"zone_line\",\n F.zoneLine({ rinkWidth: W, featureThickness: major }),\n col(\"zone_line\"),\n p.nzone_length / 2,\n 0,\n true,\n false,\n );\n if (p.has_trapezoid) {\n add(\n \"goaltenders_restricted_area\",\n F.goaltendersRestrictedArea({\n rinkLength: L,\n featureThickness: minor,\n shortBaseWidth: p.short_base_width,\n longBaseWidth: p.long_base_width,\n xAnchor: goalX,\n }),\n col(\"restricted_trapezoid\"),\n goalX,\n 0,\n true,\n false,\n );\n }\n add(\"goal_crease_fill\", F.goalCreaseFill(crease), col(\"goal_crease_fill\"), goalX, 0, true, false);\n add(\"goal_crease_outline\", F.goalCreaseOutline(crease), col(\"goal_crease_outline\"), goalX, 0, true, false);\n add(\n \"goal_line\",\n F.goalLine({\n rinkLength: L,\n rinkWidth: W,\n featureRadius: p.corner_radius,\n featureThickness: minor,\n xAnchor: goalX,\n npoints,\n }),\n col(\"goal_line\"),\n goalX,\n 0,\n true,\n false,\n );\n add(\"goal_frame_fill\", F.goalFrameFill(goal), col(\"goal_fill\"), goalX, 0, true, false);\n add(\"goal_frame\", F.goalFrame(goal), col(\"goal_frame\"), goalX, 0, true, false, { height: hint(4) });\n add(\n \"odzone_faceoff_circle\",\n F.odzoneFaceoffCircle({\n featureRadius: p.faceoff_circle_radius,\n featureThickness: minor,\n hashmarkWidth: p.hashmark_width,\n hashmarkExtSpacing: p.hashmark_ext_spacing,\n npoints,\n }),\n col(\"odzone_faceoff_circle\"),\n odzoneX,\n spotY,\n true,\n true,\n );\n add(\"nodzone_faceoff_spot_stripe\", stripe, col(\"faceoff_spot_stripe\"), odzoneX, spotY, true, true);\n add(\"nodzone_faceoff_spot_ring\", ring, col(\"faceoff_spot_ring\"), odzoneX, spotY, true, true);\n add(\n \"odzone_faceoff_lines\",\n F.odzoneFaceoffLines({\n ...lines,\n faceoffLineDistX: p.faceoff_line_dist_x,\n faceoffLineLength: p.faceoff_line_length,\n }),\n col(\"faceoff_line\"),\n odzoneX,\n spotY,\n true,\n true,\n );\n add(\n \"odzone_faceoff_lines\",\n F.odzoneFaceoffLines({\n ...lines,\n faceoffLineDistX: -1 * p.faceoff_line_dist_x,\n faceoffLineLength: -1 * p.faceoff_line_length,\n }),\n col(\"faceoff_line\"),\n odzoneX,\n spotY,\n true,\n true,\n );\n add(\"nodzone_faceoff_spot_stripe\", stripe, col(\"faceoff_spot_stripe\"), nzoneSpotX, spotY, true, true);\n add(\"nodzone_faceoff_spot_ring\", ring, col(\"faceoff_spot_ring\"), nzoneSpotX, spotY, true, true);\n add(\n \"center_faceoff_circle\",\n F.centerFaceoffCircle({ featureRadius: p.faceoff_circle_radius, featureThickness: minor, npoints }),\n col(\"center_faceoff_circle\"),\n 0,\n 0,\n true,\n false,\n );\n add(\n \"referee_crease\",\n F.refereeCrease({ featureRadius: p.referee_crease_radius, featureThickness: minor, npoints }),\n col(\"referee_crease\"),\n 0,\n -W / 2,\n false,\n false,\n );\n add(\n \"center_faceoff_spot\",\n F.centerFaceoffSpot({ featureRadius: p.center_faceoff_spot_radius, npoints }),\n col(\"center_faceoff_spot\"),\n 0,\n 0,\n true,\n false,\n );\n const benchFill = F.playerBenchAreaFill(bench);\n add(\"player_bench_area_fill\", benchFill, col(\"team_a_bench\"), -benchX, W / 2, false, false);\n add(\"player_bench_area_fill\", benchFill, col(\"team_b_bench\"), benchX, W / 2, false, false);\n add(\n \"player_bench_outline\",\n F.playerBenchOutline(bench),\n col(\"boards\"),\n p.bench_separation / 2,\n W / 2,\n true,\n false,\n );\n add(\"penalty_box_fill\", boxFill, col(\"team_a_penalty_box\"), -boxX, -W / 2, false, false);\n add(\"penalty_box_fill\", boxFill, col(\"team_b_penalty_box\"), boxX, -W / 2, false, false);\n add(\n \"penalty_box_outline\",\n F.penaltyBoxOutline({\n featureThickness: bt,\n penaltyBoxLength: p.penalty_box_length,\n penaltyBoxDepth: p.penalty_box_depth,\n penaltyBoxSeparation: p.penalty_box_separation,\n }),\n col(\"boards\"),\n 0,\n -(W / 2),\n true,\n false,\n );\n add(\n \"off_ice_officials_box\",\n F.offIceOfficialsBox({\n featureThickness: bt,\n officialsBoxLength: p.penalty_box_separation,\n officialsBoxDepth: p.penalty_box_depth,\n }),\n col(\"off_ice_officials_box\"),\n 0,\n -(W / 2),\n false,\n false,\n );\n add(\n \"boards\",\n F.boards({ rinkLength: L, rinkWidth: W, featureRadius: p.corner_radius, featureThickness: bt, npoints }),\n col(\"boards\"),\n 0,\n 0,\n true,\n false,\n { height: hint(3.5) },\n );\n\n // Display range (R 894-1090), in the spec's units; then converted, translated, rotated.\n const hrl = L / 2 + 3 * bt + 5;\n const hrw = W / 2 + Math.max(p.bench_depth, p.penalty_box_depth) + 3 * bt + 5;\n const hnz = p.nzone_length / 2 + major + 5;\n const fullY = [-hrw, hrw] as const;\n const ranges: Record<RangeGroup, readonly [readonly [number, number], readonly [number, number]]> = {\n full: [[-hrl, hrl], fullY],\n inboundsonly: [\n [-(L / 2 + bt), L / 2 + bt],\n [-(W / 2 + bt), W / 2 + bt],\n ],\n offense: [[0, hrl], fullY],\n defense: [[-hrl, 0], fullY],\n nzone: [[-hnz, hnz], fullY],\n ozone: [[hnz - major - 10, hrl], fullY],\n dzone: [[-hrl, -hnz + major + 10], fullY],\n };\n const squashed = range.replace(/[ _]/g, \"\");\n const [rx, ry] = ranges[RANGE_SYNONYMS[squashed] ?? (squashed as RangeGroup)];\n const [cx, cy] = convertLimits(rx, ry, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n\n // R: plot_background NULL = none; our transparent default stands in for NULL.\n const background = col(\"plot_background\");\n return {\n sport: \"hockey\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import { SportyError } from \"../errors.js\";\nimport type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle, createSquare, createXShape } from \"../shapes.js\";\nimport { reflectCoords, rotateCoords } from \"../transform.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). Same helper as soccer/features.ts. */\ntype Arc = { npoints?: number | undefined };\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\ntype Zone = {\n fieldLength?: number;\n fieldWidth?: number;\n cornerRadius?: number;\n nzoneLength?: number;\n fieldShape?: string;\n} & Arc;\n\n/** lacrosse_defensive_zone (features-lacrosse.R 19): oval → boards-shaped half (2n + 4 points), else the x <= 0 half rectangle. */\nexport function defensiveZone({\n fieldLength = 0,\n fieldWidth = 0,\n cornerRadius = 0,\n nzoneLength = 0,\n fieldShape = \"rectangle\",\n npoints,\n}: Zone = {}): Point[] {\n if (fieldShape.toLowerCase() !== \"oval\")\n return createRectangle(-fieldLength / 2, 0, -fieldWidth / 2, fieldWidth / 2);\n const hl = fieldLength / 2;\n const hw = fieldWidth / 2;\n const cx = hl - cornerRadius;\n const cy = hw - cornerRadius;\n return [\n [-nzoneLength / 2, hw],\n ...circle({ center: [-cx, cy], start: 0.5, end: 1, r: cornerRadius, npoints }),\n [-hl, 0],\n ...circle({ center: [-cx, -cy], start: 1, end: 1.5, r: cornerRadius, npoints }),\n [-nzoneLength / 2, -hw],\n [-nzoneLength / 2, hw],\n ];\n}\n\n/** lacrosse_neutral_zone (R 100). The assembler always passes 0 (see field.ts), so R draws a zero-width rectangle. */\nexport function neutralZone({\n nzoneLength = 0,\n fieldWidth = 0,\n}: { nzoneLength?: number; fieldWidth?: number } = {}): Point[] {\n return createRectangle(-nzoneLength / 2, nzoneLength / 2, -fieldWidth / 2, fieldWidth / 2);\n}\n\n/** lacrosse_offensive_zone (R 127): mirror image of `defensiveZone`. */\nexport function offensiveZone({\n fieldLength = 0,\n fieldWidth = 0,\n cornerRadius = 0,\n nzoneLength = 0,\n fieldShape = \"rectangle\",\n npoints,\n}: Zone = {}): Point[] {\n if (fieldShape.toLowerCase() !== \"oval\")\n return createRectangle(0, fieldLength / 2, -fieldWidth / 2, fieldWidth / 2);\n const hl = fieldLength / 2;\n const hw = fieldWidth / 2;\n const cx = hl - cornerRadius;\n const cy = hw - cornerRadius;\n return [\n [nzoneLength / 2, hw],\n ...circle({ center: [cx, cy], start: 0.5, end: 0, r: cornerRadius, npoints }),\n [hl, 0],\n ...circle({ center: [cx, -cy], start: 0, end: -0.5, r: cornerRadius, npoints }),\n [nzoneLength / 2, -hw],\n [nzoneLength / 2, hw],\n ];\n}\n\n/** lacrosse_field_apron (R 209): 9-point half frame for a rectangle; any other shape is R's single point `(0, 0)`. */\nexport function fieldApron({\n fieldLength = 0,\n fieldWidth = 0,\n fieldApronThickness = 0,\n fieldShape = \"rectangle\",\n}: {\n fieldLength?: number;\n fieldWidth?: number;\n fieldApronThickness?: number;\n fieldShape?: string;\n} = {}): Point[] {\n if (fieldShape.toLowerCase() !== \"rectangle\") return [[0, 0]]; // ponytail: R quirk preserved for parity (1-row frame)\n const L = fieldLength / 2;\n const W = fieldWidth / 2;\n const a = fieldApronThickness;\n return [\n [0, W],\n [L, W],\n [L, -W],\n [0, -W],\n [0, -W - a],\n [L + a, -W - a],\n [L + a, W + a],\n [0, W + a],\n [0, W],\n ];\n}\n\n/** lacrosse_sideline (R 265). */\nexport function sideline({\n fieldLength = 0,\n lineThickness = 0,\n}: { fieldLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-fieldLength / 2, fieldLength / 2, 0, lineThickness);\n}\n\n/** lacrosse_end_line (R 288). */\nexport function endLine({\n fieldWidth = 0,\n lineThickness = 0,\n}: { fieldWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(0, lineThickness, -fieldWidth / 2, fieldWidth / 2);\n}\n\n/** lacrosse_boards (R 314): inner arcs out, outer arcs back (4n + 7 points), x >= 0 half. */\nexport function boards({\n fieldLength = 0,\n fieldWidth = 0,\n cornerRadius = 0,\n boundaryThickness = 0,\n npoints,\n}: {\n fieldLength?: number;\n fieldWidth?: number;\n cornerRadius?: number;\n boundaryThickness?: number;\n} & Arc = {}): Point[] {\n const hl = fieldLength / 2;\n const hw = fieldWidth / 2;\n const cx = hl - cornerRadius;\n const cy = hw - cornerRadius;\n const t = boundaryThickness;\n return [\n [0, hw],\n ...circle({ center: [cx, cy], start: 0.5, end: 0, r: cornerRadius, npoints }),\n [hl, 0],\n ...circle({ center: [cx, -cy], start: 0, end: -0.5, r: cornerRadius, npoints }),\n [0, -hw],\n [0, -hw - t],\n ...circle({ center: [cx, -cy], start: -0.5, end: 0, r: cornerRadius + t, npoints }),\n [hl + t, 0],\n ...circle({ center: [cx, cy], start: 0, end: 0.5, r: cornerRadius + t, npoints }),\n [0, hw + t],\n [0, hw],\n ];\n}\n\n/** lacrosse_center_line (R 425). */\nexport function centerLine({\n centerLineWidth = 0,\n lineThickness = 0,\n}: { centerLineWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness / 2, lineThickness / 2, -centerLineWidth / 2, centerLineWidth / 2);\n}\n\n/** lacrosse_wing_line (R 447). */\nexport function wingLine({\n wingLineLength = 0,\n lineThickness = 0,\n}: { wingLineLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-wingLineLength / 2, wingLineLength / 2, 0, lineThickness);\n}\n\n/** lacrosse_restraining_line (R 471). */\nexport function restrainingLine({\n fieldWidth = 0,\n lineThickness = 0,\n}: { fieldWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness, 0, -fieldWidth / 2, fieldWidth / 2);\n}\n\n/** lacrosse_defensive_area_line (R 497). */\nexport function defensiveAreaLine({\n defensiveAreaLineLength = 0,\n lineThickness = 0,\n}: { defensiveAreaLineLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(0, defensiveAreaLineLength, 0, lineThickness);\n}\n\n/** lacrosse_goal_line (R 526): a short bar, or (full diameter) two thin arcs of the goal circle at ±0.5π (2n points). */\nexport function goalLine({\n goalFrameWidth = 0,\n lineThickness = 0,\n goalLineFullDiameter = false,\n goalCircleRadius = 0,\n npoints,\n}: {\n goalFrameWidth?: number;\n lineThickness?: number;\n goalLineFullDiameter?: boolean;\n goalCircleRadius?: number;\n} & Arc = {}): Point[] {\n if (!goalLineFullDiameter)\n return createRectangle(-lineThickness / 2, lineThickness / 2, -goalFrameWidth / 2, goalFrameWidth / 2);\n const dev = Math.asin(lineThickness / 2 / goalCircleRadius) / Math.PI;\n const r = goalCircleRadius;\n return [\n ...circle({ center: [0, 0], start: 0.5 - dev, end: 0.5 + dev, r, npoints }),\n ...circle({ center: [0, 0], start: -0.5 - dev, end: -0.5 + dev, r, npoints }),\n ];\n}\n\n/** lacrosse_referee_crease (R 570 and again, identically, at R 1148): half ring (2n + 4 points). */\nexport function refereeCrease({\n refereeCreaseRadius = 0,\n lineThickness = 0,\n npoints,\n}: { refereeCreaseRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n const r = refereeCreaseRadius;\n const t = lineThickness;\n return [\n [r, 0],\n ...circle({ center: [0, 0], start: 0, end: 1, r, npoints }),\n [-r, 0],\n [-r + t, 0],\n ...circle({ center: [0, 0], start: 1, end: 0, r: r - t, npoints }),\n [r, 0],\n ];\n}\n\n/** lacrosse_referee_crease_fill (R 1199): a half disc; R's `line_thickness` argument is unused. */\nexport function refereeCreaseFill({\n refereeCreaseRadius = 0,\n npoints,\n}: { refereeCreaseRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 1, r: refereeCreaseRadius, npoints });\n}\n\ntype GoalCircle = {\n goalCircleRadius?: number;\n lineThickness?: number;\n goalCircleFull360?: boolean;\n goalDepth?: number;\n goalDepthToCircle?: number;\n} & Arc;\n\n/** lacrosse_goal_circle (R 634): full-360 → two mirrored half rings with seam points; otherwise the ring clipped at goal_depth_to_circle + goal_depth. */\nexport function goalCircle({\n goalCircleRadius = 0,\n lineThickness = 0,\n goalCircleFull360 = true,\n goalDepth = 0,\n goalDepthToCircle = 0,\n npoints,\n}: GoalCircle = {}): Point[] {\n const r = goalCircleRadius;\n const t = lineThickness;\n if (goalCircleFull360) {\n const half: Point[] = [\n [0, r],\n ...circle({ center: [0, 0], start: 0.5, end: -0.5, r, npoints }),\n [0, -r],\n [0, -r + t],\n ...circle({ center: [0, 0], start: -0.5, end: 0.5, r: r - t, npoints }),\n [0, r - t],\n [0, r],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })];\n }\n const depth = goalDepthToCircle + goalDepth;\n const start = Math.acos(depth / r) / Math.PI;\n const end = 2 - start;\n return [\n [depth, 0],\n ...circle({ center: [0, 0], start, end, r, npoints }),\n [depth, 0],\n [depth - t, 0],\n ...circle({ center: [0, 0], start: 2 - start, end: 2 - end, r: r - t, npoints }),\n [depth - t, 0],\n [depth, 0],\n ];\n}\n\n/** lacrosse_goal_circle_fill (R 734): the inner disc, or its clipped arc. */\nexport function goalCircleFill({\n goalCircleRadius = 0,\n lineThickness = 0,\n goalCircleFull360 = true,\n goalDepth = 0,\n goalDepthToCircle = 0,\n npoints,\n}: GoalCircle = {}): Point[] {\n const r = goalCircleRadius - lineThickness;\n if (goalCircleFull360) return circle({ center: [0, 0], start: 0, end: 2, r, npoints });\n const start = Math.acos((goalDepthToCircle + goalDepth) / goalCircleRadius) / Math.PI;\n const end = 2 - start;\n return circle({ center: [0, 0], start: 2 - start, end: 2 - end, r, npoints });\n}\n\n/** lacrosse_goal_arc (R 789). `lineThickness === undefined` reproduces R's un-guarded `field_params$goal_arc_line_thickness` (NULL → numeric(0) recycling): no inner arc, duplicated seam points. */\nexport function goalArc({\n goalArcExtension = 0,\n goalArcRadius = 0,\n lineThickness: t = 0,\n goalArcParallelLineToCenter,\n npoints,\n}: {\n goalArcExtension?: number;\n goalArcRadius?: number;\n lineThickness?: number;\n /** sportyR #70: the parallel lines' distance from the goal-line centre (default: the radius, i.e. a semicircle). */\n goalArcParallelLineToCenter?: number | undefined;\n} & Arc = {}): Point[] {\n const e = goalArcExtension;\n const r = goalArcRadius;\n const wOuter = Math.min(goalArcParallelLineToCenter ?? r, r);\n const wInner = wOuter - t;\n const rInner = r - t;\n // where the parallel lines meet the arc, towards the centre of the field\n const xOuter = -Math.sqrt(Math.max(r ** 2 - wOuter ** 2, 0));\n const xInner = -Math.sqrt(Math.max(rInner ** 2 - wInner ** 2, 0));\n const thetaOuter = Math.atan2(wOuter, xOuter) / Math.PI;\n const thetaInner = Math.atan2(wInner, xInner) / Math.PI;\n return [\n [e, wOuter],\n [xOuter, wOuter],\n ...circle({ center: [0, 0], start: thetaOuter, end: 2 - thetaOuter, r, npoints }),\n [xOuter, -wOuter],\n [e, -wOuter],\n [e, -wInner],\n [xInner, -wInner],\n ...circle({ center: [0, 0], start: 2 - thetaInner, end: thetaInner, r: rInner, npoints }),\n [xInner, wInner],\n [e, wInner],\n [e, wOuter],\n ];\n}\n\n/**\n * lacrosse_goal_fan (sportyR #69, NCAA women's Rule 1 §6): 45-degree lines from the goal circle on the goal line extended\n * (B) to the arc of radius `goalFanRadius` about the goal-line centre (C), joined by that arc. Empty when the fan does\n * not reach past the goal circle.\n */\nexport function goalFan({\n goalFanRadius = 0,\n goalCircleRadius = 0,\n lineThickness = 0,\n npoints,\n}: { goalFanRadius?: number; goalCircleRadius?: number; lineThickness?: number } & Arc = {}): Point[] {\n if (goalFanRadius <= goalCircleRadius) return [];\n const dir: Point = [-1 / Math.sqrt(2), 1 / Math.sqrt(2)]; // upper 45-degree line, towards the centre of the field\n // distance along the line from p (in direction dir) to the circle of the given radius about the goal-line centre\n const toCircle = (p: Point, radius: number): number => {\n const b = p[0] * dir[0] + p[1] * dir[1];\n return -b + Math.sqrt(b ** 2 - (p[0] ** 2 + p[1] ** 2) + radius ** 2);\n };\n const along = (p: Point, d: number): Point => [p[0] + d * dir[0], p[1] + d * dir[1]];\n const bOuter: Point = [0, goalCircleRadius];\n const cOuter = along(bOuter, toCircle(bOuter, goalFanRadius));\n const base: Point = [\n bOuter[0] + (lineThickness * -1) / Math.sqrt(2),\n bOuter[1] + (lineThickness * -1) / Math.sqrt(2),\n ];\n const bInner = along(base, toCircle(base, goalCircleRadius));\n const cInner = along(base, toCircle(base, goalFanRadius - lineThickness));\n const thetaOuter = Math.atan2(cOuter[1], cOuter[0]) / Math.PI;\n const thetaInner = Math.atan2(cInner[1], cInner[0]) / Math.PI;\n return [\n bOuter,\n cOuter,\n ...circle({ center: [0, 0], start: thetaOuter, end: 2 - thetaOuter, r: goalFanRadius, npoints }),\n [cOuter[0], -cOuter[1]],\n [bOuter[0], -bOuter[1]],\n [bInner[0], -bInner[1]],\n [cInner[0], -cInner[1]],\n ...circle({\n center: [0, 0],\n start: 2 - thetaInner,\n end: thetaInner,\n r: goalFanRadius - lineThickness,\n npoints,\n }),\n cInner,\n bInner,\n bOuter,\n ];\n}\n\n/** lacrosse_goal_fan_hash_mark (R 919): a centred bar rotated by `rotationalAngle` degrees. */\nexport function goalFanHashMark({\n goalFanHashMarkLength = 0,\n lineThickness = 0,\n rotationalAngle = 0,\n}: { goalFanHashMarkLength?: number; lineThickness?: number; rotationalAngle?: number } = {}): Point[] {\n return rotateCoords(\n createRectangle(\n -goalFanHashMarkLength / 2,\n goalFanHashMarkLength / 2,\n -lineThickness / 2,\n lineThickness / 2,\n ),\n rotationalAngle,\n );\n}\n\n/** lacrosse_goal_mouth_hash_mark (R 953). */\nexport function goalMouthHashMark({\n goalMouthHashMarkLength = 0,\n lineThickness = 0,\n}: { goalMouthHashMarkLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-goalMouthHashMarkLength, 0, -lineThickness, 0);\n}\n\n/** lacrosse_goal_mouth (R 981): semicircular ring split at ±goal_mouth_semi_circle_separation (2n + 9 points). */\nexport function goalMouth({\n goalMouthRadius = 0,\n lineThickness = 0,\n goalMouthSemiCircleSeparation = 0,\n npoints,\n}: {\n goalMouthRadius?: number;\n lineThickness?: number;\n goalMouthSemiCircleSeparation?: number;\n} & Arc = {}): Point[] {\n const r = goalMouthRadius;\n const t = lineThickness;\n const s = goalMouthSemiCircleSeparation;\n return [\n [0, s],\n [0, r],\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r, npoints }),\n [0, -r],\n [0, -s],\n [-t, -s],\n [-t, -r + t],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: r - t, npoints }),\n [-t, r - t],\n [-t, s],\n [0, s],\n ];\n}\n\n/** lacrosse_below_goal_marking (R 1050): a full disc. */\nexport function belowGoalMarking({\n belowGoalMarkingRadius = 0,\n npoints,\n}: { belowGoalMarkingRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: belowGoalMarkingRadius, npoints });\n}\n\ntype Goal = { goalFrameOpeningInterior?: number; goalPostThickness?: number; goalDepth?: number };\n\n/** lacrosse_goal_frame (R 1075): 7-point frame. */\nexport function goalFrame({\n goalFrameOpeningInterior: o = 0,\n goalPostThickness: p = 0,\n goalDepth: d = 0,\n}: Goal = {}): Point[] {\n return [\n [0, o / 2],\n [d - p, 0],\n [0, -o / 2],\n [0, -o / 2 - p],\n [d, 0],\n [0, o / 2 + p],\n [0, 0],\n ];\n}\n\n/** lacrosse_goal_net (R 1115): 4 points; the last y is the full opening, not half (R). */\nexport function goalNet({\n goalFrameOpeningInterior: o = 0,\n goalPostThickness: p = 0,\n goalDepth: d = 0,\n}: Goal = {}): Point[] {\n return [\n [0, o / 2],\n [d - p, 0],\n [0, -o / 2],\n [0, o],\n ];\n}\n\n/** lacrosse_center_circle (R 1222): outer half arc, seam to `−r − t` (R), inner arc back (2n + 2 points). */\nexport function centerCircle({\n centerCircleRadius = 0,\n centerCircleThickness = 0,\n npoints,\n}: { centerCircleRadius?: number; centerCircleThickness?: number } & Arc = {}): Point[] {\n const r = centerCircleRadius;\n const t = centerCircleThickness;\n return [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r, npoints }),\n [0, -r],\n [0, -r - t],\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: r - t, npoints }),\n ];\n}\n\ntype Bench = { benchAreaOutlineThickness?: number; benchLength?: number; benchDepth?: number };\n\n/** lacrosse_player_bench_outline (R 1271): 9 points. */\nexport function playerBenchOutline({\n benchAreaOutlineThickness: t = 0,\n benchLength: l = 0,\n benchDepth: d = 0,\n}: Bench = {}): Point[] {\n return [\n [-t, t],\n [-t, 2 * t + d],\n [l + t, 2 * t + d],\n [l + t, t],\n [l, t],\n [l, t + d],\n [0, t + d],\n [0, t],\n [t, t],\n ];\n}\n\n/** lacrosse_player_bench_area_fill (R 1320). */\nexport function playerBenchAreaFill({\n benchAreaOutlineThickness: t = 0,\n benchLength: l = 0,\n benchDepth: d = 0,\n}: Bench = {}): Point[] {\n return createRectangle(-l / 2, l / 2, t, t + d);\n}\n\n/** lacrosse_penalty_box_outline (R 1354): 11 points; R's `penalty_box_width` argument is unused. */\nexport function penaltyBoxOutline({\n penaltyBoxOutlineThickness: t = 0,\n penaltyBoxLength: l = 0,\n penaltyBoxSeparation: s = 0,\n penaltyBoxDepth: d = 0,\n}: {\n penaltyBoxOutlineThickness?: number;\n penaltyBoxLength?: number;\n penaltyBoxWidth?: number;\n penaltyBoxSeparation?: number;\n penaltyBoxDepth?: number;\n} = {}): Point[] {\n const h = s / 2;\n // sportyR #72: each box is `l` inside, so the outer wall runs from h + l + t to h + l + 2t\n return [\n [0, -(2 * t + d)],\n [h + l + 2 * t, -(2 * t + d)],\n [h + l + 2 * t, -t],\n [h + l + t, -t],\n [h + l + t, -(t + d)],\n [h + t, -(t + d)],\n [h + t, -t],\n [h, -t],\n [h, -(t + d)],\n [0, -(t + d)],\n [0, -(2 * t + d)],\n ];\n}\n\n/** lacrosse_penalty_box_fill (R 1414). */\nexport function penaltyBoxFill({\n penaltyBoxOutlineThickness: t = 0,\n penaltyBoxLength: l = 0,\n penaltyBoxDepth: d = 0,\n}: {\n penaltyBoxOutlineThickness?: number;\n penaltyBoxLength?: number;\n penaltyBoxDepth?: number;\n} = {}): Point[] {\n return createRectangle(-l / 2, l / 2, -t, -(t + d));\n}\n\n/** lacrosse_off_field_officials_box (R 1445). */\nexport function offFieldOfficialsBox({\n officialsBoxThickness: t = 0,\n officialsBoxLength: l = 0,\n officialsBoxDepth: d = 0,\n}: {\n officialsBoxThickness?: number;\n officialsBoxLength?: number;\n officialsBoxDepth?: number;\n} = {}): Point[] {\n return createRectangle(-l / 2, l / 2, -t, -(t + d));\n}\n\n/** lacrosse_face_off_marker (R 1485): `tolower(shape)` \"o\" → disc, \"x\" → X (14 points), \"square\" → square (5); any other shape throws `SportyError` (R's 0-row frame makes `add_feature` error). */\nexport function faceOffMarker({\n shape = \"O\",\n featureThickness = 0,\n sideLength = 0,\n featureRadius = 0,\n npoints,\n}: {\n shape?: string;\n featureThickness?: number;\n sideLength?: number;\n featureRadius?: number;\n} & Arc = {}): Point[] {\n switch (shape.toLowerCase()) {\n case \"o\":\n return circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n case \"x\":\n return createXShape(sideLength, featureThickness, 45);\n case \"square\":\n return createSquare(sideLength);\n default:\n throw new SportyError(`Unknown face-off marker shape \"${shape}\"; expected O, X or square`);\n }\n}\n\n/** lacrosse_change_area_outline (R 1527): 7 points. */\nexport function changeAreaOutline({\n changeAreaLength: l = 0,\n changeAreaWidth: w = 0,\n featureThickness: t = 0,\n}: { changeAreaLength?: number; changeAreaWidth?: number; featureThickness?: number } = {}): Point[] {\n return [\n [l, 0],\n [l, -w],\n [0, -w],\n [0, -(w + t)],\n [l + t, -(w + t)],\n [l + t, 0],\n [l, 0],\n ];\n}\n\n/** lacrosse_change_area_fill (R 1568). */\nexport function changeAreaFill({\n changeAreaLength: l = 0,\n changeAreaWidth: w = 0,\n}: { changeAreaLength?: number; changeAreaWidth?: number } = {}): Point[] {\n return createRectangle(0, l, -w, 0);\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `lacrosse_*` builder (prefix dropped), in draw order, as used in `PolygonFeature.name` (33; R defines `lacrosse_referee_crease` twice, identically). */\nexport const LACROSSE_FEATURES = [\n \"field_apron\",\n \"defensive_zone\",\n \"neutral_zone\",\n \"offensive_zone\",\n \"referee_crease_fill\",\n \"sideline\",\n \"end_line\",\n \"change_area_outline\",\n \"change_area_fill\",\n \"center_line\",\n \"player_bench_area_fill\",\n \"player_bench_outline\",\n \"penalty_box_fill\",\n \"penalty_box_outline\",\n \"off_field_officials_box\",\n \"boards\",\n \"wing_line\",\n \"restraining_line\",\n \"defensive_area_line\",\n \"referee_crease\",\n \"center_circle\",\n \"goal_circle_fill\",\n \"goal_circle\",\n \"goal_arc\",\n \"goal_fan\",\n \"goal_fan_hash_mark\",\n \"goal_mouth\",\n \"goal_mouth_hash_mark\",\n \"below_goal_marking\",\n \"goal_net\",\n \"goal_frame\",\n \"goal_line\",\n \"face_off_marker\",\n] as const;\nexport type LacrosseFeature = (typeof LACROSSE_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_lacrosse()` (13). */\nexport const LACROSSE_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalffield\",\n \"offensive_half_field\",\n \"offensive half field\",\n \"defense\",\n \"defence\",\n \"defensivehalffield\",\n \"defensive_half_field\",\n \"defensive half field\",\n] as const;\nexport type LacrosseDisplayRange = (typeof LACROSSE_DISPLAY_RANGES)[number];\n\n/** The 35 argument names of `lacrosse_features_set_colors()`, in R's declaration order (colour keys are NOT feature names). */\nexport const LACROSSE_COLOR_KEYS = [\n \"plot_background\",\n \"field_apron\",\n \"defensive_zone\",\n \"neutral_zone\",\n \"offensive_zone\",\n \"team_a_bench\",\n \"team_b_bench\",\n \"team_a_penalty_box\",\n \"team_b_penalty_box\",\n \"off_field_officials_box\",\n \"boards\",\n \"end_line\",\n \"sideline\",\n \"center_line\",\n \"wing_line\",\n \"restraining_line\",\n \"defensive_area_line\",\n \"goal_line\",\n \"referee_crease\",\n \"referee_crease_fill\",\n \"goal_circle\",\n \"goal_circle_fill\",\n \"goal_arc\",\n \"goal_fan\",\n \"goal_fan_hash_mark\",\n \"goal_mouth_hash_mark\",\n \"goal_mouth\",\n \"below_goal_marking\",\n \"goal_frame\",\n \"goal_net\",\n \"center_circle\",\n \"center_face_off_marker\",\n \"corner_face_off_marker\",\n \"change_area_outline\",\n \"change_area_fill\",\n] as const;\nexport type LacrosseColorKey = (typeof LACROSSE_COLOR_KEYS)[number];\n\n/** Defaults of `lacrosse_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const LACROSSE_DEFAULT_COLORS: Readonly<Record<LacrosseColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n field_apron: \"#195f0c\",\n defensive_zone: \"#195f0c\",\n neutral_zone: \"#195f0c\",\n offensive_zone: \"#195f0c\",\n team_a_bench: \"#a5acaf4d\",\n team_b_bench: \"#a5acaf4d\",\n team_a_penalty_box: \"#a5acaf4d\",\n team_b_penalty_box: \"#a5acaf4d\",\n off_field_officials_box: \"#a5acaf\",\n boards: \"#ffa500\",\n end_line: \"#ffffff\",\n sideline: \"#ffffff\",\n center_line: \"#ffffff\",\n wing_line: \"#ffffff\",\n restraining_line: \"#ffffff\",\n defensive_area_line: \"#ffffff\",\n goal_line: \"#ffffff\",\n referee_crease: \"#ffffff\",\n referee_crease_fill: \"#195f0c\",\n goal_circle: \"#ffffff\",\n goal_circle_fill: \"#195f0c\",\n goal_arc: \"#ffffff\",\n goal_fan: \"#ffffff\",\n goal_fan_hash_mark: \"#ffffff\",\n goal_mouth_hash_mark: \"#ffffff\",\n goal_mouth: \"#ffffff\",\n below_goal_marking: \"#ffffff\",\n goal_frame: \"#ffa500\",\n goal_net: \"#a5acaf4d\",\n center_circle: \"#ffffff\",\n center_face_off_marker: \"#ffffff\",\n corner_face_off_marker: \"#ffffff\",\n change_area_outline: \"#ffffff\",\n change_area_fill: \"#195f0c\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n LACROSSE_LEAGUES,\n LACROSSE_SPECS,\n type LacrosseLeague,\n type LacrosseParamUpdates,\n} from \"../specs/lacrosse.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n LACROSSE_DEFAULT_COLORS,\n LACROSSE_DISPLAY_RANGES,\n type LacrosseColorKey,\n type LacrosseDisplayRange,\n type LacrosseFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n// R reads three keys that no league's JSON has, so `%or% 0` always yields 0 (preserved for parity; absent from LacrosseParams).\nconst CENTER_FACE_OFF_MARKER_RADIUS = 0; // R 535\nconst CORNER_FACE_OFF_MARKER_BAR_WIDTH = 0; // R 541\nconst CORNER_FACE_OFF_MARKER_BAR_LENGTH = 0; // R 542\n\n/**\n * Port of sportyR `geom_lacrosse()` (2.4.0, with the sportyR #60-#75 fixes): one PolygonFeature per ggplot layer R adds,\n * in R's layer order. Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"). `units`\n * scales the points, anchors and display limits, as sportyR 2.4.0 does (#74).\n */\nexport function lacrosseField(\n league: LacrosseLeague | (string & {}),\n opts: SurfaceOptions<LacrosseParamUpdates, LacrosseColorKey, LacrosseDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(LACROSSE_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown lacrosse league \"${league}\"; expected one of: ${LACROSSE_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase(); // R: tolower() only — no trim\n if (!isOneOf(LACROSSE_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown lacrosse display range \"${opts.displayRange}\"; expected one of: ${LACROSSE_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(LACROSSE_SPECS[key], opts.updates, [\"goal_fan_hash_mark_separation_from_center\"]);\n // Contrasting centre marker (geom-lacrosse.R 305-315, sportyR #65): after the user's colours merge, and only when the\n // user did not pick the marker colour and it matches the (possibly user-set) centre line.\n const merged = mergeColors(LACROSSE_DEFAULT_COLORS, opts.colorUpdates);\n const colors =\n (p.center_face_off_marker_color_contrasting ?? false) &&\n opts.colorUpdates?.center_face_off_marker === undefined &&\n merged.center_face_off_marker === merged.center_line\n ? { ...merged, center_face_off_marker: \"#ffcb05\" }\n : merged;\n const col = (k: LacrosseColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.field_units || \"ft\"); // R: field_units %or% \"ft\" (custom's \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.field_length;\n const W = p.field_width;\n const gx = L / 2 - p.goal_line_center_to_end_line; // every goal feature's x anchor\n const features: Feature[] = [];\n const add = (\n name: LacrosseFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n const stroked = (k: LacrosseColorKey): { stroke: Color } => ({ stroke: col(k) });\n // Layers, in R's add_feature order (geom-lacrosse.R 616-1199).\n const zone = {\n fieldLength: L,\n fieldWidth: W,\n cornerRadius: p.corner_radius ?? 0,\n nzoneLength: p.neutral_zone_length ?? 0,\n fieldShape: p.field_shape,\n npoints,\n };\n add(\n \"field_apron\",\n F.fieldApron({\n fieldLength: L,\n fieldWidth: W,\n fieldApronThickness: p.field_apron_thickness,\n fieldShape: p.field_shape,\n }),\n col(\"field_apron\"),\n 0,\n 0,\n true,\n false,\n stroked(\"field_apron\"),\n );\n add(\n \"defensive_zone\",\n F.defensiveZone(zone),\n col(\"defensive_zone\"),\n 0,\n 0,\n false,\n false,\n stroked(\"defensive_zone\"),\n );\n add(\n \"neutral_zone\",\n F.neutralZone({ nzoneLength: p.neutral_zone_length ?? 0, fieldWidth: W }),\n col(\"neutral_zone\"),\n 0,\n 0,\n false,\n false,\n );\n add(\n \"offensive_zone\",\n F.offensiveZone(zone),\n col(\"offensive_zone\"),\n 0,\n 0,\n false,\n false,\n stroked(\"offensive_zone\"),\n );\n const crease = {\n refereeCreaseRadius: p.referee_crease_radius ?? 0,\n lineThickness: p.referee_crease_thickness ?? 0,\n npoints,\n };\n add(\"referee_crease_fill\", F.refereeCreaseFill(crease), col(\"referee_crease_fill\"), 0, -W / 2, true, false);\n const boundary = p.boundary_thickness ?? 0;\n add(\n \"sideline\",\n F.sideline({ fieldLength: L, lineThickness: boundary }),\n (p.has_sidelines ?? true) ? col(\"sideline\") : \"#ffffff00\",\n 0,\n W / 2,\n false,\n true,\n );\n add(\n \"end_line\",\n F.endLine({ fieldWidth: W, lineThickness: boundary }),\n (p.has_endlines ?? true) ? col(\"end_line\") : \"#ffffff00\",\n L / 2,\n 0,\n true,\n false,\n );\n const changeAreaLength =\n (p.bench_separation ?? 0) / 2 + (p.bench_length ?? 0) + (p.change_area_extension ?? 0);\n const changeAreaWidth = p.change_area_width ?? 0;\n add(\n \"change_area_outline\",\n F.changeAreaOutline({\n changeAreaLength,\n changeAreaWidth,\n featureThickness: p.change_area_outline_thickness ?? 0,\n }),\n col(\"change_area_outline\"),\n 0,\n W / 2,\n true,\n false,\n stroked(\"change_area_outline\"),\n );\n add(\n \"change_area_fill\",\n F.changeAreaFill({ changeAreaLength, changeAreaWidth }),\n col(\"change_area_fill\"),\n 0,\n W / 2,\n true,\n false,\n stroked(\"change_area_fill\"),\n );\n add(\n \"center_line\",\n F.centerLine({ centerLineWidth: p.center_line_width, lineThickness: p.center_line_thickness }),\n col(\"center_line\"),\n 0,\n 0,\n true,\n false,\n );\n const bench = {\n benchAreaOutlineThickness: p.boards_thickness ?? 0,\n benchLength: p.bench_length ?? 0,\n benchDepth: p.bench_depth ?? 0,\n };\n const benchX = (p.bench_separation ?? 0) / 2 + (p.bench_length ?? 0) / 2;\n const benchFill = F.playerBenchAreaFill(bench);\n add(\"player_bench_area_fill\", benchFill, col(\"team_a_bench\"), -benchX, W / 2, false, false);\n add(\"player_bench_area_fill\", benchFill, col(\"team_b_bench\"), benchX, W / 2, false, false);\n add(\n \"player_bench_outline\",\n F.playerBenchOutline(bench),\n col(\"boards\"),\n (p.bench_separation ?? 0) / 2,\n W / 2,\n true,\n false,\n );\n const penaltyBox = {\n penaltyBoxOutlineThickness: p.boards_thickness ?? 0,\n penaltyBoxLength: p.penalty_box_length ?? 0,\n penaltyBoxDepth: p.penalty_box_depth ?? 0,\n };\n const penaltyX =\n (p.penalty_box_separation ?? 0) / 2 + (p.boards_thickness ?? 0) + (p.penalty_box_length ?? 0) / 2;\n const penaltyFill = F.penaltyBoxFill(penaltyBox);\n add(\"penalty_box_fill\", penaltyFill, col(\"team_a_penalty_box\"), -penaltyX, -W / 2, false, false);\n add(\"penalty_box_fill\", penaltyFill, col(\"team_b_penalty_box\"), penaltyX, -W / 2, false, false);\n add(\n \"penalty_box_outline\",\n F.penaltyBoxOutline({ ...penaltyBox, penaltyBoxSeparation: p.penalty_box_separation ?? 0 }),\n col(\"boards\"),\n 0,\n -(W / 2),\n true,\n false,\n );\n add(\n \"off_field_officials_box\",\n F.offFieldOfficialsBox({\n officialsBoxThickness: p.boards_thickness ?? 0,\n officialsBoxLength: p.penalty_box_separation ?? 0,\n officialsBoxDepth: p.penalty_box_depth ?? 0,\n }),\n col(\"off_field_officials_box\"),\n 0,\n -(W / 2),\n false,\n false,\n );\n add(\n \"boards\",\n F.boards({\n fieldLength: L,\n fieldWidth: W,\n cornerRadius: p.corner_radius ?? 0,\n boundaryThickness: p.boards_thickness ?? 0,\n npoints,\n }),\n col(\"boards\"),\n 0,\n 0,\n true,\n false,\n { stroke: (p.has_boards ?? false) ? col(\"boards\") : \"#ffffff00\" },\n );\n add(\n \"wing_line\",\n F.wingLine({ wingLineLength: p.wing_line_length ?? 0, lineThickness: p.wing_line_thickness ?? 0 }),\n col(\"wing_line\"),\n 0,\n W / 2 - (p.wing_line_center_to_sideline ?? 0),\n false,\n true,\n );\n add(\n \"restraining_line\",\n F.restrainingLine({ fieldWidth: W, lineThickness: p.restraining_line_thickness ?? 0 }),\n col(\"restraining_line\"),\n p.restraining_line_outer_edge_to_center ?? 0,\n 0,\n true,\n false,\n );\n add(\n \"defensive_area_line\",\n F.defensiveAreaLine({\n defensiveAreaLineLength: p.defensive_area_line_length ?? 0,\n lineThickness: p.defensive_area_line_thickness ?? 0,\n }),\n col(\"defensive_area_line\"),\n L / 2 - (p.defensive_area_line_length ?? 0),\n W / 2 - (p.defensive_area_line_center_to_sideline ?? 0),\n true,\n true,\n );\n add(\"referee_crease\", F.refereeCrease(crease), col(\"referee_crease\"), 0, -W / 2, true, false);\n add(\n \"center_circle\",\n F.centerCircle({\n centerCircleRadius: p.center_circle_radius ?? 0,\n centerCircleThickness: p.center_circle_thickness ?? 0,\n npoints,\n }),\n col(\"center_circle\"),\n 0,\n 0,\n true,\n false,\n );\n const goalCircle = {\n goalCircleRadius: p.goal_circle_radius,\n lineThickness: p.goal_circle_thickness,\n goalCircleFull360: p.goal_circle_full_360,\n goalDepth: p.goal_depth,\n goalDepthToCircle: p.goal_depth_to_circle ?? 0,\n npoints,\n };\n add(\"goal_circle_fill\", F.goalCircleFill(goalCircle), col(\"goal_circle_fill\"), gx, 0, true, true);\n add(\"goal_circle\", F.goalCircle(goalCircle), col(\"goal_circle\"), gx, 0, true, true);\n add(\n \"goal_arc\",\n F.goalArc({\n goalArcExtension: p.goal_arc_extension ?? 0,\n goalArcRadius: p.goal_arc_radius ?? 0,\n lineThickness: p.goal_arc_line_thickness ?? 0,\n goalArcParallelLineToCenter: p.goal_arc_parallel_line_to_center,\n npoints,\n }),\n col(\"goal_arc\"),\n gx,\n 0,\n true,\n false,\n );\n const fan = F.goalFan({\n goalFanRadius: p.goal_fan_radius ?? 0,\n goalCircleRadius: p.goal_circle_radius,\n lineThickness: p.goal_fan_line_thickness ?? 0,\n npoints,\n });\n // fan-less leagues: R adds an empty (invisible) layer; sporty adds no feature\n if (fan.length > 0) add(\"goal_fan\", fan, col(\"goal_fan\"), gx, 0, true, false);\n for (const sep of p.goal_fan_hash_mark_separation_from_center ?? []) {\n // The fan's line runs from goal_fan_radius - t to goal_fan_radius about the goal-line centre (sportyR #69); the marks\n // bisect it, so they are centred at R = goal_fan_radius - t / 2 (#75). A mark at arc distance sep sits theta = sep / R\n // radians along that circle and is rotated by -theta to stay perpendicular (#62: one angle for both).\n const R = (p.goal_fan_radius ?? 1) - (p.goal_fan_line_thickness ?? 0) / 2;\n const thetaBuild = sep / R; // radians\n const thetaPlace = thetaBuild / Math.PI; // units of π, as R's placement site writes it\n const mark = F.goalFanHashMark({\n goalFanHashMarkLength: p.goal_fan_hash_mark_length ?? 0,\n lineThickness: p.goal_fan_hash_mark_line_thickness ?? 0,\n rotationalAngle: (-thetaBuild * 180) / Math.PI,\n });\n add(\n \"goal_fan_hash_mark\",\n mark,\n col(\"goal_fan_hash_mark\"),\n gx + R * Math.cos((1 - thetaPlace) * Math.PI),\n R * Math.sin((1 - thetaPlace) * Math.PI),\n true,\n true,\n );\n }\n add(\n \"goal_mouth\",\n F.goalMouth({\n goalMouthRadius: p.goal_mouth_radius ?? 0,\n lineThickness: p.goal_mouth_line_thickness ?? 0,\n goalMouthSemiCircleSeparation: p.goal_mouth_semi_circle_separation ?? 0,\n npoints,\n }),\n col(\"goal_mouth\"),\n gx,\n 0,\n true,\n false,\n );\n add(\n \"goal_mouth_hash_mark\",\n F.goalMouthHashMark({\n goalMouthHashMarkLength: p.goal_mouth_hash_mark_length ?? 0,\n lineThickness: p.goal_mouth_hash_mark_line_thickness ?? 0,\n }),\n col(\"goal_mouth_hash_mark\"),\n gx,\n p.goal_fan_radius ?? 0,\n true,\n true,\n );\n add(\n \"below_goal_marking\",\n F.belowGoalMarking({ belowGoalMarkingRadius: p.below_goal_marking_radius ?? 0, npoints }),\n col(\"below_goal_marking\"),\n gx + (p.below_goal_marking_to_goal_line ?? 0),\n (p.goal_fan_radius ?? 0) / 2,\n true,\n true,\n );\n const goal = {\n goalFrameOpeningInterior: p.goal_frame_opening_interior,\n goalPostThickness: p.goal_post_thickness,\n goalDepth: p.goal_depth,\n };\n add(\"goal_net\", F.goalNet(goal), col(\"goal_net\"), gx, 0, true, false);\n add(\"goal_frame\", F.goalFrame(goal), col(\"goal_frame\"), gx, 0, true, false);\n add(\n \"goal_line\",\n F.goalLine({\n goalFrameWidth: p.goal_frame_width,\n lineThickness: p.goal_line_thickness,\n goalLineFullDiameter: Boolean(p.goal_line_full_diameter),\n goalCircleRadius: p.goal_circle_radius,\n npoints,\n }),\n col(\"goal_line\"),\n gx,\n 0,\n true,\n false,\n );\n add(\n \"face_off_marker\",\n F.faceOffMarker({\n shape: p.center_face_off_marker_shape ?? \"O\",\n featureThickness: p.center_face_off_marker_side_width ?? 0,\n sideLength: p.center_face_off_marker_side_length ?? 0,\n featureRadius: CENTER_FACE_OFF_MARKER_RADIUS,\n npoints,\n }),\n col(\"center_face_off_marker\"),\n 0,\n 0,\n false,\n false,\n );\n add(\n \"face_off_marker\",\n F.faceOffMarker({\n shape: p.corner_face_off_marker_shape ?? \"O\",\n featureThickness: CORNER_FACE_OFF_MARKER_BAR_WIDTH,\n sideLength: CORNER_FACE_OFF_MARKER_BAR_LENGTH,\n featureRadius: p.corner_face_off_marker_radius ?? 0,\n npoints,\n }),\n col(\"corner_face_off_marker\"),\n (p.restraining_line_outer_edge_to_center ?? 0) + (p.corner_face_off_marker_to_attack_line_outer ?? 0) / 2,\n W / 2 - (p.corner_face_off_marker_to_boards ?? 0),\n true,\n true,\n );\n // Display range (geom-lacrosse.R 1219-1330) in native units; then converted (documented divergence 1), translated, rotated.\n // The full extents cover the apron and any benches, penalty boxes and officials' box outside the boards (sportyR #63).\n const boards = p.boards_thickness ?? 0;\n const hfl = Math.max(\n L / 2 + p.field_apron_thickness,\n (p.bench_separation ?? 0) / 2 + (p.bench_length ?? 0) + boards,\n (p.penalty_box_separation ?? 0) / 2 + (p.penalty_box_length ?? 0) + 2 * boards, // #72: two walls\n );\n const hfw =\n W / 2 +\n Math.max(p.field_apron_thickness, 2 * boards + Math.max(p.bench_depth ?? 0, p.penalty_box_depth ?? 0));\n const inX = [-(L / 2 + boards), L / 2 + boards] as const;\n const off = [0, hfl] as const;\n const def = [-hfl, 0] as const;\n const X: Readonly<Record<LacrosseDisplayRange, readonly [number, number]>> = {\n full: [-hfl, hfl],\n in_bounds_only: inX,\n \"in bounds only\": inX,\n offense: off,\n offence: off,\n offensivehalffield: off,\n offensive_half_field: off,\n \"offensive half field\": off,\n defense: def,\n defence: def,\n defensivehalffield: def,\n defensive_half_field: def,\n \"defensive half field\": def,\n };\n const inBounds = range === \"in_bounds_only\" || range === \"in bounds only\"; // every other key keeps y = ±hfw\n const [cx, cy] = convertLimits(\n X[range],\n inBounds ? [-(W / 2 + boards), W / 2 + boards] : [-hfw, hfw],\n from,\n units,\n );\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // R: NULL = none; transparent stands in\n return {\n sport: \"lacrosse\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle, createRectangle } from \"../shapes.js\";\n\n/** Optional arc resolution; undefined falls through to createCircle's default (1000, as in R). Same helper as basketball/features.ts. */\ntype Arc = { npoints?: number | undefined };\ntype CircleOpts = { center: Point; start: number; end: number; r: number } & Arc;\nconst circle = ({ npoints, ...o }: CircleOpts): Point[] =>\n npoints === undefined ? createCircle(o) : createCircle({ ...o, npoints });\n\n/** soccer_half_pitch: one half of the playing surface. */\nexport function halfPitch({\n pitchLength = 0,\n pitchWidth = 0,\n}: { pitchLength?: number; pitchWidth?: number } = {}): Point[] {\n return createRectangle(-pitchLength / 4, pitchLength / 4, -pitchWidth / 2, pitchWidth / 2);\n}\n\n/** soccer_pitch_apron: 9-point half outline including goal_depth padding. */\nexport function pitchApron({\n pitchLength = 0,\n pitchWidth = 0,\n pitchApronTouchline = 0,\n pitchApronGoalLine = 0,\n goalDepth = 0,\n}: {\n pitchLength?: number;\n pitchWidth?: number;\n pitchApronTouchline?: number;\n pitchApronGoalLine?: number;\n goalDepth?: number;\n} = {}): Point[] {\n const L = pitchLength / 2;\n const W = pitchWidth / 2;\n const x = L + pitchApronGoalLine + goalDepth;\n const y = W + pitchApronTouchline + goalDepth;\n return [\n [0, W],\n [L, W],\n [L, -W],\n [0, -W],\n [0, -y],\n [x, -y],\n [x, y],\n [0, y],\n [0, W],\n ];\n}\n\n/** soccer_touchline (features-soccer.R 105). */\nexport function touchline({\n pitchLength = 0,\n featureThickness = 0,\n}: { pitchLength?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(-pitchLength / 2, pitchLength / 2, -featureThickness, 0);\n}\n\n/** soccer_goal_line (R 129). */\nexport function goalLine({\n pitchWidth = 0,\n featureThickness = 0,\n}: { pitchWidth?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(-featureThickness, 0, -pitchWidth / 2, pitchWidth / 2);\n}\n\n/** soccer_halfway_line (R 160). */\nexport function halfwayLine({\n pitchWidth = 0,\n featureThickness = 0,\n}: { pitchWidth?: number; featureThickness?: number } = {}): Point[] {\n return createRectangle(-featureThickness / 2, featureThickness / 2, -pitchWidth / 2, pitchWidth / 2);\n}\n\n/** soccer_penalty_box (features-soccer.R 194): box outline + the penalty arc (outer arc then inner arc back), x <= 0 half, anchored at the goal line. */\nexport function penaltyBox({\n featureRadius = 0,\n featureThickness = 0,\n boxLength = 0,\n penaltyMarkDist = 0,\n goalWidth = 0,\n goalPostToBoxEdge = 0,\n npoints,\n}: {\n featureRadius?: number;\n featureThickness?: number;\n boxLength?: number;\n penaltyMarkDist?: number;\n goalWidth?: number;\n goalPostToBoxEdge?: number;\n} & Arc = {}): Point[] {\n const halfBoxWidth = goalWidth / 2 + goalPostToBoxEdge;\n const xOut = boxLength - penaltyMarkDist;\n const rInner = featureRadius - featureThickness;\n let startOuter = 0.5;\n let startInner = 0.5;\n if (featureRadius !== 0 && !(Math.abs(xOut / featureRadius) > 1 || Math.abs(xOut / rInner) > 1)) {\n startOuter = 1 - Math.acos(xOut / featureRadius) / Math.PI;\n startInner = 1 - Math.acos(xOut / rInner) / Math.PI;\n }\n return [\n [-featureThickness, halfBoxWidth],\n [-boxLength, halfBoxWidth],\n ...circle({ center: [-penaltyMarkDist, 0], start: startOuter, end: 1, r: featureRadius, npoints }),\n ...circle({ center: [-penaltyMarkDist, 0], start: 1, end: startInner, r: rInner, npoints }),\n [-boxLength, 0],\n [-(boxLength - featureThickness), 0],\n [-(boxLength - featureThickness), halfBoxWidth - featureThickness],\n [-featureThickness, halfBoxWidth - featureThickness],\n [-featureThickness, halfBoxWidth],\n ];\n}\n\n/** soccer_goal_box (R 272). */\nexport function goalBox({\n featureThickness: t = 0,\n boxLength: b = 0,\n goalWidth = 0,\n goalPostToBoxEdge = 0,\n}: {\n featureThickness?: number;\n boxLength?: number;\n goalWidth?: number;\n goalPostToBoxEdge?: number;\n} = {}): Point[] {\n const h = goalWidth / 2 + goalPostToBoxEdge;\n return [\n [-t, h],\n [-b, h],\n [-b, -h],\n [-t, -h],\n [-t, -(h - t)],\n [-(b - t), -(h - t)],\n [-(b - t), h - t],\n [-t, h - t],\n [-t, h],\n ];\n}\n\n/** soccer_corner_arc: quarter ring from pi to 1.5pi and back. */\nexport function cornerArc({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: 1, end: 1.5, r: featureRadius, npoints }),\n ...circle({ center: [0, 0], start: 1.5, end: 1, r: featureRadius - featureThickness, npoints }),\n ];\n}\n\n/** soccer_center_circle: ring, outer 0.5 -> 1.5, inner back. */\nexport function centerCircle({\n featureRadius = 0,\n featureThickness = 0,\n npoints,\n}: { featureRadius?: number; featureThickness?: number } & Arc = {}): Point[] {\n return [\n ...circle({ center: [0, 0], start: 0.5, end: 1.5, r: featureRadius, npoints }),\n ...circle({ center: [0, 0], start: 1.5, end: 0.5, r: featureRadius - featureThickness, npoints }),\n ];\n}\n\n/** soccer_center_mark (R 389): a full disc. */\nexport function centerMark({ featureRadius = 0, npoints }: { featureRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n}\n\n/** soccer_penalty_mark (R 410): a full disc. */\nexport function penaltyMark({ featureRadius = 0, npoints }: { featureRadius?: number } & Arc = {}): Point[] {\n return circle({ center: [0, 0], start: 0, end: 2, r: featureRadius, npoints });\n}\n\n/** soccer_corner_defensive_marks (features-soccer.R 445): a short tick perpendicular to the touchline or to the goal line; empty when neither flag is set (R returns a 0-row frame). */\nexport function cornerDefensiveMarks({\n featureThickness = 0,\n isTouchline = false,\n isGoalLine = false,\n depth = 0,\n separationFromLine = 0,\n}: {\n featureThickness?: number;\n isTouchline?: boolean;\n isGoalLine?: boolean;\n depth?: number;\n separationFromLine?: number;\n} = {}): Point[] {\n if (isTouchline)\n return createRectangle(\n -featureThickness / 2,\n featureThickness / 2,\n separationFromLine,\n separationFromLine + depth,\n );\n if (isGoalLine)\n return createRectangle(\n separationFromLine,\n separationFromLine + depth,\n -featureThickness / 2,\n featureThickness / 2,\n );\n return [];\n}\n\n/** soccer_goal: 9-point goal frame. */\nexport function goal({\n featureThickness: t = 0,\n goalWidth: w = 0,\n goalDepth: d = 0,\n}: { featureThickness?: number; goalWidth?: number; goalDepth?: number } = {}): Point[] {\n return [\n [0, w / 2 + t],\n [d + t, w / 2 + t],\n [d + t, -(w / 2 + t)],\n [0, -(w / 2 + t)],\n [0, -w / 2],\n [d, -w / 2],\n [d, w / 2],\n [0, w / 2],\n [0, w / 2 + t],\n ];\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `soccer_*` builder (prefix dropped), as used in `PolygonFeature.name` (13). */\nexport const SOCCER_FEATURES = [\n \"half_pitch\",\n \"pitch_apron\",\n \"touchline\",\n \"goal_line\",\n \"corner_arc\",\n \"halfway_line\",\n \"penalty_box\",\n \"goal_box\",\n \"center_circle\",\n \"penalty_mark\",\n \"center_mark\",\n \"corner_defensive_marks\",\n \"goal\",\n] as const;\nexport type SoccerFeature = (typeof SOCCER_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_soccer()` (13). */\nexport const SOCCER_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalfpitch\",\n \"offensive_half_pitch\",\n \"offensive half pitch\",\n \"defense\",\n \"defence\",\n \"defensivehalfpitch\",\n \"defensive_half_pitch\",\n \"defensive half pitch\",\n] as const;\nexport type SoccerDisplayRange = (typeof SOCCER_DISPLAY_RANGES)[number];\n\n/** The 15 argument names of `soccer_features_set_colors()`, in R's declaration order (colour keys are NOT feature names). */\nexport const SOCCER_COLOR_KEYS = [\n \"plot_background\",\n \"offensive_half_pitch\",\n \"defensive_half_pitch\",\n \"pitch_apron\",\n \"touchline\",\n \"goal_line\",\n \"corner_arc\",\n \"halfway_line\",\n \"center_circle\",\n \"center_mark\",\n \"penalty_box\",\n \"goal_box\",\n \"penalty_mark\",\n \"corner_defensive_mark\",\n \"goal\",\n] as const;\nexport type SoccerColorKey = (typeof SOCCER_COLOR_KEYS)[number];\n\n/** Defaults of `soccer_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const SOCCER_DEFAULT_COLORS: Readonly<Record<SoccerColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n offensive_half_pitch: \"#195f0c\",\n defensive_half_pitch: \"#195f0c\",\n pitch_apron: \"#195f0c\",\n touchline: \"#ffffff\",\n goal_line: \"#ffffff\",\n corner_arc: \"#ffffff\",\n halfway_line: \"#ffffff\",\n center_circle: \"#ffffff\",\n center_mark: \"#ffffff\",\n penalty_box: \"#ffffff\",\n goal_box: \"#ffffff\",\n penalty_mark: \"#ffffff\",\n corner_defensive_mark: \"#ffffff\",\n goal: \"#ffffff\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { SOCCER_LEAGUES, SOCCER_SPECS, type SoccerLeague, type SoccerParamUpdates } from \"../specs/soccer.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n SOCCER_DEFAULT_COLORS,\n SOCCER_DISPLAY_RANGES,\n type SoccerColorKey,\n type SoccerDisplayRange,\n type SoccerFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/**\n * Port of sportyR `geom_soccer()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` scales the points, anchors and display limits, as sportyR 2.4.0 does (#74).\n */\nexport function soccerPitch(\n league: SoccerLeague | (string & {}),\n opts: SurfaceOptions<SoccerParamUpdates, SoccerColorKey, SoccerDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(SOCCER_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown soccer league \"${league}\"; expected one of: ${SOCCER_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase(); // R: tolower() only — no trim\n if (!isOneOf(SOCCER_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown soccer display range \"${opts.displayRange}\"; expected one of: ${SOCCER_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(SOCCER_SPECS[key], opts.updates, []); // soccer has no array fields\n const colors = mergeColors(SOCCER_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: SoccerColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.pitch_units || \"ft\"); // R: pitch_units %or% \"ft\" (custom's \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.pitch_length;\n const W = p.pitch_width;\n const t = p.line_thickness;\n const features: Feature[] = [];\n const add = (\n name: SoccerFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n // Layers, in R's add_feature order (geom-soccer.R 326-545).\n const half = F.halfPitch({ pitchLength: L, pitchWidth: W });\n add(\"half_pitch\", half, col(\"defensive_half_pitch\"), -0.25 * L, 0, false, false);\n add(\"half_pitch\", half, col(\"offensive_half_pitch\"), 0.25 * L, 0, false, false);\n add(\n \"pitch_apron\",\n F.pitchApron({\n pitchLength: L,\n pitchWidth: W,\n pitchApronTouchline: p.pitch_apron_touchline,\n pitchApronGoalLine: p.pitch_apron_goal_line,\n goalDepth: p.goal_depth,\n }),\n col(\"pitch_apron\"),\n 0,\n 0,\n true,\n false,\n { stroke: col(\"pitch_apron\") },\n );\n add(\n \"touchline\",\n F.touchline({ pitchLength: L, featureThickness: t }),\n col(\"touchline\"),\n 0,\n W / 2,\n false,\n true,\n );\n add(\n \"goal_line\",\n F.goalLine({ pitchWidth: W, featureThickness: t }),\n col(\"goal_line\"),\n L / 2,\n 0,\n true,\n false,\n );\n add(\n \"corner_arc\",\n F.cornerArc({ featureRadius: p.corner_arc_radius, featureThickness: t, npoints }),\n col(\"corner_arc\"),\n L / 2 - t / 2,\n W / 2 - t / 2,\n true,\n true,\n );\n add(\n \"halfway_line\",\n F.halfwayLine({ pitchWidth: W, featureThickness: t }),\n col(\"halfway_line\"),\n 0,\n 0,\n false,\n false,\n );\n add(\n \"penalty_box\",\n F.penaltyBox({\n featureRadius: p.penalty_circle_radius,\n featureThickness: t,\n boxLength: p.penalty_box_length,\n penaltyMarkDist: p.penalty_mark_dist,\n goalWidth: p.goal_width,\n goalPostToBoxEdge: p.interior_of_goal_post_to_penalty_box,\n npoints,\n }),\n col(\"penalty_box\"),\n L / 2,\n 0,\n true,\n true,\n );\n add(\n \"goal_box\",\n F.goalBox({\n featureThickness: t,\n boxLength: p.goal_box_length,\n goalWidth: p.goal_width,\n goalPostToBoxEdge: p.interior_of_goal_post_to_goal_box,\n }),\n col(\"goal_box\"),\n L / 2,\n 0,\n true,\n false,\n );\n add(\n \"center_circle\",\n F.centerCircle({ featureRadius: p.center_circle_radius, featureThickness: t, npoints }),\n col(\"center_circle\"),\n 0,\n 0,\n true,\n false,\n );\n add(\n \"penalty_mark\",\n F.penaltyMark({ featureRadius: p.penalty_mark_radius, npoints }),\n col(\"penalty_mark\"),\n L / 2 - p.penalty_mark_dist,\n 0,\n true,\n false,\n );\n add(\n \"center_mark\",\n F.centerMark({ featureRadius: p.center_mark_radius, npoints }),\n col(\"center_mark\"),\n 0,\n 0,\n true,\n false,\n );\n const mark = {\n featureThickness: t,\n depth: p.defensive_mark_depth,\n separationFromLine: p.defensive_mark_separation_from_line ?? 0,\n };\n if (p.touchline_defensive_mark_visible)\n add(\n \"corner_defensive_marks\",\n F.cornerDefensiveMarks({ ...mark, isTouchline: true }),\n col(\"corner_defensive_mark\"),\n L / 2 - p.defensive_mark_distance,\n W / 2,\n true,\n true,\n );\n if (p.goal_line_defensive_mark_visible)\n add(\n \"corner_defensive_marks\",\n F.cornerDefensiveMarks({ ...mark, isGoalLine: true }),\n col(\"corner_defensive_mark\"),\n L / 2,\n W / 2 - p.defensive_mark_distance,\n true,\n true,\n );\n add(\n \"goal\",\n F.goal({ featureThickness: t, goalWidth: p.goal_width, goalDepth: p.goal_depth }),\n col(\"goal\"),\n L / 2 - t,\n 0,\n true,\n false,\n );\n // Display range (geom-soccer.R 547-677) in native units (the +5 is NOT scaled — R); then converted (documented divergence 1), translated, rotated.\n const hpl = L / 2 + 5;\n const hpw = W / 2 + 5;\n const inX = [-(L / 2 + t), L / 2 + t] as const;\n const off = [0, hpl] as const;\n const def = [-hpl, 0] as const;\n const X: Readonly<Record<SoccerDisplayRange, readonly [number, number]>> = {\n full: [-hpl, hpl],\n in_bounds_only: inX,\n \"in bounds only\": inX,\n offense: off,\n offence: off,\n offensivehalfpitch: off,\n offensive_half_pitch: off,\n \"offensive half pitch\": off,\n defense: def,\n defence: def,\n defensivehalfpitch: def,\n defensive_half_pitch: def,\n \"defensive half pitch\": def,\n };\n const inBounds = range === \"in_bounds_only\" || range === \"in bounds only\"; // every other key keeps y = ±hpw\n const [cx, cy] = convertLimits(X[range], inBounds ? [-(W / 2 + t), W / 2 + t] : [-hpw, hpw], from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // R: NULL = none; transparent stands in\n return {\n sport: \"soccer\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createCircle } from \"../shapes.js\";\nimport { reflectCoords } from \"../transform.js\";\n\n// ponytail: these five softball_* builders are line-for-line the baseball_* ones in features-softball.R, so reuse them.\nexport { base, homePlate, infieldDirt, pitchersPlate, runningLane } from \"../baseball/features.js\";\n\ntype Arc = { npoints?: number | undefined };\nconst circle = (o: { center: Point; start: number; end: number; r: number } & Arc): Point[] => {\n const { npoints, ...rest } = o;\n return npoints === undefined ? createCircle(rest) : createCircle({ ...rest, npoints });\n};\n\n/** softball_batters_box: 9-point half frame (closed at half the length, unlike baseball's), mirrored over the y axis. */\nexport function battersBox({\n battersBoxLength = 0,\n battersBoxWidth = 0,\n battersBoxYAdj = 0,\n battersBoxThickness: t = 0,\n}: {\n battersBoxLength?: number;\n battersBoxWidth?: number;\n battersBoxYAdj?: number;\n battersBoxThickness?: number;\n} = {}): Point[] {\n const w = battersBoxWidth / 2;\n const l = battersBoxLength / 2;\n const half: Point[] = [\n [0, l],\n [w, l],\n [w, -l],\n [0, -l],\n [0, -l + t],\n [w - t, -l + t],\n [w - t, l - t],\n [0, l - t],\n [0, l],\n ];\n return [...half, ...reflectCoords(half, { overX: false, overY: true })].map(\n ([x, y]): Point => [x, y + battersBoxYAdj],\n );\n}\n\n/** softball_catchers_box: a 9-point rectangular frame open toward home plate, from the batter's boxes' back edge. */\nexport function catchersBox({\n catchersBoxDepth: depth = 0,\n catchersBoxWidth: width = 0,\n battersBoxLength = 0,\n battersBoxYAdj = 0,\n catchersBoxThickness: t = 0,\n}: {\n catchersBoxDepth?: number;\n catchersBoxWidth?: number;\n battersBoxLength?: number;\n battersBoxYAdj?: number;\n catchersBoxThickness?: number;\n} = {}): Point[] {\n const w = width / 2;\n const front = -battersBoxLength / 2 + battersBoxYAdj;\n const back = front - depth;\n return [\n [w, front],\n [w, back],\n [-w, back],\n [-w, front],\n [-w + t, front],\n [-w + t, back + t],\n [w - t, back + t],\n [w - t, front],\n [w, front],\n ];\n}\n\n/** softball_foul_line: 5-point strip from the nearer of the batter's box's outer edge and front edge toward the pole. */\nexport function foulLine({\n isLine1b = false,\n lineDistance = 0,\n battersBoxLength = 0,\n battersBoxWidth = 0,\n battersBoxYAdj = 0,\n homePlateSideToBattersBox = 0,\n homePlateEdgeLength = 0,\n foulLineThickness: t = 0,\n}: {\n isLine1b?: boolean;\n lineDistance?: number;\n battersBoxLength?: number;\n battersBoxWidth?: number;\n battersBoxYAdj?: number;\n homePlateSideToBattersBox?: number;\n homePlateEdgeLength?: number;\n foulLineThickness?: number;\n} = {}): Point[] {\n const start = Math.min(\n homePlateEdgeLength / 2 + homePlateSideToBattersBox + battersBoxWidth,\n battersBoxLength / 2 + battersBoxYAdj,\n );\n const a = isLine1b ? Math.PI / 4 : (3 * Math.PI) / 4;\n const ex = lineDistance * Math.cos(a);\n const ey = lineDistance * Math.sin(a);\n const sx = isLine1b ? start : -start;\n const dt = isLine1b ? -t : t;\n return [\n [sx, start],\n [ex, ey],\n [ex + dt, ey],\n [sx + dt, start],\n [sx, start],\n ];\n}\n\n/** softball_pitchers_circle: the outer circle, then the inner one (radius less the line width) traced back. */\nexport const pitchersCircle = ({\n pitchersCircleRadius: r = 0,\n pitchersCircleThickness: t = 0,\n npoints,\n}: { pitchersCircleRadius?: number; pitchersCircleThickness?: number } & Arc = {}): Point[] => [\n ...circle({ center: [0, 0], start: 0, end: 2, r, npoints }),\n ...circle({ center: [0, 0], start: 2, end: 0, r: r - t, npoints }),\n];\n\n/**\n * softball_pitchers_lane: one side line from the pitcher's plate's end toward the inner front corner of the batter's box,\n * `pitchersLaneLength` long, relative to the plate's front edge (straight down when the two points coincide).\n */\nexport function pitchersLane({\n pitchersLaneLength: len = 0,\n pitchersPlateLength = 0,\n pitchersPlateFrontToHomePlate = 0,\n homePlateEdgeLength = 0,\n homePlateSideToBattersBox = 0,\n battersBoxLength = 0,\n battersBoxYAdj = 0,\n pitchersLaneThickness: t = 0,\n}: {\n pitchersLaneLength?: number;\n pitchersPlateLength?: number;\n pitchersPlateFrontToHomePlate?: number;\n homePlateEdgeLength?: number;\n homePlateSideToBattersBox?: number;\n battersBoxLength?: number;\n battersBoxYAdj?: number;\n pitchersLaneThickness?: number;\n} = {}): Point[] {\n const sx = pitchersPlateLength / 2;\n const dx = homePlateEdgeLength / 2 + homePlateSideToBattersBox - sx;\n const dy = battersBoxLength / 2 + battersBoxYAdj - pitchersPlateFrontToHomePlate;\n const theta = dx === 0 && dy === 0 ? -Math.PI / 2 : Math.atan2(dy, dx);\n const ex = sx + len * Math.cos(theta);\n const ey = len * Math.sin(theta);\n return [\n [sx, 0],\n [ex, ey],\n [ex - t, ey],\n [sx - t, 0],\n [sx, 0],\n ];\n}\n\n/** softball_coaches_box: a 7-point L along the first-base line (a = distance along it, d = distance outside it). */\nexport function coachesBox({\n baselineDistance = 0,\n coachesBoxDepth = 0,\n coachesBoxLength = 0,\n coachesBoxWidth = 0,\n coachesBoxThickness: t = 0,\n}: {\n baselineDistance?: number;\n coachesBoxDepth?: number;\n coachesBoxLength?: number;\n coachesBoxWidth?: number;\n coachesBoxThickness?: number;\n} = {}): Point[] {\n const aEnd = baselineDistance;\n const aStart = baselineDistance - coachesBoxLength;\n const dIn = coachesBoxDepth;\n const dOut = coachesBoxDepth + coachesBoxWidth;\n const ad: [number, number][] = [\n [aEnd, dIn],\n [aStart, dIn],\n [aStart, dOut],\n [aStart + t, dOut],\n [aStart + t, dIn + t],\n [aEnd, dIn + t],\n [aEnd, dIn],\n ];\n return ad.map(([a, d]): Point => [(a + d) / Math.SQRT2, (a - d) / Math.SQRT2]);\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `softball_*` builder (prefix dropped), as used in `PolygonFeature.name` (11). */\nexport const SOFTBALL_FEATURES = [\n \"infield_dirt\",\n \"home_plate\",\n \"base\",\n \"pitchers_plate\",\n \"batters_box\",\n \"catchers_box\",\n \"foul_line\",\n \"running_lane\",\n \"pitchers_circle\",\n \"pitchers_lane\",\n \"coaches_box\",\n] as const;\nexport type SoftballFeature = (typeof SOFTBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_softball()` (2). */\nexport const SOFTBALL_DISPLAY_RANGES = [\"full\", \"infield\"] as const;\nexport type SoftballDisplayRange = (typeof SOFTBALL_DISPLAY_RANGES)[number];\n\n/** The 11 argument names of `softball_features_set_colors()`, in R's declaration order. */\nexport const SOFTBALL_COLOR_KEYS = [\n \"plot_background\",\n \"infield_dirt\",\n \"base\",\n \"pitchers_plate\",\n \"batters_box\",\n \"catchers_box\",\n \"foul_line\",\n \"running_lane\",\n \"pitchers_circle\",\n \"pitchers_lane\",\n \"coaches_box\",\n] as const;\nexport type SoftballColorKey = (typeof SOFTBALL_COLOR_KEYS)[number];\n\n/** Defaults of `softball_features_set_colors()` (geom-softball.R 37): the background is the outfield grass, like baseball. */\nexport const SOFTBALL_DEFAULT_COLORS: Readonly<Record<SoftballColorKey, Color>> = {\n plot_background: \"#395d33\",\n infield_dirt: \"#9b7653\",\n base: \"#ffffff\",\n pitchers_plate: \"#ffffff\",\n batters_box: \"#ffffff\",\n catchers_box: \"#ffffff\",\n foul_line: \"#ffffff\",\n running_lane: \"#ffffff\",\n pitchers_circle: \"#ffffff\",\n pitchers_lane: \"#ffffff\",\n coaches_box: \"#ffffff\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n SOFTBALL_LEAGUES,\n SOFTBALL_SPECS,\n type SoftballLeague,\n type SoftballParamUpdates,\n} from \"../specs/softball.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n arcResolution,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n SOFTBALL_DEFAULT_COLORS,\n SOFTBALL_DISPLAY_RANGES,\n type SoftballColorKey,\n type SoftballDisplayRange,\n type SoftballFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/**\n * Port of sportyR `geom_softball()` (2.4.0): origin = back tip of home plate, +y toward centre field. `units` converts the\n * points, anchors and display limits, as R does for softball. Divergence: an unknown `displayRange` throws (R falls back to\n * \"full\").\n */\nexport function softballField(\n league: SoftballLeague | (string & {}),\n opts: SurfaceOptions<SoftballParamUpdates, SoftballColorKey, SoftballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(SOFTBALL_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown softball league \"${league}\"; expected one of: ${SOFTBALL_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(SOFTBALL_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown softball display range \"${opts.displayRange}\"; expected one of: ${SOFTBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(SOFTBALL_SPECS[key], opts.updates, []); // softball has no array fields\n const colors = mergeColors(SOFTBALL_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: SoftballColorKey): Color => colorAt(colors[k], 0);\n const npoints = arcResolution(opts.arcResolution);\n const from = normalizeUnit(p.field_units || \"ft\");\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const features: Feature[] = [];\n const add = (\n name: SoftballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX = false,\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY: false, xTrans, yTrans, rotation },\n conv ? { units: conv } : {},\n );\n const bl = p.baseline_distance;\n const ppf = p.pitchers_plate_front_to_home_plate;\n const box = {\n battersBoxLength: p.batters_box_length,\n battersBoxWidth: p.batters_box_width,\n battersBoxYAdj: p.batters_box_y_adj,\n };\n const foul = {\n ...box,\n homePlateSideToBattersBox: p.home_plate_side_to_batters_box,\n homePlateEdgeLength: p.home_plate_edge_length,\n foulLineThickness: p.line_width,\n };\n // Layers, in R's add_feature order (geom-softball.R 351-591).\n add(\n \"infield_dirt\",\n F.infieldDirt({\n homePlateCircleRadius: p.home_plate_circle_radius,\n foulLineToFoulGrass: p.foul_line_to_foul_grass,\n pitchersPlateDistance: ppf,\n infieldArcRadius: p.infield_arc_radius,\n npoints,\n }),\n col(\"infield_dirt\"),\n 0,\n 0,\n );\n add(\"home_plate\", F.homePlate({ homePlateEdgeLength: p.home_plate_edge_length }), col(\"base\"), 0, 0);\n add(\n \"base\",\n F.base({ baseSideLength: p.base_side_length, adjustXLeft: true }),\n col(\"base\"),\n bl * Math.cos(Math.PI / 4),\n bl * Math.sin(Math.PI / 4),\n ); // first base\n add(\"base\", F.base({ baseSideLength: p.base_side_length }), col(\"base\"), 0, bl * Math.SQRT2); // second base\n add(\n \"base\",\n F.base({ baseSideLength: p.base_side_length, adjustXRight: true }),\n col(\"base\"),\n bl * Math.cos((3 * Math.PI) / 4),\n bl * Math.sin((3 * Math.PI) / 4),\n ); // third base\n add(\n \"pitchers_plate\",\n F.pitchersPlate({\n pitchersPlateLength: p.pitchers_plate_length,\n pitchersPlateWidth: p.pitchers_plate_width,\n }),\n col(\"pitchers_plate\"),\n 0,\n ppf,\n );\n add(\n \"batters_box\",\n F.battersBox({ ...box, battersBoxThickness: p.line_width }),\n col(\"batters_box\"),\n p.home_plate_edge_length / 2 + p.home_plate_side_to_batters_box + p.batters_box_width / 2,\n 0,\n true,\n );\n add(\n \"catchers_box\",\n F.catchersBox({\n catchersBoxDepth: p.catchers_box_depth,\n catchersBoxWidth: p.catchers_box_width,\n battersBoxLength: p.batters_box_length,\n battersBoxYAdj: p.batters_box_y_adj,\n catchersBoxThickness: p.line_width,\n }),\n col(\"catchers_box\"),\n 0,\n 0,\n );\n add(\n \"foul_line\",\n F.foulLine({ ...foul, isLine1b: true, lineDistance: p.right_field_distance }),\n col(\"foul_line\"),\n 0,\n 0,\n );\n add(\"foul_line\", F.foulLine({ ...foul, lineDistance: p.left_field_distance }), col(\"foul_line\"), 0, 0);\n add(\n \"running_lane\",\n F.runningLane({\n runningLaneDepth: p.running_lane_depth,\n runningLaneLength: p.running_lane_length,\n runningLaneStartDistance: p.running_lane_start_distance,\n runningLaneThickness: p.line_width,\n }),\n col(\"running_lane\"),\n 0,\n 0,\n );\n add(\n \"pitchers_circle\",\n F.pitchersCircle({\n pitchersCircleRadius: p.pitchers_circle_radius,\n pitchersCircleThickness: p.line_width,\n npoints,\n }),\n col(\"pitchers_circle\"),\n 0,\n ppf,\n );\n add(\n \"pitchers_lane\",\n F.pitchersLane({\n pitchersLaneLength: p.pitchers_lane_length,\n pitchersPlateLength: p.pitchers_plate_length,\n pitchersPlateFrontToHomePlate: ppf,\n homePlateEdgeLength: p.home_plate_edge_length,\n homePlateSideToBattersBox: p.home_plate_side_to_batters_box,\n battersBoxLength: p.batters_box_length,\n battersBoxYAdj: p.batters_box_y_adj,\n pitchersLaneThickness: p.line_width,\n }),\n col(\"pitchers_lane\"),\n 0,\n ppf,\n true,\n );\n add(\n \"coaches_box\",\n F.coachesBox({\n baselineDistance: bl,\n coachesBoxDepth: p.coaches_box_depth,\n coachesBoxLength: p.coaches_box_length,\n coachesBoxWidth: p.coaches_box_width,\n coachesBoxThickness: p.line_width,\n }),\n col(\"coaches_box\"),\n 0,\n 0,\n true,\n );\n // Display range (geom-softball.R 594-646): the 5-unit padding is in the field's native units, converted with the field.\n const pad = 5;\n const full = range === \"full\";\n const xr: readonly [number, number] = full\n ? [p.left_field_distance * Math.cos((3 * Math.PI) / 4), p.right_field_distance * Math.cos(Math.PI / 4)]\n : [-p.infield_arc_radius - pad, p.infield_arc_radius + pad];\n const yr: readonly [number, number] = full\n ? [-p.backstop_radius - pad, p.center_field_distance + pad]\n : [-p.home_plate_circle_radius - pad, ppf + p.infield_arc_radius + pad];\n const [cx, cy] = convertLimits(xr, yr, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\"); // #395d33 unless hidden by the user\n return {\n sport: \"softball\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"home_plate\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createRectangle } from \"../shapes.js\";\n\n/** tennis_frontcourt_half: one quarter of the service area (ad or deuce side of one half), x 0..serviceline. */\nexport const frontcourtHalf = ({\n servicelineDistance = 0,\n singlesWidth = 0,\n}: { servicelineDistance?: number; singlesWidth?: number } = {}): Point[] =>\n createRectangle(0, servicelineDistance, -singlesWidth / 4, singlesWidth / 4);\n\n/** tennis_backcourt: baseline-to-serviceline strip of one half. */\nexport const backcourt = ({\n courtLength = 0,\n servicelineDistance = 0,\n singlesWidth = 0,\n}: { courtLength?: number; servicelineDistance?: number; singlesWidth?: number } = {}): Point[] =>\n createRectangle(0, courtLength / 2 - servicelineDistance, -singlesWidth / 2, singlesWidth / 2);\n\n/** tennis_doubles_alley: one doubles alley strip along the full length. */\nexport const doublesAlley = ({\n courtLength = 0,\n featureThickness = 0,\n}: { courtLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-courtLength / 2, courtLength / 2, 0, featureThickness);\n\n/** tennis_baseline: baseline, drawn inward of the anchor. */\nexport const baseline = ({\n courtWidth = 0,\n featureThickness = 0,\n}: { courtWidth?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-featureThickness, 0, -courtWidth / 2, courtWidth / 2);\n\n/** tennis_sideline: sideline along the full length, drawn inward of the anchor. */\nexport const sideline = ({\n courtLength = 0,\n featureThickness = 0,\n}: { courtLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-courtLength / 2, courtLength / 2, -featureThickness, 0);\n\n/** tennis_court_apron: 9-point half frame — inner court edge then the backstop/sidestop outer edge back to the start. */\nexport function courtApron({\n courtLength = 0,\n courtWidth = 0,\n backstopDistance = 0,\n sidestopDistance = 0,\n}: {\n courtLength?: number;\n courtWidth?: number;\n backstopDistance?: number;\n sidestopDistance?: number;\n} = {}): Point[] {\n const L = courtLength / 2;\n const W = courtWidth / 2;\n return [\n [0, W],\n [L, W],\n [L, -W],\n [0, -W],\n [0, -(W + sidestopDistance)],\n [L + backstopDistance, -(W + sidestopDistance)],\n [L + backstopDistance, W + sidestopDistance],\n [0, W + sidestopDistance],\n [0, W],\n ];\n}\n\n/** tennis_serviceline: the line across the court at the service distance. */\nexport const serviceline = ({\n singlesWidth = 0,\n featureThickness = 0,\n}: { singlesWidth?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-featureThickness, 0, -singlesWidth / 2, singlesWidth / 2);\n\n/** tennis_center_serviceline: line splitting the service boxes. */\nexport const centerServiceline = ({\n centerServicelineLength = 0,\n featureThickness = 0,\n}: { centerServicelineLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(0, centerServicelineLength, -featureThickness / 2, featureThickness / 2);\n\n/** tennis_center_mark: tick at the baseline centre. */\nexport const centerMark = ({\n centerMarkLength = 0,\n featureThickness = 0,\n}: { centerMarkLength?: number; featureThickness?: number } = {}): Point[] =>\n createRectangle(-centerMarkLength, 0, -featureThickness / 2, featureThickness / 2);\n\n/** tennis_net: thin rectangle along y at x = 0. */\nexport const net = ({\n featureThickness = 0,\n netLength = 0,\n}: { featureThickness?: number; netLength?: number } = {}): Point[] =>\n createRectangle(-featureThickness / 2, featureThickness / 2, -netLength / 2, netLength / 2);\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `tennis_*` builder (prefix dropped), as used in `PolygonFeature.name` (10). */\nexport const TENNIS_FEATURES = [\n \"court_apron\",\n \"doubles_alley\",\n \"backcourt\",\n \"frontcourt_half\",\n \"baseline\",\n \"sideline\",\n \"serviceline\",\n \"center_serviceline\",\n \"center_mark\",\n \"net\",\n] as const;\nexport type TennisFeature = (typeof TENNIS_FEATURES)[number];\n\n/** Keys of the `switch(tolower(display_range))` in sportyR `geom_tennis()` (R's 19, incl. the `receivice*` typos) plus the 3 correct spellings (documented divergence 4). */\nexport const TENNIS_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"serve\",\n \"serving\",\n \"servicehalf\",\n \"service_half\",\n \"service half\",\n \"servinghalf\",\n \"serving_half\",\n \"serving half\",\n \"receive\",\n \"receiving\",\n \"receivicehalf\",\n \"receivice_half\",\n \"receivice half\",\n \"receivinghalf\",\n \"receiving_half\",\n \"receiving half\",\n \"receivehalf\",\n \"receive_half\",\n \"receive half\",\n] as const;\nexport type TennisDisplayRange = (typeof TENNIS_DISPLAY_RANGES)[number];\n\n/** The 13 argument names of `tennis_features_set_colors()`, in R's declaration order. */\nexport const TENNIS_COLOR_KEYS = [\n \"plot_background\",\n \"baseline\",\n \"singles_sideline\",\n \"doubles_sideline\",\n \"serviceline\",\n \"center_serviceline\",\n \"center_mark\",\n \"ad_court\",\n \"deuce_court\",\n \"backcourt\",\n \"doubles_alley\",\n \"court_apron\",\n \"net\",\n] as const;\nexport type TennisColorKey = (typeof TENNIS_COLOR_KEYS)[number];\n\n/** Defaults of `tennis_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const TENNIS_DEFAULT_COLORS: Readonly<Record<TennisColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n baseline: \"#ffffff\",\n singles_sideline: \"#ffffff\",\n doubles_sideline: \"#ffffff\",\n serviceline: \"#ffffff\",\n center_serviceline: \"#ffffff\",\n center_mark: \"#ffffff\",\n ad_court: \"#395d33\",\n deuce_court: \"#395d33\",\n backcourt: \"#395d33\",\n doubles_alley: \"#395d33\",\n court_apron: \"#395d33\",\n net: \"#d3d3d3\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport { TENNIS_LEAGUES, TENNIS_SPECS, type TennisLeague, type TennisParamUpdates } from \"../specs/tennis.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n TENNIS_DEFAULT_COLORS,\n TENNIS_DISPLAY_RANGES,\n type TennisColorKey,\n type TennisDisplayRange,\n type TennisFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\ntype Side = \"serve\" | \"receive\" | \"full\" | \"in\";\nconst SIDE: Readonly<Record<TennisDisplayRange, Side>> = {\n full: \"full\",\n in_bounds_only: \"in\",\n \"in bounds only\": \"in\",\n serve: \"serve\",\n serving: \"serve\",\n servicehalf: \"serve\",\n service_half: \"serve\",\n \"service half\": \"serve\",\n servinghalf: \"serve\",\n serving_half: \"serve\",\n \"serving half\": \"serve\",\n receive: \"receive\",\n receiving: \"receive\",\n receivicehalf: \"receive\",\n receivice_half: \"receive\",\n \"receivice half\": \"receive\",\n receivinghalf: \"receive\",\n receiving_half: \"receive\",\n \"receiving half\": \"receive\",\n receivehalf: \"receive\",\n receive_half: \"receive\",\n \"receive half\": \"receive\",\n};\n\n/**\n * Port of sportyR `geom_tennis()`: one PolygonFeature per ggplot layer R adds, in R's layer order (23 polygons).\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); the correctly spelled\n * `receive(-| )half` keys are accepted (R only has the `receivice*` typos); `units` scales the points, anchors and display limits, as sportyR 2.4.0 does (#74).\n */\nexport function tennisCourt(\n league: TennisLeague | (string & {}),\n opts: SurfaceOptions<TennisParamUpdates, TennisColorKey, TennisDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(TENNIS_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown tennis league \"${league}\"; expected one of: ${TENNIS_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase(); // R: tolower() only, no trim\n if (!isOneOf(TENNIS_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown tennis display range \"${opts.displayRange}\"; expected one of: ${TENNIS_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(TENNIS_SPECS[key], opts.updates, []); // tennis has no array fields\n const colors = mergeColors(TENNIS_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: TennisColorKey): Color => colorAt(colors[k], 0);\n const from = normalizeUnit(p.court_units || \"ft\"); // R: court_units %or% \"ft\" (custom's \"\")\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.court_length;\n const S = p.singles_width;\n const D = p.doubles_width;\n const t = p.line_thickness;\n const sl = p.serviceline_distance;\n const features: Feature[] = [];\n const add = (\n name: TennisFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n // Layers, in R's add_feature order (geom-tennis.R 286-480).\n add(\n \"court_apron\",\n F.courtApron({\n courtLength: L,\n courtWidth: D,\n backstopDistance: p.backstop_distance,\n sidestopDistance: p.sidestop_distance,\n }),\n col(\"court_apron\"),\n 0,\n 0,\n true,\n false,\n { stroke: col(\"court_apron\") },\n );\n add(\n \"doubles_alley\",\n F.doublesAlley({ courtLength: L, featureThickness: (D - S) / 2 }),\n col(\"doubles_alley\"),\n 0,\n S / 2,\n false,\n true,\n );\n add(\n \"backcourt\",\n F.backcourt({ courtLength: L, servicelineDistance: sl, singlesWidth: S }),\n col(\"backcourt\"),\n sl,\n 0,\n true,\n false,\n );\n const quarter = F.frontcourtHalf({ servicelineDistance: sl, singlesWidth: S });\n add(\"frontcourt_half\", quarter, col(\"ad_court\"), 0, 0.25 * S, false, false);\n add(\"frontcourt_half\", quarter, col(\"ad_court\"), -sl, -0.25 * S, false, false); // R: `-x %or% 0` parses as (-x) %or% 0\n add(\"frontcourt_half\", quarter, col(\"deuce_court\"), 0, -0.25 * S, false, false);\n add(\"frontcourt_half\", quarter, col(\"deuce_court\"), -sl, 0.25 * S, false, false);\n add(\"baseline\", F.baseline({ courtWidth: D, featureThickness: t }), col(\"baseline\"), L / 2, 0, true, false);\n const side = F.sideline({ courtLength: L, featureThickness: t });\n add(\"sideline\", side, col(\"doubles_sideline\"), 0, D / 2, false, true);\n add(\"sideline\", side, col(\"singles_sideline\"), 0, S / 2, false, true);\n add(\n \"serviceline\",\n F.serviceline({ singlesWidth: S, featureThickness: t }),\n col(\"serviceline\"),\n sl,\n 0,\n true,\n false,\n );\n add(\n \"center_serviceline\",\n F.centerServiceline({ centerServicelineLength: sl, featureThickness: t }),\n col(\"center_serviceline\"),\n 0,\n 0,\n true,\n false,\n );\n add(\n \"center_mark\",\n F.centerMark({ centerMarkLength: p.center_mark_length, featureThickness: t }),\n col(\"center_mark\"),\n L / 2,\n 0,\n true,\n false,\n );\n add(\"net\", F.net({ featureThickness: t, netLength: p.net_length }), col(\"net\"), 0, 0, false, false);\n // Display range (geom-tennis.R 485-560) in native units (the +5 and 1.5 are NOT scaled, as in R); then converted, translated, rotated.\n // R's `%or% 20` / `%or% 10` never fire: the vendored custom spec holds 0, not NULL (measured: custom without backstop = +-44).\n const hcl = L / 2 + p.backstop_distance + 5;\n const hcw = D / 2 + p.sidestop_distance + 5;\n const kind = SIDE[range];\n const xr: readonly [number, number] =\n kind === \"in\"\n ? [-(L / 2 + t), L / 2 + t]\n : kind === \"serve\"\n ? [-hcl, 1.5]\n : kind === \"receive\"\n ? [-1.5, hcl]\n : [-hcl, hcl];\n const yr: readonly [number, number] = kind === \"in\" ? [-(D / 2 + t), D / 2 + t] : [-hcw, hcw];\n const [cx, cy] = convertLimits(xr, yr, from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\");\n return {\n sport: \"tennis\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import type { Point } from \"../scene.js\";\nimport { createRectangle } from \"../shapes.js\";\n\n/** 9-point half frame: court edge, then the outer edge `padEnd`/`padSide` beyond it, back to the start. */\nfunction frame(courtLength: number, courtWidth: number, padEnd: number, padSide: number): Point[] {\n const L = courtLength / 2;\n const W = courtWidth / 2;\n return [\n [0, W],\n [L, W],\n [L, -W],\n [0, -W],\n [0, -W - padSide],\n [L + padEnd, -W - padSide],\n [L + padEnd, W + padSide],\n [0, W + padSide],\n [0, W],\n ];\n}\n\n/** volleyball_free_zone: half frame padded by the free zone. */\nexport function freeZone({\n courtLength = 0,\n courtWidth = 0,\n freeZoneEndLine = 0,\n freeZoneSideline = 0,\n}: {\n courtLength?: number;\n courtWidth?: number;\n freeZoneEndLine?: number;\n freeZoneSideline?: number;\n} = {}): Point[] {\n return frame(courtLength, courtWidth, freeZoneEndLine, freeZoneSideline);\n}\n\n/** volleyball_court_apron: half frame padded by the apron. */\nexport function courtApron({\n courtLength = 0,\n courtWidth = 0,\n courtApronEndLine = 0,\n courtApronSideline = 0,\n}: {\n courtLength?: number;\n courtWidth?: number;\n courtApronEndLine?: number;\n courtApronSideline?: number;\n} = {}): Point[] {\n return frame(courtLength, courtWidth, courtApronEndLine, courtApronSideline);\n}\n\n/** volleyball_front_zone: centre line to attack line. */\nexport function frontZone({\n attackLineEdgeToCenterLine = 0,\n courtWidth = 0,\n}: { attackLineEdgeToCenterLine?: number; courtWidth?: number } = {}): Point[] {\n return createRectangle(0, attackLineEdgeToCenterLine, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_backcourt: centred on its own midpoint (the anchor supplies the offset). */\nexport function backcourt({\n attackLineEdgeToCenterLine = 0,\n courtLength = 0,\n courtWidth = 0,\n}: { attackLineEdgeToCenterLine?: number; courtLength?: number; courtWidth?: number } = {}): Point[] {\n const len = courtLength / 2 - attackLineEdgeToCenterLine;\n return createRectangle(-len / 2, len / 2, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_end_line. */\nexport function endLine({\n courtWidth = 0,\n lineThickness = 0,\n}: { courtWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness, 0, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_sideline. */\nexport function sideline({\n courtLength = 0,\n lineThickness = 0,\n}: { courtLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-courtLength / 2, courtLength / 2, -lineThickness, 0);\n}\n\n/** volleyball_attack_line. */\nexport function attackLine({\n courtWidth = 0,\n lineThickness = 0,\n}: { courtWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness, 0, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_center_line. */\nexport function centerLine({\n courtWidth = 0,\n lineThickness = 0,\n}: { courtWidth?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness / 2, lineThickness / 2, -courtWidth / 2, courtWidth / 2);\n}\n\n/** volleyball_service_zone_mark. */\nexport function serviceZoneMark({\n serviceZoneMarkLength = 0,\n lineThickness = 0,\n}: { serviceZoneMarkLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(0, serviceZoneMarkLength, -lineThickness, 0);\n}\n\n/** volleyball_substitution_zone_dash: one dash of the dashed extension of the attack line beyond the sideline. */\nexport function substitutionZoneDash({\n dashLength = 0,\n lineThickness = 0,\n}: { dashLength?: number; lineThickness?: number } = {}): Point[] {\n return createRectangle(-lineThickness, 0, 0, dashLength);\n}\n","import type { Color } from \"../scene.js\";\n\n/** One name per sportyR `volleyball_*` builder (prefix dropped), as used in `PolygonFeature.name` (10). */\nexport const VOLLEYBALL_FEATURES = [\n \"free_zone\",\n \"front_zone\",\n \"backcourt\",\n \"court_apron\",\n \"service_zone_mark\",\n \"attack_line\",\n \"substitution_zone_dash\",\n \"center_line\",\n \"end_line\",\n \"sideline\",\n] as const;\nexport type VolleyballFeature = (typeof VOLLEYBALL_FEATURES)[number];\n\n/** Verbatim keys of the `switch(tolower(display_range))` in sportyR `geom_volleyball()` (13). */\nexport const VOLLEYBALL_DISPLAY_RANGES = [\n \"full\",\n \"in_bounds_only\",\n \"in bounds only\",\n \"offense\",\n \"offence\",\n \"offensivehalfcourt\",\n \"offensive_half_court\",\n \"offensive half court\",\n \"defense\",\n \"defence\",\n \"defensivehalfcourt\",\n \"defensive_half_court\",\n \"defensive half court\",\n] as const;\nexport type VolleyballDisplayRange = (typeof VOLLEYBALL_DISPLAY_RANGES)[number];\n\n/** The 12 argument names of `volleyball_features_set_colors()` (colour keys are NOT feature names). */\nexport const VOLLEYBALL_COLOR_KEYS = [\n \"plot_background\",\n \"free_zone\",\n \"front_zone\",\n \"defensive_backcourt\",\n \"offensive_backcourt\",\n \"court_apron\",\n \"end_line\",\n \"sideline\",\n \"attack_line\",\n \"center_line\",\n \"service_zone_mark\",\n \"substitution_zone\",\n] as const;\nexport type VolleyballColorKey = (typeof VOLLEYBALL_COLOR_KEYS)[number];\n\n/** Defaults of `volleyball_features_set_colors()` (R's plot_background default is NULL; transparent here). */\nexport const VOLLEYBALL_DEFAULT_COLORS: Readonly<Record<VolleyballColorKey, Color>> = {\n plot_background: \"#ffffff00\",\n free_zone: \"#d2ab6f\",\n front_zone: \"#d2ab6f\",\n defensive_backcourt: \"#d2ab6f\",\n offensive_backcourt: \"#d2ab6f\",\n court_apron: \"#d2ab6f\",\n end_line: \"#000000\",\n sideline: \"#000000\",\n attack_line: \"#000000\",\n center_line: \"#000000\",\n service_zone_mark: \"#000000\",\n substitution_zone: \"#000000\",\n};\n","import type { Color, Feature, Point, Scene, SurfaceOptions } from \"../scene.js\";\nimport {\n VOLLEYBALL_LEAGUES,\n VOLLEYBALL_SPECS,\n type VolleyballLeague,\n type VolleyballParamUpdates,\n} from \"../specs/volleyball.js\";\nimport {\n UnknownDisplayRangeError,\n UnknownLeagueError,\n addFeature,\n colorAt,\n convertLimits,\n displayBbox,\n mergeColors,\n mergeParams,\n} from \"../surface.js\";\nimport { normalizeUnit } from \"../units.js\";\nimport * as F from \"./features.js\";\nimport {\n VOLLEYBALL_DEFAULT_COLORS,\n VOLLEYBALL_DISPLAY_RANGES,\n type VolleyballColorKey,\n type VolleyballDisplayRange,\n type VolleyballFeature,\n} from \"./types.js\";\n\nconst isOneOf = <T extends string>(list: readonly T[], v: string): v is T =>\n (list as readonly string[]).includes(v);\n\n/**\n * Port of sportyR `geom_volleyball()`: one PolygonFeature per ggplot layer R adds, in R's layer order.\n * Documented divergences: an unknown `displayRange` throws (R falls back to \"full\"); `units` scales the points, anchors and display limits, as sportyR 2.4.0 does (#74).\n * Preserved R quirk: the substitution-zone loop repeats `substitution_zone_rep_pattern` times (0 gives none).\n */\nexport function volleyballCourt(\n league: VolleyballLeague | (string & {}),\n opts: SurfaceOptions<VolleyballParamUpdates, VolleyballColorKey, VolleyballDisplayRange> = {},\n): Scene {\n const key = league.toLowerCase();\n if (!isOneOf(VOLLEYBALL_LEAGUES, key))\n throw new UnknownLeagueError(\n `Unknown volleyball league \"${league}\"; expected one of: ${VOLLEYBALL_LEAGUES.join(\", \")}`,\n );\n const range = (opts.displayRange ?? \"full\").toLowerCase();\n if (!isOneOf(VOLLEYBALL_DISPLAY_RANGES, range))\n throw new UnknownDisplayRangeError(\n `Unknown volleyball display range \"${opts.displayRange}\"; expected one of: ${VOLLEYBALL_DISPLAY_RANGES.join(\", \")}`,\n );\n const p = mergeParams(VOLLEYBALL_SPECS[key], opts.updates, []);\n const colors = mergeColors(VOLLEYBALL_DEFAULT_COLORS, opts.colorUpdates);\n const col = (k: VolleyballColorKey): Color => colorAt(colors[k], 0);\n const from = normalizeUnit(p.court_units);\n const units = normalizeUnit(opts.units ?? from);\n const conv = units === from ? undefined : ([from, units] as const);\n const { rotation = 0, xTrans = 0, yTrans = 0 } = opts;\n const L = p.court_length;\n const W = p.court_width;\n const t = p.line_thickness;\n const a = p.attack_line_edge_to_center_line;\n const features: Feature[] = [];\n const add = (\n name: VolleyballFeature,\n pts: readonly Point[],\n fill: Color,\n xAnchor: number,\n yAnchor: number,\n reflectX: boolean,\n reflectY: boolean,\n extra: { stroke?: Color } = {},\n ): void =>\n addFeature(\n features,\n name,\n pts,\n fill,\n { xAnchor, yAnchor, reflectX, reflectY, xTrans, yTrans, rotation },\n conv ? { ...extra, units: conv } : extra,\n );\n // Layers, in R's add_feature order (geom-volleyball.R 243-491).\n const fz = col(\"free_zone\");\n add(\n \"free_zone\",\n F.freeZone({\n courtLength: L,\n courtWidth: W,\n freeZoneEndLine: p.free_zone_end_line,\n freeZoneSideline: p.free_zone_sideline,\n }),\n fz,\n 0,\n 0,\n true,\n false,\n { stroke: fz },\n );\n const fr = col(\"front_zone\");\n add(\"front_zone\", F.frontZone({ attackLineEdgeToCenterLine: a, courtWidth: W }), fr, 0, 0, true, false, {\n stroke: fr,\n });\n const back = F.backcourt({ attackLineEdgeToCenterLine: a, courtLength: L, courtWidth: W });\n const mid = a + (L / 2 - a) / 2;\n add(\"backcourt\", back, col(\"defensive_backcourt\"), -mid, 0, false, false);\n add(\"backcourt\", back, col(\"offensive_backcourt\"), mid, 0, false, false);\n const ap = col(\"court_apron\");\n add(\n \"court_apron\",\n F.courtApron({\n courtLength: L,\n courtWidth: W,\n courtApronEndLine: p.court_apron_end_line,\n courtApronSideline: p.court_apron_sideline,\n }),\n ap,\n 0,\n 0,\n true,\n false,\n { stroke: ap },\n );\n add(\n \"service_zone_mark\",\n F.serviceZoneMark({ serviceZoneMarkLength: p.service_zone_mark_length, lineThickness: t }),\n col(\"service_zone_mark\"),\n L / 2 + p.service_zone_mark_to_end_line,\n W / 2,\n true,\n true,\n );\n add(\n \"attack_line\",\n F.attackLine({ courtWidth: W, lineThickness: t }),\n col(\"attack_line\"),\n a,\n 0,\n true,\n false,\n );\n // R looks the dash up as `court_features$substitution_zone` (`$` partial match resolves to the dash builder).\n let yk = W / 2 + p.substitution_zone_dash_breaks;\n const dash = F.substitutionZoneDash({ dashLength: p.substitution_zone_dash_length, lineThickness: t });\n for (let i = 0; i < p.substitution_zone_rep_pattern; i++) {\n add(\"substitution_zone_dash\", dash, col(\"substitution_zone\"), a, yk, true, true);\n yk += p.substitution_zone_dash_breaks + p.substitution_zone_dash_length;\n }\n add(\n \"center_line\",\n F.centerLine({ courtWidth: W, lineThickness: t }),\n col(\"center_line\"),\n 0,\n 0,\n false,\n false,\n );\n add(\"end_line\", F.endLine({ courtWidth: W, lineThickness: t }), col(\"end_line\"), L / 2, 0, true, false);\n add(\"sideline\", F.sideline({ courtLength: L, lineThickness: t }), col(\"sideline\"), 0, W / 2, false, true);\n // Display range (geom-volleyball.R 493-620): the free zone is the padding (no +5).\n const hcl = L / 2 + p.free_zone_end_line;\n const hcw = W / 2 + p.free_zone_sideline;\n const inX = [-(L / 2 + t), L / 2 + t] as const;\n const off = [0, hcl] as const;\n const def = [-hcl, 0] as const;\n const X: Readonly<Record<VolleyballDisplayRange, readonly [number, number]>> = {\n full: [-hcl, hcl],\n in_bounds_only: inX,\n \"in bounds only\": inX,\n offense: off,\n offence: off,\n offensivehalfcourt: off,\n offensive_half_court: off,\n \"offensive half court\": off,\n defense: def,\n defence: def,\n defensivehalfcourt: def,\n defensive_half_court: def,\n \"defensive half court\": def,\n };\n const inBounds = range === \"in_bounds_only\" || range === \"in bounds only\";\n const [cx, cy] = convertLimits(X[range], inBounds ? [-(W / 2 + t), W / 2 + t] : [-hcw, hcw], from, units);\n const xlim = opts.xlim ?? [cx[0] + xTrans, cx[1] + xTrans];\n const ylim = opts.ylim ?? [cy[0] + yTrans, cy[1] + yTrans];\n const background = col(\"plot_background\");\n return {\n sport: \"volleyball\",\n league: key,\n units,\n bbox: displayBbox(xlim, ylim, rotation),\n origin: \"center\",\n ...(/^#[0-9a-f]{6}00$/i.test(background) ? {} : { background }),\n features,\n };\n}\n","import { baseballField } from \"./baseball/field.js\";\nimport {\n BASEBALL_COLOR_KEYS,\n BASEBALL_DISPLAY_RANGES,\n BASEBALL_FEATURES,\n type BaseballColorKey,\n type BaseballDisplayRange,\n} from \"./baseball/types.js\";\nimport { basketballCourt } from \"./basketball/court.js\";\nimport {\n BASKETBALL_COLOR_KEYS,\n BASKETBALL_DISPLAY_RANGES,\n BASKETBALL_FEATURES,\n type BasketballColorKey,\n type BasketballDisplayRange,\n} from \"./basketball/types.js\";\nimport { curlingSheet } from \"./curling/sheet.js\";\nimport {\n CURLING_COLOR_KEYS,\n CURLING_DISPLAY_RANGES,\n CURLING_FEATURES,\n type CurlingColorKey,\n type CurlingDisplayRange,\n} from \"./curling/types.js\";\nimport { UnknownLeagueError } from \"./errors.js\";\nimport { footballField } from \"./football/field.js\";\nimport {\n FOOTBALL_COLOR_KEYS,\n FOOTBALL_DISPLAY_RANGES,\n FOOTBALL_FEATURES,\n type FootballColorKey,\n type FootballDisplayRange,\n} from \"./football/types.js\";\nimport { hockeyRink } from \"./hockey/rink.js\";\nimport {\n HOCKEY_COLOR_KEYS,\n HOCKEY_DISPLAY_RANGES,\n HOCKEY_FEATURES,\n type HockeyColorKey,\n type HockeyDisplayRange,\n} from \"./hockey/types.js\";\nimport { lacrosseField } from \"./lacrosse/field.js\";\nimport {\n LACROSSE_COLOR_KEYS,\n LACROSSE_DISPLAY_RANGES,\n LACROSSE_FEATURES,\n type LacrosseColorKey,\n type LacrosseDisplayRange,\n} from \"./lacrosse/types.js\";\nimport type { Scene, Sport, SurfaceOptions } from \"./scene.js\";\nimport { soccerPitch } from \"./soccer/pitch.js\";\nimport {\n SOCCER_COLOR_KEYS,\n SOCCER_DISPLAY_RANGES,\n SOCCER_FEATURES,\n type SoccerColorKey,\n type SoccerDisplayRange,\n} from \"./soccer/types.js\";\nimport { softballField } from \"./softball/field.js\";\nimport {\n SOFTBALL_COLOR_KEYS,\n SOFTBALL_DISPLAY_RANGES,\n SOFTBALL_FEATURES,\n type SoftballColorKey,\n type SoftballDisplayRange,\n} from \"./softball/types.js\";\nimport { BASEBALL_LEAGUES, type BaseballLeague, type BaseballParamUpdates } from \"./specs/baseball.js\";\nimport {\n BASKETBALL_LEAGUES,\n type BasketballLeague,\n type BasketballParamUpdates,\n} from \"./specs/basketball.js\";\nimport { CURLING_LEAGUES, type CurlingLeague, type CurlingParamUpdates } from \"./specs/curling.js\";\nimport { FOOTBALL_LEAGUES, type FootballLeague, type FootballParamUpdates } from \"./specs/football.js\";\nimport { HOCKEY_LEAGUES, type HockeyLeague, type HockeyParamUpdates } from \"./specs/hockey.js\";\nimport { LACROSSE_LEAGUES, type LacrosseLeague, type LacrosseParamUpdates } from \"./specs/lacrosse.js\";\nimport { SOCCER_LEAGUES, type SoccerLeague, type SoccerParamUpdates } from \"./specs/soccer.js\";\nimport { SOFTBALL_LEAGUES, type SoftballLeague, type SoftballParamUpdates } from \"./specs/softball.js\";\nimport { TENNIS_LEAGUES, type TennisLeague, type TennisParamUpdates } from \"./specs/tennis.js\";\nimport {\n VOLLEYBALL_LEAGUES,\n type VolleyballLeague,\n type VolleyballParamUpdates,\n} from \"./specs/volleyball.js\";\nimport { tennisCourt } from \"./tennis/court.js\";\nimport {\n TENNIS_COLOR_KEYS,\n TENNIS_DISPLAY_RANGES,\n TENNIS_FEATURES,\n type TennisColorKey,\n type TennisDisplayRange,\n} from \"./tennis/types.js\";\nimport { volleyballCourt } from \"./volleyball/court.js\";\nimport {\n VOLLEYBALL_COLOR_KEYS,\n VOLLEYBALL_DISPLAY_RANGES,\n VOLLEYBALL_FEATURES,\n type VolleyballColorKey,\n type VolleyballDisplayRange,\n} from \"./volleyball/types.js\";\n\n/** Every sport `surface()` accepts, alphabetical. */\nexport const SPORTS = [\n \"baseball\",\n \"basketball\",\n \"curling\",\n \"football\",\n \"hockey\",\n \"lacrosse\",\n \"soccer\",\n \"softball\",\n \"tennis\",\n \"volleyball\",\n] as const;\n\nconst unknownSport = (sport: string): UnknownLeagueError =>\n new UnknownLeagueError(`Unknown sport \"${sport}\"; expected one of: ${SPORTS.join(\", \")}`);\n\n/** League accepted by `surface(sport, …)` for sport `S` (a generated league name; any string compiles). */\nexport type LeagueOf<S extends Sport> = S extends \"baseball\"\n ? BaseballLeague | (string & {})\n : S extends \"basketball\"\n ? BasketballLeague | (string & {})\n : S extends \"curling\"\n ? CurlingLeague | (string & {})\n : S extends \"football\"\n ? FootballLeague | (string & {})\n : S extends \"hockey\"\n ? HockeyLeague | (string & {})\n : S extends \"lacrosse\"\n ? LacrosseLeague | (string & {})\n : S extends \"soccer\"\n ? SoccerLeague | (string & {})\n : S extends \"softball\"\n ? SoftballLeague | (string & {})\n : S extends \"tennis\"\n ? TennisLeague | (string & {})\n : S extends \"volleyball\"\n ? VolleyballLeague | (string & {})\n : never;\n\n/** `surface()` options for sport `S`. */\nexport type OptionsOf<S extends Sport> = S extends \"baseball\"\n ? SurfaceOptions<BaseballParamUpdates, BaseballColorKey, BaseballDisplayRange>\n : S extends \"basketball\"\n ? SurfaceOptions<BasketballParamUpdates, BasketballColorKey, BasketballDisplayRange>\n : S extends \"curling\"\n ? SurfaceOptions<CurlingParamUpdates, CurlingColorKey, CurlingDisplayRange>\n : S extends \"football\"\n ? SurfaceOptions<FootballParamUpdates, FootballColorKey, FootballDisplayRange>\n : S extends \"hockey\"\n ? SurfaceOptions<HockeyParamUpdates, HockeyColorKey, HockeyDisplayRange>\n : S extends \"lacrosse\"\n ? SurfaceOptions<LacrosseParamUpdates, LacrosseColorKey, LacrosseDisplayRange>\n : S extends \"soccer\"\n ? SurfaceOptions<SoccerParamUpdates, SoccerColorKey, SoccerDisplayRange>\n : S extends \"softball\"\n ? SurfaceOptions<SoftballParamUpdates, SoftballColorKey, SoftballDisplayRange>\n : S extends \"tennis\"\n ? SurfaceOptions<TennisParamUpdates, TennisColorKey, TennisDisplayRange>\n : S extends \"volleyball\"\n ? SurfaceOptions<VolleyballParamUpdates, VolleyballColorKey, VolleyballDisplayRange>\n : never;\n\n/**\n * Build a surface scene for any of the ten sports. Options are typed per sport, so a misspelled option, colour key\n * or display range compiles to an error. A runtime `Sport` (or a union) goes through the generic overload; an unknown\n * sport (untyped callers) or league throws `UnknownLeagueError`.\n *\n * @example\n * ```ts\n * import { surface } from \"@sportsdataverse/sporty\";\n * import { toSVG } from \"@sportsdataverse/sporty/svg\";\n *\n * const rink = surface(\"hockey\", \"nhl\", { displayRange: \"offense\" });\n * toSVG(rink, { width: 480, precision: 2, arcs: \"svg\" });\n * ```\n */\nexport function surface(\n sport: \"baseball\",\n league: BaseballLeague | (string & {}),\n opts?: SurfaceOptions<BaseballParamUpdates, BaseballColorKey, BaseballDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"basketball\",\n league: BasketballLeague | (string & {}),\n opts?: SurfaceOptions<BasketballParamUpdates, BasketballColorKey, BasketballDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"curling\",\n league: CurlingLeague | (string & {}),\n opts?: SurfaceOptions<CurlingParamUpdates, CurlingColorKey, CurlingDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"football\",\n league: FootballLeague | (string & {}),\n opts?: SurfaceOptions<FootballParamUpdates, FootballColorKey, FootballDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"hockey\",\n league: HockeyLeague | (string & {}),\n opts?: SurfaceOptions<HockeyParamUpdates, HockeyColorKey, HockeyDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"lacrosse\",\n league: LacrosseLeague | (string & {}),\n opts?: SurfaceOptions<LacrosseParamUpdates, LacrosseColorKey, LacrosseDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"soccer\",\n league: SoccerLeague | (string & {}),\n opts?: SurfaceOptions<SoccerParamUpdates, SoccerColorKey, SoccerDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"softball\",\n league: SoftballLeague | (string & {}),\n opts?: SurfaceOptions<SoftballParamUpdates, SoftballColorKey, SoftballDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"tennis\",\n league: TennisLeague | (string & {}),\n opts?: SurfaceOptions<TennisParamUpdates, TennisColorKey, TennisDisplayRange>,\n): Scene;\nexport function surface(\n sport: \"volleyball\",\n league: VolleyballLeague | (string & {}),\n opts?: SurfaceOptions<VolleyballParamUpdates, VolleyballColorKey, VolleyballDisplayRange>,\n): Scene;\nexport function surface<S extends Sport>(sport: S, league: LeagueOf<S>, opts?: OptionsOf<S>): Scene;\nexport function surface(sport: Sport, league: string, opts: object = {}): Scene {\n switch (sport) {\n case \"baseball\":\n return baseballField(league, opts);\n case \"basketball\":\n return basketballCourt(league, opts);\n case \"curling\":\n return curlingSheet(league, opts);\n case \"football\":\n return footballField(league, opts);\n case \"hockey\":\n return hockeyRink(league, opts);\n case \"lacrosse\":\n return lacrosseField(league, opts);\n case \"soccer\":\n return soccerPitch(league, opts);\n case \"softball\":\n return softballField(league, opts);\n case \"tennis\":\n return tennisCourt(league, opts);\n case \"volleyball\":\n return volleyballCourt(league, opts);\n default:\n sport satisfies never;\n throw unknownSport(String(sport));\n }\n}\n\ninterface Discovery {\n leagues: readonly string[];\n features: readonly string[];\n displayRanges: readonly string[];\n colorKeys: readonly string[];\n}\n\nconst DISCOVERY: Readonly<Record<Sport, Discovery>> = {\n baseball: {\n leagues: BASEBALL_LEAGUES,\n features: BASEBALL_FEATURES,\n displayRanges: BASEBALL_DISPLAY_RANGES,\n colorKeys: BASEBALL_COLOR_KEYS,\n },\n basketball: {\n leagues: BASKETBALL_LEAGUES,\n features: BASKETBALL_FEATURES,\n displayRanges: BASKETBALL_DISPLAY_RANGES,\n colorKeys: BASKETBALL_COLOR_KEYS,\n },\n curling: {\n leagues: CURLING_LEAGUES,\n features: CURLING_FEATURES,\n displayRanges: CURLING_DISPLAY_RANGES,\n colorKeys: CURLING_COLOR_KEYS,\n },\n football: {\n leagues: FOOTBALL_LEAGUES,\n features: FOOTBALL_FEATURES,\n displayRanges: FOOTBALL_DISPLAY_RANGES,\n colorKeys: FOOTBALL_COLOR_KEYS,\n },\n hockey: {\n leagues: HOCKEY_LEAGUES,\n features: HOCKEY_FEATURES,\n displayRanges: HOCKEY_DISPLAY_RANGES,\n colorKeys: HOCKEY_COLOR_KEYS,\n },\n lacrosse: {\n leagues: LACROSSE_LEAGUES,\n features: LACROSSE_FEATURES,\n displayRanges: LACROSSE_DISPLAY_RANGES,\n colorKeys: LACROSSE_COLOR_KEYS,\n },\n soccer: {\n leagues: SOCCER_LEAGUES,\n features: SOCCER_FEATURES,\n displayRanges: SOCCER_DISPLAY_RANGES,\n colorKeys: SOCCER_COLOR_KEYS,\n },\n softball: {\n leagues: SOFTBALL_LEAGUES,\n features: SOFTBALL_FEATURES,\n displayRanges: SOFTBALL_DISPLAY_RANGES,\n colorKeys: SOFTBALL_COLOR_KEYS,\n },\n tennis: {\n leagues: TENNIS_LEAGUES,\n features: TENNIS_FEATURES,\n displayRanges: TENNIS_DISPLAY_RANGES,\n colorKeys: TENNIS_COLOR_KEYS,\n },\n volleyball: {\n leagues: VOLLEYBALL_LEAGUES,\n features: VOLLEYBALL_FEATURES,\n displayRanges: VOLLEYBALL_DISPLAY_RANGES,\n colorKeys: VOLLEYBALL_COLOR_KEYS,\n },\n};\n\n/** The discovery tables of `sport`; an unknown sport (untyped callers) throws `UnknownLeagueError`. */\nfunction discovery(sport: string): Discovery {\n if (!(SPORTS as readonly string[]).includes(sport)) throw unknownSport(sport);\n return DISCOVERY[sport as Sport];\n}\n\n/** League names accepted by `surface(sport, …)` (`custom` builds from all-zero defaults). */\nexport function leagues(sport: \"baseball\"): typeof BASEBALL_LEAGUES;\nexport function leagues(sport: \"basketball\"): typeof BASKETBALL_LEAGUES;\nexport function leagues(sport: \"curling\"): typeof CURLING_LEAGUES;\nexport function leagues(sport: \"football\"): typeof FOOTBALL_LEAGUES;\nexport function leagues(sport: \"hockey\"): typeof HOCKEY_LEAGUES;\nexport function leagues(sport: \"lacrosse\"): typeof LACROSSE_LEAGUES;\nexport function leagues(sport: \"soccer\"): typeof SOCCER_LEAGUES;\nexport function leagues(sport: \"softball\"): typeof SOFTBALL_LEAGUES;\nexport function leagues(sport: \"tennis\"): typeof TENNIS_LEAGUES;\nexport function leagues(sport: \"volleyball\"): typeof VOLLEYBALL_LEAGUES;\nexport function leagues(sport: Sport): readonly string[];\nexport function leagues(sport: Sport): readonly string[] {\n return discovery(sport).leagues;\n}\n\n/** Feature names a scene of this sport can contain (`Feature.name`). */\nexport function features(sport: \"baseball\"): typeof BASEBALL_FEATURES;\nexport function features(sport: \"basketball\"): typeof BASKETBALL_FEATURES;\nexport function features(sport: \"curling\"): typeof CURLING_FEATURES;\nexport function features(sport: \"football\"): typeof FOOTBALL_FEATURES;\nexport function features(sport: \"hockey\"): typeof HOCKEY_FEATURES;\nexport function features(sport: \"lacrosse\"): typeof LACROSSE_FEATURES;\nexport function features(sport: \"soccer\"): typeof SOCCER_FEATURES;\nexport function features(sport: \"softball\"): typeof SOFTBALL_FEATURES;\nexport function features(sport: \"tennis\"): typeof TENNIS_FEATURES;\nexport function features(sport: \"volleyball\"): typeof VOLLEYBALL_FEATURES;\nexport function features(sport: Sport): readonly string[];\nexport function features(sport: Sport): readonly string[] {\n return discovery(sport).features;\n}\n\n/** Values accepted for `SurfaceOptions.displayRange`. */\nexport function displayRanges(sport: \"baseball\"): typeof BASEBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: \"basketball\"): typeof BASKETBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: \"curling\"): typeof CURLING_DISPLAY_RANGES;\nexport function displayRanges(sport: \"football\"): typeof FOOTBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: \"hockey\"): typeof HOCKEY_DISPLAY_RANGES;\nexport function displayRanges(sport: \"lacrosse\"): typeof LACROSSE_DISPLAY_RANGES;\nexport function displayRanges(sport: \"soccer\"): typeof SOCCER_DISPLAY_RANGES;\nexport function displayRanges(sport: \"softball\"): typeof SOFTBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: \"tennis\"): typeof TENNIS_DISPLAY_RANGES;\nexport function displayRanges(sport: \"volleyball\"): typeof VOLLEYBALL_DISPLAY_RANGES;\nexport function displayRanges(sport: Sport): readonly string[];\nexport function displayRanges(sport: Sport): readonly string[] {\n return discovery(sport).displayRanges;\n}\n\n/** Keys accepted by `SurfaceOptions.colorUpdates`. */\nexport function colorKeys(sport: \"baseball\"): typeof BASEBALL_COLOR_KEYS;\nexport function colorKeys(sport: \"basketball\"): typeof BASKETBALL_COLOR_KEYS;\nexport function colorKeys(sport: \"curling\"): typeof CURLING_COLOR_KEYS;\nexport function colorKeys(sport: \"football\"): typeof FOOTBALL_COLOR_KEYS;\nexport function colorKeys(sport: \"hockey\"): typeof HOCKEY_COLOR_KEYS;\nexport function colorKeys(sport: \"lacrosse\"): typeof LACROSSE_COLOR_KEYS;\nexport function colorKeys(sport: \"soccer\"): typeof SOCCER_COLOR_KEYS;\nexport function colorKeys(sport: \"softball\"): typeof SOFTBALL_COLOR_KEYS;\nexport function colorKeys(sport: \"tennis\"): typeof TENNIS_COLOR_KEYS;\nexport function colorKeys(sport: \"volleyball\"): typeof VOLLEYBALL_COLOR_KEYS;\nexport function colorKeys(sport: Sport): readonly string[];\nexport function colorKeys(sport: Sport): readonly string[] {\n return discovery(sport).colorKeys;\n}\n","/** A data row: column name to value. */\nexport type Row = Record<string, unknown>;\n\n/**\n * A source coordinate frame: maps a data row to surface feet. The functions receive a two-key view\n * `{ x, y }` holding the caller's chosen input columns (see {@link toSurfaceFrame}), not the full row.\n * Return `null` for a missing coordinate, never `NaN`.\n */\nexport interface Frame {\n x: (r: Row) => number | null;\n y: (r: Row) => number | null;\n description: string;\n}\n\n/** `null`/`undefined`/`NaN` to null; numbers as-is; numeric strings parsed (blank gives null); anything else gives null. */\nconst num = (v: unknown): number | null => {\n if (typeof v === \"string\") {\n const s = v.trim();\n if (s === \"\") return null;\n return Number.isNaN(Number(s)) ? null : Number(s);\n }\n return typeof v === \"number\" && !Number.isNaN(v) ? v : null;\n};\n\n/** Centre-origin `w`x`h` pixel canvas (y down) onto a 200x85 ft rink (y up). */\nconst canvasX = (v: unknown, w: number): number | null => {\n const x = num(v);\n return x === null ? null : ((x - w / 2) * 200) / w;\n};\nconst canvasY = (v: unknown, h: number): number | null => {\n const y = num(v);\n return y === null ? null : ((h / 2 - y) * 85) / h;\n};\n\n/**\n * Registry of source frames. sporty's `xTrans`/`yTrans` move the SURFACE; these move the DATA into the\n * surface frame (feet, surface origin).\n */\nexport const FRAMES: {\n /**\n * stats.nba.com legacy shots. The hoop lands at `x = -41.75`, so every shot is on the -x half: pair it with\n * `displayRange: \"defense\"` (as sdvplot's `court_coords` documents).\n */\n readonly \"nba-legacy\": Frame;\n /**\n * stats.nba.com legacy shots with the hoop at the BOTTOM (blazing-the-nets' orientation): `x = x/10`,\n * `y = -41.75 + y/10`, legacy x keeping its sign. The points come out ALREADY in the rotated (screen) frame of a\n * `rotation: 90, displayRange: \"defense\"` scene: draw them on that court as they are and never rotate them again.\n * (`\"nba-legacy\"` instead gives unrotated points.)\n */\n readonly \"nba-legacy-vertical\": Frame;\n /**\n * HockeyTech play-by-play `xLocation`/`yLocation` (PWHL, AHL, OHL, ECHL, ...): a 600x300 canvas, top-left origin,\n * y down, centre ice at (300, 150), onto a 200x85 ft rink (y up). The canvas is stylised rather than true to scale:\n * converted end-zone faceoff dots land at about ±67 ft and ±52 ft against regulation ±69 ft, so the converted feet\n * are approximate.\n */\n readonly hockeytech: Frame;\n readonly \"espn-football-0-100\": Frame;\n} = {\n \"nba-legacy\": {\n x: (r: Row): number | null => {\n const y = num(r.y);\n return y === null ? null : -47 + 5.25 + y / 10;\n },\n y: (r: Row): number | null => {\n const x = num(r.x);\n return x === null ? null : x / 10;\n },\n description:\n \"stats.nba.com shot frame: tenths of a foot, hoop origin, x across the court (sdvplot court_coords; input columns default to x_legacy/y_legacy)\",\n },\n \"nba-legacy-vertical\": {\n x: (r: Row): number | null => {\n const x = num(r.x);\n return x === null ? null : x / 10;\n },\n y: (r: Row): number | null => {\n const y = num(r.y);\n return y === null ? null : -47 + 5.25 + y / 10;\n },\n description:\n \"stats.nba.com shot frame with the hoop at the bottom: points already in a rotation-90 scene's rotated frame (do not rotate them again); x across with its sign kept, y toward half court\",\n },\n hockeytech: {\n x: (r: Row): number | null => canvasX(r.x, 600),\n y: (r: Row): number | null => canvasY(r.y, 300),\n description:\n \"HockeyTech 600x300 canvas, top-left origin -> 200x85 ft centre origin (fastRhockey hockeytech_analytics: x/3-100, 42.5-y*85/300). The canvas is stylised rather than true to scale: converted end-zone faceoff dots land at about ±67 ft and ±52 ft against regulation ±69 ft, so the converted feet are approximate\",\n },\n \"espn-football-0-100\": {\n x: (r: Row): number | null => {\n const x = num(r.x);\n return x === null ? null : x - 50;\n },\n y: (r: Row): number | null => num(r.y),\n description: \"ESPN football: x is a 0-100 yardline -> -50..50 along x; y passes through (yards)\",\n },\n};\n\nexport type FrameName = keyof typeof FRAMES;\n\n/** Origin bottom-left corner of a `length` x `width` surface to centre origin. */\nexport function frameBottomLeft(length: number, width: number): Frame {\n return {\n x: (r) => {\n const x = num(r.x);\n return x === null ? null : x - length / 2;\n },\n y: (r) => {\n const y = num(r.y);\n return y === null ? null : y - width / 2;\n },\n description: `origin bottom-left corner of a ${length} x ${width} surface`,\n };\n}\n\n/**\n * Move data rows into a surface's frame. Returns new rows (inputs untouched) with `surface_x`/`surface_y`\n * (or the names in `out`) added; missing or non-numeric inputs give `null`.\n *\n * `x`/`y` name the input columns (default `x`/`y`, or `x_legacy`/`y_legacy` for `\"nba-legacy\"` and\n * `\"nba-legacy-vertical\"`). The frame sees\n * a view `{ x: row[xCol], y: row[yCol] }`.\n *\n * @example\n * ```ts\n * import { toSurfaceFrame } from \"@sportsdataverse/sporty\";\n *\n * // two stats.nba.com shots (shotchartdetail, Lakers at Nuggets, 2023-10-24, game 0022300061, events 510 and 530):\n * // x_legacy / y_legacy are LOC_X / LOC_Y, tenths of a foot from the hoop\n * toSurfaceFrame(\n * [\n * { x_legacy: -53, y_legacy: 285, team: \"LAL\", player: \"LeBron James\" },\n * { x_legacy: -136, y_legacy: 214, team: \"DEN\", player: \"Nikola Jokić\" },\n * ],\n * { from: \"nba-legacy\" },\n * );\n * ```\n */\nexport function toSurfaceFrame<R extends Row>(\n rows: readonly R[],\n o: { from: FrameName | Frame; x?: string; y?: string; out?: { x?: string; y?: string } },\n): (R & { surface_x: number | null; surface_y: number | null })[] {\n const nba = o.from === \"nba-legacy\" || o.from === \"nba-legacy-vertical\";\n const f: Frame = typeof o.from === \"string\" ? FRAMES[o.from] : o.from;\n const xc = o.x ?? (nba ? \"x_legacy\" : \"x\");\n const yc = o.y ?? (nba ? \"y_legacy\" : \"y\");\n const ox = o.out?.x ?? \"surface_x\";\n const oy = o.out?.y ?? \"surface_y\";\n return rows.map((r) => {\n const view: Row = { x: r[xc], y: r[yc] };\n return { ...r, [ox]: f.x(view), [oy]: f.y(view) } as R & {\n surface_x: number | null;\n surface_y: number | null;\n };\n });\n}\n","import { UnknownLeagueError } from \"../errors.js\";\nimport type { Point, Polygon } from \"../scene.js\";\nimport { BASKETBALL_LEAGUES, BASKETBALL_SPECS, type BasketballLeague } from \"../specs/basketball.js\";\nimport { arcResolution } from \"../surface.js\";\n\n/**\n * The six stats.nba.com shot zones, in blazing-the-nets `main` order (`lib/data/aggregate.ts:242-249`).\n * Above-the-break threes are not split left/centre/right.\n */\nexport const BASKETBALL_ZONES = [\n \"restricted_area\",\n \"paint\",\n \"mid_range\",\n \"corner_3_left\",\n \"corner_3_right\",\n \"above_break_3\",\n] as const;\n/** One of the six shot zones in `BASKETBALL_ZONES`, as `basketballZoneOf` returns it. */\nexport type BasketballZone = (typeof BASKETBALL_ZONES)[number];\n/** Display names (blazing-the-nets `main` `lib/charts/hexShotChart.ts:35-42`). */\nexport const BASKETBALL_ZONE_LABELS: Readonly<Record<BasketballZone, string>> = {\n restricted_area: \"Restricted area\",\n paint: \"Paint (non-RA)\",\n mid_range: \"Mid-range\",\n corner_3_left: \"Left corner 3\",\n corner_3_right: \"Right corner 3\",\n above_break_3: \"Above-the-break 3\",\n};\n\n/** Basket-centred zone frame: `x` across the court (negative = left of a hoop-at-the-bottom chart), `y` toward half court. */\nexport interface ZoneOptions {\n /** Default `\"nba\"`; case-insensitive, any basketball league sporty draws. */\n league?: BasketballLeague | (string & {});\n /** Input units per spec unit: 1 = the league's own units (ft for nba), 10 = stats.nba.com legacy tenths. Default 1. */\n scale?: number;\n}\n\ninterface Geometry {\n restricted: number;\n laneHalf: number;\n freeThrow: number;\n cornerX: number;\n arc: number;\n breakY: number;\n halfWidth: number;\n baseline: number;\n halfCourt: number;\n}\n\n/** The zone lines from the league's own spec (the parameters `basketballCourt` draws and the R oracle checks). */\nfunction geometry(league: string, scale: number): Geometry {\n const key = league.toLowerCase();\n if (!(BASKETBALL_LEAGUES as readonly string[]).includes(key)) {\n throw new UnknownLeagueError(\n `Unknown basketball league \"${league}\"; expected one of: ${BASKETBALL_LEAGUES.join(\", \")}`,\n );\n }\n const p = BASKETBALL_SPECS[key as BasketballLeague];\n const arc = (p.basket_center_to_three_point_arc[0] ?? 0) * scale;\n const cornerX = (p.basket_center_to_corner_three[0] ?? 0) * scale;\n return {\n restricted: (p.restricted_arc_radius ?? 0) * scale, // main court.ts:18 (40 tenths)\n laneHalf: ((p.lane_width[0] ?? 0) / 2) * scale, // court.ts:15 (80): the painted (first) lane\n freeThrow: ((p.lane_length[0] ?? 0) - p.basket_center_to_baseline) * scale, // court.ts:16 (137.5)\n cornerX, // court.ts:19 (220)\n arc, // court.ts:20 (237.5)\n breakY: Math.sqrt(Math.max(0, arc ** 2 - cornerX ** 2)), // court.ts:24 (~89.48)\n halfWidth: (p.court_width / 2) * scale, // court.ts:9 (250)\n baseline: -p.basket_center_to_baseline * scale, // court.ts:10 (-52.5)\n halfCourt: (p.court_length / 2 - p.basket_center_to_baseline) * scale, // court.ts:11 (417.5)\n };\n}\n\n/**\n * The zone a shot falls in. A three is a corner three at or below the corner break, split by the sign of x;\n * a two is in the restricted area within its radius, then the painted lane up to the free-throw line, else\n * mid-range. Two or three comes from `shotValue` (the scorer's call), never the coordinates (blazing-the-nets\n * `main` `lib/data/aggregate.ts:253-267`).\n *\n * @example\n * ```ts\n * import { BASKETBALL_ZONES, basketballZoneOf } from \"@sportsdataverse/sporty\";\n *\n * BASKETBALL_ZONES.indexOf(basketballZoneOf(-224, 20, 3, { scale: 10 })); // a legacy-frame left corner three\n * ```\n */\nexport function basketballZoneOf(\n x: number,\n y: number,\n shotValue: number,\n o: ZoneOptions = {},\n): BasketballZone {\n const g = geometry(o.league ?? \"nba\", o.scale ?? 1);\n if (shotValue === 3) {\n if (y <= g.breakY) return x < 0 ? \"corner_3_left\" : \"corner_3_right\";\n return \"above_break_3\";\n }\n if (Math.hypot(x, y) <= g.restricted) return \"restricted_area\";\n if (Math.abs(x) <= g.laneHalf && y <= g.freeThrow) return \"paint\";\n return \"mid_range\";\n}\n\n/** One zone as a fillable ring with a label anchor (`basketballZones`). */\nexport interface BasketballZoneArea {\n readonly zone: BasketballZone;\n /** One closed ring in the zone frame. `paint` is a keyhole around the restricted area (fill it nonzero or evenodd). */\n readonly points: Polygon;\n /** Label anchor in the zone frame. */\n readonly label: Point;\n /** The corner strips are narrow: set their label vertically. */\n readonly vertical: boolean;\n}\n\n/**\n * The six zones as fillable rings, cut at depth `top` (default the half-court line). Rings and labels are\n * basket-centred, like `basketballZoneOf`'s input: the hoop at the origin, `y` toward half court, in the league's\n * units times `scale`. They are not in a surface frame, so map every point through the SAME frame as the shots\n * before drawing. For stats.nba.com legacy shots in the hoop-at-the-bottom chart, build them with `scale: 10` and\n * map each point `[x, y]` through `FRAMES[\"nba-legacy-vertical\"]` (`f.x({ x, y })`, `f.y({ x, y })`), which\n * gives `[x / 10, y / 10 - 41.75]`: feet, with the hoop moved to (0, -41.75). Unmapped, the zones miss the shots\n * by that hoop offset.\n * Port of blazing-the-nets `main` `lib/data/court.ts:141-175`.\n *\n * @example\n * ```ts\n * import { BASKETBALL_ZONE_LABELS, basketballZones } from \"@sportsdataverse/sporty\";\n *\n * basketballZones(\"nba\", { scale: 10, top: 350 }).map((z) => BASKETBALL_ZONE_LABELS[z.zone]);\n * ```\n */\nexport function basketballZones(\n league: BasketballLeague | (string & {}) = \"nba\",\n o: Omit<ZoneOptions, \"league\"> & { top?: number; arcResolution?: number } = {},\n): readonly BasketballZoneArea[] {\n const g = geometry(league, o.scale ?? 1);\n const top = o.top ?? g.halfCourt;\n const n = arcResolution(o.arcResolution);\n const arc = (r: number, from: number, to: number): Point[] =>\n Array.from({ length: n + 1 }, (_, i): Point => {\n const a = from + ((to - from) * i) / n;\n return [r * Math.cos(a), r * Math.sin(a)];\n });\n const corner = Math.atan2(g.breakY, g.cornerX);\n const { halfWidth: w, baseline: base, laneHalf: lane, freeThrow: ft, cornerX: cx, breakY: b } = g;\n // Restricted area: a full circle, counter-clockwise from its bottom (0, -r), so the paint can bridge to it.\n const rim = arc(g.restricted, -Math.PI / 2, (3 * Math.PI) / 2);\n const lanePts: Point[] = [\n [-lane, base],\n [-lane, ft],\n [lane, ft],\n [lane, base],\n ];\n // Keyhole (court.ts:170 cuts the same hole with evenodd): the lane clockwise, in along x = 0 to the circle's\n // bottom, round it counter-clockwise, back out. Opposite windings, so nonzero and evenodd both leave the hole.\n const paint: Point[] = [...lanePts, [0, base], ...rim, [0, base]];\n const insideThree: Point[] = [[-cx, base], ...arc(g.arc, Math.PI - corner, corner), [cx, base]];\n // Mid-range = inside the arc minus the lane; the lane touches the baseline, so the difference is one ring.\n const midRange: Point[] = [...insideThree, [lane, base], [lane, ft], [-lane, ft], [-lane, base]];\n const cornerStrip = (s: number): Point[] => [\n [s * w, base],\n [s * w, b],\n [s * cx, b],\n [s * cx, base],\n ];\n const aboveBreak: Point[] = [[-w, b], [-w, top], [w, top], [w, b], ...arc(g.arc, corner, Math.PI - corner)];\n // Label anchors come from the same lines, so they sit inside their zone in any league's units: the restricted\n // area's at a fifth of its radius (main court.ts:169 puts it at 8 tenths, the same for nba), the others midway\n // across their zone (main's hard-coded tenths, 95/185/285 and corner y 20, are within 0.7 ft of these for nba);\n // above the break, no further past the arc than the arc is past the free-throw line.\n const r = g.restricted;\n const labelX = (w + cx) / 2;\n const cornerY = (base + b) / 2;\n const breakLabel = (g.arc + Math.min(top, 2 * g.arc - ft)) / 2;\n return [\n { zone: \"restricted_area\", points: rim, label: [0, r / 5], vertical: false },\n { zone: \"paint\", points: paint, label: [0, (r + ft) / 2], vertical: false },\n { zone: \"mid_range\", points: midRange, label: [0, (ft + g.arc) / 2], vertical: false },\n { zone: \"corner_3_left\", points: cornerStrip(-1), label: [-labelX, cornerY], vertical: true },\n { zone: \"corner_3_right\", points: cornerStrip(1), label: [labelX, cornerY], vertical: true },\n { zone: \"above_break_3\", points: aboveBreak, label: [0, breakLabel], vertical: false },\n ];\n}\n"]}
|