jaml-ui 4.1.3 → 4.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/dist/components/JimboBalatroFooter.d.ts +20 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +312 -282
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/render/useJamlCardRenderer.ts","../src/render/CanvasRenderer.tsx","../src/components/GameCard.tsx","../src/components/cardEnums.ts","../src/components/StandardCard.tsx","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/identity.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/visit.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/directives.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/anchors.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/applyReviver.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/toJS.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Node.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Alias.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Scalar.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/createNode.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Collection.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyComment.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyString.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringify.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyPair.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/log.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Pair.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/YAMLMap.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/map.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/seq.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/string.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/null.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/bool.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/float.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/int.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/schema.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/json/schema.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/tags.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/Schema.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/Document.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/errors.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-props.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-contains-newline.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-map-includes.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-map.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-seq.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-end.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-collection.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-scalar.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-node.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-doc.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/composer.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/lexer.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/line-counter.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/parser.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/public-api.js","../src/lib/jaml/parseClauses.ts","../src/components/JamlyzerView.tsx","../src/components/JamlyzerBulk.tsx","../src/components/DeckSprite.tsx","../src/json-render/engine.tsx","../src/json-render/catalog.ts","../src/json-render/components/layout.tsx","../src/json-render/components/domain.tsx","../src/json-render/components/game.tsx","../src/json-render/components/jammySeedMascotImage.ts","../src/json-render/components/mascot.tsx","../src/json-render/knowledge/jokers.ts","../src/json-render/knowledge/synergies.ts","../src/json-render/knowledge/decks.ts","../src/json-render/knowledge/bosses.ts","../src/json-render/components/reference.tsx","../src/json-render/registry.tsx","../src/json-render/builders/search.ts","../src/json-render/builders/encyclopedia.ts","../src/json-render/builders/analyzer.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Layer } from \"./Layer.js\";\nimport { SPRITE_SHEETS } from \"../sprites/spriteData.js\";\n\nfunction loadImage(url: string): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const image = new window.Image();\n image.addEventListener(\"load\", () => resolve(image));\n image.addEventListener(\"error\", () => resolve(null));\n image.src = url;\n });\n}\n\nfunction renderImage(\n canvas: HTMLCanvasElement,\n context: CanvasRenderingContext2D,\n image: HTMLImageElement,\n layer: Layer,\n timestamp?: number\n) {\n if (!image || !layer || !layer?.pos) return 0;\n const cardWidth = image.width / layer.columns;\n const cardHeight = image.height / layer.rows;\n const canvasStyle = canvas.style;\n\n if (layer.order === 0) {\n canvas.width = cardWidth;\n canvas.height = cardHeight;\n // Let the CSS class size the canvas to its container; the intrinsic\n // width/height above determine the drawing resolution.\n canvasStyle.width = \"\";\n canvasStyle.height = \"\";\n }\n\n canvasStyle.imageRendering = \"pixelated\";\n context.imageSmoothingEnabled = true;\n\n context.save();\n\n if (layer.animated && timestamp) {\n const elapsed = timestamp;\n const yOffset = Math.sin(elapsed / 1000) * 3;\n const xOffset = Math.sin(elapsed / 1500) * 1.5;\n context.globalAlpha = 0.65 + (Math.sin(elapsed / 2000) + 1) * 0.075;\n context.translate(xOffset, yOffset);\n }\n\n context.drawImage(\n image,\n layer.pos.x * cardWidth,\n layer.pos.y * cardHeight,\n cardWidth,\n cardHeight,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n context.restore();\n\n return cardWidth / cardHeight;\n}\n\nexport function useJamlCardRenderer({\n layers,\n invert = false,\n hoverTilt = false,\n}: {\n layers: Layer[];\n invert?: boolean;\n hoverTilt?: boolean;\n}) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const imageCacheRef = useRef<Map<string, HTMLImageElement>>(new Map());\n const [ratio, setRatio] = useState(3 / 4);\n const [, forceUpdate] = useState(0);\n const frameRef = useRef<number | null>(null);\n const targetRef = useRef({ rx: 0, ry: 0, rz: 0 });\n const currentRef = useRef({ rx: 0, ry: 0, rz: 0 });\n\n const hasAnimatedLayer = layers?.some((layer) => layer.animated);\n\n // Preload all known sheets once\n useEffect(() => {\n let cancelled = false;\n const imageCache = imageCacheRef.current;\n const preload = async () => {\n const urls = Array.from(new Set(Object.values(SPRITE_SHEETS).map((sheet) => sheet.src)));\n const images = await Promise.all(urls.map((url) => loadImage(url)));\n if (cancelled) return;\n images.forEach((image, index) => {\n if (image) imageCache.set(urls[index], image);\n });\n forceUpdate((prev) => prev + 1);\n };\n\n preload().catch((err) => console.error(\"[JamlCardRenderer]\", err));\n\n return () => {\n cancelled = true;\n imageCache.clear();\n };\n }, []);\n\n // Drawing: RAF loop for animated layers, single paint otherwise.\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || !layers || layers.length === 0) return;\n const context = canvas.getContext(\"2d\");\n if (!context) return;\n\n let cancelled = false;\n let frame: number | null = null;\n let startTime: number | undefined;\n\n const drawOnce = (animTime?: number) => {\n context.clearRect(0, 0, canvas.width, canvas.height);\n ;[...layers]\n .sort((a, b) => a.order - b.order)\n .forEach((layer) => {\n const cached = imageCacheRef.current.get(layer.source);\n if (cached) {\n const imageRatio = renderImage(canvas, context, cached, layer, hasAnimatedLayer ? animTime : undefined);\n if (layer.order === 0) setRatio(imageRatio);\n return;\n }\n loadImage(layer.source).then((img) => {\n if (cancelled || !img) return;\n imageCacheRef.current.set(layer.source, img);\n if (!hasAnimatedLayer) {\n const imageRatio = renderImage(canvas, context, img, layer);\n if (layer.order === 0) setRatio(imageRatio);\n }\n forceUpdate((prev) => prev + 1);\n });\n });\n canvas.style.filter = invert ? \"invert(0.94)\" : \"none\";\n };\n\n if (hasAnimatedLayer) {\n const tick = (timestamp: number) => {\n if (cancelled) return;\n if (startTime === undefined) startTime = timestamp;\n drawOnce(timestamp - startTime);\n frame = requestAnimationFrame(tick);\n };\n frame = requestAnimationFrame(tick);\n } else {\n drawOnce();\n }\n\n return () => {\n cancelled = true;\n if (frame !== null) cancelAnimationFrame(frame);\n };\n }, [layers, invert, hasAnimatedLayer]);\n\n const stopTiltLoop = useCallback(() => {\n if (frameRef.current !== null) {\n cancelAnimationFrame(frameRef.current);\n frameRef.current = null;\n }\n }, []);\n\n const writeCardTransform = useCallback(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const c = currentRef.current;\n canvas.style.transform = `rotateX(${c.rx}deg) rotateY(${c.ry}deg) rotateZ(${c.rz}deg)`;\n }, []);\n\n const runTiltLoop = useCallback(\n (rate: number, onSettled?: () => void) => {\n stopTiltLoop();\n let previous = performance.now();\n const tick = (now: number) => {\n const dt = Math.min(0.05, (now - previous) / 1000);\n previous = now;\n const target = targetRef.current;\n const current = currentRef.current;\n const alpha = 1 - Math.exp(-rate * dt);\n current.rx += (target.rx - current.rx) * alpha;\n current.ry += (target.ry - current.ry) * alpha;\n current.rz += (target.rz - current.rz) * alpha;\n writeCardTransform();\n const settled =\n Math.abs(target.rx - current.rx) < 0.02 &&\n Math.abs(target.ry - current.ry) < 0.02 &&\n Math.abs(target.rz - current.rz) < 0.02;\n if (settled) {\n current.rx = target.rx;\n current.ry = target.ry;\n current.rz = target.rz;\n writeCardTransform();\n frameRef.current = null;\n onSettled?.();\n return;\n }\n frameRef.current = requestAnimationFrame(tick);\n };\n frameRef.current = requestAnimationFrame(tick);\n },\n [stopTiltLoop, writeCardTransform]\n );\n\n useEffect(() => () => stopTiltLoop(), [stopTiltLoop]);\n\n const onPointerEnter = (event: React.PointerEvent) => {\n if (!hoverTilt || event.pointerType === \"touch\") return;\n containerRef.current?.setAttribute(\"data-hovered\", \"true\");\n runTiltLoop(22);\n };\n\n const onPointerLeave = () => {\n if (!hoverTilt) return;\n containerRef.current?.setAttribute(\"data-hovered\", \"false\");\n targetRef.current = { rx: 0, ry: 0, rz: 0 };\n runTiltLoop(14, () => {\n const canvas = canvasRef.current;\n if (canvas) canvas.style.transform = \"\";\n });\n };\n\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!hoverTilt || event.pointerType === \"touch\") return;\n const rect = event.currentTarget.getBoundingClientRect();\n const nx = Math.max(-1, Math.min(1, ((event.clientX - rect.left) / rect.width - 0.5) * 2));\n const ny = Math.max(-1, Math.min(1, ((event.clientY - rect.top) / rect.height - 0.5) * 2));\n targetRef.current = {\n rx: ny * -10,\n ry: nx * 12,\n rz: nx * ny * -1.2,\n };\n containerRef.current?.style.setProperty(\"--j-card-glare-x\", `${(nx + 1) * 50}%`);\n containerRef.current?.style.setProperty(\"--j-card-glare-y\", `${(1 - ny) * 50}%`);\n runTiltLoop(22);\n };\n\n return {\n canvasRef,\n containerRef,\n ratio,\n handlers: {\n onPointerEnter: hoverTilt ? onPointerEnter : undefined,\n onPointerLeave: hoverTilt ? onPointerLeave : undefined,\n onPointerMove: hoverTilt ? onPointerMove : undefined,\n },\n };\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layer } from \"./Layer.js\";\nimport { useJamlCardRenderer } from \"./useJamlCardRenderer.js\";\n\nexport interface JamlCardRendererProps {\n layers: Layer[];\n invert?: boolean;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlCardRenderer({ layers, invert = false, className = \"\", hoverTilt = false }: JamlCardRendererProps) {\n const { canvasRef, containerRef, ratio, handlers } = useJamlCardRenderer({\n layers,\n invert,\n hoverTilt\n });\n\n return (\n <div\n ref={containerRef}\n className={`j-card-renderer ${className}`.trim()}\n data-hover-tilt={hoverTilt}\n data-hovered=\"false\"\n style={{ \"--j-card-aspect\": String(ratio) } as React.CSSProperties}\n >\n <canvas ref={canvasRef} className=\"j-card-renderer__canvas\" />\n <div className=\"j-card-renderer__hit\" {...handlers} />\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layer } from \"../render/Layer.js\";\nimport { JamlCardRenderer } from \"../render/CanvasRenderer.js\";\nimport {\n JOKERS,\n JOKER_FACES,\n TAROTS_AND_PLANETS,\n CONSUMABLE_FACES,\n TAGS,\n VOUCHERS,\n BOSSES,\n EDITION_MAP,\n SPRITE_SHEETS,\n STICKER_MAP,\n RANK_MAP,\n SUIT_MAP,\n ENHANCER_MAP,\n SEAL_MAP,\n} from \"../sprites/spriteData.js\";\nimport { decodeMotelyItem } from \"../decode/motelyItemDecoder.js\";\n\nexport interface JamlGameCardProps {\n card: {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n rank?: string;\n suit?: string;\n enhancements?: string[];\n seal?: string;\n scale?: number;\n };\n type: \"joker\" | \"consumable\" | \"playing\";\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport type AnalyzerShopItem = {\n id: string;\n name: string;\n value?: number;\n};\n\nexport type AnalyzerResolvedItem =\n | { kind: \"voucher\"; voucherName: string }\n | {\n kind: \"joker\" | \"consumable\" | \"playing\";\n card: JamlGameCardProps[\"card\"];\n type: JamlGameCardProps[\"type\"];\n }\n | { kind: \"unknown\"; label: string };\n\nfunction normalizeCardRank(raw: string): string {\n const value = raw.trim().toUpperCase();\n if (value === \"A\" || value === \"ACE\") return \"Ace\";\n if (value === \"K\" || value === \"KING\") return \"King\";\n if (value === \"Q\" || value === \"QUEEN\") return \"Queen\";\n if (value === \"J\" || value === \"JACK\") return \"Jack\";\n return raw.trim();\n}\n\nfunction normalizeCardSuit(raw: string): string {\n const value = raw.trim().toLowerCase();\n if (value === \"heart\" || value === \"hearts\") return \"Hearts\";\n if (value === \"club\" || value === \"clubs\") return \"Clubs\";\n if (value === \"diamond\" || value === \"diamonds\") return \"Diamonds\";\n if (value === \"spade\" || value === \"spades\") return \"Spades\";\n return raw.trim();\n}\n\nfunction parseStandardcardName(name: string): { rank: string; suit: string } | null {\n const trimmed = name.trim();\n const ofMatch = /^(A|K|Q|J|10|[2-9]|Ace|King|Queen|Jack)\\s+of\\s+(Hearts|Clubs|Diamonds|Spades)$/i.exec(trimmed);\n if (ofMatch) {\n return {\n rank: normalizeCardRank(ofMatch[1]),\n suit: normalizeCardSuit(ofMatch[2]),\n };\n }\n\n const shortMatch = /^(A|K|Q|J|10|[2-9])\\s*([HCDS])$/i.exec(trimmed);\n if (shortMatch) {\n const suitMap: Record<string, string> = {\n H: \"Hearts\",\n C: \"Clubs\",\n D: \"Diamonds\",\n S: \"Spades\",\n };\n return {\n rank: normalizeCardRank(shortMatch[1]),\n suit: suitMap[shortMatch[2].toUpperCase()],\n };\n }\n\n return null;\n}\n\nconst MODIFIER_PREFIXES = [\n \"Eternal\",\n \"Perishable\",\n \"Rental\",\n \"Foil\",\n \"Holographic\",\n \"Polychrome\",\n \"Negative\",\n \"Bonus\",\n \"Mult\",\n \"Wild\",\n \"Glass\",\n \"Steel\",\n \"Stone\",\n \"Gold\",\n \"Lucky\",\n \"Gold Seal\",\n \"Red Seal\",\n \"Blue Seal\",\n \"Purple Seal\",\n];\n\nfunction stripModifiers(name: string): {\n baseName: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n} {\n let remaining = name;\n let edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\" | undefined;\n let isEternal = false;\n let isPerishable = false;\n let isRental = false;\n\n let changed = true;\n while (changed) {\n changed = false;\n for (const prefix of MODIFIER_PREFIXES) {\n if (remaining.startsWith(prefix + \" \")) {\n const stripped = remaining.slice(prefix.length + 1);\n if (prefix === \"Foil\" || prefix === \"Holographic\" || prefix === \"Polychrome\" || prefix === \"Negative\") {\n edition = prefix as typeof edition;\n } else if (prefix === \"Eternal\") {\n isEternal = true;\n } else if (prefix === \"Perishable\") {\n isPerishable = true;\n } else if (prefix === \"Rental\") {\n isRental = true;\n }\n remaining = stripped;\n changed = true;\n break;\n }\n }\n }\n\n return { baseName: remaining, edition, isEternal, isPerishable, isRental };\n}\n\nfunction resolvePackedAnalyzerItem(item: AnalyzerShopItem, scale: number): AnalyzerResolvedItem | null {\n if (typeof item.value !== \"number\" || !Number.isFinite(item.value)) {\n return null;\n }\n\n // Decode the packed int through the typed Motely decoder — the single source\n // of truth for the bit layout. The previous version hand-rolled nibble\n // constants (catNibble === 5 /* Joker */ etc.) that did NOT match the real\n // Motely enum, so categories decoded as bogus 1..5 values. decodeMotelyItem\n // reads MOTELY_ITEM_FORMATS_BY_VALUE + Motely.decode*, so the category,\n // edition, seal, enhancement, rank, suit, and stickers are all correct.\n const decoded = decodeMotelyItem(item.value);\n if (!decoded) return null;\n\n const edition = decoded.edition ?? undefined;\n const { isEternal, isPerishable, isRental } = decoded;\n\n switch (decoded.category) {\n case \"joker\":\n return {\n kind: \"joker\",\n type: \"joker\",\n card: { name: decoded.displayName, edition, isEternal, isPerishable, isRental, scale },\n };\n case \"tarot\":\n case \"planet\":\n case \"spectral\":\n return {\n kind: \"consumable\",\n type: \"consumable\",\n card: {\n name: decoded.displayName,\n edition,\n enhancements: decoded.enhancement ? [decoded.enhancement] : undefined,\n seal: decoded.seal ?? undefined,\n scale,\n },\n };\n case \"playing\":\n return {\n kind: \"playing\",\n type: \"playing\",\n card: {\n name: decoded.displayName,\n rank: decoded.rank ?? undefined,\n suit: decoded.suit ?? undefined,\n enhancements: decoded.enhancement ? [decoded.enhancement] : undefined,\n seal: decoded.seal ?? undefined,\n edition,\n isEternal,\n isPerishable,\n isRental,\n scale,\n },\n };\n default:\n // Unknown category (incl. vouchers): fall back to the name-based\n // matching in resolveAnalyzerShopItem (vouchers resolve by name).\n return null;\n }\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function resolveAnalyzerShopItem(item: AnalyzerShopItem, scale = 1): AnalyzerResolvedItem {\n const displayName = String(item.name || \"\").trim();\n\n if (!displayName) {\n return { kind: \"unknown\", label: String(item.id || \"\").trim() || \"Unknown Item\" };\n }\n\n const packedResolved = resolvePackedAnalyzerItem(item, scale);\n if (packedResolved && packedResolved.kind !== \"unknown\") {\n return packedResolved;\n }\n\n if (VOUCHERS.some((voucher) => voucher.name === displayName)) {\n return { kind: \"voucher\", voucherName: displayName };\n }\n\n if (JOKERS.some((joker) => joker.name === displayName)) {\n return { kind: \"joker\", type: \"joker\", card: { name: displayName, scale } };\n }\n\n if (TAROTS_AND_PLANETS.some((consumable) => consumable.name === displayName)) {\n return { kind: \"consumable\", type: \"consumable\", card: { name: displayName, scale } };\n }\n\n const { baseName, edition, isEternal, isPerishable, isRental } = stripModifiers(displayName);\n\n if (baseName !== displayName) {\n if (JOKERS.some((joker) => joker.name === baseName)) {\n return { kind: \"joker\", type: \"joker\", card: { name: baseName, edition, isEternal, isPerishable, isRental, scale } };\n }\n if (TAROTS_AND_PLANETS.some((consumable) => consumable.name === baseName)) {\n return { kind: \"consumable\", type: \"consumable\", card: { name: baseName, edition, scale } };\n }\n if (VOUCHERS.some((voucher) => voucher.name === baseName)) {\n return { kind: \"voucher\", voucherName: baseName };\n }\n }\n\n const standardcard = parseStandardcardName(displayName) ?? parseStandardcardName(baseName);\n if (standardcard) {\n return {\n kind: \"playing\",\n type: \"playing\",\n card: {\n name: displayName,\n rank: standardcard.rank,\n suit: standardcard.suit,\n scale,\n },\n };\n }\n\n return packedResolved ?? { kind: \"unknown\", label: displayName };\n}\n\nexport function JamlGameCard({ card, type, className = \"\", hoverTilt = false }: JamlGameCardProps) {\n const { name, edition, isEternal, isPerishable, isRental, rank, suit, enhancements, seal, scale = 1 } = card;\n const layers: Layer[] = [];\n\n if (type === \"joker\") {\n const jokerData = JOKERS.find((j) => j.name === name);\n if (jokerData) layers.push(new Layer({ ...jokerData, source: SPRITE_SHEETS.jokers.src, order: 0, columns: SPRITE_SHEETS.jokers.columns, rows: SPRITE_SHEETS.jokers.rows }));\n const face = JOKER_FACES.find((j) => j.name === name);\n if (face) layers.push(new Layer({ ...face, source: SPRITE_SHEETS.jokers.src, order: 1, columns: SPRITE_SHEETS.jokers.columns, rows: SPRITE_SHEETS.jokers.rows }));\n } else if (type === \"consumable\") {\n const consumable = TAROTS_AND_PLANETS.find((t) => t.name === name);\n if (consumable) layers.push(new Layer({ ...consumable, order: 0, source: SPRITE_SHEETS.tarots.src, rows: SPRITE_SHEETS.tarots.rows, columns: SPRITE_SHEETS.tarots.columns }));\n const face = CONSUMABLE_FACES.find((t) => t.name === name);\n if (face)\n layers.push(\n new Layer({\n ...face,\n order: 1,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n animated: face.animated,\n }),\n );\n } else {\n const standardcard = rank && suit ? { rank, suit } : parseStandardcardName(name);\n if (standardcard) {\n const enhancerPos = (enhancements ?? [])\n .map((m) => ENHANCER_MAP[m])\n .find((pos): pos is { x: number; y: number } => Boolean(pos)) ?? { x: 1, y: 0 };\n layers.push(\n new Layer({\n pos: enhancerPos,\n name: \"background\",\n order: 0,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n }),\n );\n layers.push(\n new Layer({\n pos: { x: RANK_MAP[standardcard.rank] ?? 0, y: SUIT_MAP[standardcard.suit] ?? 0 },\n name,\n order: 1,\n source: SPRITE_SHEETS.deck.src,\n rows: SPRITE_SHEETS.deck.rows,\n columns: SPRITE_SHEETS.deck.columns,\n }),\n );\n }\n }\n\n if (edition) {\n const index = EDITION_MAP[edition];\n if (index !== undefined) {\n layers.push(\n new Layer({\n pos: { x: index, y: 0 },\n name: edition,\n order: 2,\n source: SPRITE_SHEETS.editions.src,\n rows: SPRITE_SHEETS.editions.rows,\n columns: SPRITE_SHEETS.editions.columns,\n }),\n );\n }\n }\n\n if (isEternal) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Eternal\"],\n name: \"Eternal\",\n order: 3,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n if (isPerishable) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Perishable\"],\n name: \"Perishable\",\n order: 4,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n if (isRental) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Rental\"],\n name: \"Rental\",\n order: 5,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n\n if (seal) {\n const sealPos = SEAL_MAP[seal];\n if (sealPos) {\n layers.push(\n new Layer({\n pos: sealPos,\n name: seal,\n order: 6,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n }),\n );\n }\n }\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer invert={edition === \"Negative\"} layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface VoucherProps {\n voucherName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlVoucher({ voucherName, scale = 1, className = \"\", hoverTilt = false }: VoucherProps) {\n const voucherData = VOUCHERS.find((v) => v.name === voucherName);\n if (!voucherData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...voucherData,\n order: 0,\n source: SPRITE_SHEETS.vouchers.src,\n rows: SPRITE_SHEETS.vouchers.rows,\n columns: SPRITE_SHEETS.vouchers.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface TagProps {\n tagName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlTag({ tagName, scale = 1, className = \"\", hoverTilt = false }: TagProps) {\n const tagData = TAGS.find((t) => t.name === tagName);\n if (!tagData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...tagData,\n order: 0,\n source: SPRITE_SHEETS.tags.src,\n rows: SPRITE_SHEETS.tags.rows,\n columns: SPRITE_SHEETS.tags.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface BossProps {\n bossName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlBoss({ bossName, scale = 1, className = \"\", hoverTilt = false }: BossProps) {\n const bossData = BOSSES.find((b) => b.name === bossName);\n if (!bossData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...bossData,\n order: 0,\n source: SPRITE_SHEETS.blinds.src,\n rows: SPRITE_SHEETS.blinds.rows,\n columns: SPRITE_SHEETS.blinds.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n","// Single canonical form per value. No case tolerance, no abbreviations.\n// Value strings match the keys used by RANK_MAP / SUIT_MAP / ENHANCER_MAP /\n// SEAL_MAP / EDITION_MAP so no aliasing/normalization is needed at render time.\n\nexport const CardSuit = {\n Hearts: 'Hearts',\n Diamonds: 'Diamonds',\n Clubs: 'Clubs',\n Spades: 'Spades',\n} as const\nexport type CardSuit = typeof CardSuit[keyof typeof CardSuit]\n\nexport const CardRank = {\n Two: '2',\n Three: '3',\n Four: '4',\n Five: '5',\n Six: '6',\n Seven: '7',\n Eight: '8',\n Nine: '9',\n Ten: '10',\n Jack: 'Jack',\n Queen: 'Queen',\n King: 'King',\n Ace: 'Ace',\n} as const\nexport type CardRank = typeof CardRank[keyof typeof CardRank]\n\nexport const CardEnhancement = {\n Bonus: 'Bonus',\n Mult: 'Mult',\n Wild: 'Wild',\n Glass: 'Glass',\n Steel: 'Steel',\n Stone: 'Stone',\n Gold: 'Gold',\n Lucky: 'Lucky',\n} as const\nexport type CardEnhancement = typeof CardEnhancement[keyof typeof CardEnhancement]\n\nexport const CardSeal = {\n Gold: 'Gold',\n Red: 'Red',\n Blue: 'Blue',\n Purple: 'Purple',\n} as const\nexport type CardSeal = typeof CardSeal[keyof typeof CardSeal]\n\nexport const CardEdition = {\n Foil: 'Foil',\n Holographic: 'Holographic',\n Polychrome: 'Polychrome',\n Negative: 'Negative',\n} as const\nexport type CardEdition = typeof CardEdition[keyof typeof CardEdition]\n","'use client'\n\nimport React from 'react'\nimport { resolveJamlAssetUrl } from '../assets.js'\nimport { RANK_MAP, SUIT_MAP, ENHANCER_MAP, SEAL_MAP, EDITION_MAP, type SpritePos } from '../sprites/spriteData.js'\nimport { CardEdition, type CardSuit, type CardRank, type CardEnhancement, type CardSeal } from './cardEnums.js'\n\n// ── Sprite geometry ────────────────────────────────────────────────────────\n\nconst CARD_WIDTH = 71\nconst CARD_HEIGHT = 95\n\ninterface StandardCardProps {\n suit?: CardSuit\n rank?: CardRank\n name?: string\n enhancement?: CardEnhancement\n seal?: CardSeal\n edition?: CardEdition\n className?: string\n size?: number\n style?: React.CSSProperties\n}\n\nfunction parseStandardcardName(name: string): { rank: CardRank; suit: CardSuit } | null {\n const match = /^(.*?)(?:\\s+of\\s+|\\s+)(.*?)$/i.exec(name.trim())\n if (!match) return null\n const rawRank = match[1].trim()\n const rawSuit = match[2].trim()\n const rank = (rawRank === 'A' ? 'Ace' : rawRank === 'K' ? 'King' : rawRank === 'Q' ? 'Queen' : rawRank === 'J' ? 'Jack' : rawRank) as CardRank\n const suit = rawSuit.charAt(0).toUpperCase() + rawSuit.slice(1).toLowerCase() as CardSuit\n return RANK_MAP[rank] !== undefined && SUIT_MAP[suit] !== undefined ? { rank, suit } : null\n}\n\nexport function StandardCard({\n suit,\n rank,\n name,\n enhancement,\n seal,\n edition,\n className,\n size = 71,\n style,\n}: StandardCardProps) {\n const parsed = !rank || !suit ? (name ? parseStandardcardName(name) : null) : null\n const finalRank = rank ?? parsed?.rank\n const finalSuit = suit ?? parsed?.suit\n const col = finalRank ? RANK_MAP[finalRank] : undefined\n const row = finalSuit ? SUIT_MAP[finalSuit] : undefined\n\n if (col === undefined || row === undefined) {\n console.warn(`Invalid card: ${finalRank} of ${finalSuit}`)\n return null\n }\n\n const scale = size / CARD_WIDTH\n const finalH = size * (CARD_HEIGHT / CARD_WIDTH)\n\n const bgX = -col * CARD_WIDTH\n const bgY = -row * CARD_HEIGHT\n\n // Cell (1,0) of the enhancer sheet is the plain blank card body — used as\n // the base layer behind every card so transparent regions of the deck face\n // sprite don't reveal whatever is behind. Cell (0,0) is a red-card sprite,\n // NOT a blank base — do not fall back to it.\n const PLAIN_BASE: SpritePos = { x: 1, y: 0 }\n const enhPos: SpritePos = enhancement ? ENHANCER_MAP[enhancement] ?? PLAIN_BASE : PLAIN_BASE\n const sealPos = seal ? SEAL_MAP[seal] ?? null : null\n const editionCol = edition ? EDITION_MAP[edition] : undefined\n\n const isNegative = edition === CardEdition.Negative\n const baseFilter = isNegative ? 'invert(0.94)' : 'none'\n\n const enhancersUrl = resolveJamlAssetUrl('enhancers')\n const deckUrl = resolveJamlAssetUrl('deck')\n const editionsUrl = resolveJamlAssetUrl('editions')\n\n const layerBase: React.CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: CARD_WIDTH,\n height: CARD_HEIGHT,\n transform: `scale(${scale})`,\n transformOrigin: 'top left',\n backgroundRepeat: 'no-repeat',\n }\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n display: 'inline-block',\n overflow: 'hidden',\n userSelect: 'none',\n width: size,\n height: finalH,\n imageRendering: 'pixelated',\n ...style,\n }}\n title={`${rank} of ${suit}${enhancement ? ` (${enhancement})` : ''}${seal ? ` [${seal} seal]` : ''}${edition ? ` {${edition}}` : ''}`}\n >\n {/* Card base — plain blank card body from cell (1,0) of the enhancer\n sheet, replaced by the mapped sprite when an enhancement is set. */}\n <div\n style={{\n ...layerBase,\n zIndex: 0,\n backgroundImage: `url(${enhancersUrl})`,\n backgroundPosition: `${-enhPos.x * CARD_WIDTH}px ${-enhPos.y * CARD_HEIGHT}px`,\n }}\n />\n\n {/* Card face */}\n <div\n style={{\n ...layerBase,\n zIndex: 1,\n backgroundImage: `url(${deckUrl})`,\n backgroundPosition: `${bgX}px ${bgY}px`,\n filter: baseFilter,\n }}\n />\n\n {/* Edition overlay */}\n {edition && edition !== CardEdition.Negative && editionCol !== undefined && (\n <div\n style={{\n ...layerBase,\n zIndex: 2,\n mixBlendMode: 'screen',\n opacity: 0.6,\n backgroundImage: `url(${editionsUrl})`,\n backgroundPosition: `${-editionCol * CARD_WIDTH}px 0px`,\n }}\n />\n )}\n\n {/* Seal overlay */}\n {sealPos && (\n <div\n style={{\n ...layerBase,\n zIndex: 3,\n backgroundImage: `url(${enhancersUrl})`,\n backgroundPosition: `${-sealPos.x * CARD_WIDTH}px ${-sealPos.y * CARD_HEIGHT}px`,\n }}\n />\n )}\n\n {/* Negative tint */}\n {isNegative && (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: 4,\n background: 'rgba(239, 68, 68, 0.1)',\n mixBlendMode: 'overlay',\n pointerEvents: 'none',\n }}\n />\n )}\n </div>\n )\n}\n","const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n","import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (isNode(ctrl) || isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (isNode(ctrl) || isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (isMap(node))\n return visitor.Map?.(key, node, path);\n if (isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (isPair(node))\n return visitor.Pair?.(key, node, path);\n if (isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexport { visit, visitAsync };\n","import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n const tags = {};\n visit(doc.contents, (_key, node) => {\n if (isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n","import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (isScalar(ref.node) || isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n","/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n","import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexport { toJS };\n","import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexport { NodeBase };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair, hasAnchor } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n constructor(source) {\n super(ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n if (ctx?.maxAliasCount === 0)\n throw new ReferenceError('Alias resolution is disabled');\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit(doc, {\n Node: (_key, node) => {\n if (isAlias(node) || hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexport { Alias };\n","import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n constructor(value) {\n super(SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n","import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (isDocument(value))\n value = value.contents;\n if (isNode(value))\n return value;\n if (isPair(value)) {\n const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[MAP]\n : Symbol.iterator in Object(value)\n ? schema[SEQ]\n : schema[MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexport { createNode };\n","import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && isScalar(node) ? node.value : node;\n else\n return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n","/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n","const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_FLOW, FOLD_QUOTED, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines(`${start}${foldedValue}${end}`, indent, FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.BLOCK_FOLDED:\n case Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexport { stringifyString };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trailingComma: false,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n if (anchor && anchorIsValid(anchor)) {\n anchors.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : isScalar(node)\n ? stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n","import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n isCollection(key) ||\n (isScalar(key)\n ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexport { stringifyPair };\n","function debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n console.warn(warning);\n }\n}\n\nexport { debug, warn };\n","import { isScalar, isSeq, isAlias, isMap } from '../../nodes/identity.js';\nimport { Scalar } from '../../nodes/Scalar.js';\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (isScalar(key) &&\n (!key.type || key.type === Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (isSeq(source))\n for (const it of source.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(source))\n for (const it of source)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, source);\n}\nfunction mergeValue(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (!isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\nfunction resolveAliasValue(ctx, value) {\n return ctx && isAlias(value) ? value.resolve(ctx.doc, ctx) : value;\n}\n\nexport { addMergeToJSMap, isMergeKey, merge };\n","import { warn } from '../log.js';\nimport { isMergeKey, addMergeToJSMap } from '../schema/yaml-1.1/merge.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isNode } from './identity.js';\nimport { toJS } from './toJS.js';\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (isMergeKey(ctx, key))\n addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (isNode(key) && ctx?.doc) {\n const strCtx = createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n const k = createNode(key, undefined, ctx);\n const v = createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (isNode(key))\n key = key.clone(schema);\n if (isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexport { Pair, createPair };\n","import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (isPair(item)) {\n const ik = isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (isPair(item)) {\n const ik = isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify(item, itemCtx, () => (comment = null));\n reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\\n'));\n if (i < items.length - 1) {\n str += ',';\n }\n else if (ctx.options.trailingComma) {\n if (ctx.options.lineWidth > 0) {\n reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +\n (str.length + 2) >\n ctx.options.lineWidth);\n }\n if (reqNewline) {\n str += ',';\n }\n }\n if (comment)\n str += lineComment(str, itemIndent, commentString(comment));\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexport { stringifyCollection };\n","import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { MAP, isPair, isScalar } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n const k = isScalar(key) ? key.value : key;\n for (const it of items) {\n if (isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair(pair, pair?.value);\n }\n else\n _pair = new Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (isScalar(prev.value) && isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexport { YAMLMap, findPair };\n","import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (isScalar(prev) && isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexport { YAMLSeq };\n","import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n","import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexport { string };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexport { nullTag };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexport { boolTag };\n","function stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^-?\\d/.test(n) &&\n !n.includes('e')) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexport { stringifyNumber };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intHex, intOct };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { boolTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intOct, int, intHex } from './int.js';\n\nconst schema = [\n map,\n seq,\n string,\n nullTag,\n boolTag,\n intOct,\n int,\n intHex,\n floatNaN,\n floatExp,\n float\n];\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { map } from '../common/map.js';\nimport { seq } from '../common/seq.js';\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map, seq].concat(jsonScalars, jsonError);\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyString } from '../../stringify/stringifyString.js';\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.BLOCK_LITERAL);\n if (type !== Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexport { binary };\n","import { isSeq, isPair, isMap } from '../../nodes/identity.js';\nimport { createPair, Pair } from '../../nodes/Pair.js';\nimport { Scalar } from '../../nodes/Scalar.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nfunction resolvePairs(seq, onError) {\n if (isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (isPair(item))\n continue;\n else if (isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair(new Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = isPair(item) ? item : new Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexport { createPairs, pairs, resolvePairs };\n","import { isScalar, isPair } from '../../nodes/identity.js';\nimport { toJS } from '../../nodes/toJS.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\nimport { resolvePairs, createPairs } from './pairs.js';\n\nclass YAMLOMap extends YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (isPair(pair)) {\n key = toJS(pair.key, '', ctx);\n value = toJS(pair.value, key, ctx);\n }\n else {\n key = toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs = createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs = resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs.items) {\n if (isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexport { YAMLOMap, omap };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar(false),\n stringify: boolStringify\n};\n\nexport { falseTag, trueTag };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intBin, intHex, intOct };\n","import { isMap, isPair, isScalar } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { YAMLMap, findPair } from '../../nodes/YAMLMap.js';\n\nclass YAMLSet extends YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair(key.key, null);\n else\n pair = new Pair(key, null);\n const prev = findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = findPair(this.items, key);\n return !keepPair && isPair(pair)\n ? isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexport { YAMLSet, set };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexport { floatTime, intTime, timestamp };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { binary } from './binary.js';\nimport { trueTag, falseTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intBin, intOct, int, intHex } from './int.js';\nimport { merge } from './merge.js';\nimport { omap } from './omap.js';\nimport { pairs } from './pairs.js';\nimport { set } from './set.js';\nimport { intTime, floatTime, timestamp } from './timestamp.js';\n\nconst schema = [\n map,\n seq,\n string,\n nullTag,\n trueTag,\n falseTag,\n intBin,\n intOct,\n int,\n intHex,\n floatNaN,\n floatExp,\n float,\n binary,\n merge,\n omap,\n pairs,\n set,\n intTime,\n floatTime,\n timestamp\n];\n\nexport { schema };\n","import { map } from './common/map.js';\nimport { nullTag } from './common/null.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { boolTag } from './core/bool.js';\nimport { floatNaN, floatExp, float } from './core/float.js';\nimport { intOct, intHex, int } from './core/int.js';\nimport { schema } from './core/schema.js';\nimport { schema as schema$1 } from './json/schema.js';\nimport { binary } from './yaml-1.1/binary.js';\nimport { merge } from './yaml-1.1/merge.js';\nimport { omap } from './yaml-1.1/omap.js';\nimport { pairs } from './yaml-1.1/pairs.js';\nimport { schema as schema$2 } from './yaml-1.1/schema.js';\nimport { set } from './yaml-1.1/set.js';\nimport { timestamp, intTime, floatTime } from './yaml-1.1/timestamp.js';\n\nconst schemas = new Map([\n ['core', schema],\n ['failsafe', [map, seq, string]],\n ['json', schema$1],\n ['yaml11', schema$2],\n ['yaml-1.1', schema$2]\n]);\nconst tagsByName = {\n binary,\n bool: boolTag,\n float,\n floatExp,\n floatNaN,\n floatTime,\n int,\n intHex,\n intOct,\n intTime,\n map,\n merge,\n null: nullTag,\n omap,\n pairs,\n seq,\n set,\n timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary,\n 'tag:yaml.org,2002:merge': merge,\n 'tag:yaml.org,2002:omap': omap,\n 'tag:yaml.org,2002:pairs': pairs,\n 'tag:yaml.org,2002:set': set,\n 'tag:yaml.org,2002:timestamp': timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge)\n ? schemaTags.concat(merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexport { coreKnownTags, getTags };\n","import { MAP, SCALAR, SEQ } from '../nodes/identity.js';\nimport { map } from './common/map.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { getTags, coreKnownTags } from './tags.js';\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? getTags(compat, 'compat')\n : compat\n ? getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? coreKnownTags : {};\n this.tags = getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, MAP, { value: map });\n Object.defineProperty(this, SCALAR, { value: string });\n Object.defineProperty(this, SEQ, { value: seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexport { Schema };\n","import { isNode } from '../nodes/identity.js';\nimport { createStringifyContext, stringify } from './stringify.js';\nimport { indentComment, lineComment } from './stringifyComment.js';\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexport { stringifyDocument };\n","import { Alias } from '../nodes/Alias.js';\nimport { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';\nimport { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { toJS } from '../nodes/toJS.js';\nimport { Schema } from '../schema/Schema.js';\nimport { stringifyDocument } from '../stringify/stringifyDocument.js';\nimport { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';\nimport { applyReviver } from './applyReviver.js';\nimport { createNode } from './createNode.js';\nimport { Directives } from './directives.js';\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, NODE_TYPE, { value: DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [NODE_TYPE]: { value: DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode(value, tag, ctx);\n if (flow && isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (isEmptyPath(path))\n return !keepScalar && isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (isEmptyPath(path))\n return this.contents !== undefined;\n return isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexport { Document };\n","class YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '…' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '…';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '…\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexport { YAMLError, YAMLParseError, YAMLWarning, prettifyError };\n","function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexport { resolveProps };\n","function containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexport { containsNewline };\n","import { containsNewline } from './util-contains-newline.js';\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexport { flowIndentCheck };\n","import { isScalar } from '../nodes/identity.js';\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (isScalar(a) && isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexport { mapIncludes };\n","import { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexport { resolveBlockMap };\n","import { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveProps } from './resolve-props.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexport { resolveBlockSeq };\n","function resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexport { resolveEnd };\n","import { isPair } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap : YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexport { resolveFlowCollection };\n","import { isNode } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveBlockMap } from './resolve-block-map.js';\nimport { resolveBlockSeq } from './resolve-block-seq.js';\nimport { resolveFlowCollection } from './resolve-flow-collection.js';\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = isNode(res)\n ? res\n : new Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexport { composeCollection };\n","import { Scalar } from '../nodes/Scalar.js';\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexport { resolveBlockScalar };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = next === 'x' ? 2 : next === 'u' ? 4 : 8;\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n try {\n return String.fromCodePoint(code);\n }\n catch {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n}\n\nexport { resolveFlowScalar };\n","import { isScalar, SCALAR } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { resolveBlockScalar } from './resolve-block-scalar.js';\nimport { resolveFlowScalar } from './resolve-flow-scalar.js';\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = isScalar(res) ? res : new Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexport { composeScalar };\n","function emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexport { emptyScalarPosition };\n","import { Alias } from '../nodes/Alias.js';\nimport { isScalar } from '../nodes/identity.js';\nimport { composeCollection } from './compose-collection.js';\nimport { composeScalar } from './compose-scalar.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { emptyScalarPosition } from './util-empty-scalar-position.js';\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n try {\n node = composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n }\n catch (error) {\n // Almost certainly here due to a stack overflow\n const message = error instanceof Error ? error.message : String(error);\n onError(token, 'RESOURCE_EXHAUSTION', message);\n }\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n isSrcToken = false;\n }\n }\n node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexport { composeEmptyNode, composeNode };\n","import { Document } from '../doc/Document.js';\nimport { composeNode, composeEmptyNode } from './compose-node.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexport { composeDoc };\n","import { Directives } from '../doc/directives.js';\nimport { Document } from '../doc/Document.js';\nimport { YAMLWarning, YAMLParseError } from '../errors.js';\nimport { isCollection, isPair } from '../nodes/identity.js';\nimport { composeDoc } from './compose-doc.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new YAMLWarning(pos, code, message));\n else\n this.errors.push(new YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n for (let i = 0; i < this.errors.length; ++i)\n doc.errors.push(this.errors[i]);\n for (let i = 0; i < this.warnings.length; ++i)\n doc.warnings.push(this.warnings[i]);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexport { Composer };\n","export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';\nexport { stringify } from './cst-stringify.js';\nexport { visit } from './cst-visit.js';\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexport { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };\n","import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return 'block-start';\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n let n = 0;\n loop: while (true) {\n switch (this.charAt(0)) {\n case '!':\n n += yield* this.pushTag();\n n += yield* this.pushSpaces(true);\n continue loop;\n case '&':\n n += yield* this.pushUntil(isNotAnchorChar);\n n += yield* this.pushSpaces(true);\n continue loop;\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n continue loop;\n }\n }\n }\n break loop;\n }\n return n;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexport { Lexer };\n","/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexport { LineCounter };\n","import { tokenType } from './cst.js';\nimport { Lexer } from './lexer.js';\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction arrayPushArray(target, source) {\n // May exhaust call stack with large `source` array\n if (source.length < 1e5)\n Array.prototype.push.apply(target, source);\n else\n for (let i = 0; i < source.length; ++i)\n target.push(source[i]);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n arrayPushArray(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n arrayPushArray(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexport { Parser };\n","import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { isDocument } from './nodes/identity.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser = new Parser(lineCounter?.addNewLine);\n const composer = new Composer(options);\n const docs = Array.from(composer.compose(parser.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(prettifyError(source, lineCounter));\n doc.warnings.forEach(prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser = new Parser(lineCounter?.addNewLine);\n const composer = new Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(prettifyError(source, lineCounter));\n doc.warnings.forEach(prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n","import { parse as parseYaml } from \"yaml\";\n\nexport type JamlClauseKind = \"must\" | \"should\" | \"mustNot\";\n\nexport type JamlItemType =\n | \"joker\"\n | \"voucher\"\n | \"boss\"\n | \"tag\"\n | \"tarot\"\n | \"planet\"\n | \"spectral\"\n | \"consumable\"\n | \"standardcard\"\n | \"deck\"\n | \"stake\"\n | \"seed\"\n | \"any\"\n | \"unknown\";\n\nexport interface ParsedJamlClause {\n kind: JamlClauseKind;\n itemType: JamlItemType;\n /** Exact names as written in JAML (e.g. \"WeeJoker\"). */\n names: string[];\n /** Optional explicit ante window. */\n antes?: number[];\n /** Score weight for should clauses; 0 for must/mustNot. */\n score: number;\n /** Optional user-facing label; falls back to a generated one. */\n label: string;\n /** Raw clause object for advanced consumers. */\n raw: Record<string, unknown>;\n}\n\nconst ITEM_KEYS: JamlItemType[] = [\n \"joker\",\n \"voucher\",\n \"boss\",\n \"tag\",\n \"tarot\",\n \"planet\",\n \"spectral\",\n \"consumable\",\n \"standardcard\",\n \"deck\",\n \"stake\",\n \"seed\",\n];\n\nfunction asArray<T>(value: unknown): T[] {\n if (value === undefined || value === null) return [];\n if (Array.isArray(value)) return value as T[];\n return [value as T];\n}\n\nfunction toStringArray(value: unknown): string[] {\n return asArray<string>(value).filter((v): v is string => typeof v === \"string\");\n}\n\nfunction extractNames(clause: Record<string, unknown>): { itemType: JamlItemType; names: string[] } {\n for (const key of ITEM_KEYS) {\n if (key in clause) {\n return { itemType: key, names: toStringArray(clause[key]) };\n }\n }\n // \"any\" is a wildcard catch-all supported by some JAML dialects.\n if (\"any\" in clause) return { itemType: \"any\", names: [] };\n return { itemType: \"unknown\", names: [] };\n}\n\nfunction parseClauseList(kind: JamlClauseKind, list: unknown): ParsedJamlClause[] {\n if (!Array.isArray(list)) return [];\n return list\n .filter((c): c is Record<string, unknown> => c !== null && typeof c === \"object\")\n .map((clause) => {\n const { itemType, names } = extractNames(clause);\n const antes = Array.isArray(clause.antes)\n ? clause.antes.filter((n): n is number => typeof n === \"number\").map((n) => Math.floor(n))\n : undefined;\n const score = typeof clause.score === \"number\" ? clause.score : 0;\n const label = typeof clause.label === \"string\" && clause.label.trim()\n ? clause.label\n : names.length > 0\n ? `${itemType}: ${names.join(\", \")}`\n : `${itemType}`;\n return {\n kind,\n itemType,\n names,\n antes,\n score,\n label,\n raw: clause,\n };\n })\n .filter((c) => c.itemType !== \"unknown\" || c.raw.label);\n}\n\nexport interface ParsedJamlFilters {\n deck?: string;\n stake?: string;\n must: ParsedJamlClause[];\n should: ParsedJamlClause[];\n mustNot: ParsedJamlClause[];\n all: ParsedJamlClause[];\n}\n\nexport function parseJamlClauses(jamlText: string): ParsedJamlFilters {\n let doc: Record<string, unknown> = {};\n try {\n doc = parseYaml(jamlText) as Record<string, unknown> || {};\n } catch {\n // Invalid YAML is handled gracefully; the engine will reject it later.\n }\n\n const must = parseClauseList(\"must\", doc.must);\n const should = parseClauseList(\"should\", doc.should);\n const mustNot = parseClauseList(\"mustNot\", doc.mustNot);\n\n return {\n deck: typeof doc.deck === \"string\" ? doc.deck : undefined,\n stake: typeof doc.stake === \"string\" ? doc.stake : undefined,\n must,\n should,\n mustNot,\n all: [...must, ...should, ...mustNot],\n };\n}\n\nexport function splitCamelCase(key: string): string {\n return key.replace(/([A-Z])/g, \" $1\").trim();\n}\n\nexport function normalizeName(name: string): string {\n return splitCamelCase(name).toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nexport function matchClauseToItem(\n clause: ParsedJamlClause,\n itemType: JamlItemType,\n itemName: string\n): boolean {\n if (clause.itemType !== \"any\" && clause.itemType !== itemType) return false;\n if (clause.names.length === 0) return clause.itemType === \"any\";\n const needle = normalizeName(itemName);\n return clause.names.some((n) => normalizeName(n) === needle);\n}\n\nexport function matchClauseToAnte(clause: ParsedJamlClause, ante: number): boolean {\n if (!clause.antes || clause.antes.length === 0) return true;\n return clause.antes.includes(ante);\n}\n\nexport function highlightClassForKind(kind: JamlClauseKind): string {\n switch (kind) {\n case \"must\":\n return \"j-glow--must\";\n case \"should\":\n return \"j-glow--should\";\n case \"mustNot\":\n return \"j-glow--match\";\n default:\n return \"\";\n }\n}\n\n/** Convenience matcher that maps the coarse decoder category to a JAML item type. */\nexport function matchMotelyItemToClause(\n item: { category?: string; displayName?: string },\n clause: ParsedJamlClause\n): boolean {\n if (!item.category || !item.displayName) return false;\n const category = item.category as JamlItemType | \"playing\" | \"consumable\" | \"unknown\";\n const itemType: JamlItemType = category === \"playing\" ? \"standardcard\" : category === \"unknown\" ? \"unknown\" : category;\n return matchClauseToItem(clause, itemType, item.displayName);\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport type {\n MotelyJamlyzerSeedResult,\n MotelyJamlyzerAnteResult,\n MotelyItem,\n} from \"motely-wasm\";\nimport {\n MotelyBoosterPack,\n MotelyBossBlind,\n MotelyTag,\n MotelyVoucher,\n MotelyDeck,\n MotelyStake,\n} from \"motely-wasm\";\nimport {\n JamlGameCard,\n JamlVoucher,\n JamlTag,\n JamlBoss,\n} from \"./GameCard.js\";\nimport { StandardCard } from \"./StandardCard.js\";\nimport { decodeMotelyItemToJamlCard, decodeMotelyItem, type MotelyRenderableCategory } from \"../decode/motelyItemDecoder.js\";\nimport {\n parseJamlClauses,\n type ParsedJamlClause,\n type JamlItemType,\n matchClauseToAnte,\n highlightClassForKind,\n normalizeName,\n} from \"../lib/jaml/parseClauses.js\";\n\nexport interface JamlyzerViewProps {\n result: MotelyJamlyzerSeedResult;\n deck?: MotelyDeck;\n stake?: MotelyStake;\n /** Maximum ante number to display in the rail. Antes 0–39 are valid in Balatro. */\n maxAnte?: number;\n /** Raw JAML text used to derive clause identities for highlighting. */\n jamlText?: string;\n /** Pre-parsed clauses (alternative to `jamlText`). */\n clauses?: ParsedJamlClause[];\n /** Per-should-clause tally values, in JAML order. */\n tallies?: number[] | Int32Array;\n /** Called when the user hovers a clause in the scoreboard. */\n onHoverClause?: (clause: ParsedJamlClause | null) => void;\n}\n\nfunction splitCamelCase(key: string): string {\n return key.replace(/([A-Z])/g, \" $1\").trim();\n}\n\nfunction packDisplayName(pack: MotelyBoosterPack): string {\n return splitCamelCase(MotelyBoosterPack[pack]);\n}\n\nfunction bossDisplayName(boss: MotelyBossBlind): string {\n return splitCamelCase(MotelyBossBlind[boss]);\n}\n\nfunction tagDisplayName(tag: MotelyTag): string {\n return splitCamelCase(MotelyTag[tag]);\n}\n\nfunction voucherDisplayName(voucher: MotelyVoucher): string {\n return splitCamelCase(MotelyVoucher[voucher]);\n}\n\nfunction deckDisplayName(deck: MotelyDeck): string {\n return splitCamelCase(MotelyDeck[deck]);\n}\n\nfunction stakeDisplayName(stake: MotelyStake): string {\n return splitCamelCase(MotelyStake[stake]);\n}\n\nfunction ItemCard({ item, scale = 0.85, highlight }: { item: MotelyItem; scale?: number; highlight?: string }) {\n const resolved = useMemo(() => decodeMotelyItemToJamlCard(item, scale), [item, scale]);\n if (!resolved) return <div className={`j-game-card j-game-card--unknown ${highlight || \"\"}`.trim()}>?</div>;\n return (\n <div className={highlight || undefined}>\n <JamlGameCard type={resolved.type} card={resolved.card} hoverTilt />\n </div>\n );\n}\n\nfunction itemTypeOfCategory(category: MotelyRenderableCategory): JamlItemType {\n switch (category) {\n case \"playing\":\n return \"standardcard\";\n case \"joker\":\n return \"joker\";\n case \"tarot\":\n case \"planet\":\n case \"spectral\":\n return category;\n case \"consumable\":\n return \"consumable\";\n default:\n return \"unknown\";\n }\n}\n\nfunction buildMatchMap(clauses: ParsedJamlClause[]): Map<string, ParsedJamlClause[]> {\n const map = new Map<string, ParsedJamlClause[]>();\n for (const clause of clauses) {\n for (const name of clause.names) {\n const key = `${clause.itemType}:${normalizeName(name)}`;\n const list = map.get(key) ?? [];\n list.push(clause);\n map.set(key, list);\n }\n }\n return map;\n}\n\nfunction selectHighlight(\n itemType: JamlItemType,\n name: string,\n ante: number,\n matches: Map<string, ParsedJamlClause[]>\n): string | undefined {\n const key = `${itemType}:${normalizeName(name)}`;\n const clauses = matches.get(key) ?? [];\n const matching = clauses.filter((c) => matchClauseToAnte(c, ante));\n if (matching.length === 0) return undefined;\n // Prefer should, then must, then mustNot for the glow color.\n const primary = matching.find((c) => c.kind === \"should\") ?? matching.find((c) => c.kind === \"must\") ?? matching[0];\n return highlightClassForKind(primary.kind);\n}\n\nfunction PackSection({\n pack,\n ante,\n matches,\n}: {\n pack: MotelyJamlyzerAnteResult[\"packs\"][number];\n ante: number;\n matches: Map<string, ParsedJamlClause[]>;\n}) {\n return (\n <div className=\"j-inner-panel\" style={{ marginBottom: \"var(--j-space-md)\" }}>\n <div className=\"j-flex\" style={{ alignItems: \"center\", gap: \"var(--j-space-md)\", marginBottom: \"var(--j-space-sm)\" }}>\n <span className=\"j-text j-text--body\">{packDisplayName(pack.pack)}</span>\n <span className=\"j-badge j-badge--blue j-badge--sm\">{pack.items.length} cards</span>\n </div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {pack.items.map((item, i) => {\n const decoded = decodeMotelyItem(item);\n const highlight = decoded ? selectHighlight(itemTypeOfCategory(decoded.category), decoded.displayName, ante, matches) : undefined;\n return <ItemCard key={i} item={item} highlight={highlight} />;\n })}\n </div>\n </div>\n );\n}\n\nfunction PullsDrawer({\n ante,\n matches,\n}: {\n ante: MotelyJamlyzerAnteResult;\n matches: Map<string, ParsedJamlClause[]>;\n}) {\n const pulls = ante.pulls;\n const groups = [\n { title: \"Judgement Jokers\", items: pulls.judgementJokers },\n { title: \"Wraith Jokers\", items: pulls.wraithJokers },\n { title: \"Emperor Tarots\", items: pulls.emperorTarots },\n { title: \"Purple Seal Tarots\", items: pulls.purpleSealTarots },\n { title: \"Sixth Sense Spectrals\", items: pulls.sixthSenseSpectrals },\n { title: \"Seance Spectrals\", items: pulls.seanceSpectrals },\n { title: \"Riff-Raff Jokers\", items: pulls.riffRaffJokers },\n { title: \"Rare Tag Jokers\", items: pulls.rareTagJokers },\n { title: \"Uncommon Tag Jokers\", items: pulls.uncommonTagJokers },\n { title: \"Legendary Jokers\", items: pulls.legendaryJokers },\n ].filter((g) => g.items.length > 0);\n\n if (groups.length === 0 && pulls.voucherSequence.length === 0) return null;\n\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Pulls</div>\n {groups.map((group) => (\n <div key={group.title} className=\"j-inner-panel\">\n <div className=\"j-text j-text--label j-text--grey\" style={{ marginBottom: \"var(--j-space-sm)\" }}>\n {group.title}\n </div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {group.items.map((item, i) => {\n const decoded = decodeMotelyItem(item);\n const highlight = decoded ? selectHighlight(itemTypeOfCategory(decoded.category), decoded.displayName, ante.ante, matches) : undefined;\n return <ItemCard key={i} item={item} highlight={highlight} />;\n })}\n </div>\n </div>\n ))}\n {pulls.voucherSequence.length > 0 && (\n <div className=\"j-inner-panel\">\n <div className=\"j-text j-text--label j-text--grey\" style={{ marginBottom: \"var(--j-space-sm)\" }}>\n Voucher Sequence\n </div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {pulls.voucherSequence.map((voucher, i) => {\n const name = voucherDisplayName(voucher);\n const highlight = selectHighlight(\"voucher\", name, ante.ante, matches);\n return (\n <div key={i} className={highlight || undefined}>\n <JamlVoucher voucherName={name} scale={0.75} />\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction EventsSection({ events }: { events: MotelyJamlyzerSeedResult[\"events\"] }) {\n const rolls = [\n { key: \"luckyMoney\", label: \"Lucky Money\", values: events.luckyMoney },\n { key: \"luckyMult\", label: \"Lucky Mult\", values: events.luckyMult },\n { key: \"cavendish\", label: \"Cavendish\", values: events.cavendish },\n { key: \"grosMichel\", label: \"Gros Michel\", values: events.grosMichel },\n { key: \"space\", label: \"Space Joker\", values: events.space },\n { key: \"business\", label: \"Business Card\", values: events.business },\n { key: \"bloodstone\", label: \"Bloodstone\", values: events.bloodstone },\n { key: \"parking\", label: \"Parking Meter\", values: events.parking },\n { key: \"eightBall\", label: \"Eight Ball\", values: events.eightBall },\n { key: \"glass\", label: \"Glass Joker\", values: events.glass },\n { key: \"omenGlobe\", label: \"Omen Globe\", values: events.omenGlobe },\n { key: \"theWheel\", label: \"The Wheel\", values: events.theWheel },\n ].filter((r) => r.values && r.values.length > 0);\n\n if (rolls.length === 0) return null;\n\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Event Rolls</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {rolls.map((roll) => (\n <div key={roll.key} className=\"j-inner-panel\" style={{ minWidth: 120 }}>\n <div className=\"j-text j-text--label j-text--grey\">{roll.label}</div>\n <div className=\"j-text j-text--body\">\n {roll.values.slice(0, 8).map((v, i) => (\n <span key={i} className=\"j-badge j-badge--grey j-badge--sm\" style={{ marginRight: \"var(--j-space-xs)\" }}>\n {String(v)}\n </span>\n ))}\n {roll.values.length > 8 && (\n <span className=\"j-text j-text--micro j-text--grey\">+{roll.values.length - 8}</span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction ErraticDeckPanel({\n cards,\n matches,\n}: {\n cards: MotelyItem[];\n matches: Map<string, ParsedJamlClause[]>;\n}) {\n if (cards.length === 0) return null;\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Erratic Deck</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {cards.map((item, i) => {\n const resolved = decodeMotelyItemToJamlCard(item, 0.65);\n if (resolved?.type === \"playing\") {\n const name = `${resolved.card.rank} of ${resolved.card.suit}`;\n const highlight = selectHighlight(\"standardcard\", name, 0, matches);\n return (\n <div key={i} className={highlight || undefined}>\n <StandardCard\n rank={resolved.card.rank as never}\n suit={resolved.card.suit as never}\n enhancement={resolved.card.enhancements?.[0] as never}\n seal={resolved.card.seal as never}\n edition={resolved.card.edition as never}\n size={48}\n />\n </div>\n );\n }\n return <ItemCard key={i} item={item} scale={0.65} />;\n })}\n </div>\n </div>\n );\n}\n\nexport function JamlyzerView({\n result,\n deck,\n stake,\n maxAnte: maxAnteProp,\n jamlText,\n clauses: clausesProp,\n tallies,\n onHoverClause,\n}: JamlyzerViewProps) {\n const maxAnte = maxAnteProp ?? 39;\n const [selectedAnte, setSelectedAnte] = useState<number>(() => result.antes[0]?.ante ?? 0);\n const [hoveredClause, setHoveredClause] = useState<ParsedJamlClause | null>(null);\n\n const parsed = useMemo(() => {\n if (clausesProp) return clausesProp;\n if (jamlText) return parseJamlClauses(jamlText).all;\n return [];\n }, [clausesProp, jamlText]);\n\n const shouldClauses = useMemo(() => parsed.filter((c) => c.kind === \"should\"), [parsed]);\n const matches = useMemo(() => buildMatchMap(parsed), [parsed]);\n const activeMatches = useMemo(() => {\n if (!hoveredClause) return matches;\n const m = new Map<string, ParsedJamlClause[]>();\n matches.forEach((clauses, key) => {\n const filtered = clauses.filter((c) => c === hoveredClause);\n if (filtered.length > 0) m.set(key, filtered);\n });\n return m;\n }, [matches, hoveredClause]);\n\n const availableAntes = useMemo(\n () => new Set(result.antes.map((a) => a.ante)),\n [result.antes]\n );\n\n const anteNumbers = useMemo(\n () => Array.from({ length: maxAnte + 1 }, (_, i) => i),\n [maxAnte]\n );\n\n const ante = useMemo(\n () => result.antes.find((a) => a.ante === selectedAnte) ?? result.antes[0],\n [result.antes, selectedAnte]\n );\n\n const handleClauseHover = (clause: ParsedJamlClause | null) => {\n setHoveredClause(clause);\n onHoverClause?.(clause);\n };\n\n if (!ante) {\n return (\n <div className=\"j-panel j-text j-text--grey\">\n No ante data available for seed {result.seed}.\n </div>\n );\n }\n\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-lg)\" }}>\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-md)\", alignItems: \"flex-start\" }}>\n <div className=\"j-ante-scroll\" style={{ display: \"flex\", flexDirection: \"column\", gap: \"var(--j-space-sm)\", maxHeight: 420, overflowY: \"auto\", minWidth: 72 }}>\n {parsed.length > 0 && (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-sm)\", padding: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--label j-text--upper j-text--gold\">Clauses</div>\n {shouldClauses.map((clause, i) => (\n <button\n key={i}\n className=\"j-btn j-btn--xs\"\n onMouseEnter={() => handleClauseHover(clause)}\n onMouseLeave={() => handleClauseHover(null)}\n style={{ width: \"100%\" }}\n >\n <span className={`j-btn__face j-text j-text--micro ${tallies && i < tallies.length && tallies[i] > 0 ? \"j-text--green\" : \"j-text--grey\"}`.trim()}>\n {tallies && i < tallies.length ? `${tallies[i]} · ` : \"\"}{clause.label}\n </span>\n </button>\n ))}\n {parsed.filter((c) => c.kind !== \"should\").map((clause, i) => (\n <button\n key={`other-${i}`}\n className=\"j-btn j-btn--xs\"\n onMouseEnter={() => handleClauseHover(clause)}\n onMouseLeave={() => handleClauseHover(null)}\n style={{ width: \"100%\" }}\n >\n <span className={`j-btn__face j-text j-text--micro ${clause.kind === \"must\" ? \"j-text--red\" : \"j-text--grey\"}`.trim()}>\n {clause.kind === \"must\" ? \"MUST \" : \"NOT \"}{clause.label}\n </span>\n </button>\n ))}\n </div>\n )}\n {anteNumbers.map((n) => (\n <button\n key={n}\n className=\"j-btn j-btn--xs\"\n data-pressed={n === selectedAnte}\n onClick={() => setSelectedAnte(n)}\n style={{ width: \"100%\" }}\n >\n <span className=\"j-btn__face j-text j-text--label j-text--upper\">\n Ante {n}\n </span>\n </button>\n ))}\n </div>\n\n <div className=\"j-flex-1 j-flex-col\" style={{ gap: \"var(--j-space-lg)\", minWidth: 0 }}>\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-sm)\" }}>\n <div className=\"j-text j-text--xl j-text--gold\">Seed: {result.seed}</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-md)\" }}>\n <span className=\"j-text j-text--body j-text--grey\">\n Score: <span className=\"j-text--gold\">{result.score}</span>\n </span>\n {deck !== undefined && (\n <span className=\"j-text j-text--body j-text--grey\">\n Deck: <span className=\"j-text--white\">{deckDisplayName(deck)}</span>\n </span>\n )}\n {stake !== undefined && (\n <span className=\"j-text j-text--body j-text--grey\">\n Stake: <span className=\"j-text--white\">{stakeDisplayName(stake)}</span>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Blinds</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-md)\", alignItems: \"center\" }}>\n <div className={`j-inner-panel j-flex ${selectHighlight(\"tag\", tagDisplayName(ante.smallBlindTag), ante.ante, activeMatches) || \"\"}`.trim()} style={{ alignItems: \"center\", gap: \"var(--j-space-md)\" }}>\n <span className=\"j-text j-text--label j-text--grey\">SMALL</span>\n <JamlTag tagName={tagDisplayName(ante.smallBlindTag)} scale={0.75} />\n </div>\n <div className={`j-inner-panel j-flex ${selectHighlight(\"tag\", tagDisplayName(ante.bigBlindTag), ante.ante, activeMatches) || \"\"}`.trim()} style={{ alignItems: \"center\", gap: \"var(--j-space-md)\" }}>\n <span className=\"j-text j-text--label j-text--grey\">BIG</span>\n <JamlTag tagName={tagDisplayName(ante.bigBlindTag)} scale={0.75} />\n </div>\n <div className={`j-inner-panel j-flex ${selectHighlight(\"boss\", bossDisplayName(ante.boss), ante.ante, activeMatches) || \"\"}`.trim()} style={{ alignItems: \"center\", gap: \"var(--j-space-md)\" }}>\n <span className=\"j-text j-text--label j-text--grey\">BOSS</span>\n <JamlBoss bossName={bossDisplayName(ante.boss)} scale={0.75} />\n </div>\n </div>\n </div>\n\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Voucher</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n <div className={selectHighlight(\"voucher\", voucherDisplayName(ante.voucher), ante.ante, activeMatches) || undefined}>\n <JamlVoucher voucherName={voucherDisplayName(ante.voucher)} scale={0.9} />\n </div>\n </div>\n </div>\n\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Shop</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {ante.shopItems.map((item, i) => {\n const decoded = decodeMotelyItem(item);\n const highlight = decoded ? selectHighlight(itemTypeOfCategory(decoded.category), decoded.displayName, ante.ante, activeMatches) : undefined;\n return <ItemCard key={i} item={item} highlight={highlight} />;\n })}\n </div>\n </div>\n\n {ante.packs.length > 0 && (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Packs</div>\n {ante.packs.map((pack, i) => (\n <PackSection key={i} pack={pack} ante={ante.ante} matches={activeMatches} />\n ))}\n </div>\n )}\n\n <PullsDrawer ante={ante} matches={activeMatches} />\n </div>\n </div>\n\n {result.erraticDeck && result.erraticDeck.length > 0 && <ErraticDeckPanel cards={result.erraticDeck} matches={activeMatches} />}\n <EventsSection events={result.events} />\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport type { MotelyJamlyzerSeedResult, MotelyJamlyzerAnteResult } from \"motely-wasm\";\nimport { JamlyzerView } from \"./JamlyzerView.js\";\nimport { decodeMotelyItem } from \"../decode/motelyItemDecoder.js\";\nimport {\n parseJamlClauses,\n type ParsedJamlClause,\n matchMotelyItemToClause,\n matchClauseToAnte,\n} from \"../lib/jaml/parseClauses.js\";\n\nexport interface JamlyzerBulkProps {\n results: MotelyJamlyzerSeedResult[];\n /** Raw JAML text; used to derive clause identities if `clauses` is not provided. */\n jamlText?: string;\n /** Pre-parsed clauses (alternative to `jamlText`). */\n clauses?: ParsedJamlClause[];\n /** Per-seed per-should-clause tally values, in JAML order. */\n tallies?: (number[] | Int32Array)[];\n /** Optional deck/stake applied to every seed in the bulk view. */\n deck?: number;\n stake?: number;\n}\n\nfunction pullItems(ante: MotelyJamlyzerAnteResult): MotelyJamlyzerAnteResult[\"pulls\"][\"judgementJokers\"] {\n return [\n ...ante.pulls.judgementJokers,\n ...ante.pulls.wraithJokers,\n ...ante.pulls.emperorTarots,\n ...ante.pulls.purpleSealTarots,\n ...ante.pulls.sixthSenseSpectrals,\n ...ante.pulls.seanceSpectrals,\n ...ante.pulls.riffRaffJokers,\n ...ante.pulls.rareTagJokers,\n ...ante.pulls.uncommonTagJokers,\n ...ante.pulls.legendaryJokers,\n ];\n}\n\nfunction seedClauseMatches(\n seedResult: MotelyJamlyzerSeedResult,\n clauses: ParsedJamlClause[]\n): Map<ParsedJamlClause, number[]> {\n const map = new Map<ParsedJamlClause, number[]>();\n for (const clause of clauses) {\n const antes: number[] = [];\n for (const ante of seedResult.antes) {\n if (!matchClauseToAnte(clause, ante.ante)) continue;\n const allItems = [\n ...ante.shopItems,\n ...ante.packs.flatMap((p) => p.items),\n ...pullItems(ante),\n ];\n const matched = allItems.some((item) => matchMotelyItemToClause(decodeMotelyItem(item) ?? {}, clause));\n if (matched) antes.push(ante.ante);\n }\n map.set(clause, antes);\n }\n return map;\n}\n\nexport function JamlyzerBulk({ results, jamlText, clauses: clausesProp, tallies, deck, stake }: JamlyzerBulkProps) {\n const [expandedSeed, setExpandedSeed] = useState<string | null>(null);\n\n const clauses = useMemo(() => {\n if (clausesProp) return clausesProp;\n if (jamlText) return parseJamlClauses(jamlText).all;\n return [];\n }, [clausesProp, jamlText]);\n\n const shouldClauses = useMemo(() => clauses.filter((c) => c.kind === \"should\"), [clauses]);\n\n if (results.length === 0) {\n return (\n <div className=\"j-panel j-text j-text--grey\">\n No seeds to analyze.\n </div>\n );\n }\n\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-lg)\" }}>\n <div className=\"j-text j-text--xl j-text--gold\">Bulk Seed Analysis</div>\n <div className=\"j-text j-text--body j-text--grey\">\n {results.length} seed{results.length === 1 ? \"\" : \"s\"} analyzed\n </div>\n\n {results.map((result, index) => {\n const matches = seedClauseMatches(result, clauses);\n const isExpanded = expandedSeed === result.seed;\n const seedTallies = tallies && index < tallies.length ? tallies[index] : undefined;\n\n return (\n <div key={result.seed} className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-flex\" style={{ alignItems: \"center\", gap: \"var(--j-space-md)\", flexWrap: \"wrap\" }}>\n <div className=\"j-text j-text--lg j-text--white\">{result.seed}</div>\n <div className=\"j-badge j-badge--gold j-badge--md\">Score: {result.score}</div>\n <button\n className=\"j-btn j-btn--xs\"\n onClick={() => setExpandedSeed(isExpanded ? null : result.seed)}\n >\n <span className=\"j-btn__face j-text j-text--micro\">\n {isExpanded ? \"Collapse\" : \"Expand\"}\n </span>\n </button>\n </div>\n\n {shouldClauses.length > 0 && (\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-md)\", flexWrap: \"wrap\" }}>\n {shouldClauses.map((clause, i) => {\n const hitAntes = matches.get(clause) ?? [];\n const tally = seedTallies && i < seedTallies.length ? seedTallies[i] : undefined;\n return (\n <div key={i} className=\"j-inner-panel\" style={{ minWidth: 140 }}>\n <div className=\"j-text j-text--label j-text--grey\" style={{ marginBottom: \"var(--j-space-sm)\" }}>\n {clause.label}\n {tally !== undefined && <span className=\"j-text--green\"> ({tally})</span>}\n </div>\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-xs)\", flexWrap: \"wrap\" }}>\n {hitAntes.length > 0 ? (\n hitAntes.map((n) => (\n <span key={n} className=\"j-badge j-badge--green j-badge--sm\">\n Ante {n}\n </span>\n ))\n ) : (\n <span className=\"j-text j-text--micro j-text--grey\">no hits</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {clauses.filter((c) => c.kind !== \"should\").length > 0 && (\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-md)\", flexWrap: \"wrap\" }}>\n {clauses\n .filter((c) => c.kind !== \"should\")\n .map((clause, i) => {\n const hitAntes = matches.get(clause) ?? [];\n const color = clause.kind === \"must\" ? \"red\" : \"grey\";\n return (\n <div key={`other-${i}`} className=\"j-inner-panel\" style={{ minWidth: 140 }}>\n <div className={`j-text j-text--label j-text--${clause.kind === \"must\" ? \"red\" : \"grey\"}`} style={{ marginBottom: \"var(--j-space-sm)\" }}>\n {clause.kind === \"must\" ? \"MUST \" : \"NOT \"}{clause.label}\n </div>\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-xs)\", flexWrap: \"wrap\" }}>\n {hitAntes.length > 0 ? (\n hitAntes.map((n) => (\n <span key={n} className={`j-badge j-badge--${color} j-badge--sm`}>\n Ante {n}\n </span>\n ))\n ) : (\n <span className=\"j-text j-text--micro j-text--grey\">no hits</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {isExpanded && (\n <div style={{ marginTop: \"var(--j-space-md)\" }}>\n <JamlyzerView\n result={result}\n deck={deck}\n stake={stake}\n clauses={clauses}\n tallies={seedTallies ? [...seedTallies] : undefined}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","'use client'\n\nimport React from 'react'\nimport { resolveJamlAssetUrl } from '../assets.js'\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const DECK_SPRITE_POS: Record<string, { x: number; y: number }> = {\n red: { x: 0, y: 0 },\n nebula: { x: 3, y: 0 },\n locked: { x: 4, y: 0 },\n blue: { x: 0, y: 2 },\n yellow: { x: 1, y: 2 },\n green: { x: 2, y: 2 },\n black: { x: 3, y: 2 },\n plasma: { x: 4, y: 2 },\n ghost: { x: 6, y: 2 },\n magic: { x: 0, y: 3 },\n checkered: { x: 1, y: 3 },\n erratic: { x: 2, y: 3 },\n abandoned: { x: 3, y: 3 },\n painted: { x: 4, y: 3 },\n challenge: { x: 0, y: 4 },\n anaglyph: { x: 2, y: 4 },\n zodiac: { x: 3, y: 4 },\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const STAKE_SPRITE_POS: Record<string, { x: number; y: number }> = {\n white: { x: 1, y: 0 },\n red: { x: 2, y: 0 },\n green: { x: 3, y: 0 },\n blue: { x: 4, y: 0 },\n black: { x: 0, y: 1 },\n purple: { x: 1, y: 1 },\n orange: { x: 2, y: 1 },\n gold: { x: 3, y: 1 },\n}\n\nconst SPRITE_WIDTH = 142\nconst SPRITE_HEIGHT = 190\nconst DECK_COLS = 7\nconst DECK_ROWS = 5\nconst STICKER_COLS = 5\nconst STICKER_ROWS = 3\n\nexport interface DeckSpriteProps {\n /** Deck name — case-insensitive, \"Deck\" suffix tolerated (e.g. \"Erratic Deck\" → \"erratic\"). */\n deck: string\n /** Optional stake name to overlay its sticker on the deck. */\n stake?: string\n /** Rendered width in pixels. Height is scaled proportionally from the 142x190 sprite. */\n size?: number\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * Balatro deck box sprite — optionally overlaid with a stake sticker.\n * Draws from the Enhancers.png atlas (deck thumbnails live in the bottom\n * two rows) and stickers.png for the stake band. Uses jaml-ui's\n * `resolveJamlAssetUrl` so consumers can override the asset base URL.\n */\nexport function DeckSprite({ deck, stake, size = 50, className = '', style }: DeckSpriteProps) {\n const deckKey = (deck || 'erratic').toLowerCase().replace(/\\s*deck$/, '').trim()\n const deckPos = DECK_SPRITE_POS[deckKey] ?? DECK_SPRITE_POS.erratic\n const stakePos = stake ? STAKE_SPRITE_POS[stake.toLowerCase().replace(/\\s*stake$/, '').trim()] : null\n\n const scale = size / SPRITE_WIDTH\n const displayHeight = SPRITE_HEIGHT * scale\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n width: size,\n height: displayHeight,\n ...style,\n }}\n >\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl('enhancers')})`,\n backgroundSize: `${DECK_COLS * 100}% ${DECK_ROWS * 100}%`,\n backgroundPosition: `${(deckPos.x / (DECK_COLS - 1)) * 100}% ${(deckPos.y / (DECK_ROWS - 1)) * 100}%`,\n backgroundRepeat: 'no-repeat',\n imageRendering: 'pixelated',\n }}\n />\n {stakePos ? (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl('stickers')})`,\n backgroundSize: `${STICKER_COLS * 100}% ${STICKER_ROWS * 100}%`,\n backgroundPosition: `${(stakePos.x / (STICKER_COLS - 1)) * 100}% ${(stakePos.y / (STICKER_ROWS - 1)) * 100}%`,\n backgroundRepeat: 'no-repeat',\n imageRendering: 'pixelated',\n }}\n />\n ) : null}\n </div>\n )\n}\n","import type React from \"react\";\nimport { type ReactNode, Fragment } from \"react\";\n\n/**\n * json-render — Zero-dependency JSON-to-React engine.\n *\n * A JsonNode is a plain JSON object describing a UI tree.\n * A Registry maps type names to React components.\n * render() walks the tree and returns React nodes.\n */\n\nexport interface JsonNode {\n type: string;\n props?: Record<string, unknown>;\n children?: JsonNode[];\n}\n\nexport type ComponentProps<P = Record<string, unknown>> = P & {\n children?: ReactNode;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Registry = Record<string, React.ComponentType<any>>;\n\n/**\n * Render a JsonNode tree using the provided Registry.\n *\n * Unknown types log a warning and render null (graceful degradation).\n * Each child gets a stable key from its index in the children array.\n */\nexport function render(node: JsonNode, registry: Registry): ReactNode {\n const Component = registry[node.type];\n\n if (!Component) {\n console.warn(`[json-render] Unknown type: \"${node.type}\"`);\n return null;\n }\n\n const children = node.children?.map((child, i) => (\n <Fragment key={i}>{render(child, registry)}</Fragment>\n ));\n\n return <Component {...(node.props ?? {})}>{children}</Component>;\n}\n\n/**\n * Render a list of JsonNode trees.\n */\nexport function renderList(\n nodes: JsonNode[],\n registry: Registry\n): ReactNode[] {\n return nodes.map((node, i) => (\n <Fragment key={i}>{render(node, registry)}</Fragment>\n ));\n}\n\n/**\n * Type-safe catalog builder.\n *\n * Just returns the catalog object as-is, but enforces types at compile time.\n * No runtime overhead. No zod. Just TypeScript.\n */\nexport function defineCatalog<C extends Record<string, { props?: object; description?: string }>>(\n catalog: C\n): C {\n return catalog;\n}\n","import { defineCatalog } from \"./engine\";\nimport type { BadgeTone } from \"./components/layout.js\";\n\n/**\n * Balatro Catalog — Component vocabulary for AI-generated UI.\n *\n * Type-safe at compile time. Zero runtime overhead.\n * The AI sees these names + descriptions + prop shapes.\n */\nexport const balatroCatalog = defineCatalog({\n // ── Layout ──\n Panel: {\n props: {} as {\n title?: string;\n subtitle?: string;\n variant?: \"default\" | \"accent\" | \"muted\";\n className?: string;\n },\n description:\n \"A framed panel with optional title. Use for grouping related content.\",\n },\n Stack: {\n props: {} as {\n gap?: number; // default 12\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"; // default stretch\n className?: string;\n },\n description: \"Vertical stack with configurable gap. The default layout primitive.\",\n },\n Grid: {\n props: {} as {\n columns?: number; // 1-4, default 3\n gap?: number; // default 16\n className?: string;\n },\n description:\n \"Grid layout for cards and results. Responsive: 1 col mobile, 2 tablet, 3+ desktop.\",\n },\n Text: {\n props: {} as {\n body: string;\n variant?: \"title\" | \"body\" | \"muted\" | \"accent\" | \"error\";\n className?: string;\n },\n description: \"Styled text. Use variant for semantic color, not manual color.\",\n },\n Spacer: {\n props: {} as { size?: number },\n description: \"Vertical spacer. Use instead of empty divs with margin.\",\n },\n Divider: {\n props: {} as { className?: string },\n description: \"Horizontal divider line.\",\n },\n Badge: {\n props: {} as {\n label: string;\n tone?: \"red\" | \"blue\" | \"green\" | \"orange\" | \"gold\" | \"purple\" | \"grey\";\n className?: string;\n },\n description: \"Small colored badge / pill.\",\n },\n\n // ── Status & Feedback ──\n SearchStats: {\n props: {} as {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n },\n description: \"Live search metrics panel. Shows seeds/sec, matches, status.\",\n },\n ErrorBanner: {\n props: {} as {\n message: string;\n onDismiss?: boolean; // if true, show X button\n },\n description: \"Error state banner. Dismissible if onDismiss is true.\",\n },\n LoadingPulse: {\n props: {} as { text?: string },\n description: \"Loading skeleton with optional text.\",\n },\n\n // ── Results ──\n SeedCard: {\n props: {} as {\n seed: string;\n score?: number;\n rank?: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n onClick?: boolean; // if true, seed is clickable\n },\n description:\n \"A seed result card. Shows seed code, score, jokers, highlights. Tap to expand.\",\n },\n SeedList: {\n props: {} as {\n seeds: string[];\n scores?: number[];\n total?: number;\n pageSize?: number;\n },\n description: \"Paginated list of seed results. Use when results > 20.\",\n },\n JokerBadge: {\n props: {} as {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n rarity?: \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\n },\n description: \"Small joker name pill with rarity color.\",\n },\n EditionBadge: {\n props: {} as {\n edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n },\n description: \"Edition badge with appropriate color (blue, green, purple, red).\",\n },\n\n // ── Game Cards (via jaml-ui) ──\n JamlGameCard: {\n props: {} as {\n type: \"joker\" | \"consumable\" | \"playing\";\n card: {\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n scale?: number;\n };\n },\n description: \"Renders a real Balatro card using jaml-ui's sprite system.\",\n },\n\n // ── Mascot ──\n JammyMascot: {\n props: {} as {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n size?: number;\n menuItems?: { label: string; action: string; tone?: BadgeTone }[];\n onMenuAction?: boolean; // if true, the mascot emits actions\n },\n description:\n \"Jammy — the whimsical seed-mascot. Tap to open an orbital menu of actions.\",\n },\n JammyOrbitalMenu: {\n props: {} as {\n items: { label: string; action: string; tone?: BadgeTone }[];\n radius?: number;\n },\n description: \"Radial menu orbiting a center point. Used by JammyMascot.\",\n },\n\n // ── Encyclopedia / Reference ──\n JokerCard: {\n props: {} as {\n name: string;\n showSynergies?: boolean;\n },\n description:\n \"Full joker info card: name, rarity, cost, effect, strategy, synergies. Queries the knowledge base.\",\n },\n SynergyCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Synergy guide card: jokers involved, setup steps, math breakdown, boss counters, difficulty rating.\",\n },\n BossBlindCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Boss blind info card: effect, category, threat level, counters, JAML filter string.\",\n },\n DeckCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Deck info card: effect, strategy, synergies, difficulty rating.\",\n },\n StakeCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Stake difficulty card: effect, strategy, difficulty rating.\",\n },\n StrategyAdvisor: {\n props: {} as {\n jokers: string[];\n },\n description:\n \"Takes a list of joker names and recommends strategies, warns about boss blinds, and suggests synergies.\",\n },\n});\n\nexport type BalatroCatalog = typeof balatroCatalog;\nexport type BalatroComponentName = keyof BalatroCatalog;\n\n/**\n * Extract the props type for a given catalog component.\n */\nexport type CatalogProps<K extends BalatroComponentName> =\n BalatroCatalog[K] extends { props: infer P } ? P : never;\n","import React from \"react\";\n\n/**\n * Layout primitives — Panel, Stack, Grid, Text, Spacer, Divider, Badge.\n *\n * All use CSS custom properties from jimbo-tokens.css.\n * No external classes. No BEM. Just inline styles + tokens.\n */\n\n/* ─── Panel ─── */\nexport interface PanelProps {\n title?: string;\n subtitle?: string;\n variant?: \"default\" | \"accent\" | \"muted\";\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Panel: React.FC<PanelProps> = ({\n title,\n subtitle,\n variant = \"default\",\n className = \"\",\n children,\n}) => {\n const bg =\n variant === \"accent\"\n ? \"var(--j-dark-blue)\"\n : variant === \"muted\"\n ? \"var(--j-surface-inset)\"\n : \"var(--j-surface)\";\n\n return (\n <div\n className={className}\n style={{\n border: \"2px solid var(--j-panel-edge)\",\n borderRadius: \"var(--j-radius)\",\n background: bg,\n padding: \"var(--j-space-4)\",\n boxShadow: \"var(--j-shadow)\",\n }}\n >\n {title && (\n <h3\n style={{\n color: \"var(--j-blue)\",\n fontSize: \"var(--j-text-lg)\",\n margin: \"0 0 var(--j-space-2) 0\",\n fontFamily: \"var(--j-font)\",\n }}\n >\n {title}\n </h3>\n )}\n {subtitle && (\n <p\n style={{\n color: \"var(--j-grey)\",\n fontSize: \"var(--j-text-sm)\",\n margin: \"0 0 var(--j-space-3) 0\",\n opacity: 0.8,\n }}\n >\n {subtitle}\n </p>\n )}\n {children}\n </div>\n );\n};\n\n/* ─── Stack ─── */\nexport interface StackProps {\n gap?: number;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Stack: React.FC<StackProps> = ({\n gap = 12,\n align = \"stretch\",\n className = \"\",\n children,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap,\n alignItems: align,\n width: \"100%\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/* ─── Grid ─── */\nexport interface GridProps {\n columns?: number;\n gap?: number;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Grid: React.FC<GridProps> = ({\n columns = 3,\n gap = 16,\n className = \"\",\n children,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap,\n width: \"100%\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/* ─── Text ─── */\nexport interface TextProps {\n body: string;\n variant?: \"title\" | \"body\" | \"muted\" | \"accent\" | \"error\";\n className?: string;\n children?: React.ReactNode; // allows wrapping text in spans\n}\n\nexport const Text: React.FC<TextProps> = ({\n body,\n variant = \"body\",\n className = \"\",\n children,\n}) => {\n const colors: Record<string, string> = {\n title: \"var(--j-gold)\",\n body: \"var(--j-grey)\",\n muted: \"var(--j-dark-grey)\",\n accent: \"var(--j-blue)\",\n error: \"var(--j-red)\",\n };\n\n const sizes: Record<string, string> = {\n title: \"var(--j-text-xl)\",\n body: \"var(--j-text-md)\",\n muted: \"var(--j-text-sm)\",\n accent: \"var(--j-text-md)\",\n error: \"var(--j-text-sm)\",\n };\n\n return (\n <span\n className={className}\n style={{\n color: colors[variant] || colors.body,\n fontSize: sizes[variant] || sizes.body,\n fontFamily: \"var(--j-font)\",\n lineHeight: 1.4,\n }}\n >\n {body}\n {children}\n </span>\n );\n};\n\n/* ─── Spacer ─── */\nexport interface SpacerProps {\n size?: number;\n}\n\nexport const Spacer: React.FC<SpacerProps> = ({ size = 16 }) => {\n return <div style={{ height: size, width: \"100%\" }} />;\n};\n\n/* ─── Divider ─── */\nexport interface DividerProps {\n className?: string;\n}\n\nexport const Divider: React.FC<DividerProps> = ({ className = \"\" }) => {\n return (\n <div\n className={className}\n style={{\n height: 2,\n background: \"var(--j-panel-edge)\",\n width: \"100%\",\n margin: \"var(--j-space-3) 0\",\n }}\n />\n );\n};\n\n/* ─── Badge ─── */\nexport type BadgeTone = \"red\" | \"blue\" | \"green\" | \"orange\" | \"gold\" | \"purple\" | \"grey\";\n\nexport interface BadgeProps {\n label: string;\n tone?: BadgeTone;\n className?: string;\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n label,\n tone = \"grey\",\n className = \"\",\n}) => {\n const toneMap: Record<string, { bg: string; color: string }> = {\n red: { bg: \"var(--j-dark-red)\", color: \"var(--j-red)\" },\n blue: { bg: \"var(--j-dark-blue)\", color: \"var(--j-blue)\" },\n green: { bg: \"var(--j-dark-green)\", color: \"var(--j-green)\" },\n orange: { bg: \"var(--j-dark-orange)\", color: \"var(--j-orange)\" },\n gold: { bg: \"var(--j-dark-orange)\", color: \"var(--j-gold)\" },\n purple: { bg: \"var(--j-dark-purple)\", color: \"var(--j-purple)\" },\n grey: { bg: \"var(--j-surface-inset)\", color: \"var(--j-grey)\" },\n };\n\n const t = toneMap[tone] || toneMap.grey;\n\n return (\n <span\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"2px 10px\",\n borderRadius: 999,\n background: t.bg,\n color: t.color,\n fontSize: \"var(--j-text-xs)\",\n fontFamily: \"var(--j-font)\",\n fontWeight: 700,\n letterSpacing: \"0.5px\",\n textTransform: \"uppercase\" as const,\n }}\n >\n {label}\n </span>\n );\n};\n","import { type FC, useState } from \"react\";\nimport { Panel, Stack, Text, Badge, type BadgeTone } from \"./layout.js\";\n\n/**\n * Domain components — SearchStats, ErrorBanner, LoadingPulse, SeedCard, etc.\n *\n * These are Balatro-specific UI components used by the json-render system.\n * All use CSS tokens and the layout primitives above.\n */\n\n/* ─── SearchStats ─── */\nexport interface SearchStatsProps {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n className?: string;\n}\n\nexport const SearchStats: FC<SearchStatsProps> = ({\n status,\n seedsSearched,\n matchesFound,\n seedsPerSecond,\n elapsed,\n className = \"\",\n}) => {\n const statusColor =\n status === \"running\"\n ? \"var(--j-blue)\"\n : status === \"completed\"\n ? \"var(--j-green)\"\n : status === \"error\"\n ? \"var(--j-red)\"\n : \"var(--j-grey)\";\n\n const statusLabel =\n status === \"idle\"\n ? \"Ready\"\n : status === \"running\"\n ? \"Searching...\"\n : status === \"completed\"\n ? \"Done\"\n : \"Error\";\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}\n >\n <div\n style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: statusColor,\n boxShadow: `0 0 8px ${statusColor}`,\n }}\n />\n <Text body={statusLabel} variant=\"accent\" />\n {status === \"running\" && (\n <span\n style={{\n animation: \"pulse 1.5s infinite\",\n color: \"var(--j-blue)\",\n }}\n >\n ...\n </span>\n )}\n </div>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(120px, 1fr))\",\n gap: 12,\n }}\n >\n {seedsSearched !== undefined && (\n <div>\n <Text body=\"Searched\" variant=\"muted\" />\n <Text body={seedsSearched} variant=\"title\" />\n </div>\n )}\n {matchesFound !== undefined && (\n <div>\n <Text body=\"Matches\" variant=\"muted\" />\n <Text body={String(matchesFound)} variant=\"title\" />\n </div>\n )}\n {seedsPerSecond !== undefined && (\n <div>\n <Text body=\"Speed\" variant=\"muted\" />\n <Text body={`${seedsPerSecond.toLocaleString()}/s`} variant=\"title\" />\n </div>\n )}\n {elapsed && (\n <div>\n <Text body=\"Time\" variant=\"muted\" />\n <Text body={elapsed} variant=\"title\" />\n </div>\n )}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── ErrorBanner ─── */\nexport interface ErrorBannerProps {\n message: string;\n onDismiss?: boolean;\n className?: string;\n}\n\nexport const ErrorBanner: FC<ErrorBannerProps> = ({\n message,\n onDismiss,\n className = \"\",\n}) => {\n const [dismissed, setDismissed] = useState(false);\n if (dismissed) return null;\n\n return (\n <div\n className={className}\n style={{\n border: \"2px solid var(--j-red)\",\n borderRadius: \"var(--j-radius)\",\n background: \"var(--j-dark-red)\",\n padding: \"var(--j-space-3) var(--j-space-4)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <span style={{ color: \"var(--j-red)\", fontSize: \"var(--j-text-lg)\" }}>⚠</span>\n <Text body={message} variant=\"error\" />\n </div>\n {onDismiss && (\n <button\n onClick={() => setDismissed(true)}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"var(--j-red)\",\n cursor: \"pointer\",\n fontSize: \"var(--j-text-lg)\",\n padding: 0,\n lineHeight: 1,\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n )}\n </div>\n );\n};\n\n/* ─── LoadingPulse ─── */\nexport interface LoadingPulseProps {\n text?: string;\n className?: string;\n}\n\nexport const LoadingPulse: FC<LoadingPulseProps> = ({\n text = \"Loading...\",\n className = \"\",\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n padding: \"var(--j-space-5)\",\n }}\n >\n <div\n style={{\n width: 16,\n height: 16,\n borderRadius: \"50%\",\n background: \"var(--j-blue)\",\n animation: \"pulse 1.5s infinite\",\n boxShadow: \"0 0 12px var(--j-blue)\",\n }}\n />\n <Text body={text} variant=\"muted\" />\n </div>\n );\n};\n\n/* ─── SeedCard ─── */\nexport interface SeedCardProps {\n seed: string;\n score?: number;\n rank?: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n onClick?: boolean; // semantic: card is interactive\n className?: string;\n}\n\nexport const SeedCard: FC<SeedCardProps> = ({\n seed,\n score,\n rank,\n highlights,\n jokers,\n edition,\n onClick,\n className = \"\",\n}) => {\n return (\n <div\n className={className}\n onClick={onClick ? () => navigator.clipboard?.writeText(seed) : undefined}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n style={{\n border: \"2px solid var(--j-panel-edge)\",\n borderRadius: \"var(--j-radius)\",\n background: \"var(--j-surface-inset)\",\n padding: \"var(--j-space-3)\",\n cursor: onClick ? \"pointer\" : \"default\",\n transition: \"var(--j-transition)\",\n position: \"relative\",\n }}\n onMouseEnter={(e) => {\n if (onClick) {\n e.currentTarget.style.borderColor = \"var(--j-blue)\";\n e.currentTarget.style.transform = \"translateY(-2px)\";\n e.currentTarget.style.boxShadow = \"var(--j-shadow)\";\n }\n }}\n onMouseLeave={(e) => {\n if (onClick) {\n e.currentTarget.style.borderColor = \"var(--j-panel-edge)\";\n e.currentTarget.style.transform = \"translateY(0)\";\n e.currentTarget.style.boxShadow = \"none\";\n }\n }}\n >\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {rank !== undefined && (\n <span\n style={{\n color: \"var(--j-gold)\",\n fontSize: \"var(--j-text-sm)\",\n fontWeight: 700,\n minWidth: 24,\n }}\n >\n #{rank}\n </span>\n )}\n <Text body={seed} variant=\"accent\" />\n </div>\n {score !== undefined && (\n <Badge label={String(score)} tone=\"gold\" />\n )}\n </div>\n\n {edition && <Badge label={edition} tone=\"purple\" />}\n\n {highlights && highlights.length > 0 && (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {highlights.map((h, i) => (\n <Badge key={i} label={h} tone=\"green\" />\n ))}\n </div>\n )}\n\n {jokers && jokers.length > 0 && (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {jokers.map((j, i) => (\n <Badge key={i} label={j} tone=\"blue\" />\n ))}\n </div>\n )}\n </Stack>\n </div>\n );\n};\n\n/* ─── SeedList ─── */\nexport interface SeedListProps {\n seeds: string[];\n scores?: number[];\n total?: number;\n pageSize?: number;\n className?: string;\n}\n\nexport const SeedList: FC<SeedListProps> = ({\n seeds,\n scores,\n total,\n pageSize = 20,\n className = \"\",\n}) => {\n const [page, setPage] = useState(0);\n const maxPage = Math.ceil((total ?? seeds.length) / pageSize) - 1;\n const start = page * pageSize;\n const visible = seeds.slice(start, start + pageSize);\n\n return (\n <Stack gap={12} className={className}>\n {visible.map((seed, i) => (\n <SeedCard\n key={seed}\n seed={seed}\n score={scores?.[start + i]}\n rank={start + i + 1}\n onClick={true}\n />\n ))}\n\n {maxPage > 0 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: 12,\n alignItems: \"center\",\n padding: \"var(--j-space-3) 0\",\n }}\n >\n <button\n disabled={page <= 0}\n onClick={() => setPage((p) => p - 1)}\n style={{\n background: \"var(--j-surface-inset)\",\n border: \"2px solid var(--j-panel-edge)\",\n color: \"var(--j-grey)\",\n padding: \"4px 12px\",\n borderRadius: \"var(--j-radius)\",\n cursor: page <= 0 ? \"not-allowed\" : \"pointer\",\n opacity: page <= 0 ? 0.5 : 1,\n fontFamily: \"var(--j-font)\",\n }}\n >\n ← Prev\n </button>\n <Text\n body={`${page + 1} / ${maxPage + 1}`}\n variant=\"muted\"\n />\n <button\n disabled={page >= maxPage}\n onClick={() => setPage((p) => p + 1)}\n style={{\n background: \"var(--j-surface-inset)\",\n border: \"2px solid var(--j-panel-edge)\",\n color: \"var(--j-grey)\",\n padding: \"4px 12px\",\n borderRadius: \"var(--j-radius)\",\n cursor: page >= maxPage ? \"not-allowed\" : \"pointer\",\n opacity: page >= maxPage ? 0.5 : 1,\n fontFamily: \"var(--j-font)\",\n }}\n >\n Next →\n </button>\n </div>\n )}\n </Stack>\n );\n};\n\n/* ─── JokerBadge ─── */\nexport interface JokerBadgeProps {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n rarity?: \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\n className?: string;\n}\n\nexport const JokerBadge: FC<JokerBadgeProps> = ({\n name,\n edition,\n rarity,\n className = \"\",\n}) => {\n const rarityTone: Record<string, string> = {\n Common: \"grey\",\n Uncommon: \"green\",\n Rare: \"red\",\n Legendary: \"gold\",\n };\n\n const editionTone: Record<string, string> = {\n Foil: \"blue\",\n Holographic: \"green\",\n Polychrome: \"purple\",\n Negative: \"red\",\n };\n\n return (\n <div className={className} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <Badge label={name} tone={(rarityTone[rarity ?? \"\"] as BadgeTone) || \"grey\"} />\n {edition && (\n <Badge label={edition} tone={(editionTone[edition] as BadgeTone) || \"grey\"} />\n )}\n </div>\n );\n};\n\n/* ─── EditionBadge ─── */\nexport interface EditionBadgeProps {\n edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n className?: string;\n}\n\nexport const EditionBadge: FC<EditionBadgeProps> = ({\n edition,\n className = \"\",\n}) => {\n const map: Record<string, string> = {\n Foil: \"blue\",\n Holographic: \"green\",\n Polychrome: \"purple\",\n Negative: \"red\",\n };\n\n return <Badge className={className} label={edition} tone={(map[edition] as BadgeTone) || \"grey\"} />;\n};\n","import type { FC } from \"react\";\nimport {\n JamlGameCard as JamlGameCardImpl,\n type JamlGameCardProps as ImplJamlGameCardProps,\n} from \"../../components/GameCard.js\";\n\n/**\n * Game Card wrapper — bridges json-render to jaml-ui's sprite system.\n */\n\nexport interface JamlGameCardProps {\n type: \"joker\" | \"consumable\" | \"playing\";\n card: {\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n scale?: number;\n };\n className?: string;\n}\n\nexport const JamlGameCard: FC<JamlGameCardProps> = ({\n type,\n card,\n className = \"\",\n}) => {\n return (\n <JamlGameCardImpl\n type={type}\n card={card as ImplJamlGameCardProps[\"card\"]}\n className={className}\n />\n );\n};\n","// The real Jammy mascot artwork (hand-drawn) — a big brown seed with a\n// green sprout and a jester/joker character peeking out from behind it.\n// Embedded as base64 (like fonts.css does for m6x11) so the published npm\n// package is self-contained and needs no consumer-provided /public asset.\nexport const JAMMY_SEED_MASCOT_DATA_URI =\n \"data:image/png;base64,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EIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCECg8AV8zc1mn49JhV9SlBACEIAABCAAASMEZCMyRZ4Q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AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQwP/fDh0IAAAAAAjytx7kQsiAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDD5bskMAAAKtSURBVBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYGA1EHxh5x0+SvOHAAAAAElFTkSuQmCC\";\n","import { type FC, useState } from \"react\";\nimport { Badge, type BadgeTone } from \"./layout.js\";\nimport { JAMMY_SEED_MASCOT_DATA_URI } from \"./jammySeedMascotImage.js\";\n\nexport interface JammyOrbitalMenuItem {\n label: string;\n action: string;\n tone?: BadgeTone;\n}\n\nexport interface JammyOrbitalMenuProps {\n items: JammyOrbitalMenuItem[];\n onAction?: (action: string) => void;\n radius?: number;\n className?: string;\n}\n\nexport const JammyOrbitalMenu: FC<JammyOrbitalMenuProps> = ({\n items,\n onAction,\n radius = 90,\n className = \"\",\n}) => {\n if (items.length === 0) return null;\n\n const step = (2 * Math.PI) / items.length;\n const start = -Math.PI / 2; // top\n\n return (\n <div\n className={className}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n }}\n >\n {items.map((item, i) => {\n const angle = start + i * step;\n const x = Math.cos(angle) * radius;\n const y = Math.sin(angle) * radius;\n return (\n <button\n key={item.action + i}\n onClick={() => onAction?.(item.action)}\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n transform: `translate(calc(-50% + ${x}px), calc(-50% + ${y}px))`,\n pointerEvents: \"auto\",\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: \"pointer\",\n }}\n >\n <Badge label={item.label} tone={item.tone ?? \"blue\"} />\n </button>\n );\n })}\n </div>\n );\n};\n\nexport interface JammyMascotProps {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n size?: number;\n menuItems?: JammyOrbitalMenuItem[];\n onMenuAction?: (action: string) => void;\n className?: string;\n}\n\nexport const JammyMascot: FC<JammyMascotProps> = ({\n mood = \"idle\",\n size = 96,\n menuItems,\n onMenuAction,\n className = \"\",\n}) => {\n const [open, setOpen] = useState(false);\n\n const handleClick = () => {\n if (menuItems && menuItems.length > 0) {\n setOpen((v) => !v);\n }\n };\n\n const animation =\n mood === \"happy\"\n ? \"jammy-bounce\"\n : mood === \"surprised\"\n ? \"jammy-shake\"\n : \"jammy-idle\";\n\n return (\n <div\n className={`${className} ${animation}`.trim()}\n style={{\n position: \"relative\",\n width: size,\n height: size,\n display: \"inline-block\",\n }}\n >\n <button\n onClick={handleClick}\n style={{\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: menuItems && menuItems.length > 0 ? \"pointer\" : \"default\",\n width: size,\n height: size,\n }}\n aria-label=\"Jammy mascot\"\n >\n <img\n src={JAMMY_SEED_MASCOT_DATA_URI}\n alt=\"Jammy\"\n draggable={false}\n style={{ width: \"100%\", height: \"100%\", objectFit: \"contain\", display: \"block\" }}\n />\n </button>\n {open && menuItems && (\n <JammyOrbitalMenu\n items={menuItems}\n onAction={(action) => {\n onMenuAction?.(action);\n setOpen(false);\n }}\n radius={size * 0.9}\n />\n )}\n </div>\n );\n};\n","/**\n * Balatro Joker Knowledge Base\n * Extracted from the Master Encyclopedia for json-render reference components.\n */\n\nexport type JokerRarity = \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\nexport type JokerCategory = \"Copy\" | \"X-Mult\" | \"Flat\" | \"Economy\" | \"Retrigger\" | \"Utility\";\n\nexport interface JokerInfo {\n name: string;\n rarity: JokerRarity;\n cost: number;\n effect: string;\n category: JokerCategory;\n synergies: string[];\n strategy: string;\n jamlKey: string;\n}\n\nexport const JOKERS: Record<string, JokerInfo> = {\n // ── S-Tier: Copy & Retrigger ──\n Blueprint: {\n name: \"Blueprint\",\n rarity: \"Rare\",\n cost: 10,\n effect: \"Copies the ability of the Joker card directly to its right.\",\n category: \"Copy\",\n synergies: [\"Baron\", \"Mime\", \"Triboulet\", \"Brainstorm\"],\n strategy: \"Place to the right of your highest-value joker. Works with any joker ability.\",\n jamlKey: \"joker: Blueprint\",\n },\n Brainstorm: {\n name: \"Brainstorm\",\n rarity: \"Rare\",\n cost: 10,\n effect: \"Copies the ability of the leftmost Joker currently held.\",\n category: \"Copy\",\n synergies: [\"Baron\", \"Mime\", \"Triboulet\", \"Blueprint\"],\n strategy: \"Place your highest-value joker in the leftmost slot for maximum value.\",\n jamlKey: \"joker: Brainstorm\",\n },\n \"Sock & Buskin\": {\n name: \"Sock & Buskin\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played Face Cards exactly once.\",\n category: \"Retrigger\",\n synergies: [\"Photograph\", \"Hanging Chad\", \"Triboulet\", \"Baron\"],\n strategy: \"Essential for face-card builds. Doubles all face card triggers.\",\n jamlKey: \"joker: Sock & Buskin\",\n },\n \"Hanging Chad\": {\n name: \"Hanging Chad\",\n rarity: \"Common\",\n cost: 4,\n effect: \"Retriggers the first played card scored in a hand exactly 2 additional times.\",\n category: \"Retrigger\",\n synergies: [\"Photograph\", \"Glass Card\", \"Red Seal\", \"Bloodstone\"],\n strategy: \"Place your highest-value card in the leftmost scoring position.\",\n jamlKey: \"joker: Hanging Chad\",\n },\n Hack: {\n name: \"Hack\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played 2s, 3s, 4s, and 5s exactly once.\",\n category: \"Retrigger\",\n synergies: [\"Wee Joker\", \"Ride the Bus\", \"Steel Card\"],\n strategy: \"Build a low-card deck. Each 2-5 retriggers for extra scoring.\",\n jamlKey: \"joker: Hack\",\n },\n Mime: {\n name: \"Mime\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all card held-in-hand abilities (Steel, Gold, Baron, Baron).\",\n category: \"Retrigger\",\n synergies: [\"Baron\", \"Steel Card\", \"Gold Card\", \"Blueprint\"],\n strategy: \"The cornerstone of exponential scaling. Hold Steel Kings for (1.5)^4 per card.\",\n jamlKey: \"joker: Mime\",\n },\n Dusk: {\n name: \"Dusk\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played cards scored in the final hand of any round.\",\n category: \"Retrigger\",\n synergies: [\"Baron\", \"Triboulet\", \"Bloodstone\", \"The Idol\"],\n strategy: \"Save your best hand for last. All cards in final hand retrigger.\",\n jamlKey: \"joker: Dusk\",\n },\n\n // ── X-Mult Jokers ──\n Baron: {\n name: \"Baron\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"Each King held in hand grants X1.5 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Mime\", \"Steel Card\", \"Blueprint\", \"Brainstorm\", \"Sock & Buskin\"],\n strategy: \"Hold as many Steel Kings as possible. With Mime: (1.5)^4 per King. 8 Kings = 431,439x.\",\n jamlKey: \"joker: Baron\",\n },\n Triboulet: {\n name: \"Triboulet\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Each King and Queen played and scored grants X2 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Sock & Buskin\", \"Dusk\", \"Red Seal\", \"Blueprint\"],\n strategy: \"Play face-card heavy hands. Each King/Queen is a 2x multiplier.\",\n jamlKey: \"joker: Triboulet\",\n },\n \"The Idol\": {\n name: \"The Idol\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"X2 Mult for each card scored matching a random Rank+Suit (changes every round).\",\n category: \"X-Mult\",\n synergies: [\"Ouija\", \"Sigil\", \"Death\"],\n strategy: \"Homogenize your deck to match the Idol's target. Use Ouija/Sigil to force match.\",\n jamlKey: \"joker: The Idol\",\n },\n Bloodstone: {\n name: \"Bloodstone\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"1 in 2 chance for played Heart cards to grant X1.5 Mult when scored.\",\n category: \"X-Mult\",\n synergies: [\"Oops! All 6s\", \"The Sun\", \"Hearts suit builds\"],\n strategy: \"Convert deck to Hearts. With Oops! All 6s: 100% proc rate.\",\n jamlKey: \"joker: Bloodstone\",\n },\n Vampire: {\n name: \"Vampire\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Permanently gains X0.2 Mult for each enhanced card scored, stripping the enhancement.\",\n category: \"X-Mult\",\n synergies: [\"Midas Mask\", \"Gold Card\", \"Aura\"],\n strategy: \"Score Gold cards every round. Midas Mask paints them, Vampire consumes them for +X0.2 each.\",\n jamlKey: \"joker: Vampire\",\n },\n Hologram: {\n name: \"Hologram\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Gains X0.25 Mult every time a playing card is permanently added to the deck.\",\n category: \"X-Mult\",\n synergies: [\"Cryptid\", \"Holographic\", \"DNA\"],\n strategy: \"Add cards to deck via Cryptid or packs. Each addition is a permanent 0.25x multiplier.\",\n jamlKey: \"joker: Hologram\",\n },\n Constellation: {\n name: \"Constellation\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Gains X0.1 Mult every time a Planet card is used.\",\n category: \"X-Mult\",\n synergies: [\"Observatory\", \"Perkeo\", \"Planet Merchant\"],\n strategy: \"Use planets every round. Stack with Observatory for planet duplication.\",\n jamlKey: \"joker: Constellation\",\n },\n Cavendish: {\n name: \"Cavendish\",\n rarity: \"Common\",\n cost: 4,\n effect: \"X3 Mult. 1 in 1000 chance to self-destruct.\",\n category: \"X-Mult\",\n synergies: [\"Eternal\", \"Blueprint\"],\n strategy: \"High-risk, high-reward. Get Eternal edition to prevent destruction. Copy with Blueprint.\",\n jamlKey: \"joker: Cavendish\",\n },\n\n // ── Flat Mult / Chip Scaling ──\n Stuntman: {\n name: \"Stuntman\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"+250 Chips, but permanently reduces hand size by 2.\",\n category: \"Flat\",\n synergies: [\"Plasma Deck\", \"Paint Brush\", \"Palette\"],\n strategy: \"On Plasma Deck: (Chips+Mult)/2 scoring makes flat chips incredibly valuable.\",\n jamlKey: \"joker: Stuntman\",\n },\n Bull: {\n name: \"Bull\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"+2 Chips for every $1 currently held.\",\n category: \"Flat\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\", \"Bootstraps\"],\n strategy: \"Hoard cash. With $1000, Bull gives +2000 Chips. Stack with interest vouchers.\",\n jamlKey: \"joker: Bull\",\n },\n Bootstraps: {\n name: \"Bootstraps\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"+4 Mult for every $5 held in capital.\",\n category: \"Flat\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\", \"Bull\"],\n strategy: \"Economic scaling. With $1000, Bootstraps gives +800 Mult.\",\n jamlKey: \"joker: Bootstraps\",\n },\n \"Wee Joker\": {\n name: \"Wee Joker\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"Starts at +10 Chips. Gains +8 Chips every time a 2 is scored.\",\n category: \"Flat\",\n synergies: [\"Hack\", \"DNA\", \"Cryptid\"],\n strategy: \"Score 2s every round. With Hack, each 2 triggers twice for +16 Chips.\",\n jamlKey: \"joker: Wee Joker\",\n },\n \"Joker Stencil\": {\n name: \"Joker Stencil\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"X1 Mult for each empty Joker slot (counts itself as empty).\",\n category: \"Flat\",\n synergies: [\"Blank\", \"Antimatter\", \"Ectoplasm\"],\n strategy: \"Deliberately leave joker slots empty. With Antimatter voucher: +1 slot, +1x multiplier.\",\n jamlKey: \"joker: Joker Stencil\",\n },\n \"Green Joker\": {\n name: \"Green Joker\",\n rarity: \"Common\",\n cost: 4,\n effect: \"+1 Mult per hand played, +12 Chips per discard remaining. Loses 1 Mult per discard used.\",\n category: \"Flat\",\n synergies: [\"Wasteful\", \"Recyclomancy\", \"Hit the Road\"],\n strategy: \"Save discards. With Recyclomancy (+2 discards), start each round with +24 Chips.\",\n jamlKey: \"joker: Green Joker\",\n },\n \"Ride the Bus\": {\n name: \"Ride the Bus\",\n rarity: \"Common\",\n cost: 4,\n effect: \"+1 Mult per consecutive hand played without scoring a Face Card. Resets to 0 on Face Card.\",\n category: \"Flat\",\n synergies: [\"Hack\", \"DNA\", \"Steel Card\"],\n strategy: \"Avoid face cards. Build a low-card deck with Hack for retriggered 2s-5s.\",\n jamlKey: \"joker: Ride the Bus\",\n },\n\n // ── Economy ──\n \"Golden Joker\": {\n name: \"Golden Joker\",\n rarity: \"Common\",\n cost: 4,\n effect: \"Earn $4 at end of round.\",\n category: \"Economy\",\n synergies: [\"Bull\", \"Bootstraps\", \"Money Tree\", \"Seed Money\"],\n strategy: \"Stack multiple copies for massive per-round income. $4 per copy, per round.\",\n jamlKey: \"joker: Golden Joker\",\n },\n \"Matador\": {\n name: \"Matador\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Earn $8 if played hand triggers the Boss Blind's ability.\",\n category: \"Economy\",\n synergies: [\"The Ox\", \"The Tooth\", \"The Arm\"],\n strategy: \"Intentionally trigger boss abilities for $8 payouts. High-risk, high-reward economy.\",\n jamlKey: \"joker: Matador\",\n },\n \"To the Moon\": {\n name: \"To the Moon\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Earn $1 extra interest for every $5 held at end of round.\",\n category: \"Economy\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\"],\n strategy: \"Maximize interest cap. With Money Tree ($20 cap), hold $100+ for maximum returns.\",\n jamlKey: \"joker: To the Moon\",\n },\n\n // ── Legendary Jokers (Soul-exclusive) ──\n Canio: {\n name: \"Canio\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"When a played Face Card is destroyed, gains X1 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Glass Card\", \"Justice\", \"Hologram\"],\n strategy: \"Play and destroy Glass face cards. Each destruction is a permanent 1x multiplier.\",\n jamlKey: \"joker: Canio\",\n },\n Perkeo: {\n name: \"Perkeo\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"At end of shop, duplicates 1 random held consumable with Negative edition.\",\n category: \"Utility\",\n synergies: [\"Observatory\", \"Pluto\", \"Crystal Ball\", \"Omen Globe\"],\n strategy: \"The infinite engine. Hold 1 Pluto, get 2 Plutos next round. Stack to 100+ Negative Plutos.\",\n jamlKey: \"joker: Perkeo\",\n },\n Chicot: {\n name: \"Chicot\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Disables the effect of the current Boss Blind.\",\n category: \"Utility\",\n synergies: [\"The Manacle\", \"Blueprint\", \"Brainstorm\"],\n strategy: \"Essential for survival against counter bosses. Copy with Blueprint for permanent boss nullification.\",\n jamlKey: \"joker: Chicot\",\n },\n Yorick: {\n name: \"Yorick\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Gains X1 Mult every 5 discards used.\",\n category: \"X-Mult\",\n synergies: [\"Wasteful\", \"Recyclomancy\", \"Hit the Road\"],\n strategy: \"Use discards aggressively. With Recyclomancy (+2 discards), scale faster.\",\n jamlKey: \"joker: Yorick\",\n },\n};\n\n/** Get joker info by name. Returns undefined if not found. */\nexport function getJoker(name: string): JokerInfo | undefined {\n return JOKERS[name] ?? Object.values(JOKERS).find((j) => j.name === name);\n}\n\n/** Get all jokers in a category. */\nexport function getJokersByCategory(category: JokerCategory): JokerInfo[] {\n return Object.values(JOKERS).filter((j) => j.category === category);\n}\n\n/** Get jokers that synergize with a given joker. */\nexport function getSynergies(jokerName: string): JokerInfo[] {\n const joker = getJoker(jokerName);\n if (!joker) return [];\n return joker.synergies\n .map((name) => getJoker(name))\n .filter((j): j is JokerInfo => j !== undefined);\n}\n","/**\n * Balatro Synergy Knowledge Base\n * Meta combinations and their mathematical breakdowns.\n */\n\nexport interface SynergyInfo {\n name: string;\n jokers: string[];\n description: string;\n math: string;\n setup: string[];\n difficulty: \"Easy\" | \"Medium\" | \"Hard\" | \"Legendary\";\n bossCounters: string[];\n tags: string[];\n}\n\nexport const SYNERGIES: SynergyInfo[] = [\n {\n name: \"Baron + Mime Exponential Loop\",\n jokers: [\"Baron\", \"Mime\"],\n description:\n \"The ultimate mathematical engine. Hold Steel Kings in hand. Each King grants X1.5 from Steel and X1.5 from Baron. Mime retriggers both.\",\n math: \"1 Steel King = (1.5)^4 = X5.06. 8 Kings = (1.5)^32 = X431,439. With Blueprint/Brainstorm: exponents in thousands.\",\n setup: [\n \"Find Baron and Mime\",\n \"Get The Chariot (Steel) or find Steel-enhanced Kings\",\n \"Hold as many Steel Kings as possible in hand\",\n \"Copy with Blueprint or Brainstorm for additional multipliers\",\n ],\n difficulty: \"Hard\",\n bossCounters: [\"The Plant\", \"The Manacle\", \"The Psychic\"],\n tags: [\"endless\", \"steel\", \"x-mult\", \"s-tier\"],\n },\n {\n name: \"Photochad Retrigger\",\n jokers: [\"Photograph\", \"Hanging Chad\"],\n description:\n \"Cheap, efficient early-game burst. Photograph gives X2 on first face card. Hanging Chad retriggers that card 2 more times.\",\n math: \"X2 × X2 × X2 = X8 Mult on first face card. With Glass: 8 × 2 = X16. With Red Seal: X32.\",\n setup: [\n \"Get Photograph (Common) and Hanging Chad (Common)\",\n \"Place face card in leftmost scoring position\",\n \"Enhance face card to Glass for additional X2\",\n \"Add Red Seal for another retrigger\",\n ],\n difficulty: \"Easy\",\n bossCounters: [\"The Plant\", \"The Flint\"],\n tags: [\"early-game\", \"burst\", \"cheap\", \"face-cards\"],\n },\n {\n name: \"Observatory Infinite (Perkeo Stack)\",\n jokers: [\"Perkeo\"],\n description:\n \"Perkeo duplicates 1 held consumable at end of shop with Negative edition. Stack Negative Plutos for infinite X1.5 multipliers.\",\n math: \"10 Negative Plutos = (1.5)^10 = X57.66. 100 Plutos = (1.5)^100 ≈ X400 billion. Requires Observatory voucher.\",\n setup: [\n \"Get Perkeo (Legendary)\",\n \"Buy Observatory voucher (Telescope → Observatory)\",\n \"Hold exactly 1 Pluto planet card\",\n \"Perkeo duplicates it every round\",\n \"Play High Card as your dominant hand type\",\n ],\n difficulty: \"Legendary\",\n bossCounters: [\"The Ox\", \"The Flint\"],\n tags: [\"endless\", \"consumable\", \"x-mult\", \"legendary\"],\n },\n {\n name: \"Vampire + Midas Mask Economy\",\n jokers: [\"Vampire\", \"Midas Mask\"],\n description:\n \"Midas Mask paints played Face Cards Gold. Vampire consumes the Gold enhancement for +X0.2 Mult permanently. Cards remain for repainting.\",\n math: \"5 Face Cards per round = +X1.0 Mult per round. Sustainable infinite scaling.\",\n setup: [\n \"Get Vampire (Uncommon) and Midas Mask (Uncommon)\",\n \"Play hands with Face Cards every round\",\n \"Midas paints them Gold, Vampire consumes for scaling\",\n \"Cards stay in deck for next round's painting\",\n ],\n difficulty: \"Medium\",\n bossCounters: [\"The Plant\", \"The Ox\"],\n tags: [\"economy\", \"sustainable\", \"x-mult\", \"mid-game\"],\n },\n {\n name: \"Bull + Bootstraps Economic Scaling\",\n jokers: [\"Bull\", \"Bootstraps\"],\n description:\n \"Bull gives +2 Chips per $1 held. Bootstraps gives +4 Mult per $5 held. Both scale with cash hoarding.\",\n math: \"$1000: Bull = +2000 Chips, Bootstraps = +800 Mult. Stack with interest vouchers for $20+ per round.\",\n setup: [\n \"Get Bull and Bootstraps (both Uncommon)\",\n \"Buy Seed Money → Money Tree vouchers ($20 interest cap)\",\n \"Hoard cash, never spend unless necessary\",\n \"Add Golden Joker for +$4 per round per copy\",\n ],\n difficulty: \"Easy\",\n bossCounters: [\"The Ox\", \"The Tooth\"],\n tags: [\"economy\", \"flat\", \"chips\", \"mult\", \"easy\"],\n },\n {\n name: \"Plasma Deck + Stuntman\",\n jokers: [\"Stuntman\"],\n description:\n \"Plasma Deck scores by ((Chips + Mult) / 2)^2. Flat chip additions become exponentially powerful. Stuntman gives +250 Chips.\",\n math: \"Stuntman alone: base 250 chips. With 50 mult: ((250+50)/2)^2 = 22,500. With 100 mult: ((250+100)/2)^2 = 30,625.\",\n setup: [\n \"Select Plasma Deck\",\n \"Get Stuntman (Rare) as early as possible\",\n \"Add any flat mult (Bootstraps, Green Joker)\",\n \"Avoid X-Mult jokers (wasted on Plasma's formula)\",\n ],\n difficulty: \"Medium\",\n bossCounters: [\"The Flint\", \"The Wall\"],\n tags: [\"plasma\", \"chips\", \"exponential\", \"deck-specific\"],\n },\n {\n name: \"Chicot + Manacle Hand Size Exploit\",\n jokers: [\"Chicot\"],\n description:\n \"Multiple Chicots (cloned via Ankh/Blueprint) vs The Manacle Boss. Each Chicot applies +1 Hand Size instead of just nullifying.\",\n math: \"5 Chicots vs Manacle: +5 permanent hand size. 10 Chicots: +10 hand size.\",\n setup: [\n \"Get Chicot (Legendary)\",\n \"Clone with Ankh or Blueprint\",\n \"Fight The Manacle Boss Blind\",\n \"Each Chicot triggers +1 Hand Size independently\",\n ],\n difficulty: \"Legendary\",\n bossCounters: [\"The Manacle\"], // this is the boss you WANT to fight\n tags: [\"exploit\", \"hand-size\", \"legendary\", \"niche\"],\n },\n {\n name: \"Canio Glass Destruction Loop\",\n jokers: [\"Canio\"],\n description:\n \"Canio gains X1 Mult when a played Face Card is destroyed. Glass cards destroy themselves 1 in 4 times when scored.\",\n math: \"Each Glass face card destruction: +X1 Mult. With 20 destroyed face cards: X20 Mult. With Oops! All 6s: destruction rate increases.\",\n setup: [\n \"Get Canio (Legendary)\",\n \"Enhance face cards to Glass (Justice tarot)\",\n \"Play and destroy Glass face cards repeatedly\",\n \"Add Oops! All 6s for higher destruction rate\",\n ],\n difficulty: \"Hard\",\n bossCounters: [\"The Plant\", \"The Flint\"],\n tags: [\"destruction\", \"x-mult\", \"legendary\", \"face-cards\"],\n },\n];\n\n/** Find synergies that involve a specific joker. */\nexport function findSynergies(jokerName: string): SynergyInfo[] {\n return SYNERGIES.filter((s) =>\n s.jokers.some((j) => j.toLowerCase() === jokerName.toLowerCase())\n );\n}\n\n/** Find synergies by tag. */\nexport function findSynergiesByTag(tag: string): SynergyInfo[] {\n return SYNERGIES.filter((s) =>\n s.tags.some((t) => t.toLowerCase() === tag.toLowerCase())\n );\n}\n\n/** Get recommended synergies for a set of jokers. */\nexport function getRecommendedSynergies(\n jokerNames: string[]\n): SynergyInfo[] {\n const normalized = jokerNames.map((n) => n.toLowerCase());\n return SYNERGIES.filter((s) =>\n s.jokers.some((j) => normalized.includes(j.toLowerCase()))\n ).sort((a, b) => {\n const aMatches = a.jokers.filter((j) => normalized.includes(j.toLowerCase())).length;\n const bMatches = b.jokers.filter((j) => normalized.includes(j.toLowerCase())).length;\n return bMatches - aMatches; // most matches first\n });\n}\n","/**\n * Balatro Deck & Stake Knowledge Base\n */\n\nexport interface DeckInfo {\n name: string;\n jamlKey: string;\n effect: string;\n strategy: string;\n synergies: string[];\n difficulty: \"Easy\" | \"Medium\" | \"Hard\";\n}\n\nexport const DECKS: Record<string, DeckInfo> = {\n Red: {\n name: \"Red Deck\",\n jamlKey: \"Red\",\n effect: \"Grants +1 Discard per round.\",\n strategy:\n \"Excellent baseline for high-consistency discard strategies. Amplifies Hit the Road, Yorick, and Castle.\",\n synergies: [\"Yorick\", \"Hit the Road\", \"Castle\", \"Green Joker\"],\n difficulty: \"Easy\",\n },\n Blue: {\n name: \"Blue Deck\",\n jamlKey: \"Blue\",\n effect: \"Grants +1 Hand per round.\",\n strategy:\n \"Provides stable scoring buffer. Ideal for hands that require deep cycling but need a final play.\",\n synergies: [\"Grabber\", \"Nacho Tong\", \"Dusk\"],\n difficulty: \"Easy\",\n },\n Yellow: {\n name: \"Yellow Deck\",\n jamlKey: \"Yellow\",\n effect: \"Starts with +$10 (total $14 instead of $4).\",\n strategy:\n \"Drastically reduces time to hit $25 interest cap. Highly synergistic with early economic scaling jokers.\",\n synergies: [\"Golden Joker\", \"Bootstraps\", \"Bull\", \"To the Moon\"],\n difficulty: \"Easy\",\n },\n Green: {\n name: \"Green Deck\",\n jamlKey: \"Green\",\n effect:\n \"Interest disabled. Earns $2 per played hand remaining and $1 per discard remaining at end of round.\",\n strategy:\n \"Inverts economic model. Minimize played hands and save discards for maximum payout. Prioritize flat-scoring jokers.\",\n synergies: [\"Stuntman\", \"Bull\", \"Bootstraps\", \"Green Joker\"],\n difficulty: \"Hard\",\n },\n Black: {\n name: \"Black Deck\",\n jamlKey: \"Black\",\n effect: \"Grants +1 Joker slot, but reduces played hands by 1.\",\n strategy:\n \"High-ceiling, high-risk. Early game is extremely punishing. Look for immediate flat chip/mult support to survive Ante 1-2.\",\n synergies: [\"Stuntman\", \"Joker Stencil\", \"Wee Joker\"],\n difficulty: \"Hard\",\n },\n Magic: {\n name: \"Magic Deck\",\n jamlKey: \"Magic\",\n effect:\n \"Starts with Crystal Ball voucher (+1 consumable slot) and two copies of The Fool tarot.\",\n strategy:\n \"Ideal for duplicating early spectral transformations or high-value tarots (Death, The Hermit).\",\n synergies: [\"The Fool\", \"Death\", \"The Hermit\", \"Crystal Ball\"],\n difficulty: \"Medium\",\n },\n Nebula: {\n name: \"Nebula Deck\",\n jamlKey: \"Nebula\",\n effect:\n \"Starts with Telescope voucher (Celestial packs always contain planet for most played hand), but -1 consumable slot.\",\n strategy:\n \"Restricts holding space for Tarots/Spectrals. Forces immediate commits. Synergizes with rapid planetary scaling.\",\n synergies: [\"Constellation\", \"Observatory\", \"Perkeo\", \"Pluto\"],\n difficulty: \"Medium\",\n },\n Zodiac: {\n name: \"Zodiac Deck\",\n jamlKey: \"Zodiac\",\n effect:\n \"Starts with Tarot Merchant, Planet Merchant, and Overstock vouchers pre-equipped.\",\n strategy:\n \"Vastly increases shop variety and consumable spawn rate. Synergizes with economy-heavy seeds for reroll abuse.\",\n synergies: [\"Reroll Surplus\", \"Reroll Glut\", \"Clearance Sale\", \"Liquidation\"],\n difficulty: \"Easy\",\n },\n Ghost: {\n name: \"Ghost Deck\",\n jamlKey: \"Ghost\",\n effect:\n \"Spectral cards can appear in standard shops. Starts with Hex card (applies Polychrome to random Joker, destroys others).\",\n strategy:\n \"Ultimate environment for early Polychrome S-tier jokers. Look for Cryptid, Ectoplasm, Ankh in shops.\",\n synergies: [\"Hex\", \"Ankh\", \"Ectoplasm\", \"Cryptid\", \"The Soul\"],\n difficulty: \"Medium\",\n },\n Checkered: {\n name: \"Checkered Deck\",\n jamlKey: \"Checkered\",\n effect:\n \"Starting deck contains exactly 26 Spades and 26 Hearts (no Diamonds or Clubs).\",\n strategy:\n \"Simplifies flush and flush-five building to near-certainty. Synergizes with Bloodstone, The Idol, and Wrathful/Lusty Joker.\",\n synergies: [\"Bloodstone\", \"The Idol\", \"The Sun\", \"The Star\"],\n difficulty: \"Medium\",\n },\n Painted: {\n name: \"Painted Deck\",\n jamlKey: \"Painted\",\n effect: \"Grants +2 Hand Size, but permanently reduces Joker slots by 1.\",\n strategy:\n \"Maximizes held-in-hand scaling triggers (Baron, Mime, Steel cards). Must account for 4-joker slot limit.\",\n synergies: [\"Baron\", \"Mime\", \"Steel Card\", \"Joker Stencil\"],\n difficulty: \"Hard\",\n },\n Anaglyph: {\n name: \"Anaglyph Deck\",\n jamlKey: \"Anaglyph\",\n effect: \"Grants a Double Tag every time a Boss Blind is defeated.\",\n strategy:\n \"Stack dozens of Double Tags, redeem them simultaneously on a high-value blind skip Tag for massive value.\",\n synergies: [\"Double Tag\", \"Negative Joker\", \"Mega Arcana Pack\"],\n difficulty: \"Medium\",\n },\n Plasma: {\n name: \"Plasma Deck\",\n jamlKey: \"Plasma\",\n effect:\n \"Score = ((Chips + Mult) / 2)^2. Base blind requirements permanently doubled.\",\n strategy:\n \"Fundamentally alters scoring. Flat additions (+Chips or +Mult) are mathematically balanced. Stuntman and Bull are insanely powerful.\",\n synergies: [\"Stuntman\", \"Bull\", \"Bootstraps\", \"Green Joker\"],\n difficulty: \"Hard\",\n },\n Abandoned: {\n name: \"Abandoned Deck\",\n jamlKey: \"Abandoned\",\n effect:\n \"Starting deck contains exactly 40 cards (all 12 face cards removed).\",\n strategy:\n \"Increases probability of low-card straights and pairs. Baron, Triboulet, Photograph are completely inert.\",\n synergies: [\"Hack\", \"Ride the Bus\", \"Wee Joker\", \"DNA\"],\n difficulty: \"Hard\",\n },\n Erratic: {\n name: \"Erratic Deck\",\n jamlKey: \"Erratic\",\n effect:\n \"Starting deck: 52 cards, but all suits and ranks are completely randomized at seed initialization.\",\n strategy:\n \"The only deck where ErraticSuit and ErraticRank JAML rules are valid. Find seeds with high-density ranks (e.g., 18 Aces).\",\n synergies: [\"The Idol\", \"Bloodstone\", \"DNA\", \"Death\"],\n difficulty: \"Medium\",\n },\n};\n\nexport interface StakeInfo {\n name: string;\n jamlKey: string;\n effect: string;\n strategy: string;\n difficulty: \"Easy\" | \"Medium\" | \"Hard\" | \"Expert\";\n}\n\nexport const STAKES: StakeInfo[] = [\n {\n name: \"White Stake\",\n jamlKey: \"White\",\n effect: \"Base configuration. No modifications.\",\n strategy: \"Standard play. Use for learning or testing new strategies.\",\n difficulty: \"Easy\",\n },\n {\n name: \"Red Stake\",\n jamlKey: \"Red\",\n effect: \"Small Blinds provide no monetary reward on victory.\",\n strategy: \"Skips are encouraged to secure early-game Tags.\",\n difficulty: \"Easy\",\n },\n {\n name: \"Green Stake\",\n jamlKey: \"Green\",\n effect: \"Required score scaling accelerates for each successive Ante.\",\n strategy: \"Requires geometric scaling engines by Ante 3.\",\n difficulty: \"Medium\",\n },\n {\n name: \"Black Stake\",\n jamlKey: \"Black\",\n effect: \"Eternal Jokers introduced (30% spawn chance). Cannot be sold or destroyed.\",\n strategy: \"Blocks self-destruct synergies (Madness, Ceremonial Dagger). Avoid these jokers.\",\n difficulty: \"Hard\",\n },\n {\n name: \"Blue Stake\",\n jamlKey: \"Blue\",\n effect: \"Player's baseline discard pool reduced by 1.\",\n strategy: \"Severely impacts discard economies (Merry Andy, Hit the Road, Yorick).\",\n difficulty: \"Medium\",\n },\n {\n name: \"Purple Stake\",\n jamlKey: \"Purple\",\n effect: \"Required scoring accelerates exponentially.\",\n strategy: \"Flat additions become unviable past Ante 4. Need X-Mult or exponential engines.\",\n difficulty: \"Hard\",\n },\n {\n name: \"Orange Stake\",\n jamlKey: \"Orange\",\n effect: \"Perishable Jokers introduced (30% chance). Debuffed after 5 rounds.\",\n strategy: \"Blocks long-term scaling engines (Wee Joker, Constellation). Look for immediate impact.\",\n difficulty: \"Expert\",\n },\n {\n name: \"Gold Stake\",\n jamlKey: \"Gold\",\n effect: \"Rental Jokers introduced (30% chance). Cost $3 per round to maintain.\",\n strategy: \"Massive economic stress. Prioritize interest-generating engines and cheap builds.\",\n difficulty: \"Expert\",\n },\n];\n\nexport function getDeck(name: string): DeckInfo | undefined {\n return DECKS[name] ?? Object.values(DECKS).find((d) => d.name === name);\n}\n\nexport function getStake(name: string): StakeInfo | undefined {\n return STAKES.find(\n (s) => s.name === name || s.jamlKey === name\n );\n}\n","/**\n * Balatro Boss Blind Knowledge Base\n */\n\nexport type BossCategory = \"Debuffer\" | \"Restrictor\" | \"Obfuscator\" | \"Scaler\" | \"Economic\";\n\nexport interface BossInfo {\n name: string;\n jamlKey: string;\n category: BossCategory;\n effect: string;\n counters: string[];\n jamlAvoid: string;\n threatLevel: \"Low\" | \"Medium\" | \"High\" | \"Lethal\";\n}\n\nexport const BOSSES: Record<string, BossInfo> = {\n // ── Debuffers ──\n \"The Club\": {\n name: \"The Club\",\n jamlKey: \"boss: The Club\",\n category: \"Debuffer\",\n effect: \"Debuffs all Club cards.\",\n counters: [\"Non-Club decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Club\",\n threatLevel: \"High\",\n },\n \"The Goad\": {\n name: \"The Goad\",\n jamlKey: \"boss: The Goad\",\n category: \"Debuffer\",\n effect: \"Debuffs all Spade cards.\",\n counters: [\"Non-Spade decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Goad\",\n threatLevel: \"High\",\n },\n \"The Window\": {\n name: \"The Window\",\n jamlKey: \"boss: The Window\",\n category: \"Debuffer\",\n effect: \"Debuffs all Diamond cards.\",\n counters: [\"Non-Diamond decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Window\",\n threatLevel: \"High\",\n },\n \"The Head\": {\n name: \"The Head\",\n jamlKey: \"boss: The Head\",\n category: \"Debuffer\",\n effect: \"Debuffs all Heart cards.\",\n counters: [\"Non-Heart decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Head\",\n threatLevel: \"High\",\n },\n \"The Plant\": {\n name: \"The Plant\",\n jamlKey: \"boss: The Plant\",\n category: \"Debuffer\",\n effect: \"Debuffs all Face Cards (Jacks, Queens, Kings).\",\n counters: [\"Non-face card builds\", \"Chicot\", \"Director's Cut\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Plant\",\n threatLevel: \"Lethal\",\n },\n \"The Pillar\": {\n name: \"The Pillar\",\n jamlKey: \"boss: The Pillar\",\n category: \"Debuffer\",\n effect: \"Debuffs any playing card played previously in the current Ante.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Pillar\",\n threatLevel: \"Medium\",\n },\n\n // ── Restrictors ──\n \"The Psychic\": {\n name: \"The Psychic\",\n jamlKey: \"boss: The Psychic\",\n category: \"Restrictor\",\n effect: \"Every played hand must contain exactly 5 cards.\",\n counters: [\"5-card builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Psychic\",\n threatLevel: \"High\",\n },\n \"The Eye\": {\n name: \"The Eye\",\n jamlKey: \"boss: The Eye\",\n category: \"Restrictor\",\n effect: \"Disallows playing repeat hand types in the current round.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Eye\",\n threatLevel: \"Medium\",\n },\n \"The Mouth\": {\n name: \"The Mouth\",\n jamlKey: \"boss: The Mouth\",\n category: \"Restrictor\",\n effect: \"Restricts player to one specific hand type for the entire round.\",\n counters: [\"Versatile builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Mouth\",\n threatLevel: \"High\",\n },\n \"The Needle\": {\n name: \"The Needle\",\n jamlKey: \"boss: The Needle\",\n category: \"Restrictor\",\n effect: \"Restricts player to exactly 1 hand for the entire round.\",\n counters: [\"High-scoring single hand\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Needle\",\n threatLevel: \"High\",\n },\n\n // ── Obfuscators ──\n \"The House\": {\n name: \"The House\",\n jamlKey: \"boss: The House\",\n category: \"Obfuscator\",\n effect: \"First drawn hand is drawn face down.\",\n counters: [\"Memory\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The House\",\n threatLevel: \"Low\",\n },\n \"The Wheel\": {\n name: \"The Wheel\",\n jamlKey: \"boss: The Wheel\",\n category: \"Obfuscator\",\n effect: \"1 in 7 cards drawn face down. (2 in 7 with Oops! All 6s).\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Wheel\",\n threatLevel: \"Low\",\n },\n \"The Fish\": {\n name: \"The Fish\",\n jamlKey: \"boss: The Fish\",\n category: \"Obfuscator\",\n effect: \"All cards drawn face down after a hand is played.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Fish\",\n threatLevel: \"Medium\",\n },\n \"The Mark\": {\n name: \"The Mark\",\n jamlKey: \"boss: The Mark\",\n category: \"Obfuscator\",\n effect: \"All Face Cards drawn face down.\",\n counters: [\"Non-face card builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Mark\",\n threatLevel: \"Medium\",\n },\n\n // ── Scalers ──\n \"The Wall\": {\n name: \"The Wall\",\n jamlKey: \"boss: The Wall\",\n category: \"Scaler\",\n effect: \"Extends required blind score to 4X the base Ante requirement.\",\n counters: [\"Exponential scaling\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Wall\",\n threatLevel: \"High\",\n },\n \"The Flint\": {\n name: \"The Flint\",\n jamlKey: \"boss: The Flint\",\n category: \"Scaler\",\n effect: \"Halves all base Chips and Mult for the played hand's base level.\",\n counters: [\"High flat mult/chip\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Flint\",\n threatLevel: \"High\",\n },\n\n // ── Economic / Meta ──\n \"The Ox\": {\n name: \"The Ox\",\n jamlKey: \"boss: The Ox\",\n category: \"Economic\",\n effect: \"Sets player's capital to $0 if they play their most frequently played hand.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Ox\",\n threatLevel: \"Medium\",\n },\n \"The Tooth\": {\n name: \"The Tooth\",\n jamlKey: \"boss: The Tooth\",\n category: \"Economic\",\n effect: \"Subtracts $1 from capital for every card played.\",\n counters: [\"High-card spam builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Tooth\",\n threatLevel: \"Medium\",\n },\n \"The Arm\": {\n name: \"The Arm\",\n jamlKey: \"boss: The Arm\",\n category: \"Economic\",\n effect: \"Permanently decreases level of played hand type by 1.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Arm\",\n threatLevel: \"High\",\n },\n \"The Hook\": {\n name: \"The Hook\",\n jamlKey: \"boss: The Hook\",\n category: \"Economic\",\n effect: \"Involuntarily discards 2 random cards after every play.\",\n counters: [\"Large hand size\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Hook\",\n threatLevel: \"Medium\",\n },\n \"The Manacle\": {\n name: \"The Manacle\",\n jamlKey: \"boss: The Manacle\",\n category: \"Restrictor\",\n effect: \"Temporarily reduces hand size by 1.\",\n counters: [\"Chicot exploit\", \"Paint Brush\", \"Palette\"],\n jamlAvoid: \"mustNot: boss: The Manacle\",\n threatLevel: \"Medium\",\n },\n \"The Water\": {\n name: \"The Water\",\n jamlKey: \"boss: The Water\",\n category: \"Restrictor\",\n effect: \"Removes all discards for the round.\",\n counters: [\"Chicot\", \"Retcon\", \"High-scoring hands\"],\n jamlAvoid: \"mustNot: boss: The Water\",\n threatLevel: \"High\",\n },\n};\n\n// ── Finisher Blinds (Ante 8) ──\nexport const FINISHERS: BossInfo[] = [\n {\n name: \"Cerulean Bell\",\n jamlKey: \"boss: Cerulean Bell\",\n category: \"Restrictor\",\n effect: \"Forces a random card to be permanently selected. Selling or discarding it triggers debuffs.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Cerulean Bell\",\n threatLevel: \"High\",\n },\n {\n name: \"Violet Vessel\",\n jamlKey: \"boss: Violet Vessel\",\n category: \"Scaler\",\n effect: \"Triples the baseline required score benchmark.\",\n counters: [\"Exponential scaling\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Violet Vessel\",\n threatLevel: \"Lethal\",\n },\n {\n name: \"Crimson Heart\",\n jamlKey: \"boss: Crimson Heart\",\n category: \"Debuffer\",\n effect: \"Disables 1 random Joker after every hand played.\",\n counters: [\"Multiple jokers\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Crimson Heart\",\n threatLevel: \"Lethal\",\n },\n {\n name: \"Verdant Leaf\",\n jamlKey: \"boss: Verdant Leaf\",\n category: \"Debuffer\",\n effect: \"Debuffs every card unless you sell at least 1 Joker.\",\n counters: [\"Cheap jokers to sell\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Verdant Leaf\",\n threatLevel: \"High\",\n },\n {\n name: \"Amber Acorn\",\n jamlKey: \"boss: Amber Acorn\",\n category: \"Obfuscator\",\n effect: \"Shuffles all Jokers and flips them face down.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Amber Acorn\",\n threatLevel: \"High\",\n },\n];\n\nexport function getBoss(name: string): BossInfo | undefined {\n return BOSSES[name] ?? FINISHERS.find((b) => b.name === name);\n}\n\nexport function getBossesByCategory(category: BossCategory): BossInfo[] {\n return [\n ...Object.values(BOSSES),\n ...FINISHERS,\n ].filter((b) => b.category === category);\n}\n\nexport function getAllBosses(): BossInfo[] {\n return [...Object.values(BOSSES), ...FINISHERS];\n}\n","import { type FC } from \"react\";\nimport { Badge, Panel, Stack, Text, Divider, type BadgeTone } from \"./layout.js\";\nimport {\n getJoker,\n getSynergies,\n type JokerInfo,\n type JokerCategory,\n} from \"../knowledge/jokers.js\";\nimport {\n findSynergies,\n type SynergyInfo,\n} from \"../knowledge/synergies.js\";\nimport {\n getDeck,\n getStake,\n type DeckInfo,\n type StakeInfo,\n} from \"../knowledge/decks.js\";\nimport {\n getBoss,\n type BossInfo,\n type BossCategory,\n} from \"../knowledge/bosses.js\";\n\n/**\n * Reference Components — Encyclopedia UI for Balatro entities.\n *\n * All components query the knowledge base and render rich info cards.\n * Zero external dependencies. Pure React + CSS tokens.\n */\n\n/* ─── JokerCard ─── */\nexport interface JokerCardProps {\n name: string;\n showSynergies?: boolean;\n className?: string;\n}\n\nexport const JokerCard: FC<JokerCardProps> = ({\n name,\n showSynergies = true,\n className = \"\",\n}) => {\n const joker = getJoker(name);\n if (!joker) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Joker not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const categoryTone: Record<JokerCategory, BadgeTone> = {\n Copy: \"blue\",\n \"X-Mult\": \"purple\",\n Flat: \"green\",\n Economy: \"gold\",\n Retrigger: \"orange\",\n Utility: \"grey\",\n };\n\n const synergies = showSynergies ? getSynergies(name) : [];\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={joker.name} variant=\"title\" />\n <div style={{ display: \"flex\", gap: 6, alignItems: \"center\" }}>\n <Badge\n label={joker.rarity}\n tone={joker.rarity === \"Legendary\" ? \"gold\" : joker.rarity === \"Rare\" ? \"blue\" : joker.rarity === \"Uncommon\" ? \"green\" : \"grey\"}\n />\n <Badge label={`$${joker.cost}`} tone=\"gold\" />\n </div>\n </div>\n\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n <Badge label={joker.category} tone={categoryTone[joker.category]} />\n <Badge label={joker.jamlKey} tone=\"grey\" />\n </div>\n\n <Text body={joker.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={joker.strategy} variant=\"muted\" />\n\n {synergies.length > 0 && (\n <>\n <Divider />\n <Text body=\"Synergies\" variant=\"accent\" />\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {synergies.map((s) => (\n <Badge key={s.name} label={s.name} tone=\"purple\" />\n ))}\n </div>\n </>\n )}\n </Stack>\n </Panel>\n );\n};\n\n/* ─── SynergyCard ─── */\nexport interface SynergyCardProps {\n name: string;\n className?: string;\n}\n\nexport const SynergyCard: FC<SynergyCardProps> = ({\n name,\n className = \"\",\n}) => {\n const synergy = findSynergies(name).find((s) => s.name === name);\n if (!synergy) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Synergy not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<SynergyInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n Legendary: \"gold\",\n };\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={10}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={synergy.name} variant=\"title\" />\n <Badge label={synergy.difficulty} tone={difficultyTone[synergy.difficulty]} />\n </div>\n\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {synergy.jokers.map((j) => (\n <Badge key={j} label={j} tone=\"blue\" />\n ))}\n </div>\n\n <Text body={synergy.description} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"The Math\" variant=\"accent\" />\n <Text body={synergy.math} variant=\"muted\" />\n\n <Divider />\n\n <Text body=\"Setup Steps\" variant=\"accent\" />\n <Stack gap={6}>\n {synergy.setup.map((step, i) => (\n <div key={i} style={{ display: \"flex\", gap: 8, alignItems: \"flex-start\" }}>\n <span style={{ color: \"var(--j-gold)\", fontWeight: 700, minWidth: 20 }}>\n {i + 1}.\n </span>\n <Text body={step} variant=\"muted\" />\n </div>\n ))}\n </Stack>\n\n <Divider />\n\n <Text body=\"Boss Counters\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {synergy.bossCounters.map((b) => (\n <Badge key={b} label={b} tone=\"red\" />\n ))}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── BossBlindCard ─── */\nexport interface BossBlindCardProps {\n name: string;\n className?: string;\n}\n\nexport const BossBlindCard: FC<BossBlindCardProps> = ({\n name,\n className = \"\",\n}) => {\n const boss = getBoss(name);\n if (!boss) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Boss not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const threatTone: Record<BossInfo[\"threatLevel\"], BadgeTone> = {\n Low: \"green\",\n Medium: \"orange\",\n High: \"red\",\n Lethal: \"purple\",\n };\n\n const categoryTone: Record<BossCategory, BadgeTone> = {\n Debuffer: \"red\",\n Restrictor: \"orange\",\n Obfuscator: \"blue\",\n Scaler: \"purple\",\n Economic: \"gold\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={boss.name} variant=\"title\" />\n <div style={{ display: \"flex\", gap: 6 }}>\n <Badge label={boss.category} tone={categoryTone[boss.category]} />\n <Badge label={boss.threatLevel} tone={threatTone[boss.threatLevel]} />\n </div>\n </div>\n\n <Badge label={boss.jamlKey} tone=\"grey\" />\n\n <Text body={boss.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Counters\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {boss.counters.map((c) => (\n <Badge key={c} label={c} tone=\"green\" />\n ))}\n </div>\n\n <Divider />\n\n <Text body=\"JAML Filter\" variant=\"accent\" />\n <div\n style={{\n background: \"var(--j-surface-inset)\",\n padding: \"8px 12px\",\n borderRadius: \"var(--j-radius)\",\n fontFamily: \"var(--j-font-code)\",\n fontSize: \"var(--j-text-sm)\",\n color: \"var(--j-grey)\",\n }}\n >\n {boss.jamlAvoid}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── DeckCard ─── */\nexport interface DeckCardProps {\n name: string;\n className?: string;\n}\n\nexport const DeckCard: FC<DeckCardProps> = ({\n name,\n className = \"\",\n}) => {\n const deck = getDeck(name);\n if (!deck) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Deck not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<DeckInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={deck.name} variant=\"title\" />\n <Badge label={deck.difficulty} tone={difficultyTone[deck.difficulty]} />\n </div>\n\n <Badge label={deck.jamlKey} tone=\"grey\" />\n\n <Text body={deck.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={deck.strategy} variant=\"muted\" />\n\n <Divider />\n\n <Text body=\"Synergies\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {deck.synergies.map((s) => (\n <Badge key={s} label={s} tone=\"blue\" />\n ))}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── StakeCard ─── */\nexport interface StakeCardProps {\n name: string;\n className?: string;\n}\n\nexport const StakeCard: FC<StakeCardProps> = ({\n name,\n className = \"\",\n}) => {\n const stake = getStake(name);\n if (!stake) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Stake not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<StakeInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n Expert: \"purple\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={stake.name} variant=\"title\" />\n <Badge label={stake.difficulty} tone={difficultyTone[stake.difficulty]} />\n </div>\n\n <Badge label={stake.jamlKey} tone=\"grey\" />\n\n <Text body={stake.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={stake.strategy} variant=\"muted\" />\n </Stack>\n </Panel>\n );\n};\n\n/* ─── StrategyAdvisor ─── */\nexport interface StrategyAdvisorProps {\n jokers: string[];\n className?: string;\n}\n\nexport const StrategyAdvisor: FC<StrategyAdvisorProps> = ({\n jokers,\n className = \"\",\n}) => {\n const foundJokers = jokers\n .map((name) => getJoker(name))\n .filter((j): j is JokerInfo => j !== undefined);\n\n const foundSynergies = findSynergies(jokers.join(\" \"));\n\n const recommended = foundSynergies.filter((s) =>\n s.jokers.some((j) => jokers.map((n) => n.toLowerCase()).includes(j.toLowerCase()))\n );\n\n const bossWarnings = new Set<string>();\n recommended.forEach((s) => s.bossCounters.forEach((b) => bossWarnings.add(b)));\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={12}>\n <Text body={`Strategy Advisor (${foundJokers.length} jokers)`} variant=\"title\" />\n\n {foundJokers.length > 0 && (\n <>\n <Text body=\"Detected Jokers\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {foundJokers.map((j) => (\n <Badge key={j.name} label={j.name} tone=\"blue\" />\n ))}\n </div>\n </>\n )}\n\n {recommended.length > 0 && (\n <>\n <Divider />\n <Text body=\"Recommended Strategies\" variant=\"accent\" />\n <Stack gap={8}>\n {recommended.slice(0, 3).map((s) => (\n <div key={s.name}>\n <Text body={s.name} variant=\"body\" />\n <Text body={s.description} variant=\"muted\" />\n <div style={{ display: \"flex\", gap: 4, flexWrap: \"wrap\", marginTop: 4 }}>\n {s.jokers.map((j) => (\n <Badge key={j} label={j} tone=\"purple\" />\n ))}\n </div>\n </div>\n ))}\n </Stack>\n </>\n )}\n\n {bossWarnings.size > 0 && (\n <>\n <Divider />\n <Text body=\"Boss Blind Warnings\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {Array.from(bossWarnings).map((b) => (\n <Badge key={b} label={b} tone=\"red\" />\n ))}\n </div>\n </>\n )}\n\n {foundJokers.length === 0 && recommended.length === 0 && (\n <Text body=\"No recognized jokers or synergies found. Add jokers to get strategy advice.\" variant=\"muted\" />\n )}\n </Stack>\n </Panel>\n );\n};\n","import type { Registry } from \"./engine.js\";\nimport {\n Panel,\n Stack,\n Grid,\n Text,\n Spacer,\n Divider,\n Badge,\n} from \"./components/layout.js\";\nimport {\n SearchStats,\n ErrorBanner,\n LoadingPulse,\n SeedCard,\n SeedList,\n JokerBadge,\n EditionBadge,\n} from \"./components/domain.js\";\nimport { JamlGameCard } from \"./components/game.js\";\nimport { JammyMascot, JammyOrbitalMenu } from \"./components/mascot.js\";\nimport {\n JokerCard,\n SynergyCard,\n BossBlindCard,\n DeckCard,\n StakeCard,\n StrategyAdvisor,\n} from \"./components/reference.js\";\n\n/**\n * Balatro Component Registry\n *\n * Maps catalog component names to real React implementations.\n * This is the ONLY place where catalog names are bound to code.\n * Add new components here → they instantly work in json-render specs.\n */\nexport const balatroRegistry: Registry = {\n // ── Layout ──\n Panel,\n Stack,\n Grid,\n Text,\n Spacer,\n Divider,\n Badge,\n\n // ── Status ──\n SearchStats,\n ErrorBanner,\n LoadingPulse,\n\n // ── Results ──\n SeedCard,\n SeedList,\n JokerBadge,\n EditionBadge,\n\n // ── Game Cards ──\n JamlGameCard,\n\n // ── Mascot ──\n JammyMascot,\n JammyOrbitalMenu,\n\n // ── Encyclopedia ──\n JokerCard,\n SynergyCard,\n BossBlindCard,\n DeckCard,\n StakeCard,\n StrategyAdvisor,\n};\n\n/**\n * Type-safe registry helper.\n * Ensures all catalog names have a matching component at compile time.\n */\nexport type BalatroRegistry = typeof balatroRegistry;\n","import { JsonNode } from \"../engine.js\";\n\n/**\n * Build a json-render spec for search results.\n *\n * Pure function. Converts raw Motely search data into a JsonNode tree.\n * The tree renders into a full search UI via `render(spec, registry)`.\n */\n\nexport interface SearchResult {\n seed: string;\n score: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n}\n\nexport interface SearchParams {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n error?: string | null;\n results: SearchResult[];\n}\n\nexport function buildSearchSpec(params: SearchParams): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Search Stats ──\n children.push({\n type: \"SearchStats\",\n props: {\n status: params.status,\n seedsSearched: params.seedsSearched,\n matchesFound: params.matchesFound,\n seedsPerSecond: params.seedsPerSecond,\n elapsed: params.elapsed,\n },\n });\n\n // ── Error Banner ──\n if (params.error) {\n children.push({\n type: \"ErrorBanner\",\n props: {\n message: params.error,\n onDismiss: true,\n },\n });\n }\n\n // ── Spacer ──\n children.push({ type: \"Spacer\", props: { size: 16 } });\n\n // ── Results ──\n if (params.results.length > 0) {\n const resultCards: JsonNode[] = params.results.map((r, i) => ({\n type: \"SeedCard\",\n props: {\n seed: r.seed,\n score: r.score,\n rank: i + 1,\n highlights: r.highlights,\n jokers: r.jokers,\n edition: r.edition,\n onClick: true,\n },\n }));\n\n children.push({\n type: \"Panel\",\n props: {\n title: `Results (${params.matchesFound ?? params.results.length})`,\n subtitle: params.status === \"running\" ? \"More matches arriving…\" : undefined,\n },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: resultCards,\n },\n ],\n });\n } else if (params.status === \"completed\") {\n children.push({\n type: \"Panel\",\n props: { title: \"No matches found\", variant: \"muted\" },\n children: [\n {\n type: \"Text\",\n props: {\n body: \"Try relaxing your filter or checking for typos.\",\n variant: \"muted\",\n },\n },\n ],\n });\n } else if (params.status === \"running\") {\n children.push({\n type: \"LoadingPulse\",\n props: { text: \"Searching seeds…\" },\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n","import { JsonNode } from \"../engine.js\";\nimport { getRecommendedSynergies } from \"../knowledge/synergies.js\";\n\n/**\n * Build a json-render spec for the encyclopedia view.\n *\n * Shows joker info, synergies, and strategy advice for a set of jokers.\n */\n\nexport interface EncyclopediaParams {\n jokers: string[];\n decks?: string[];\n stakes?: string[];\n bosses?: string[];\n showStrategies?: boolean;\n}\n\nexport function buildEncyclopediaSpec(params: EncyclopediaParams): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Joker Cards ──\n if (params.jokers.length > 0) {\n const jokerCards: JsonNode[] = params.jokers.map((name) => ({\n type: \"JokerCard\",\n props: { name, showSynergies: true },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Jokers\", variant: \"accent\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: jokerCards,\n },\n ],\n });\n }\n\n // ── Strategy Advisor ──\n if (params.showStrategies && params.jokers.length > 0) {\n children.push({\n type: \"StrategyAdvisor\",\n props: { jokers: params.jokers },\n });\n }\n\n // ── Synergy Cards ──\n const synergies = getRecommendedSynergies(params.jokers);\n if (synergies.length > 0) {\n const synergyCards: JsonNode[] = synergies.map((s) => ({\n type: \"SynergyCard\",\n props: { name: s.name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Synergies\", variant: \"accent\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: synergyCards,\n },\n ],\n });\n }\n\n // ── Deck Cards ──\n if (params.decks && params.decks.length > 0) {\n const deckCards: JsonNode[] = params.decks.map((name) => ({\n type: \"DeckCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Decks\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: deckCards,\n },\n ],\n });\n }\n\n // ── Stake Cards ──\n if (params.stakes && params.stakes.length > 0) {\n const stakeCards: JsonNode[] = params.stakes.map((name) => ({\n type: \"StakeCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Stakes\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: stakeCards,\n },\n ],\n });\n }\n\n // ── Boss Blind Cards ──\n if (params.bosses && params.bosses.length > 0) {\n const bossCards: JsonNode[] = params.bosses.map((name) => ({\n type: \"BossBlindCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Boss Blinds\", variant: \"muted\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: bossCards,\n },\n ],\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n","import { JsonNode } from \"../engine.js\";\n\n/**\n * Build a json-render spec for seed analysis results.\n *\n * Shows the full breakdown of a single seed: jokers, shop, blinds, etc.\n */\n\nexport interface AnalyzerResult {\n seed: string;\n jokers: Array<{\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n }>;\n shopItems?: Array<{\n name: string;\n type: string;\n edition?: string;\n }>;\n score?: number;\n notes?: string[];\n}\n\nexport function buildAnalyzerSpec(result: AnalyzerResult): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Header ──\n children.push({\n type: \"Panel\",\n props: { title: `Seed: ${result.seed}`, variant: \"accent\" },\n children: [\n {\n type: \"Text\",\n props: { body: `Score: ${result.score ?? \"N/A\"}`, variant: \"title\" },\n },\n ],\n });\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Jokers ──\n if (result.jokers.length > 0) {\n const jokerCards: JsonNode[] = result.jokers.map((j) => ({\n type: \"JamlGameCard\",\n props: {\n type: \"joker\",\n card: {\n name: j.name,\n edition: j.edition,\n seal: j.seal,\n isEternal: j.isEternal,\n },\n scale: 0.8,\n },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Jokers\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 3, gap: 12 },\n children: jokerCards,\n },\n ],\n });\n }\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Shop ──\n if (result.shopItems && result.shopItems.length > 0) {\n const shopBadges: JsonNode[] = result.shopItems.map((s) => ({\n type: \"Badge\",\n props: { label: s.name, tone: \"blue\" },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Shop\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 4, gap: 8 },\n children: shopBadges,\n },\n ],\n });\n }\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Notes ──\n if (result.notes && result.notes.length > 0) {\n const noteTexts: JsonNode[] = result.notes.map((n) => ({\n type: \"Text\",\n props: { body: `• ${n}`, variant: \"muted\" },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Notes\", variant: \"muted\" },\n children: noteTexts,\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n"],"names":["loadImage","url","resolve","image","renderImage","canvas","context","layer","timestamp","cardWidth","cardHeight","canvasStyle","elapsed","yOffset","xOffset","useJamlCardRenderer","layers","invert","hoverTilt","canvasRef","useRef","containerRef","imageCacheRef","ratio","setRatio","useState","forceUpdate","frameRef","targetRef","currentRef","hasAnimatedLayer","useEffect","cancelled","imageCache","urls","SPRITE_SHEETS","sheet","images","index","prev","err","frame","startTime","drawOnce","animTime","a","b","cached","imageRatio","img","tick","stopTiltLoop","useCallback","writeCardTransform","c","runTiltLoop","rate","onSettled","previous","now","dt","target","current","alpha","event","_a","rect","nx","ny","_b","JamlCardRenderer","className","handlers","jsxs","jsx","normalizeCardRank","raw","value","normalizeCardSuit","parseStandardcardName","name","trimmed","ofMatch","shortMatch","suitMap","MODIFIER_PREFIXES","stripModifiers","remaining","edition","isEternal","isPerishable","isRental","changed","prefix","stripped","resolvePackedAnalyzerItem","item","scale","decoded","decodeMotelyItem","resolveAnalyzerShopItem","displayName","packedResolved","VOUCHERS","voucher","JOKERS","joker","TAROTS_AND_PLANETS","consumable","baseName","standardcard","JamlGameCard","card","type","rank","suit","enhancements","seal","jokerData","j","Layer","face","JOKER_FACES","t","CONSUMABLE_FACES","enhancerPos","m","ENHANCER_MAP","pos","RANK_MAP","SUIT_MAP","EDITION_MAP","STICKER_MAP","sealPos","SEAL_MAP","JamlVoucher","voucherName","voucherData","v","JamlTag","tagName","tagData","TAGS","JamlBoss","bossName","bossData","BOSSES","CardSuit","CardRank","CardEnhancement","CardSeal","CardEdition","CARD_WIDTH","CARD_HEIGHT","match","rawRank","rawSuit","StandardCard","enhancement","size","style","parsed","finalRank","finalSuit","col","row","finalH","bgX","bgY","PLAIN_BASE","enhPos","editionCol","isNegative","baseFilter","enhancersUrl","resolveJamlAssetUrl","deckUrl","editionsUrl","layerBase","ALIAS","DOC","MAP","PAIR","SCALAR","SEQ","NODE_TYPE","isAlias","node","isDocument","isMap","isPair","isScalar","isSeq","isCollection","isNode","hasAnchor","BREAK","SKIP","REMOVE","visit","visitor","visitor_","initVisitor","visit_","key","path","ctrl","callVisitor","replaceNode","ci","ck","cv","_c","_d","_e","parent","pt","escapeChars","escapeTagName","tn","ch","Directives","yaml","tags","copy","res","line","onError","parts","handle","version","isValid","source","verbatim","suffix","error","tag","doc","lines","tagEntries","tagNames","_key","anchorIsValid","anchor","msg","anchorNames","root","anchors","findNewAnchor","exclude","i","createNodeAnchors","aliasObjects","sourceObjects","prevAnchors","ref","applyReviver","reviver","obj","val","len","v0","v1","k","toJS","arg","ctx","data","NodeBase","mapAsMap","maxAliasCount","onAnchor","count","Alias","nodes","found","_arg","getAliasCount","_onComment","_onChompKeep","src","kc","vc","isScalarValue","Scalar","defaultTagPrefix","findTagObject","tagObj","createNode","map","aliasDuplicateObjects","onTagObj","schema","collectionFromPath","isEmptyPath","Collection","it","rest","keepScalar","allowScalar","n","stringifyComment","str","indentComment","comment","indent","lineComment","FOLD_FLOW","FOLD_BLOCK","FOLD_QUOTED","foldFlowLines","text","mode","indentAtStart","lineWidth","minContentWidth","onFold","onOverflow","endStep","folds","escapedFolds","end","split","overflow","escStart","escEnd","consumeMoreIndentedLines","next","fold","start","getFoldOptions","isBlock","containsDocumentMarker","lineLengthOverLimit","indentLength","limit","strLen","doubleQuotedString","json","implicitKey","minMultiLineLength","code","singleQuotedString","quotedString","singleQuote","qs","hasDouble","hasSingle","blockEndNewlines","blockString","onComment","onChompKeep","blockQuote","commentString","literal","chomp","endStart","endNlPos","startWithSpace","startEnd","startNlPos","header","foldedValue","literalFallback","foldOptions","body","plainString","actualString","indentStep","inFlow","test","compat","stringifyString","ss","_stringify","_type","defaultKeyType","defaultStringType","createStringifyContext","options","opt","getTagObject","testMatch","stringifyProps","props","stringify","o","stringifyPair","allNullValues","indentSeq","simpleKeys","keyComment","explicitKey","keyCommentDone","chompKeep","vsb","vcb","valueComment","valueCommentDone","valueStr","ws","cs","vs0","nl0","hasNewline","flow","hasPropsLine","sp0","warn","logLevel","warning","MERGE_KEY","merge","addMergeToJSMap","isMergeKey","resolveAliasValue","mergeValue","srcMap","addPairToJSMap","jsKey","stringKey","stringifyKey","jsValue","strCtx","strKey","jsonStr","createPair","Pair","_","pair","stringifyCollection","collection","stringifyFlowCollection","stringifyBlockCollection","items","blockItemPrefix","flowChars","itemIndent","itemCtx","addCommentBefore","ik","fcPadding","reqNewline","linesAtValue","iv","sum","ic","findPair","YAMLMap","keepUndefined","replacer","add","overwrite","_pair","sortEntries","Type","YAMLSeq","idx","asItemIndex","seq","string","nullTag","boolTag","sv","stringifyNumber","format","minFractionDigits","num","d","floatNaN","floatExp","float","dot","intIdentify","intResolve","offset","radix","intAsBigInt","intStringify","intOct","_onError","int","intHex","stringifyJSON","jsonScalars","jsonError","binary","buffer","buf","s","resolvePairs","cn","createPairs","iterable","pairs","keys","YAMLOMap","omap","seenKeys","boolStringify","trueTag","falseTag","f","sign","intBin","YAMLSet","keepPair","set","parseSexagesimal","asBigInt","p","stringifySexagesimal","_60","intTime","floatTime","year","month","day","hour","minute","second","millisec","date","tz","schemas","schema$1","schema$2","tagsByName","coreKnownTags","getTags","customTags","schemaName","addMergeTag","schemaTags","sortMapEntriesByKey","Schema","resolveKnownTags","sortMapEntries","toStringDefaults","stringifyDocument","hasDirectives","dir","contentComment","dc","Document","_replacer","assertCollection","keyToStr","asStr","anchorPrefix","setAnchors","jsonArg","contents","YAMLError","message","YAMLParseError","YAMLWarning","prettifyError","lc","lineStr","trimStart","pointer","resolveProps","tokens","indicator","parentIndent","startOnNewline","spaceBefore","atNewline","hasSpace","commentSep","reqSpace","tab","newlineAfterProp","comma","token","cb","last","containsNewline","st","flowIndentCheck","fc","mapIncludes","search","uniqueKeys","isEqual","startColMsg","resolveBlockMap","composeNode","composeEmptyNode","bm","NodeClass","commentEnd","collItem","sep","keyProps","keyStart","keyNode","valueProps","valueNode","resolveBlockSeq","bs","resolveEnd","blockMsg","resolveFlowCollection","fcName","coll","atRoot","prevItemComment","loop","endRange","expectedEnd","ce","ee","cePos","resolveCollection","CN","Coll","composeCollection","tagToken","nl","lastProp","expType","kt","resolveBlockScalar","scalar","parseBlockScalarHeader","splitLines","chompStart","content","trimIndent","contentStart","prevMoreIndented","crlf","strict","length","ts","first","resolveFlowScalar","rel","plainValue","singleQuotedValue","doubleQuotedValue","valueEnd","re","badChar","foldLines","foldNewline","cc","escapeCodes","parseCharCode","wsStart","composeScalar","range","findScalarTagByName","findScalarTagByTest","matchWithTest","atKey","directives","emptyScalarPosition","before","isSrcToken","composeAlias","alias","composeDoc","opts","contentEnd","getErrorPos","parsePrelude","prelude","atComment","afterEmptyLine","Composer","afterDoc","forceDoc","endOffset","BOM","DOCUMENT","FLOW_END","tokenType","isEmpty","hexDigits","tagChars","flowIndicatorChars","invalidAnchorChars","isNotAnchorChar","Lexer","incomplete","state","dirEnd","sp","ch0","ch1","quote","qb","lastChar","allowEmpty","allowTabs","LineCounter","low","high","mid","includesToken","list","findNonEmptyIndex","isFlowToken","getPrevProps","getFirstKeyStartProps","arrayPushArray","fixFlowSeqItems","Parser","onNewLine","lexeme","top","bv","atMapIndent","atNextItem","fs","docEnd","parseOptions","prettyErrors","parseDocument","lineCounter","parser","composer","_doc","parse","_reviver","ITEM_KEYS","asArray","toStringArray","extractNames","clause","parseClauseList","kind","itemType","names","antes","score","label","parseJamlClauses","jamlText","parseYaml","must","should","mustNot","splitCamelCase","normalizeName","matchClauseToItem","itemName","needle","matchClauseToAnte","ante","highlightClassForKind","matchMotelyItemToClause","category","packDisplayName","pack","MotelyBoosterPack","bossDisplayName","boss","MotelyBossBlind","tagDisplayName","MotelyTag","voucherDisplayName","MotelyVoucher","deckDisplayName","deck","MotelyDeck","stakeDisplayName","stake","MotelyStake","ItemCard","highlight","resolved","useMemo","decodeMotelyItemToJamlCard","itemTypeOfCategory","buildMatchMap","clauses","selectHighlight","matches","matching","primary","PackSection","PullsDrawer","pulls","groups","g","group","EventsSection","events","rolls","r","roll","ErraticDeckPanel","cards","JamlyzerView","result","maxAnteProp","clausesProp","tallies","onHoverClause","maxAnte","selectedAnte","setSelectedAnte","hoveredClause","setHoveredClause","shouldClauses","activeMatches","filtered","anteNumbers","handleClauseHover","pullItems","seedClauseMatches","seedResult","JamlyzerBulk","results","expandedSeed","setExpandedSeed","isExpanded","seedTallies","hitAntes","tally","color","DECK_SPRITE_POS","STAKE_SPRITE_POS","SPRITE_WIDTH","SPRITE_HEIGHT","DECK_COLS","DECK_ROWS","STICKER_COLS","STICKER_ROWS","DeckSprite","deckKey","deckPos","stakePos","displayHeight","render","registry","Component","children","child","Fragment","renderList","defineCatalog","catalog","balatroCatalog","Panel","title","subtitle","variant","Stack","gap","align","Grid","columns","Text","colors","sizes","Spacer","Divider","Badge","tone","toneMap","SearchStats","status","seedsSearched","matchesFound","seedsPerSecond","statusColor","statusLabel","ErrorBanner","onDismiss","dismissed","setDismissed","LoadingPulse","SeedCard","seed","highlights","jokers","onClick","e","h","SeedList","seeds","scores","total","pageSize","page","setPage","maxPage","visible","JokerBadge","rarity","rarityTone","editionTone","EditionBadge","JamlGameCardImpl","JAMMY_SEED_MASCOT_DATA_URI","JammyOrbitalMenu","onAction","radius","step","angle","x","y","JammyMascot","mood","menuItems","onMenuAction","open","setOpen","handleClick","action","getJoker","getJokersByCategory","getSynergies","jokerName","SYNERGIES","findSynergies","findSynergiesByTag","getRecommendedSynergies","jokerNames","normalized","aMatches","DECKS","STAKES","getDeck","getStake","FINISHERS","getBoss","getBossesByCategory","getAllBosses","JokerCard","showSynergies","categoryTone","synergies","SynergyCard","synergy","difficultyTone","BossBlindCard","threatTone","DeckCard","StakeCard","StrategyAdvisor","foundJokers","recommended","bossWarnings","balatroRegistry","buildSearchSpec","params","resultCards","buildEncyclopediaSpec","jokerCards","synergyCards","deckCards","stakeCards","bossCards","buildAnalyzerSpec","shopBadges","noteTexts"],"mappings":"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","x_google_ignoreList":[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/render/useJamlCardRenderer.ts","../src/render/CanvasRenderer.tsx","../src/components/GameCard.tsx","../src/components/cardEnums.ts","../src/components/StandardCard.tsx","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/identity.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/visit.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/directives.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/anchors.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/applyReviver.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/toJS.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Node.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Alias.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Scalar.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/createNode.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Collection.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyComment.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyString.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringify.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyPair.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/log.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Pair.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/YAMLMap.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/map.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/seq.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/string.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/null.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/bool.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/float.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/int.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/schema.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/json/schema.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/tags.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/Schema.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/Document.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/errors.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-props.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-contains-newline.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-map-includes.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-map.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-seq.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-end.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-collection.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-scalar.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-node.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-doc.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/composer.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/lexer.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/line-counter.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/parser.js","../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/public-api.js","../src/lib/jaml/parseClauses.ts","../src/components/JamlyzerView.tsx","../src/components/JimboBalatroFooter.tsx","../src/components/JamlyzerBulk.tsx","../src/components/DeckSprite.tsx","../src/json-render/engine.tsx","../src/json-render/catalog.ts","../src/json-render/components/layout.tsx","../src/json-render/components/domain.tsx","../src/json-render/components/game.tsx","../src/json-render/components/jammySeedMascotImage.ts","../src/json-render/components/mascot.tsx","../src/json-render/knowledge/jokers.ts","../src/json-render/knowledge/synergies.ts","../src/json-render/knowledge/decks.ts","../src/json-render/knowledge/bosses.ts","../src/json-render/components/reference.tsx","../src/json-render/registry.tsx","../src/json-render/builders/search.ts","../src/json-render/builders/encyclopedia.ts","../src/json-render/builders/analyzer.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Layer } from \"./Layer.js\";\nimport { SPRITE_SHEETS } from \"../sprites/spriteData.js\";\n\nfunction loadImage(url: string): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const image = new window.Image();\n image.addEventListener(\"load\", () => resolve(image));\n image.addEventListener(\"error\", () => resolve(null));\n image.src = url;\n });\n}\n\nfunction renderImage(\n canvas: HTMLCanvasElement,\n context: CanvasRenderingContext2D,\n image: HTMLImageElement,\n layer: Layer,\n timestamp?: number\n) {\n if (!image || !layer || !layer?.pos) return 0;\n const cardWidth = image.width / layer.columns;\n const cardHeight = image.height / layer.rows;\n const canvasStyle = canvas.style;\n\n if (layer.order === 0) {\n canvas.width = cardWidth;\n canvas.height = cardHeight;\n // Let the CSS class size the canvas to its container; the intrinsic\n // width/height above determine the drawing resolution.\n canvasStyle.width = \"\";\n canvasStyle.height = \"\";\n }\n\n canvasStyle.imageRendering = \"pixelated\";\n context.imageSmoothingEnabled = true;\n\n context.save();\n\n if (layer.animated && timestamp) {\n const elapsed = timestamp;\n const yOffset = Math.sin(elapsed / 1000) * 3;\n const xOffset = Math.sin(elapsed / 1500) * 1.5;\n context.globalAlpha = 0.65 + (Math.sin(elapsed / 2000) + 1) * 0.075;\n context.translate(xOffset, yOffset);\n }\n\n context.drawImage(\n image,\n layer.pos.x * cardWidth,\n layer.pos.y * cardHeight,\n cardWidth,\n cardHeight,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n context.restore();\n\n return cardWidth / cardHeight;\n}\n\nexport function useJamlCardRenderer({\n layers,\n invert = false,\n hoverTilt = false,\n}: {\n layers: Layer[];\n invert?: boolean;\n hoverTilt?: boolean;\n}) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const imageCacheRef = useRef<Map<string, HTMLImageElement>>(new Map());\n const [ratio, setRatio] = useState(3 / 4);\n const [, forceUpdate] = useState(0);\n const frameRef = useRef<number | null>(null);\n const targetRef = useRef({ rx: 0, ry: 0, rz: 0 });\n const currentRef = useRef({ rx: 0, ry: 0, rz: 0 });\n\n const hasAnimatedLayer = layers?.some((layer) => layer.animated);\n\n // Preload all known sheets once\n useEffect(() => {\n let cancelled = false;\n const imageCache = imageCacheRef.current;\n const preload = async () => {\n const urls = Array.from(new Set(Object.values(SPRITE_SHEETS).map((sheet) => sheet.src)));\n const images = await Promise.all(urls.map((url) => loadImage(url)));\n if (cancelled) return;\n images.forEach((image, index) => {\n if (image) imageCache.set(urls[index], image);\n });\n forceUpdate((prev) => prev + 1);\n };\n\n preload().catch((err) => console.error(\"[JamlCardRenderer]\", err));\n\n return () => {\n cancelled = true;\n imageCache.clear();\n };\n }, []);\n\n // Drawing: RAF loop for animated layers, single paint otherwise.\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || !layers || layers.length === 0) return;\n const context = canvas.getContext(\"2d\");\n if (!context) return;\n\n let cancelled = false;\n let frame: number | null = null;\n let startTime: number | undefined;\n\n const drawOnce = (animTime?: number) => {\n context.clearRect(0, 0, canvas.width, canvas.height);\n ;[...layers]\n .sort((a, b) => a.order - b.order)\n .forEach((layer) => {\n const cached = imageCacheRef.current.get(layer.source);\n if (cached) {\n const imageRatio = renderImage(canvas, context, cached, layer, hasAnimatedLayer ? animTime : undefined);\n if (layer.order === 0) setRatio(imageRatio);\n return;\n }\n loadImage(layer.source).then((img) => {\n if (cancelled || !img) return;\n imageCacheRef.current.set(layer.source, img);\n if (!hasAnimatedLayer) {\n const imageRatio = renderImage(canvas, context, img, layer);\n if (layer.order === 0) setRatio(imageRatio);\n }\n forceUpdate((prev) => prev + 1);\n });\n });\n canvas.style.filter = invert ? \"invert(0.94)\" : \"none\";\n };\n\n if (hasAnimatedLayer) {\n const tick = (timestamp: number) => {\n if (cancelled) return;\n if (startTime === undefined) startTime = timestamp;\n drawOnce(timestamp - startTime);\n frame = requestAnimationFrame(tick);\n };\n frame = requestAnimationFrame(tick);\n } else {\n drawOnce();\n }\n\n return () => {\n cancelled = true;\n if (frame !== null) cancelAnimationFrame(frame);\n };\n }, [layers, invert, hasAnimatedLayer]);\n\n const stopTiltLoop = useCallback(() => {\n if (frameRef.current !== null) {\n cancelAnimationFrame(frameRef.current);\n frameRef.current = null;\n }\n }, []);\n\n const writeCardTransform = useCallback(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const c = currentRef.current;\n canvas.style.transform = `rotateX(${c.rx}deg) rotateY(${c.ry}deg) rotateZ(${c.rz}deg)`;\n }, []);\n\n const runTiltLoop = useCallback(\n (rate: number, onSettled?: () => void) => {\n stopTiltLoop();\n let previous = performance.now();\n const tick = (now: number) => {\n const dt = Math.min(0.05, (now - previous) / 1000);\n previous = now;\n const target = targetRef.current;\n const current = currentRef.current;\n const alpha = 1 - Math.exp(-rate * dt);\n current.rx += (target.rx - current.rx) * alpha;\n current.ry += (target.ry - current.ry) * alpha;\n current.rz += (target.rz - current.rz) * alpha;\n writeCardTransform();\n const settled =\n Math.abs(target.rx - current.rx) < 0.02 &&\n Math.abs(target.ry - current.ry) < 0.02 &&\n Math.abs(target.rz - current.rz) < 0.02;\n if (settled) {\n current.rx = target.rx;\n current.ry = target.ry;\n current.rz = target.rz;\n writeCardTransform();\n frameRef.current = null;\n onSettled?.();\n return;\n }\n frameRef.current = requestAnimationFrame(tick);\n };\n frameRef.current = requestAnimationFrame(tick);\n },\n [stopTiltLoop, writeCardTransform]\n );\n\n useEffect(() => () => stopTiltLoop(), [stopTiltLoop]);\n\n const onPointerEnter = (event: React.PointerEvent) => {\n if (!hoverTilt || event.pointerType === \"touch\") return;\n containerRef.current?.setAttribute(\"data-hovered\", \"true\");\n runTiltLoop(22);\n };\n\n const onPointerLeave = () => {\n if (!hoverTilt) return;\n containerRef.current?.setAttribute(\"data-hovered\", \"false\");\n targetRef.current = { rx: 0, ry: 0, rz: 0 };\n runTiltLoop(14, () => {\n const canvas = canvasRef.current;\n if (canvas) canvas.style.transform = \"\";\n });\n };\n\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!hoverTilt || event.pointerType === \"touch\") return;\n const rect = event.currentTarget.getBoundingClientRect();\n const nx = Math.max(-1, Math.min(1, ((event.clientX - rect.left) / rect.width - 0.5) * 2));\n const ny = Math.max(-1, Math.min(1, ((event.clientY - rect.top) / rect.height - 0.5) * 2));\n targetRef.current = {\n rx: ny * -10,\n ry: nx * 12,\n rz: nx * ny * -1.2,\n };\n containerRef.current?.style.setProperty(\"--j-card-glare-x\", `${(nx + 1) * 50}%`);\n containerRef.current?.style.setProperty(\"--j-card-glare-y\", `${(1 - ny) * 50}%`);\n runTiltLoop(22);\n };\n\n return {\n canvasRef,\n containerRef,\n ratio,\n handlers: {\n onPointerEnter: hoverTilt ? onPointerEnter : undefined,\n onPointerLeave: hoverTilt ? onPointerLeave : undefined,\n onPointerMove: hoverTilt ? onPointerMove : undefined,\n },\n };\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layer } from \"./Layer.js\";\nimport { useJamlCardRenderer } from \"./useJamlCardRenderer.js\";\n\nexport interface JamlCardRendererProps {\n layers: Layer[];\n invert?: boolean;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlCardRenderer({ layers, invert = false, className = \"\", hoverTilt = false }: JamlCardRendererProps) {\n const { canvasRef, containerRef, ratio, handlers } = useJamlCardRenderer({\n layers,\n invert,\n hoverTilt\n });\n\n return (\n <div\n ref={containerRef}\n className={`j-card-renderer ${className}`.trim()}\n data-hover-tilt={hoverTilt}\n data-hovered=\"false\"\n style={{ \"--j-card-aspect\": String(ratio) } as React.CSSProperties}\n >\n <canvas ref={canvasRef} className=\"j-card-renderer__canvas\" />\n <div className=\"j-card-renderer__hit\" {...handlers} />\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layer } from \"../render/Layer.js\";\nimport { JamlCardRenderer } from \"../render/CanvasRenderer.js\";\nimport {\n JOKERS,\n JOKER_FACES,\n TAROTS_AND_PLANETS,\n CONSUMABLE_FACES,\n TAGS,\n VOUCHERS,\n BOSSES,\n EDITION_MAP,\n SPRITE_SHEETS,\n STICKER_MAP,\n RANK_MAP,\n SUIT_MAP,\n ENHANCER_MAP,\n SEAL_MAP,\n} from \"../sprites/spriteData.js\";\nimport { decodeMotelyItem } from \"../decode/motelyItemDecoder.js\";\n\nexport interface JamlGameCardProps {\n card: {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n rank?: string;\n suit?: string;\n enhancements?: string[];\n seal?: string;\n scale?: number;\n };\n type: \"joker\" | \"consumable\" | \"playing\";\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport type AnalyzerShopItem = {\n id: string;\n name: string;\n value?: number;\n};\n\nexport type AnalyzerResolvedItem =\n | { kind: \"voucher\"; voucherName: string }\n | {\n kind: \"joker\" | \"consumable\" | \"playing\";\n card: JamlGameCardProps[\"card\"];\n type: JamlGameCardProps[\"type\"];\n }\n | { kind: \"unknown\"; label: string };\n\nfunction normalizeCardRank(raw: string): string {\n const value = raw.trim().toUpperCase();\n if (value === \"A\" || value === \"ACE\") return \"Ace\";\n if (value === \"K\" || value === \"KING\") return \"King\";\n if (value === \"Q\" || value === \"QUEEN\") return \"Queen\";\n if (value === \"J\" || value === \"JACK\") return \"Jack\";\n return raw.trim();\n}\n\nfunction normalizeCardSuit(raw: string): string {\n const value = raw.trim().toLowerCase();\n if (value === \"heart\" || value === \"hearts\") return \"Hearts\";\n if (value === \"club\" || value === \"clubs\") return \"Clubs\";\n if (value === \"diamond\" || value === \"diamonds\") return \"Diamonds\";\n if (value === \"spade\" || value === \"spades\") return \"Spades\";\n return raw.trim();\n}\n\nfunction parseStandardcardName(name: string): { rank: string; suit: string } | null {\n const trimmed = name.trim();\n const ofMatch = /^(A|K|Q|J|10|[2-9]|Ace|King|Queen|Jack)\\s+of\\s+(Hearts|Clubs|Diamonds|Spades)$/i.exec(trimmed);\n if (ofMatch) {\n return {\n rank: normalizeCardRank(ofMatch[1]),\n suit: normalizeCardSuit(ofMatch[2]),\n };\n }\n\n const shortMatch = /^(A|K|Q|J|10|[2-9])\\s*([HCDS])$/i.exec(trimmed);\n if (shortMatch) {\n const suitMap: Record<string, string> = {\n H: \"Hearts\",\n C: \"Clubs\",\n D: \"Diamonds\",\n S: \"Spades\",\n };\n return {\n rank: normalizeCardRank(shortMatch[1]),\n suit: suitMap[shortMatch[2].toUpperCase()],\n };\n }\n\n return null;\n}\n\nconst MODIFIER_PREFIXES = [\n \"Eternal\",\n \"Perishable\",\n \"Rental\",\n \"Foil\",\n \"Holographic\",\n \"Polychrome\",\n \"Negative\",\n \"Bonus\",\n \"Mult\",\n \"Wild\",\n \"Glass\",\n \"Steel\",\n \"Stone\",\n \"Gold\",\n \"Lucky\",\n \"Gold Seal\",\n \"Red Seal\",\n \"Blue Seal\",\n \"Purple Seal\",\n];\n\nfunction stripModifiers(name: string): {\n baseName: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n} {\n let remaining = name;\n let edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\" | undefined;\n let isEternal = false;\n let isPerishable = false;\n let isRental = false;\n\n let changed = true;\n while (changed) {\n changed = false;\n for (const prefix of MODIFIER_PREFIXES) {\n if (remaining.startsWith(prefix + \" \")) {\n const stripped = remaining.slice(prefix.length + 1);\n if (prefix === \"Foil\" || prefix === \"Holographic\" || prefix === \"Polychrome\" || prefix === \"Negative\") {\n edition = prefix as typeof edition;\n } else if (prefix === \"Eternal\") {\n isEternal = true;\n } else if (prefix === \"Perishable\") {\n isPerishable = true;\n } else if (prefix === \"Rental\") {\n isRental = true;\n }\n remaining = stripped;\n changed = true;\n break;\n }\n }\n }\n\n return { baseName: remaining, edition, isEternal, isPerishable, isRental };\n}\n\nfunction resolvePackedAnalyzerItem(item: AnalyzerShopItem, scale: number): AnalyzerResolvedItem | null {\n if (typeof item.value !== \"number\" || !Number.isFinite(item.value)) {\n return null;\n }\n\n // Decode the packed int through the typed Motely decoder — the single source\n // of truth for the bit layout. The previous version hand-rolled nibble\n // constants (catNibble === 5 /* Joker */ etc.) that did NOT match the real\n // Motely enum, so categories decoded as bogus 1..5 values. decodeMotelyItem\n // reads MOTELY_ITEM_FORMATS_BY_VALUE + Motely.decode*, so the category,\n // edition, seal, enhancement, rank, suit, and stickers are all correct.\n const decoded = decodeMotelyItem(item.value);\n if (!decoded) return null;\n\n const edition = decoded.edition ?? undefined;\n const { isEternal, isPerishable, isRental } = decoded;\n\n switch (decoded.category) {\n case \"joker\":\n return {\n kind: \"joker\",\n type: \"joker\",\n card: { name: decoded.displayName, edition, isEternal, isPerishable, isRental, scale },\n };\n case \"tarot\":\n case \"planet\":\n case \"spectral\":\n return {\n kind: \"consumable\",\n type: \"consumable\",\n card: {\n name: decoded.displayName,\n edition,\n enhancements: decoded.enhancement ? [decoded.enhancement] : undefined,\n seal: decoded.seal ?? undefined,\n scale,\n },\n };\n case \"playing\":\n return {\n kind: \"playing\",\n type: \"playing\",\n card: {\n name: decoded.displayName,\n rank: decoded.rank ?? undefined,\n suit: decoded.suit ?? undefined,\n enhancements: decoded.enhancement ? [decoded.enhancement] : undefined,\n seal: decoded.seal ?? undefined,\n edition,\n isEternal,\n isPerishable,\n isRental,\n scale,\n },\n };\n default:\n // Unknown category (incl. vouchers): fall back to the name-based\n // matching in resolveAnalyzerShopItem (vouchers resolve by name).\n return null;\n }\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function resolveAnalyzerShopItem(item: AnalyzerShopItem, scale = 1): AnalyzerResolvedItem {\n const displayName = String(item.name || \"\").trim();\n\n if (!displayName) {\n return { kind: \"unknown\", label: String(item.id || \"\").trim() || \"Unknown Item\" };\n }\n\n const packedResolved = resolvePackedAnalyzerItem(item, scale);\n if (packedResolved && packedResolved.kind !== \"unknown\") {\n return packedResolved;\n }\n\n if (VOUCHERS.some((voucher) => voucher.name === displayName)) {\n return { kind: \"voucher\", voucherName: displayName };\n }\n\n if (JOKERS.some((joker) => joker.name === displayName)) {\n return { kind: \"joker\", type: \"joker\", card: { name: displayName, scale } };\n }\n\n if (TAROTS_AND_PLANETS.some((consumable) => consumable.name === displayName)) {\n return { kind: \"consumable\", type: \"consumable\", card: { name: displayName, scale } };\n }\n\n const { baseName, edition, isEternal, isPerishable, isRental } = stripModifiers(displayName);\n\n if (baseName !== displayName) {\n if (JOKERS.some((joker) => joker.name === baseName)) {\n return { kind: \"joker\", type: \"joker\", card: { name: baseName, edition, isEternal, isPerishable, isRental, scale } };\n }\n if (TAROTS_AND_PLANETS.some((consumable) => consumable.name === baseName)) {\n return { kind: \"consumable\", type: \"consumable\", card: { name: baseName, edition, scale } };\n }\n if (VOUCHERS.some((voucher) => voucher.name === baseName)) {\n return { kind: \"voucher\", voucherName: baseName };\n }\n }\n\n const standardcard = parseStandardcardName(displayName) ?? parseStandardcardName(baseName);\n if (standardcard) {\n return {\n kind: \"playing\",\n type: \"playing\",\n card: {\n name: displayName,\n rank: standardcard.rank,\n suit: standardcard.suit,\n scale,\n },\n };\n }\n\n return packedResolved ?? { kind: \"unknown\", label: displayName };\n}\n\nexport function JamlGameCard({ card, type, className = \"\", hoverTilt = false }: JamlGameCardProps) {\n const { name, edition, isEternal, isPerishable, isRental, rank, suit, enhancements, seal, scale = 1 } = card;\n const layers: Layer[] = [];\n\n if (type === \"joker\") {\n const jokerData = JOKERS.find((j) => j.name === name);\n if (jokerData) layers.push(new Layer({ ...jokerData, source: SPRITE_SHEETS.jokers.src, order: 0, columns: SPRITE_SHEETS.jokers.columns, rows: SPRITE_SHEETS.jokers.rows }));\n const face = JOKER_FACES.find((j) => j.name === name);\n if (face) layers.push(new Layer({ ...face, source: SPRITE_SHEETS.jokers.src, order: 1, columns: SPRITE_SHEETS.jokers.columns, rows: SPRITE_SHEETS.jokers.rows }));\n } else if (type === \"consumable\") {\n const consumable = TAROTS_AND_PLANETS.find((t) => t.name === name);\n if (consumable) layers.push(new Layer({ ...consumable, order: 0, source: SPRITE_SHEETS.tarots.src, rows: SPRITE_SHEETS.tarots.rows, columns: SPRITE_SHEETS.tarots.columns }));\n const face = CONSUMABLE_FACES.find((t) => t.name === name);\n if (face)\n layers.push(\n new Layer({\n ...face,\n order: 1,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n animated: face.animated,\n }),\n );\n } else {\n const standardcard = rank && suit ? { rank, suit } : parseStandardcardName(name);\n if (standardcard) {\n const enhancerPos = (enhancements ?? [])\n .map((m) => ENHANCER_MAP[m])\n .find((pos): pos is { x: number; y: number } => Boolean(pos)) ?? { x: 1, y: 0 };\n layers.push(\n new Layer({\n pos: enhancerPos,\n name: \"background\",\n order: 0,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n }),\n );\n layers.push(\n new Layer({\n pos: { x: RANK_MAP[standardcard.rank] ?? 0, y: SUIT_MAP[standardcard.suit] ?? 0 },\n name,\n order: 1,\n source: SPRITE_SHEETS.deck.src,\n rows: SPRITE_SHEETS.deck.rows,\n columns: SPRITE_SHEETS.deck.columns,\n }),\n );\n }\n }\n\n if (edition) {\n const index = EDITION_MAP[edition];\n if (index !== undefined) {\n layers.push(\n new Layer({\n pos: { x: index, y: 0 },\n name: edition,\n order: 2,\n source: SPRITE_SHEETS.editions.src,\n rows: SPRITE_SHEETS.editions.rows,\n columns: SPRITE_SHEETS.editions.columns,\n }),\n );\n }\n }\n\n if (isEternal) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Eternal\"],\n name: \"Eternal\",\n order: 3,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n if (isPerishable) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Perishable\"],\n name: \"Perishable\",\n order: 4,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n if (isRental) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Rental\"],\n name: \"Rental\",\n order: 5,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n\n if (seal) {\n const sealPos = SEAL_MAP[seal];\n if (sealPos) {\n layers.push(\n new Layer({\n pos: sealPos,\n name: seal,\n order: 6,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n }),\n );\n }\n }\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer invert={edition === \"Negative\"} layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface VoucherProps {\n voucherName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlVoucher({ voucherName, scale = 1, className = \"\", hoverTilt = false }: VoucherProps) {\n const voucherData = VOUCHERS.find((v) => v.name === voucherName);\n if (!voucherData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...voucherData,\n order: 0,\n source: SPRITE_SHEETS.vouchers.src,\n rows: SPRITE_SHEETS.vouchers.rows,\n columns: SPRITE_SHEETS.vouchers.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface TagProps {\n tagName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlTag({ tagName, scale = 1, className = \"\", hoverTilt = false }: TagProps) {\n const tagData = TAGS.find((t) => t.name === tagName);\n if (!tagData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...tagData,\n order: 0,\n source: SPRITE_SHEETS.tags.src,\n rows: SPRITE_SHEETS.tags.rows,\n columns: SPRITE_SHEETS.tags.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface BossProps {\n bossName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlBoss({ bossName, scale = 1, className = \"\", hoverTilt = false }: BossProps) {\n const bossData = BOSSES.find((b) => b.name === bossName);\n if (!bossData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...bossData,\n order: 0,\n source: SPRITE_SHEETS.blinds.src,\n rows: SPRITE_SHEETS.blinds.rows,\n columns: SPRITE_SHEETS.blinds.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n","// Single canonical form per value. No case tolerance, no abbreviations.\n// Value strings match the keys used by RANK_MAP / SUIT_MAP / ENHANCER_MAP /\n// SEAL_MAP / EDITION_MAP so no aliasing/normalization is needed at render time.\n\nexport const CardSuit = {\n Hearts: 'Hearts',\n Diamonds: 'Diamonds',\n Clubs: 'Clubs',\n Spades: 'Spades',\n} as const\nexport type CardSuit = typeof CardSuit[keyof typeof CardSuit]\n\nexport const CardRank = {\n Two: '2',\n Three: '3',\n Four: '4',\n Five: '5',\n Six: '6',\n Seven: '7',\n Eight: '8',\n Nine: '9',\n Ten: '10',\n Jack: 'Jack',\n Queen: 'Queen',\n King: 'King',\n Ace: 'Ace',\n} as const\nexport type CardRank = typeof CardRank[keyof typeof CardRank]\n\nexport const CardEnhancement = {\n Bonus: 'Bonus',\n Mult: 'Mult',\n Wild: 'Wild',\n Glass: 'Glass',\n Steel: 'Steel',\n Stone: 'Stone',\n Gold: 'Gold',\n Lucky: 'Lucky',\n} as const\nexport type CardEnhancement = typeof CardEnhancement[keyof typeof CardEnhancement]\n\nexport const CardSeal = {\n Gold: 'Gold',\n Red: 'Red',\n Blue: 'Blue',\n Purple: 'Purple',\n} as const\nexport type CardSeal = typeof CardSeal[keyof typeof CardSeal]\n\nexport const CardEdition = {\n Foil: 'Foil',\n Holographic: 'Holographic',\n Polychrome: 'Polychrome',\n Negative: 'Negative',\n} as const\nexport type CardEdition = typeof CardEdition[keyof typeof CardEdition]\n","'use client'\n\nimport React from 'react'\nimport { resolveJamlAssetUrl } from '../assets.js'\nimport { RANK_MAP, SUIT_MAP, ENHANCER_MAP, SEAL_MAP, EDITION_MAP, type SpritePos } from '../sprites/spriteData.js'\nimport { CardEdition, type CardSuit, type CardRank, type CardEnhancement, type CardSeal } from './cardEnums.js'\n\n// ── Sprite geometry ────────────────────────────────────────────────────────\n\nconst CARD_WIDTH = 71\nconst CARD_HEIGHT = 95\n\ninterface StandardCardProps {\n suit?: CardSuit\n rank?: CardRank\n name?: string\n enhancement?: CardEnhancement\n seal?: CardSeal\n edition?: CardEdition\n className?: string\n size?: number\n style?: React.CSSProperties\n}\n\nfunction parseStandardcardName(name: string): { rank: CardRank; suit: CardSuit } | null {\n const match = /^(.*?)(?:\\s+of\\s+|\\s+)(.*?)$/i.exec(name.trim())\n if (!match) return null\n const rawRank = match[1].trim()\n const rawSuit = match[2].trim()\n const rank = (rawRank === 'A' ? 'Ace' : rawRank === 'K' ? 'King' : rawRank === 'Q' ? 'Queen' : rawRank === 'J' ? 'Jack' : rawRank) as CardRank\n const suit = rawSuit.charAt(0).toUpperCase() + rawSuit.slice(1).toLowerCase() as CardSuit\n return RANK_MAP[rank] !== undefined && SUIT_MAP[suit] !== undefined ? { rank, suit } : null\n}\n\nexport function StandardCard({\n suit,\n rank,\n name,\n enhancement,\n seal,\n edition,\n className,\n size = 71,\n style,\n}: StandardCardProps) {\n const parsed = !rank || !suit ? (name ? parseStandardcardName(name) : null) : null\n const finalRank = rank ?? parsed?.rank\n const finalSuit = suit ?? parsed?.suit\n const col = finalRank ? RANK_MAP[finalRank] : undefined\n const row = finalSuit ? SUIT_MAP[finalSuit] : undefined\n\n if (col === undefined || row === undefined) {\n console.warn(`Invalid card: ${finalRank} of ${finalSuit}`)\n return null\n }\n\n const scale = size / CARD_WIDTH\n const finalH = size * (CARD_HEIGHT / CARD_WIDTH)\n\n const bgX = -col * CARD_WIDTH\n const bgY = -row * CARD_HEIGHT\n\n // Cell (1,0) of the enhancer sheet is the plain blank card body — used as\n // the base layer behind every card so transparent regions of the deck face\n // sprite don't reveal whatever is behind. Cell (0,0) is a red-card sprite,\n // NOT a blank base — do not fall back to it.\n const PLAIN_BASE: SpritePos = { x: 1, y: 0 }\n const enhPos: SpritePos = enhancement ? ENHANCER_MAP[enhancement] ?? PLAIN_BASE : PLAIN_BASE\n const sealPos = seal ? SEAL_MAP[seal] ?? null : null\n const editionCol = edition ? EDITION_MAP[edition] : undefined\n\n const isNegative = edition === CardEdition.Negative\n const baseFilter = isNegative ? 'invert(0.94)' : 'none'\n\n const enhancersUrl = resolveJamlAssetUrl('enhancers')\n const deckUrl = resolveJamlAssetUrl('deck')\n const editionsUrl = resolveJamlAssetUrl('editions')\n\n const layerBase: React.CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: CARD_WIDTH,\n height: CARD_HEIGHT,\n transform: `scale(${scale})`,\n transformOrigin: 'top left',\n backgroundRepeat: 'no-repeat',\n }\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n display: 'inline-block',\n overflow: 'hidden',\n userSelect: 'none',\n width: size,\n height: finalH,\n imageRendering: 'pixelated',\n ...style,\n }}\n title={`${rank} of ${suit}${enhancement ? ` (${enhancement})` : ''}${seal ? ` [${seal} seal]` : ''}${edition ? ` {${edition}}` : ''}`}\n >\n {/* Card base — plain blank card body from cell (1,0) of the enhancer\n sheet, replaced by the mapped sprite when an enhancement is set. */}\n <div\n style={{\n ...layerBase,\n zIndex: 0,\n backgroundImage: `url(${enhancersUrl})`,\n backgroundPosition: `${-enhPos.x * CARD_WIDTH}px ${-enhPos.y * CARD_HEIGHT}px`,\n }}\n />\n\n {/* Card face */}\n <div\n style={{\n ...layerBase,\n zIndex: 1,\n backgroundImage: `url(${deckUrl})`,\n backgroundPosition: `${bgX}px ${bgY}px`,\n filter: baseFilter,\n }}\n />\n\n {/* Edition overlay */}\n {edition && edition !== CardEdition.Negative && editionCol !== undefined && (\n <div\n style={{\n ...layerBase,\n zIndex: 2,\n mixBlendMode: 'screen',\n opacity: 0.6,\n backgroundImage: `url(${editionsUrl})`,\n backgroundPosition: `${-editionCol * CARD_WIDTH}px 0px`,\n }}\n />\n )}\n\n {/* Seal overlay */}\n {sealPos && (\n <div\n style={{\n ...layerBase,\n zIndex: 3,\n backgroundImage: `url(${enhancersUrl})`,\n backgroundPosition: `${-sealPos.x * CARD_WIDTH}px ${-sealPos.y * CARD_HEIGHT}px`,\n }}\n />\n )}\n\n {/* Negative tint */}\n {isNegative && (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: 4,\n background: 'rgba(239, 68, 68, 0.1)',\n mixBlendMode: 'overlay',\n pointerEvents: 'none',\n }}\n />\n )}\n </div>\n )\n}\n","const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n","import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (isNode(ctrl) || isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (isNode(ctrl) || isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (isMap(node))\n return visitor.Map?.(key, node, path);\n if (isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (isPair(node))\n return visitor.Pair?.(key, node, path);\n if (isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexport { visit, visitAsync };\n","import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n const tags = {};\n visit(doc.contents, (_key, node) => {\n if (isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n","import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (isScalar(ref.node) || isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n","/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n","import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexport { toJS };\n","import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexport { NodeBase };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair, hasAnchor } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n constructor(source) {\n super(ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n if (ctx?.maxAliasCount === 0)\n throw new ReferenceError('Alias resolution is disabled');\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit(doc, {\n Node: (_key, node) => {\n if (isAlias(node) || hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexport { Alias };\n","import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n constructor(value) {\n super(SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n","import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (isDocument(value))\n value = value.contents;\n if (isNode(value))\n return value;\n if (isPair(value)) {\n const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[MAP]\n : Symbol.iterator in Object(value)\n ? schema[SEQ]\n : schema[MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexport { createNode };\n","import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && isScalar(node) ? node.value : node;\n else\n return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n","/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n","const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_FLOW, FOLD_QUOTED, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines(`${start}${foldedValue}${end}`, indent, FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.BLOCK_FOLDED:\n case Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexport { stringifyString };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trailingComma: false,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n if (anchor && anchorIsValid(anchor)) {\n anchors.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : isScalar(node)\n ? stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n","import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n isCollection(key) ||\n (isScalar(key)\n ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexport { stringifyPair };\n","function debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n console.warn(warning);\n }\n}\n\nexport { debug, warn };\n","import { isScalar, isSeq, isAlias, isMap } from '../../nodes/identity.js';\nimport { Scalar } from '../../nodes/Scalar.js';\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (isScalar(key) &&\n (!key.type || key.type === Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (isSeq(source))\n for (const it of source.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(source))\n for (const it of source)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, source);\n}\nfunction mergeValue(ctx, map, value) {\n const source = resolveAliasValue(ctx, value);\n if (!isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\nfunction resolveAliasValue(ctx, value) {\n return ctx && isAlias(value) ? value.resolve(ctx.doc, ctx) : value;\n}\n\nexport { addMergeToJSMap, isMergeKey, merge };\n","import { warn } from '../log.js';\nimport { isMergeKey, addMergeToJSMap } from '../schema/yaml-1.1/merge.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isNode } from './identity.js';\nimport { toJS } from './toJS.js';\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (isMergeKey(ctx, key))\n addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (isNode(key) && ctx?.doc) {\n const strCtx = createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n const k = createNode(key, undefined, ctx);\n const v = createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (isNode(key))\n key = key.clone(schema);\n if (isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexport { Pair, createPair };\n","import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (isPair(item)) {\n const ik = isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (isPair(item)) {\n const ik = isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify(item, itemCtx, () => (comment = null));\n reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\\n'));\n if (i < items.length - 1) {\n str += ',';\n }\n else if (ctx.options.trailingComma) {\n if (ctx.options.lineWidth > 0) {\n reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +\n (str.length + 2) >\n ctx.options.lineWidth);\n }\n if (reqNewline) {\n str += ',';\n }\n }\n if (comment)\n str += lineComment(str, itemIndent, commentString(comment));\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexport { stringifyCollection };\n","import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { MAP, isPair, isScalar } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n const k = isScalar(key) ? key.value : key;\n for (const it of items) {\n if (isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair(pair, pair?.value);\n }\n else\n _pair = new Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (isScalar(prev.value) && isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexport { YAMLMap, findPair };\n","import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (isScalar(prev) && isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexport { YAMLSeq };\n","import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n","import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexport { string };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexport { nullTag };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexport { boolTag };\n","function stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^-?\\d/.test(n) &&\n !n.includes('e')) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexport { stringifyNumber };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intHex, intOct };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { boolTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intOct, int, intHex } from './int.js';\n\nconst schema = [\n map,\n seq,\n string,\n nullTag,\n boolTag,\n intOct,\n int,\n intHex,\n floatNaN,\n floatExp,\n float\n];\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { map } from '../common/map.js';\nimport { seq } from '../common/seq.js';\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map, seq].concat(jsonScalars, jsonError);\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyString } from '../../stringify/stringifyString.js';\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.BLOCK_LITERAL);\n if (type !== Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexport { binary };\n","import { isSeq, isPair, isMap } from '../../nodes/identity.js';\nimport { createPair, Pair } from '../../nodes/Pair.js';\nimport { Scalar } from '../../nodes/Scalar.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nfunction resolvePairs(seq, onError) {\n if (isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (isPair(item))\n continue;\n else if (isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair(new Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = isPair(item) ? item : new Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexport { createPairs, pairs, resolvePairs };\n","import { isScalar, isPair } from '../../nodes/identity.js';\nimport { toJS } from '../../nodes/toJS.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\nimport { resolvePairs, createPairs } from './pairs.js';\n\nclass YAMLOMap extends YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (isPair(pair)) {\n key = toJS(pair.key, '', ctx);\n value = toJS(pair.value, key, ctx);\n }\n else {\n key = toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs = createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs = resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs.items) {\n if (isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexport { YAMLOMap, omap };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar(false),\n stringify: boolStringify\n};\n\nexport { falseTag, trueTag };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intBin, intHex, intOct };\n","import { isMap, isPair, isScalar } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { YAMLMap, findPair } from '../../nodes/YAMLMap.js';\n\nclass YAMLSet extends YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair(key.key, null);\n else\n pair = new Pair(key, null);\n const prev = findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = findPair(this.items, key);\n return !keepPair && isPair(pair)\n ? isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexport { YAMLSet, set };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexport { floatTime, intTime, timestamp };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { binary } from './binary.js';\nimport { trueTag, falseTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intBin, intOct, int, intHex } from './int.js';\nimport { merge } from './merge.js';\nimport { omap } from './omap.js';\nimport { pairs } from './pairs.js';\nimport { set } from './set.js';\nimport { intTime, floatTime, timestamp } from './timestamp.js';\n\nconst schema = [\n map,\n seq,\n string,\n nullTag,\n trueTag,\n falseTag,\n intBin,\n intOct,\n int,\n intHex,\n floatNaN,\n floatExp,\n float,\n binary,\n merge,\n omap,\n pairs,\n set,\n intTime,\n floatTime,\n timestamp\n];\n\nexport { schema };\n","import { map } from './common/map.js';\nimport { nullTag } from './common/null.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { boolTag } from './core/bool.js';\nimport { floatNaN, floatExp, float } from './core/float.js';\nimport { intOct, intHex, int } from './core/int.js';\nimport { schema } from './core/schema.js';\nimport { schema as schema$1 } from './json/schema.js';\nimport { binary } from './yaml-1.1/binary.js';\nimport { merge } from './yaml-1.1/merge.js';\nimport { omap } from './yaml-1.1/omap.js';\nimport { pairs } from './yaml-1.1/pairs.js';\nimport { schema as schema$2 } from './yaml-1.1/schema.js';\nimport { set } from './yaml-1.1/set.js';\nimport { timestamp, intTime, floatTime } from './yaml-1.1/timestamp.js';\n\nconst schemas = new Map([\n ['core', schema],\n ['failsafe', [map, seq, string]],\n ['json', schema$1],\n ['yaml11', schema$2],\n ['yaml-1.1', schema$2]\n]);\nconst tagsByName = {\n binary,\n bool: boolTag,\n float,\n floatExp,\n floatNaN,\n floatTime,\n int,\n intHex,\n intOct,\n intTime,\n map,\n merge,\n null: nullTag,\n omap,\n pairs,\n seq,\n set,\n timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary,\n 'tag:yaml.org,2002:merge': merge,\n 'tag:yaml.org,2002:omap': omap,\n 'tag:yaml.org,2002:pairs': pairs,\n 'tag:yaml.org,2002:set': set,\n 'tag:yaml.org,2002:timestamp': timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge)\n ? schemaTags.concat(merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexport { coreKnownTags, getTags };\n","import { MAP, SCALAR, SEQ } from '../nodes/identity.js';\nimport { map } from './common/map.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { getTags, coreKnownTags } from './tags.js';\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? getTags(compat, 'compat')\n : compat\n ? getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? coreKnownTags : {};\n this.tags = getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, MAP, { value: map });\n Object.defineProperty(this, SCALAR, { value: string });\n Object.defineProperty(this, SEQ, { value: seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexport { Schema };\n","import { isNode } from '../nodes/identity.js';\nimport { createStringifyContext, stringify } from './stringify.js';\nimport { indentComment, lineComment } from './stringifyComment.js';\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexport { stringifyDocument };\n","import { Alias } from '../nodes/Alias.js';\nimport { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';\nimport { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { toJS } from '../nodes/toJS.js';\nimport { Schema } from '../schema/Schema.js';\nimport { stringifyDocument } from '../stringify/stringifyDocument.js';\nimport { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';\nimport { applyReviver } from './applyReviver.js';\nimport { createNode } from './createNode.js';\nimport { Directives } from './directives.js';\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, NODE_TYPE, { value: DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [NODE_TYPE]: { value: DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode(value, tag, ctx);\n if (flow && isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (isEmptyPath(path))\n return !keepScalar && isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (isEmptyPath(path))\n return this.contents !== undefined;\n return isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexport { Document };\n","class YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '…' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '…';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '…\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexport { YAMLError, YAMLParseError, YAMLWarning, prettifyError };\n","function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexport { resolveProps };\n","function containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexport { containsNewline };\n","import { containsNewline } from './util-contains-newline.js';\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexport { flowIndentCheck };\n","import { isScalar } from '../nodes/identity.js';\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (isScalar(a) && isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexport { mapIncludes };\n","import { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexport { resolveBlockMap };\n","import { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveProps } from './resolve-props.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexport { resolveBlockSeq };\n","function resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexport { resolveEnd };\n","import { isPair } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap : YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexport { resolveFlowCollection };\n","import { isNode } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveBlockMap } from './resolve-block-map.js';\nimport { resolveBlockSeq } from './resolve-block-seq.js';\nimport { resolveFlowCollection } from './resolve-flow-collection.js';\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = isNode(res)\n ? res\n : new Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexport { composeCollection };\n","import { Scalar } from '../nodes/Scalar.js';\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexport { resolveBlockScalar };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = next === 'x' ? 2 : next === 'u' ? 4 : 8;\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n try {\n return String.fromCodePoint(code);\n }\n catch {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n}\n\nexport { resolveFlowScalar };\n","import { isScalar, SCALAR } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { resolveBlockScalar } from './resolve-block-scalar.js';\nimport { resolveFlowScalar } from './resolve-flow-scalar.js';\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = isScalar(res) ? res : new Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexport { composeScalar };\n","function emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexport { emptyScalarPosition };\n","import { Alias } from '../nodes/Alias.js';\nimport { isScalar } from '../nodes/identity.js';\nimport { composeCollection } from './compose-collection.js';\nimport { composeScalar } from './compose-scalar.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { emptyScalarPosition } from './util-empty-scalar-position.js';\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n try {\n node = composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n }\n catch (error) {\n // Almost certainly here due to a stack overflow\n const message = error instanceof Error ? error.message : String(error);\n onError(token, 'RESOURCE_EXHAUSTION', message);\n }\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n isSrcToken = false;\n }\n }\n node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexport { composeEmptyNode, composeNode };\n","import { Document } from '../doc/Document.js';\nimport { composeNode, composeEmptyNode } from './compose-node.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexport { composeDoc };\n","import { Directives } from '../doc/directives.js';\nimport { Document } from '../doc/Document.js';\nimport { YAMLWarning, YAMLParseError } from '../errors.js';\nimport { isCollection, isPair } from '../nodes/identity.js';\nimport { composeDoc } from './compose-doc.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new YAMLWarning(pos, code, message));\n else\n this.errors.push(new YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n for (let i = 0; i < this.errors.length; ++i)\n doc.errors.push(this.errors[i]);\n for (let i = 0; i < this.warnings.length; ++i)\n doc.warnings.push(this.warnings[i]);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexport { Composer };\n","export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';\nexport { stringify } from './cst-stringify.js';\nexport { visit } from './cst-visit.js';\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexport { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };\n","import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return 'block-start';\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n let n = 0;\n loop: while (true) {\n switch (this.charAt(0)) {\n case '!':\n n += yield* this.pushTag();\n n += yield* this.pushSpaces(true);\n continue loop;\n case '&':\n n += yield* this.pushUntil(isNotAnchorChar);\n n += yield* this.pushSpaces(true);\n continue loop;\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n continue loop;\n }\n }\n }\n break loop;\n }\n return n;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexport { Lexer };\n","/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexport { LineCounter };\n","import { tokenType } from './cst.js';\nimport { Lexer } from './lexer.js';\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction arrayPushArray(target, source) {\n // May exhaust call stack with large `source` array\n if (source.length < 1e5)\n Array.prototype.push.apply(target, source);\n else\n for (let i = 0; i < source.length; ++i)\n target.push(source[i]);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n arrayPushArray(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n arrayPushArray(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n arrayPushArray(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexport { Parser };\n","import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { isDocument } from './nodes/identity.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser = new Parser(lineCounter?.addNewLine);\n const composer = new Composer(options);\n const docs = Array.from(composer.compose(parser.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(prettifyError(source, lineCounter));\n doc.warnings.forEach(prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser = new Parser(lineCounter?.addNewLine);\n const composer = new Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(prettifyError(source, lineCounter));\n doc.warnings.forEach(prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n","import { parse as parseYaml } from \"yaml\";\n\nexport type JamlClauseKind = \"must\" | \"should\" | \"mustNot\";\n\nexport type JamlItemType =\n | \"joker\"\n | \"voucher\"\n | \"boss\"\n | \"tag\"\n | \"tarot\"\n | \"planet\"\n | \"spectral\"\n | \"consumable\"\n | \"standardcard\"\n | \"deck\"\n | \"stake\"\n | \"seed\"\n | \"any\"\n | \"unknown\";\n\nexport interface ParsedJamlClause {\n kind: JamlClauseKind;\n itemType: JamlItemType;\n /** Exact names as written in JAML (e.g. \"WeeJoker\"). */\n names: string[];\n /** Optional explicit ante window. */\n antes?: number[];\n /** Score weight for should clauses; 0 for must/mustNot. */\n score: number;\n /** Optional user-facing label; falls back to a generated one. */\n label: string;\n /** Raw clause object for advanced consumers. */\n raw: Record<string, unknown>;\n}\n\nconst ITEM_KEYS: JamlItemType[] = [\n \"joker\",\n \"voucher\",\n \"boss\",\n \"tag\",\n \"tarot\",\n \"planet\",\n \"spectral\",\n \"consumable\",\n \"standardcard\",\n \"deck\",\n \"stake\",\n \"seed\",\n];\n\nfunction asArray<T>(value: unknown): T[] {\n if (value === undefined || value === null) return [];\n if (Array.isArray(value)) return value as T[];\n return [value as T];\n}\n\nfunction toStringArray(value: unknown): string[] {\n return asArray<string>(value).filter((v): v is string => typeof v === \"string\");\n}\n\nfunction extractNames(clause: Record<string, unknown>): { itemType: JamlItemType; names: string[] } {\n for (const key of ITEM_KEYS) {\n if (key in clause) {\n return { itemType: key, names: toStringArray(clause[key]) };\n }\n }\n // \"any\" is a wildcard catch-all supported by some JAML dialects.\n if (\"any\" in clause) return { itemType: \"any\", names: [] };\n return { itemType: \"unknown\", names: [] };\n}\n\nfunction parseClauseList(kind: JamlClauseKind, list: unknown): ParsedJamlClause[] {\n if (!Array.isArray(list)) return [];\n return list\n .filter((c): c is Record<string, unknown> => c !== null && typeof c === \"object\")\n .map((clause) => {\n const { itemType, names } = extractNames(clause);\n const antes = Array.isArray(clause.antes)\n ? clause.antes.filter((n): n is number => typeof n === \"number\").map((n) => Math.floor(n))\n : undefined;\n const score = typeof clause.score === \"number\" ? clause.score : 0;\n const label = typeof clause.label === \"string\" && clause.label.trim()\n ? clause.label\n : names.length > 0\n ? `${itemType}: ${names.join(\", \")}`\n : `${itemType}`;\n return {\n kind,\n itemType,\n names,\n antes,\n score,\n label,\n raw: clause,\n };\n })\n .filter((c) => c.itemType !== \"unknown\" || c.raw.label);\n}\n\nexport interface ParsedJamlFilters {\n deck?: string;\n stake?: string;\n must: ParsedJamlClause[];\n should: ParsedJamlClause[];\n mustNot: ParsedJamlClause[];\n all: ParsedJamlClause[];\n}\n\nexport function parseJamlClauses(jamlText: string): ParsedJamlFilters {\n let doc: Record<string, unknown> = {};\n try {\n doc = parseYaml(jamlText) as Record<string, unknown> || {};\n } catch {\n // Invalid YAML is handled gracefully; the engine will reject it later.\n }\n\n const must = parseClauseList(\"must\", doc.must);\n const should = parseClauseList(\"should\", doc.should);\n const mustNot = parseClauseList(\"mustNot\", doc.mustNot);\n\n return {\n deck: typeof doc.deck === \"string\" ? doc.deck : undefined,\n stake: typeof doc.stake === \"string\" ? doc.stake : undefined,\n must,\n should,\n mustNot,\n all: [...must, ...should, ...mustNot],\n };\n}\n\nexport function splitCamelCase(key: string): string {\n return key.replace(/([A-Z])/g, \" $1\").trim();\n}\n\nexport function normalizeName(name: string): string {\n return splitCamelCase(name).toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nexport function matchClauseToItem(\n clause: ParsedJamlClause,\n itemType: JamlItemType,\n itemName: string\n): boolean {\n if (clause.itemType !== \"any\" && clause.itemType !== itemType) return false;\n if (clause.names.length === 0) return clause.itemType === \"any\";\n const needle = normalizeName(itemName);\n return clause.names.some((n) => normalizeName(n) === needle);\n}\n\nexport function matchClauseToAnte(clause: ParsedJamlClause, ante: number): boolean {\n if (!clause.antes || clause.antes.length === 0) return true;\n return clause.antes.includes(ante);\n}\n\nexport function highlightClassForKind(kind: JamlClauseKind): string {\n switch (kind) {\n case \"must\":\n return \"j-glow--must\";\n case \"should\":\n return \"j-glow--should\";\n case \"mustNot\":\n return \"j-glow--match\";\n default:\n return \"\";\n }\n}\n\n/** Convenience matcher that maps the coarse decoder category to a JAML item type. */\nexport function matchMotelyItemToClause(\n item: { category?: string; displayName?: string },\n clause: ParsedJamlClause\n): boolean {\n if (!item.category || !item.displayName) return false;\n const category = item.category as JamlItemType | \"playing\" | \"consumable\" | \"unknown\";\n const itemType: JamlItemType = category === \"playing\" ? \"standardcard\" : category === \"unknown\" ? \"unknown\" : category;\n return matchClauseToItem(clause, itemType, item.displayName);\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport type {\n MotelyJamlyzerSeedResult,\n MotelyJamlyzerAnteResult,\n MotelyItem,\n} from \"motely-wasm\";\nimport {\n MotelyBoosterPack,\n MotelyBossBlind,\n MotelyTag,\n MotelyVoucher,\n MotelyDeck,\n MotelyStake,\n} from \"motely-wasm\";\nimport {\n JamlGameCard,\n JamlVoucher,\n JamlTag,\n JamlBoss,\n} from \"./GameCard.js\";\nimport { StandardCard } from \"./StandardCard.js\";\nimport { decodeMotelyItemToJamlCard, decodeMotelyItem, type MotelyRenderableCategory } from \"../decode/motelyItemDecoder.js\";\nimport {\n parseJamlClauses,\n type ParsedJamlClause,\n type JamlItemType,\n matchClauseToAnte,\n highlightClassForKind,\n normalizeName,\n} from \"../lib/jaml/parseClauses.js\";\n\nexport interface JamlyzerViewProps {\n result: MotelyJamlyzerSeedResult;\n deck?: MotelyDeck;\n stake?: MotelyStake;\n /** Maximum ante number to display in the rail. Antes 0–39 are valid in Balatro. */\n maxAnte?: number;\n /** Raw JAML text used to derive clause identities for highlighting. */\n jamlText?: string;\n /** Pre-parsed clauses (alternative to `jamlText`). */\n clauses?: ParsedJamlClause[];\n /** Per-should-clause tally values, in JAML order. */\n tallies?: number[] | Int32Array;\n /** Called when the user hovers a clause in the scoreboard. */\n onHoverClause?: (clause: ParsedJamlClause | null) => void;\n}\n\nfunction splitCamelCase(key: string): string {\n return key.replace(/([A-Z])/g, \" $1\").trim();\n}\n\nfunction packDisplayName(pack: MotelyBoosterPack): string {\n return splitCamelCase(MotelyBoosterPack[pack]);\n}\n\nfunction bossDisplayName(boss: MotelyBossBlind): string {\n return splitCamelCase(MotelyBossBlind[boss]);\n}\n\nfunction tagDisplayName(tag: MotelyTag): string {\n return splitCamelCase(MotelyTag[tag]);\n}\n\nfunction voucherDisplayName(voucher: MotelyVoucher): string {\n return splitCamelCase(MotelyVoucher[voucher]);\n}\n\nfunction deckDisplayName(deck: MotelyDeck): string {\n return splitCamelCase(MotelyDeck[deck]);\n}\n\nfunction stakeDisplayName(stake: MotelyStake): string {\n return splitCamelCase(MotelyStake[stake]);\n}\n\nfunction ItemCard({ item, scale = 0.85, highlight }: { item: MotelyItem; scale?: number; highlight?: string }) {\n const resolved = useMemo(() => decodeMotelyItemToJamlCard(item, scale), [item, scale]);\n if (!resolved) return <div className={`j-game-card j-game-card--unknown ${highlight || \"\"}`.trim()}>?</div>;\n return (\n <div className={highlight || undefined}>\n <JamlGameCard type={resolved.type} card={resolved.card} hoverTilt />\n </div>\n );\n}\n\nfunction itemTypeOfCategory(category: MotelyRenderableCategory): JamlItemType {\n switch (category) {\n case \"playing\":\n return \"standardcard\";\n case \"joker\":\n return \"joker\";\n case \"tarot\":\n case \"planet\":\n case \"spectral\":\n return category;\n case \"consumable\":\n return \"consumable\";\n default:\n return \"unknown\";\n }\n}\n\nfunction buildMatchMap(clauses: ParsedJamlClause[]): Map<string, ParsedJamlClause[]> {\n const map = new Map<string, ParsedJamlClause[]>();\n for (const clause of clauses) {\n for (const name of clause.names) {\n const key = `${clause.itemType}:${normalizeName(name)}`;\n const list = map.get(key) ?? [];\n list.push(clause);\n map.set(key, list);\n }\n }\n return map;\n}\n\nfunction selectHighlight(\n itemType: JamlItemType,\n name: string,\n ante: number,\n matches: Map<string, ParsedJamlClause[]>\n): string | undefined {\n const key = `${itemType}:${normalizeName(name)}`;\n const clauses = matches.get(key) ?? [];\n const matching = clauses.filter((c) => matchClauseToAnte(c, ante));\n if (matching.length === 0) return undefined;\n // Prefer should, then must, then mustNot for the glow color.\n const primary = matching.find((c) => c.kind === \"should\") ?? matching.find((c) => c.kind === \"must\") ?? matching[0];\n return highlightClassForKind(primary.kind);\n}\n\nfunction PackSection({\n pack,\n ante,\n matches,\n}: {\n pack: MotelyJamlyzerAnteResult[\"packs\"][number];\n ante: number;\n matches: Map<string, ParsedJamlClause[]>;\n}) {\n return (\n <div className=\"j-inner-panel\" style={{ marginBottom: \"var(--j-space-md)\" }}>\n <div className=\"j-flex\" style={{ alignItems: \"center\", gap: \"var(--j-space-md)\", marginBottom: \"var(--j-space-sm)\" }}>\n <span className=\"j-text j-text--body\">{packDisplayName(pack.pack)}</span>\n <span className=\"j-badge j-badge--blue j-badge--sm\">{pack.items.length} cards</span>\n </div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {pack.items.map((item, i) => {\n const decoded = decodeMotelyItem(item);\n const highlight = decoded ? selectHighlight(itemTypeOfCategory(decoded.category), decoded.displayName, ante, matches) : undefined;\n return <ItemCard key={i} item={item} highlight={highlight} />;\n })}\n </div>\n </div>\n );\n}\n\nfunction PullsDrawer({\n ante,\n matches,\n}: {\n ante: MotelyJamlyzerAnteResult;\n matches: Map<string, ParsedJamlClause[]>;\n}) {\n const pulls = ante.pulls;\n const groups = [\n { title: \"Judgement Jokers\", items: pulls.judgementJokers },\n { title: \"Wraith Jokers\", items: pulls.wraithJokers },\n { title: \"Emperor Tarots\", items: pulls.emperorTarots },\n { title: \"Purple Seal Tarots\", items: pulls.purpleSealTarots },\n { title: \"Sixth Sense Spectrals\", items: pulls.sixthSenseSpectrals },\n { title: \"Seance Spectrals\", items: pulls.seanceSpectrals },\n { title: \"Riff-Raff Jokers\", items: pulls.riffRaffJokers },\n { title: \"Rare Tag Jokers\", items: pulls.rareTagJokers },\n { title: \"Uncommon Tag Jokers\", items: pulls.uncommonTagJokers },\n { title: \"Legendary Jokers\", items: pulls.legendaryJokers },\n ].filter((g) => g.items.length > 0);\n\n if (groups.length === 0 && pulls.voucherSequence.length === 0) return null;\n\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Pulls</div>\n {groups.map((group) => (\n <div key={group.title} className=\"j-inner-panel\">\n <div className=\"j-text j-text--label j-text--grey\" style={{ marginBottom: \"var(--j-space-sm)\" }}>\n {group.title}\n </div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {group.items.map((item, i) => {\n const decoded = decodeMotelyItem(item);\n const highlight = decoded ? selectHighlight(itemTypeOfCategory(decoded.category), decoded.displayName, ante.ante, matches) : undefined;\n return <ItemCard key={i} item={item} highlight={highlight} />;\n })}\n </div>\n </div>\n ))}\n {pulls.voucherSequence.length > 0 && (\n <div className=\"j-inner-panel\">\n <div className=\"j-text j-text--label j-text--grey\" style={{ marginBottom: \"var(--j-space-sm)\" }}>\n Voucher Sequence\n </div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {pulls.voucherSequence.map((voucher, i) => {\n const name = voucherDisplayName(voucher);\n const highlight = selectHighlight(\"voucher\", name, ante.ante, matches);\n return (\n <div key={i} className={highlight || undefined}>\n <JamlVoucher voucherName={name} scale={0.75} />\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction EventsSection({ events }: { events: MotelyJamlyzerSeedResult[\"events\"] }) {\n const rolls = [\n { key: \"luckyMoney\", label: \"Lucky Money\", values: events.luckyMoney },\n { key: \"luckyMult\", label: \"Lucky Mult\", values: events.luckyMult },\n { key: \"cavendish\", label: \"Cavendish\", values: events.cavendish },\n { key: \"grosMichel\", label: \"Gros Michel\", values: events.grosMichel },\n { key: \"space\", label: \"Space Joker\", values: events.space },\n { key: \"business\", label: \"Business Card\", values: events.business },\n { key: \"bloodstone\", label: \"Bloodstone\", values: events.bloodstone },\n { key: \"parking\", label: \"Parking Meter\", values: events.parking },\n { key: \"eightBall\", label: \"Eight Ball\", values: events.eightBall },\n { key: \"glass\", label: \"Glass Joker\", values: events.glass },\n { key: \"omenGlobe\", label: \"Omen Globe\", values: events.omenGlobe },\n { key: \"theWheel\", label: \"The Wheel\", values: events.theWheel },\n ].filter((r) => r.values && r.values.length > 0);\n\n if (rolls.length === 0) return null;\n\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Event Rolls</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {rolls.map((roll) => (\n <div key={roll.key} className=\"j-inner-panel\" style={{ minWidth: 120 }}>\n <div className=\"j-text j-text--label j-text--grey\">{roll.label}</div>\n <div className=\"j-text j-text--body\">\n {roll.values.slice(0, 8).map((v, i) => (\n <span key={i} className=\"j-badge j-badge--grey j-badge--sm\" style={{ marginRight: \"var(--j-space-xs)\" }}>\n {String(v)}\n </span>\n ))}\n {roll.values.length > 8 && (\n <span className=\"j-text j-text--micro j-text--grey\">+{roll.values.length - 8}</span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction ErraticDeckPanel({\n cards,\n matches,\n}: {\n cards: MotelyItem[];\n matches: Map<string, ParsedJamlClause[]>;\n}) {\n if (cards.length === 0) return null;\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Erratic Deck</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {cards.map((item, i) => {\n const resolved = decodeMotelyItemToJamlCard(item, 0.65);\n if (resolved?.type === \"playing\") {\n const name = `${resolved.card.rank} of ${resolved.card.suit}`;\n const highlight = selectHighlight(\"standardcard\", name, 0, matches);\n return (\n <div key={i} className={highlight || undefined}>\n <StandardCard\n rank={resolved.card.rank as never}\n suit={resolved.card.suit as never}\n enhancement={resolved.card.enhancements?.[0] as never}\n seal={resolved.card.seal as never}\n edition={resolved.card.edition as never}\n size={48}\n />\n </div>\n );\n }\n return <ItemCard key={i} item={item} scale={0.65} />;\n })}\n </div>\n </div>\n );\n}\n\nexport function JamlyzerView({\n result,\n deck,\n stake,\n maxAnte: maxAnteProp,\n jamlText,\n clauses: clausesProp,\n tallies,\n onHoverClause,\n}: JamlyzerViewProps) {\n const maxAnte = maxAnteProp ?? 39;\n const [selectedAnte, setSelectedAnte] = useState<number>(() => result.antes[0]?.ante ?? 0);\n const [hoveredClause, setHoveredClause] = useState<ParsedJamlClause | null>(null);\n\n const parsed = useMemo(() => {\n if (clausesProp) return clausesProp;\n if (jamlText) return parseJamlClauses(jamlText).all;\n return [];\n }, [clausesProp, jamlText]);\n\n const shouldClauses = useMemo(() => parsed.filter((c) => c.kind === \"should\"), [parsed]);\n const matches = useMemo(() => buildMatchMap(parsed), [parsed]);\n const activeMatches = useMemo(() => {\n if (!hoveredClause) return matches;\n const m = new Map<string, ParsedJamlClause[]>();\n matches.forEach((clauses, key) => {\n const filtered = clauses.filter((c) => c === hoveredClause);\n if (filtered.length > 0) m.set(key, filtered);\n });\n return m;\n }, [matches, hoveredClause]);\n\n const availableAntes = useMemo(\n () => new Set(result.antes.map((a) => a.ante)),\n [result.antes]\n );\n\n const anteNumbers = useMemo(\n () => Array.from({ length: maxAnte + 1 }, (_, i) => i),\n [maxAnte]\n );\n\n const ante = useMemo(\n () => result.antes.find((a) => a.ante === selectedAnte) ?? result.antes[0],\n [result.antes, selectedAnte]\n );\n\n const handleClauseHover = (clause: ParsedJamlClause | null) => {\n setHoveredClause(clause);\n onHoverClause?.(clause);\n };\n\n if (!ante) {\n return (\n <div className=\"j-panel j-text j-text--grey\">\n No ante data available for seed {result.seed}.\n </div>\n );\n }\n\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-lg)\" }}>\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-md)\", alignItems: \"flex-start\" }}>\n <div className=\"j-ante-scroll\" style={{ display: \"flex\", flexDirection: \"column\", gap: \"var(--j-space-sm)\", maxHeight: 420, overflowY: \"auto\", minWidth: 72 }}>\n {parsed.length > 0 && (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-sm)\", padding: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--label j-text--upper j-text--gold\">Clauses</div>\n {shouldClauses.map((clause, i) => (\n <button\n key={i}\n className=\"j-btn j-btn--xs\"\n onMouseEnter={() => handleClauseHover(clause)}\n onMouseLeave={() => handleClauseHover(null)}\n style={{ width: \"100%\" }}\n >\n <span className={`j-btn__face j-text j-text--micro ${tallies && i < tallies.length && tallies[i] > 0 ? \"j-text--green\" : \"j-text--grey\"}`.trim()}>\n {tallies && i < tallies.length ? `${tallies[i]} · ` : \"\"}{clause.label}\n </span>\n </button>\n ))}\n {parsed.filter((c) => c.kind !== \"should\").map((clause, i) => (\n <button\n key={`other-${i}`}\n className=\"j-btn j-btn--xs\"\n onMouseEnter={() => handleClauseHover(clause)}\n onMouseLeave={() => handleClauseHover(null)}\n style={{ width: \"100%\" }}\n >\n <span className={`j-btn__face j-text j-text--micro ${clause.kind === \"must\" ? \"j-text--red\" : \"j-text--grey\"}`.trim()}>\n {clause.kind === \"must\" ? \"MUST \" : \"NOT \"}{clause.label}\n </span>\n </button>\n ))}\n </div>\n )}\n {anteNumbers.map((n) => (\n <button\n key={n}\n className=\"j-btn j-btn--xs\"\n data-pressed={n === selectedAnte}\n onClick={() => setSelectedAnte(n)}\n style={{ width: \"100%\" }}\n >\n <span className=\"j-btn__face j-text j-text--label j-text--upper\">\n Ante {n}\n </span>\n </button>\n ))}\n </div>\n\n <div className=\"j-flex-1 j-flex-col\" style={{ gap: \"var(--j-space-lg)\", minWidth: 0 }}>\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-sm)\" }}>\n <div className=\"j-text j-text--xl j-text--gold\">Seed: {result.seed}</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-md)\" }}>\n <span className=\"j-text j-text--body j-text--grey\">\n Score: <span className=\"j-text--gold\">{result.score}</span>\n </span>\n {deck !== undefined && (\n <span className=\"j-text j-text--body j-text--grey\">\n Deck: <span className=\"j-text--white\">{deckDisplayName(deck)}</span>\n </span>\n )}\n {stake !== undefined && (\n <span className=\"j-text j-text--body j-text--grey\">\n Stake: <span className=\"j-text--white\">{stakeDisplayName(stake)}</span>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Blinds</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-md)\", alignItems: \"center\" }}>\n <div className={`j-inner-panel j-flex ${selectHighlight(\"tag\", tagDisplayName(ante.smallBlindTag), ante.ante, activeMatches) || \"\"}`.trim()} style={{ alignItems: \"center\", gap: \"var(--j-space-md)\" }}>\n <span className=\"j-text j-text--label j-text--grey\">SMALL</span>\n <JamlTag tagName={tagDisplayName(ante.smallBlindTag)} scale={0.75} />\n </div>\n <div className={`j-inner-panel j-flex ${selectHighlight(\"tag\", tagDisplayName(ante.bigBlindTag), ante.ante, activeMatches) || \"\"}`.trim()} style={{ alignItems: \"center\", gap: \"var(--j-space-md)\" }}>\n <span className=\"j-text j-text--label j-text--grey\">BIG</span>\n <JamlTag tagName={tagDisplayName(ante.bigBlindTag)} scale={0.75} />\n </div>\n <div className={`j-inner-panel j-flex ${selectHighlight(\"boss\", bossDisplayName(ante.boss), ante.ante, activeMatches) || \"\"}`.trim()} style={{ alignItems: \"center\", gap: \"var(--j-space-md)\" }}>\n <span className=\"j-text j-text--label j-text--grey\">BOSS</span>\n <JamlBoss bossName={bossDisplayName(ante.boss)} scale={0.75} />\n </div>\n </div>\n </div>\n\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Voucher</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n <div className={selectHighlight(\"voucher\", voucherDisplayName(ante.voucher), ante.ante, activeMatches) || undefined}>\n <JamlVoucher voucherName={voucherDisplayName(ante.voucher)} scale={0.9} />\n </div>\n </div>\n </div>\n\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Shop</div>\n <div className=\"j-flex j-flex-wrap\" style={{ gap: \"var(--j-space-sm)\" }}>\n {ante.shopItems.map((item, i) => {\n const decoded = decodeMotelyItem(item);\n const highlight = decoded ? selectHighlight(itemTypeOfCategory(decoded.category), decoded.displayName, ante.ante, activeMatches) : undefined;\n return <ItemCard key={i} item={item} highlight={highlight} />;\n })}\n </div>\n </div>\n\n {ante.packs.length > 0 && (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-text j-text--heading j-text--upper j-text--gold\">Packs</div>\n {ante.packs.map((pack, i) => (\n <PackSection key={i} pack={pack} ante={ante.ante} matches={activeMatches} />\n ))}\n </div>\n )}\n\n <PullsDrawer ante={ante} matches={activeMatches} />\n </div>\n </div>\n\n {result.erraticDeck && result.erraticDeck.length > 0 && <ErraticDeckPanel cards={result.erraticDeck} matches={activeMatches} />}\n <EventsSection events={result.events} />\n </div>\n );\n}\n","'use client'\n\nimport React from 'react'\n\nconst SUITS = [\n { char: '♥', kf: 'jaml-heart' },\n { char: '♠', kf: 'jaml-spade' },\n { char: '♦', kf: 'jaml-diamond' },\n { char: '♣', kf: 'jaml-club' },\n] as const\n\nexport interface JimboBalatroFooterProps {\n /** Fade the footer out */\n hidden?: boolean;\n /** Extra className */\n className?: string;\n /** Inline style override — e.g. `{ position: 'static' }` to opt out of the\n * default fixed-to-viewport placement when embedding outside the 320×568\n * MCP App frame. */\n style?: React.CSSProperties;\n /** Optional inline children */\n children?: React.ReactNode;\n}\n\n/**\n * Fan-site attribution footer with Balatro link. The \"Balatro\" in the name is\n * load-bearing — this footer is the public disclosure that the project is a\n * non-profit, rule-following, PlayStack-aware fan site. Always rendered;\n * required attribution for using Balatro art.\n */\nexport function JimboBalatroFooter({ hidden = false, className = '', style, children }: JimboBalatroFooterProps) {\n if (hidden) {\n return null\n }\n\n return (\n <div className={[\"j-footer\", className].filter(Boolean).join(\" \")} style={style}>\n <div className=\"j-footer__bar\">\n <p className=\"j-footer__line j-footer__line--wrap\">\n <span className=\"j-footer__chunk\">Not affiliated with LocalThunk or Playstack</span>\n <span className=\"j-footer__chunk j-footer__chunk--credit\">\n Made with{' '}\n <span className=\"j-footer__suits\">\n <span className=\"j-footer__suit-stage\">\n {SUITS.map(({ char, kf }) => (\n <span key={char} className=\"j-footer__suit-char\" style={{ animationName: kf }}>\n {char}\n </span>\n ))}\n </span>\n </span>{' '}\n for the <a className=\"j-link\" href=\"https://playbalatro.com\" target=\"_blank\" rel=\"noreferrer\">Balatro</a> community\n </span>\n {children ? <span className=\"j-footer__extra\">{children}</span> : null}\n </p>\n </div>\n <style>{`\n @keyframes jaml-heart { 0%{opacity:0;transform:scale(1)} 1%{opacity:1;transform:scale(1.45)} 3.5%{opacity:1;transform:scale(1)} 61.5%{opacity:1;transform:scale(1)} 62%{opacity:0} 100%{opacity:0} }\n @keyframes jaml-spade { 0%,61.5%{opacity:0} 62%{opacity:1;transform:scale(1.45)} 64.5%{opacity:1;transform:scale(1)} 71.5%{opacity:1} 72%{opacity:0} 100%{opacity:0} }\n @keyframes jaml-diamond { 0%,71.5%{opacity:0} 72%{opacity:1;transform:scale(1.45)} 74.5%{opacity:1;transform:scale(1)} 81.5%{opacity:1} 82%{opacity:0} 100%{opacity:0} }\n @keyframes jaml-club { 0%,81.5%{opacity:0} 82%{opacity:1;transform:scale(1.45)} 84.5%{opacity:1;transform:scale(1)} 95%{opacity:1} 96%{opacity:0} 100%{opacity:0} }\n `}</style>\n </div>\n )\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport type { MotelyJamlyzerSeedResult, MotelyJamlyzerAnteResult } from \"motely-wasm\";\nimport { JamlyzerView } from \"./JamlyzerView.js\";\nimport { decodeMotelyItem } from \"../decode/motelyItemDecoder.js\";\nimport {\n parseJamlClauses,\n type ParsedJamlClause,\n matchMotelyItemToClause,\n matchClauseToAnte,\n} from \"../lib/jaml/parseClauses.js\";\n\nexport interface JamlyzerBulkProps {\n results: MotelyJamlyzerSeedResult[];\n /** Raw JAML text; used to derive clause identities if `clauses` is not provided. */\n jamlText?: string;\n /** Pre-parsed clauses (alternative to `jamlText`). */\n clauses?: ParsedJamlClause[];\n /** Per-seed per-should-clause tally values, in JAML order. */\n tallies?: (number[] | Int32Array)[];\n /** Optional deck/stake applied to every seed in the bulk view. */\n deck?: number;\n stake?: number;\n}\n\nfunction pullItems(ante: MotelyJamlyzerAnteResult): MotelyJamlyzerAnteResult[\"pulls\"][\"judgementJokers\"] {\n return [\n ...ante.pulls.judgementJokers,\n ...ante.pulls.wraithJokers,\n ...ante.pulls.emperorTarots,\n ...ante.pulls.purpleSealTarots,\n ...ante.pulls.sixthSenseSpectrals,\n ...ante.pulls.seanceSpectrals,\n ...ante.pulls.riffRaffJokers,\n ...ante.pulls.rareTagJokers,\n ...ante.pulls.uncommonTagJokers,\n ...ante.pulls.legendaryJokers,\n ];\n}\n\nfunction seedClauseMatches(\n seedResult: MotelyJamlyzerSeedResult,\n clauses: ParsedJamlClause[]\n): Map<ParsedJamlClause, number[]> {\n const map = new Map<ParsedJamlClause, number[]>();\n for (const clause of clauses) {\n const antes: number[] = [];\n for (const ante of seedResult.antes) {\n if (!matchClauseToAnte(clause, ante.ante)) continue;\n const allItems = [\n ...ante.shopItems,\n ...ante.packs.flatMap((p) => p.items),\n ...pullItems(ante),\n ];\n const matched = allItems.some((item) => matchMotelyItemToClause(decodeMotelyItem(item) ?? {}, clause));\n if (matched) antes.push(ante.ante);\n }\n map.set(clause, antes);\n }\n return map;\n}\n\nexport function JamlyzerBulk({ results, jamlText, clauses: clausesProp, tallies, deck, stake }: JamlyzerBulkProps) {\n const [expandedSeed, setExpandedSeed] = useState<string | null>(null);\n\n const clauses = useMemo(() => {\n if (clausesProp) return clausesProp;\n if (jamlText) return parseJamlClauses(jamlText).all;\n return [];\n }, [clausesProp, jamlText]);\n\n const shouldClauses = useMemo(() => clauses.filter((c) => c.kind === \"should\"), [clauses]);\n\n if (results.length === 0) {\n return (\n <div className=\"j-panel j-text j-text--grey\">\n No seeds to analyze.\n </div>\n );\n }\n\n return (\n <div className=\"j-panel\" style={{ gap: \"var(--j-space-lg)\" }}>\n <div className=\"j-text j-text--xl j-text--gold\">Bulk Seed Analysis</div>\n <div className=\"j-text j-text--body j-text--grey\">\n {results.length} seed{results.length === 1 ? \"\" : \"s\"} analyzed\n </div>\n\n {results.map((result, index) => {\n const matches = seedClauseMatches(result, clauses);\n const isExpanded = expandedSeed === result.seed;\n const seedTallies = tallies && index < tallies.length ? tallies[index] : undefined;\n\n return (\n <div key={result.seed} className=\"j-panel\" style={{ gap: \"var(--j-space-md)\" }}>\n <div className=\"j-flex\" style={{ alignItems: \"center\", gap: \"var(--j-space-md)\", flexWrap: \"wrap\" }}>\n <div className=\"j-text j-text--lg j-text--white\">{result.seed}</div>\n <div className=\"j-badge j-badge--gold j-badge--md\">Score: {result.score}</div>\n <button\n className=\"j-btn j-btn--xs\"\n onClick={() => setExpandedSeed(isExpanded ? null : result.seed)}\n >\n <span className=\"j-btn__face j-text j-text--micro\">\n {isExpanded ? \"Collapse\" : \"Expand\"}\n </span>\n </button>\n </div>\n\n {shouldClauses.length > 0 && (\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-md)\", flexWrap: \"wrap\" }}>\n {shouldClauses.map((clause, i) => {\n const hitAntes = matches.get(clause) ?? [];\n const tally = seedTallies && i < seedTallies.length ? seedTallies[i] : undefined;\n return (\n <div key={i} className=\"j-inner-panel\" style={{ minWidth: 140 }}>\n <div className=\"j-text j-text--label j-text--grey\" style={{ marginBottom: \"var(--j-space-sm)\" }}>\n {clause.label}\n {tally !== undefined && <span className=\"j-text--green\"> ({tally})</span>}\n </div>\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-xs)\", flexWrap: \"wrap\" }}>\n {hitAntes.length > 0 ? (\n hitAntes.map((n) => (\n <span key={n} className=\"j-badge j-badge--green j-badge--sm\">\n Ante {n}\n </span>\n ))\n ) : (\n <span className=\"j-text j-text--micro j-text--grey\">no hits</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {clauses.filter((c) => c.kind !== \"should\").length > 0 && (\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-md)\", flexWrap: \"wrap\" }}>\n {clauses\n .filter((c) => c.kind !== \"should\")\n .map((clause, i) => {\n const hitAntes = matches.get(clause) ?? [];\n const color = clause.kind === \"must\" ? \"red\" : \"grey\";\n return (\n <div key={`other-${i}`} className=\"j-inner-panel\" style={{ minWidth: 140 }}>\n <div className={`j-text j-text--label j-text--${clause.kind === \"must\" ? \"red\" : \"grey\"}`} style={{ marginBottom: \"var(--j-space-sm)\" }}>\n {clause.kind === \"must\" ? \"MUST \" : \"NOT \"}{clause.label}\n </div>\n <div className=\"j-flex\" style={{ gap: \"var(--j-space-xs)\", flexWrap: \"wrap\" }}>\n {hitAntes.length > 0 ? (\n hitAntes.map((n) => (\n <span key={n} className={`j-badge j-badge--${color} j-badge--sm`}>\n Ante {n}\n </span>\n ))\n ) : (\n <span className=\"j-text j-text--micro j-text--grey\">no hits</span>\n )}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {isExpanded && (\n <div style={{ marginTop: \"var(--j-space-md)\" }}>\n <JamlyzerView\n result={result}\n deck={deck}\n stake={stake}\n clauses={clauses}\n tallies={seedTallies ? [...seedTallies] : undefined}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","'use client'\n\nimport React from 'react'\nimport { resolveJamlAssetUrl } from '../assets.js'\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const DECK_SPRITE_POS: Record<string, { x: number; y: number }> = {\n red: { x: 0, y: 0 },\n nebula: { x: 3, y: 0 },\n locked: { x: 4, y: 0 },\n blue: { x: 0, y: 2 },\n yellow: { x: 1, y: 2 },\n green: { x: 2, y: 2 },\n black: { x: 3, y: 2 },\n plasma: { x: 4, y: 2 },\n ghost: { x: 6, y: 2 },\n magic: { x: 0, y: 3 },\n checkered: { x: 1, y: 3 },\n erratic: { x: 2, y: 3 },\n abandoned: { x: 3, y: 3 },\n painted: { x: 4, y: 3 },\n challenge: { x: 0, y: 4 },\n anaglyph: { x: 2, y: 4 },\n zodiac: { x: 3, y: 4 },\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const STAKE_SPRITE_POS: Record<string, { x: number; y: number }> = {\n white: { x: 1, y: 0 },\n red: { x: 2, y: 0 },\n green: { x: 3, y: 0 },\n blue: { x: 4, y: 0 },\n black: { x: 0, y: 1 },\n purple: { x: 1, y: 1 },\n orange: { x: 2, y: 1 },\n gold: { x: 3, y: 1 },\n}\n\nconst SPRITE_WIDTH = 142\nconst SPRITE_HEIGHT = 190\nconst DECK_COLS = 7\nconst DECK_ROWS = 5\nconst STICKER_COLS = 5\nconst STICKER_ROWS = 3\n\nexport interface DeckSpriteProps {\n /** Deck name — case-insensitive, \"Deck\" suffix tolerated (e.g. \"Erratic Deck\" → \"erratic\"). */\n deck: string\n /** Optional stake name to overlay its sticker on the deck. */\n stake?: string\n /** Rendered width in pixels. Height is scaled proportionally from the 142x190 sprite. */\n size?: number\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * Balatro deck box sprite — optionally overlaid with a stake sticker.\n * Draws from the Enhancers.png atlas (deck thumbnails live in the bottom\n * two rows) and stickers.png for the stake band. Uses jaml-ui's\n * `resolveJamlAssetUrl` so consumers can override the asset base URL.\n */\nexport function DeckSprite({ deck, stake, size = 50, className = '', style }: DeckSpriteProps) {\n const deckKey = (deck || 'erratic').toLowerCase().replace(/\\s*deck$/, '').trim()\n const deckPos = DECK_SPRITE_POS[deckKey] ?? DECK_SPRITE_POS.erratic\n const stakePos = stake ? STAKE_SPRITE_POS[stake.toLowerCase().replace(/\\s*stake$/, '').trim()] : null\n\n const scale = size / SPRITE_WIDTH\n const displayHeight = SPRITE_HEIGHT * scale\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n width: size,\n height: displayHeight,\n ...style,\n }}\n >\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl('enhancers')})`,\n backgroundSize: `${DECK_COLS * 100}% ${DECK_ROWS * 100}%`,\n backgroundPosition: `${(deckPos.x / (DECK_COLS - 1)) * 100}% ${(deckPos.y / (DECK_ROWS - 1)) * 100}%`,\n backgroundRepeat: 'no-repeat',\n imageRendering: 'pixelated',\n }}\n />\n {stakePos ? (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl('stickers')})`,\n backgroundSize: `${STICKER_COLS * 100}% ${STICKER_ROWS * 100}%`,\n backgroundPosition: `${(stakePos.x / (STICKER_COLS - 1)) * 100}% ${(stakePos.y / (STICKER_ROWS - 1)) * 100}%`,\n backgroundRepeat: 'no-repeat',\n imageRendering: 'pixelated',\n }}\n />\n ) : null}\n </div>\n )\n}\n","import type React from \"react\";\nimport { type ReactNode, Fragment } from \"react\";\n\n/**\n * json-render — Zero-dependency JSON-to-React engine.\n *\n * A JsonNode is a plain JSON object describing a UI tree.\n * A Registry maps type names to React components.\n * render() walks the tree and returns React nodes.\n */\n\nexport interface JsonNode {\n type: string;\n props?: Record<string, unknown>;\n children?: JsonNode[];\n}\n\nexport type ComponentProps<P = Record<string, unknown>> = P & {\n children?: ReactNode;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Registry = Record<string, React.ComponentType<any>>;\n\n/**\n * Render a JsonNode tree using the provided Registry.\n *\n * Unknown types log a warning and render null (graceful degradation).\n * Each child gets a stable key from its index in the children array.\n */\nexport function render(node: JsonNode, registry: Registry): ReactNode {\n const Component = registry[node.type];\n\n if (!Component) {\n console.warn(`[json-render] Unknown type: \"${node.type}\"`);\n return null;\n }\n\n const children = node.children?.map((child, i) => (\n <Fragment key={i}>{render(child, registry)}</Fragment>\n ));\n\n return <Component {...(node.props ?? {})}>{children}</Component>;\n}\n\n/**\n * Render a list of JsonNode trees.\n */\nexport function renderList(\n nodes: JsonNode[],\n registry: Registry\n): ReactNode[] {\n return nodes.map((node, i) => (\n <Fragment key={i}>{render(node, registry)}</Fragment>\n ));\n}\n\n/**\n * Type-safe catalog builder.\n *\n * Just returns the catalog object as-is, but enforces types at compile time.\n * No runtime overhead. No zod. Just TypeScript.\n */\nexport function defineCatalog<C extends Record<string, { props?: object; description?: string }>>(\n catalog: C\n): C {\n return catalog;\n}\n","import { defineCatalog } from \"./engine\";\nimport type { BadgeTone } from \"./components/layout.js\";\n\n/**\n * Balatro Catalog — Component vocabulary for AI-generated UI.\n *\n * Type-safe at compile time. Zero runtime overhead.\n * The AI sees these names + descriptions + prop shapes.\n */\nexport const balatroCatalog = defineCatalog({\n // ── Layout ──\n Panel: {\n props: {} as {\n title?: string;\n subtitle?: string;\n variant?: \"default\" | \"accent\" | \"muted\";\n className?: string;\n },\n description:\n \"A framed panel with optional title. Use for grouping related content.\",\n },\n Stack: {\n props: {} as {\n gap?: number; // default 12\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"; // default stretch\n className?: string;\n },\n description: \"Vertical stack with configurable gap. The default layout primitive.\",\n },\n Grid: {\n props: {} as {\n columns?: number; // 1-4, default 3\n gap?: number; // default 16\n className?: string;\n },\n description:\n \"Grid layout for cards and results. Responsive: 1 col mobile, 2 tablet, 3+ desktop.\",\n },\n Text: {\n props: {} as {\n body: string;\n variant?: \"title\" | \"body\" | \"muted\" | \"accent\" | \"error\";\n className?: string;\n },\n description: \"Styled text. Use variant for semantic color, not manual color.\",\n },\n Spacer: {\n props: {} as { size?: number },\n description: \"Vertical spacer. Use instead of empty divs with margin.\",\n },\n Divider: {\n props: {} as { className?: string },\n description: \"Horizontal divider line.\",\n },\n Badge: {\n props: {} as {\n label: string;\n tone?: \"red\" | \"blue\" | \"green\" | \"orange\" | \"gold\" | \"purple\" | \"grey\";\n className?: string;\n },\n description: \"Small colored badge / pill.\",\n },\n\n // ── Status & Feedback ──\n SearchStats: {\n props: {} as {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n },\n description: \"Live search metrics panel. Shows seeds/sec, matches, status.\",\n },\n ErrorBanner: {\n props: {} as {\n message: string;\n onDismiss?: boolean; // if true, show X button\n },\n description: \"Error state banner. Dismissible if onDismiss is true.\",\n },\n LoadingPulse: {\n props: {} as { text?: string },\n description: \"Loading skeleton with optional text.\",\n },\n\n // ── Results ──\n SeedCard: {\n props: {} as {\n seed: string;\n score?: number;\n rank?: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n onClick?: boolean; // if true, seed is clickable\n },\n description:\n \"A seed result card. Shows seed code, score, jokers, highlights. Tap to expand.\",\n },\n SeedList: {\n props: {} as {\n seeds: string[];\n scores?: number[];\n total?: number;\n pageSize?: number;\n },\n description: \"Paginated list of seed results. Use when results > 20.\",\n },\n JokerBadge: {\n props: {} as {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n rarity?: \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\n },\n description: \"Small joker name pill with rarity color.\",\n },\n EditionBadge: {\n props: {} as {\n edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n },\n description: \"Edition badge with appropriate color (blue, green, purple, red).\",\n },\n\n // ── Game Cards (via jaml-ui) ──\n JamlGameCard: {\n props: {} as {\n type: \"joker\" | \"consumable\" | \"playing\";\n card: {\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n scale?: number;\n };\n },\n description: \"Renders a real Balatro card using jaml-ui's sprite system.\",\n },\n\n // ── Mascot ──\n JammyMascot: {\n props: {} as {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n size?: number;\n menuItems?: { label: string; action: string; tone?: BadgeTone }[];\n onMenuAction?: boolean; // if true, the mascot emits actions\n },\n description:\n \"Jammy — the whimsical seed-mascot. Tap to open an orbital menu of actions.\",\n },\n JammyOrbitalMenu: {\n props: {} as {\n items: { label: string; action: string; tone?: BadgeTone }[];\n radius?: number;\n },\n description: \"Radial menu orbiting a center point. Used by JammyMascot.\",\n },\n\n // ── Encyclopedia / Reference ──\n JokerCard: {\n props: {} as {\n name: string;\n showSynergies?: boolean;\n },\n description:\n \"Full joker info card: name, rarity, cost, effect, strategy, synergies. Queries the knowledge base.\",\n },\n SynergyCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Synergy guide card: jokers involved, setup steps, math breakdown, boss counters, difficulty rating.\",\n },\n BossBlindCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Boss blind info card: effect, category, threat level, counters, JAML filter string.\",\n },\n DeckCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Deck info card: effect, strategy, synergies, difficulty rating.\",\n },\n StakeCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Stake difficulty card: effect, strategy, difficulty rating.\",\n },\n StrategyAdvisor: {\n props: {} as {\n jokers: string[];\n },\n description:\n \"Takes a list of joker names and recommends strategies, warns about boss blinds, and suggests synergies.\",\n },\n});\n\nexport type BalatroCatalog = typeof balatroCatalog;\nexport type BalatroComponentName = keyof BalatroCatalog;\n\n/**\n * Extract the props type for a given catalog component.\n */\nexport type CatalogProps<K extends BalatroComponentName> =\n BalatroCatalog[K] extends { props: infer P } ? P : never;\n","import React from \"react\";\n\n/**\n * Layout primitives — Panel, Stack, Grid, Text, Spacer, Divider, Badge.\n *\n * All use CSS custom properties from jimbo-tokens.css.\n * No external classes. No BEM. Just inline styles + tokens.\n */\n\n/* ─── Panel ─── */\nexport interface PanelProps {\n title?: string;\n subtitle?: string;\n variant?: \"default\" | \"accent\" | \"muted\";\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Panel: React.FC<PanelProps> = ({\n title,\n subtitle,\n variant = \"default\",\n className = \"\",\n children,\n}) => {\n const bg =\n variant === \"accent\"\n ? \"var(--j-dark-blue)\"\n : variant === \"muted\"\n ? \"var(--j-surface-inset)\"\n : \"var(--j-surface)\";\n\n return (\n <div\n className={className}\n style={{\n border: \"2px solid var(--j-panel-edge)\",\n borderRadius: \"var(--j-radius)\",\n background: bg,\n padding: \"var(--j-space-4)\",\n boxShadow: \"var(--j-shadow)\",\n }}\n >\n {title && (\n <h3\n style={{\n color: \"var(--j-blue)\",\n fontSize: \"var(--j-text-lg)\",\n margin: \"0 0 var(--j-space-2) 0\",\n fontFamily: \"var(--j-font)\",\n }}\n >\n {title}\n </h3>\n )}\n {subtitle && (\n <p\n style={{\n color: \"var(--j-grey)\",\n fontSize: \"var(--j-text-sm)\",\n margin: \"0 0 var(--j-space-3) 0\",\n opacity: 0.8,\n }}\n >\n {subtitle}\n </p>\n )}\n {children}\n </div>\n );\n};\n\n/* ─── Stack ─── */\nexport interface StackProps {\n gap?: number;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Stack: React.FC<StackProps> = ({\n gap = 12,\n align = \"stretch\",\n className = \"\",\n children,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap,\n alignItems: align,\n width: \"100%\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/* ─── Grid ─── */\nexport interface GridProps {\n columns?: number;\n gap?: number;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Grid: React.FC<GridProps> = ({\n columns = 3,\n gap = 16,\n className = \"\",\n children,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap,\n width: \"100%\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/* ─── Text ─── */\nexport interface TextProps {\n body: string;\n variant?: \"title\" | \"body\" | \"muted\" | \"accent\" | \"error\";\n className?: string;\n children?: React.ReactNode; // allows wrapping text in spans\n}\n\nexport const Text: React.FC<TextProps> = ({\n body,\n variant = \"body\",\n className = \"\",\n children,\n}) => {\n const colors: Record<string, string> = {\n title: \"var(--j-gold)\",\n body: \"var(--j-grey)\",\n muted: \"var(--j-dark-grey)\",\n accent: \"var(--j-blue)\",\n error: \"var(--j-red)\",\n };\n\n const sizes: Record<string, string> = {\n title: \"var(--j-text-xl)\",\n body: \"var(--j-text-md)\",\n muted: \"var(--j-text-sm)\",\n accent: \"var(--j-text-md)\",\n error: \"var(--j-text-sm)\",\n };\n\n return (\n <span\n className={className}\n style={{\n color: colors[variant] || colors.body,\n fontSize: sizes[variant] || sizes.body,\n fontFamily: \"var(--j-font)\",\n lineHeight: 1.4,\n }}\n >\n {body}\n {children}\n </span>\n );\n};\n\n/* ─── Spacer ─── */\nexport interface SpacerProps {\n size?: number;\n}\n\nexport const Spacer: React.FC<SpacerProps> = ({ size = 16 }) => {\n return <div style={{ height: size, width: \"100%\" }} />;\n};\n\n/* ─── Divider ─── */\nexport interface DividerProps {\n className?: string;\n}\n\nexport const Divider: React.FC<DividerProps> = ({ className = \"\" }) => {\n return (\n <div\n className={className}\n style={{\n height: 2,\n background: \"var(--j-panel-edge)\",\n width: \"100%\",\n margin: \"var(--j-space-3) 0\",\n }}\n />\n );\n};\n\n/* ─── Badge ─── */\nexport type BadgeTone = \"red\" | \"blue\" | \"green\" | \"orange\" | \"gold\" | \"purple\" | \"grey\";\n\nexport interface BadgeProps {\n label: string;\n tone?: BadgeTone;\n className?: string;\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n label,\n tone = \"grey\",\n className = \"\",\n}) => {\n const toneMap: Record<string, { bg: string; color: string }> = {\n red: { bg: \"var(--j-dark-red)\", color: \"var(--j-red)\" },\n blue: { bg: \"var(--j-dark-blue)\", color: \"var(--j-blue)\" },\n green: { bg: \"var(--j-dark-green)\", color: \"var(--j-green)\" },\n orange: { bg: \"var(--j-dark-orange)\", color: \"var(--j-orange)\" },\n gold: { bg: \"var(--j-dark-orange)\", color: \"var(--j-gold)\" },\n purple: { bg: \"var(--j-dark-purple)\", color: \"var(--j-purple)\" },\n grey: { bg: \"var(--j-surface-inset)\", color: \"var(--j-grey)\" },\n };\n\n const t = toneMap[tone] || toneMap.grey;\n\n return (\n <span\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"2px 10px\",\n borderRadius: 999,\n background: t.bg,\n color: t.color,\n fontSize: \"var(--j-text-xs)\",\n fontFamily: \"var(--j-font)\",\n fontWeight: 700,\n letterSpacing: \"0.5px\",\n textTransform: \"uppercase\" as const,\n }}\n >\n {label}\n </span>\n );\n};\n","import { type FC, useState } from \"react\";\nimport { Panel, Stack, Text, Badge, type BadgeTone } from \"./layout.js\";\n\n/**\n * Domain components — SearchStats, ErrorBanner, LoadingPulse, SeedCard, etc.\n *\n * These are Balatro-specific UI components used by the json-render system.\n * All use CSS tokens and the layout primitives above.\n */\n\n/* ─── SearchStats ─── */\nexport interface SearchStatsProps {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n className?: string;\n}\n\nexport const SearchStats: FC<SearchStatsProps> = ({\n status,\n seedsSearched,\n matchesFound,\n seedsPerSecond,\n elapsed,\n className = \"\",\n}) => {\n const statusColor =\n status === \"running\"\n ? \"var(--j-blue)\"\n : status === \"completed\"\n ? \"var(--j-green)\"\n : status === \"error\"\n ? \"var(--j-red)\"\n : \"var(--j-grey)\";\n\n const statusLabel =\n status === \"idle\"\n ? \"Ready\"\n : status === \"running\"\n ? \"Searching...\"\n : status === \"completed\"\n ? \"Done\"\n : \"Error\";\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}\n >\n <div\n style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: statusColor,\n boxShadow: `0 0 8px ${statusColor}`,\n }}\n />\n <Text body={statusLabel} variant=\"accent\" />\n {status === \"running\" && (\n <span\n style={{\n animation: \"pulse 1.5s infinite\",\n color: \"var(--j-blue)\",\n }}\n >\n ...\n </span>\n )}\n </div>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(120px, 1fr))\",\n gap: 12,\n }}\n >\n {seedsSearched !== undefined && (\n <div>\n <Text body=\"Searched\" variant=\"muted\" />\n <Text body={seedsSearched} variant=\"title\" />\n </div>\n )}\n {matchesFound !== undefined && (\n <div>\n <Text body=\"Matches\" variant=\"muted\" />\n <Text body={String(matchesFound)} variant=\"title\" />\n </div>\n )}\n {seedsPerSecond !== undefined && (\n <div>\n <Text body=\"Speed\" variant=\"muted\" />\n <Text body={`${seedsPerSecond.toLocaleString()}/s`} variant=\"title\" />\n </div>\n )}\n {elapsed && (\n <div>\n <Text body=\"Time\" variant=\"muted\" />\n <Text body={elapsed} variant=\"title\" />\n </div>\n )}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── ErrorBanner ─── */\nexport interface ErrorBannerProps {\n message: string;\n onDismiss?: boolean;\n className?: string;\n}\n\nexport const ErrorBanner: FC<ErrorBannerProps> = ({\n message,\n onDismiss,\n className = \"\",\n}) => {\n const [dismissed, setDismissed] = useState(false);\n if (dismissed) return null;\n\n return (\n <div\n className={className}\n style={{\n border: \"2px solid var(--j-red)\",\n borderRadius: \"var(--j-radius)\",\n background: \"var(--j-dark-red)\",\n padding: \"var(--j-space-3) var(--j-space-4)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <span style={{ color: \"var(--j-red)\", fontSize: \"var(--j-text-lg)\" }}>⚠</span>\n <Text body={message} variant=\"error\" />\n </div>\n {onDismiss && (\n <button\n onClick={() => setDismissed(true)}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"var(--j-red)\",\n cursor: \"pointer\",\n fontSize: \"var(--j-text-lg)\",\n padding: 0,\n lineHeight: 1,\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n )}\n </div>\n );\n};\n\n/* ─── LoadingPulse ─── */\nexport interface LoadingPulseProps {\n text?: string;\n className?: string;\n}\n\nexport const LoadingPulse: FC<LoadingPulseProps> = ({\n text = \"Loading...\",\n className = \"\",\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n padding: \"var(--j-space-5)\",\n }}\n >\n <div\n style={{\n width: 16,\n height: 16,\n borderRadius: \"50%\",\n background: \"var(--j-blue)\",\n animation: \"pulse 1.5s infinite\",\n boxShadow: \"0 0 12px var(--j-blue)\",\n }}\n />\n <Text body={text} variant=\"muted\" />\n </div>\n );\n};\n\n/* ─── SeedCard ─── */\nexport interface SeedCardProps {\n seed: string;\n score?: number;\n rank?: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n onClick?: boolean; // semantic: card is interactive\n className?: string;\n}\n\nexport const SeedCard: FC<SeedCardProps> = ({\n seed,\n score,\n rank,\n highlights,\n jokers,\n edition,\n onClick,\n className = \"\",\n}) => {\n return (\n <div\n className={className}\n onClick={onClick ? () => navigator.clipboard?.writeText(seed) : undefined}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n style={{\n border: \"2px solid var(--j-panel-edge)\",\n borderRadius: \"var(--j-radius)\",\n background: \"var(--j-surface-inset)\",\n padding: \"var(--j-space-3)\",\n cursor: onClick ? \"pointer\" : \"default\",\n transition: \"var(--j-transition)\",\n position: \"relative\",\n }}\n onMouseEnter={(e) => {\n if (onClick) {\n e.currentTarget.style.borderColor = \"var(--j-blue)\";\n e.currentTarget.style.transform = \"translateY(-2px)\";\n e.currentTarget.style.boxShadow = \"var(--j-shadow)\";\n }\n }}\n onMouseLeave={(e) => {\n if (onClick) {\n e.currentTarget.style.borderColor = \"var(--j-panel-edge)\";\n e.currentTarget.style.transform = \"translateY(0)\";\n e.currentTarget.style.boxShadow = \"none\";\n }\n }}\n >\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {rank !== undefined && (\n <span\n style={{\n color: \"var(--j-gold)\",\n fontSize: \"var(--j-text-sm)\",\n fontWeight: 700,\n minWidth: 24,\n }}\n >\n #{rank}\n </span>\n )}\n <Text body={seed} variant=\"accent\" />\n </div>\n {score !== undefined && (\n <Badge label={String(score)} tone=\"gold\" />\n )}\n </div>\n\n {edition && <Badge label={edition} tone=\"purple\" />}\n\n {highlights && highlights.length > 0 && (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {highlights.map((h, i) => (\n <Badge key={i} label={h} tone=\"green\" />\n ))}\n </div>\n )}\n\n {jokers && jokers.length > 0 && (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {jokers.map((j, i) => (\n <Badge key={i} label={j} tone=\"blue\" />\n ))}\n </div>\n )}\n </Stack>\n </div>\n );\n};\n\n/* ─── SeedList ─── */\nexport interface SeedListProps {\n seeds: string[];\n scores?: number[];\n total?: number;\n pageSize?: number;\n className?: string;\n}\n\nexport const SeedList: FC<SeedListProps> = ({\n seeds,\n scores,\n total,\n pageSize = 20,\n className = \"\",\n}) => {\n const [page, setPage] = useState(0);\n const maxPage = Math.ceil((total ?? seeds.length) / pageSize) - 1;\n const start = page * pageSize;\n const visible = seeds.slice(start, start + pageSize);\n\n return (\n <Stack gap={12} className={className}>\n {visible.map((seed, i) => (\n <SeedCard\n key={seed}\n seed={seed}\n score={scores?.[start + i]}\n rank={start + i + 1}\n onClick={true}\n />\n ))}\n\n {maxPage > 0 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: 12,\n alignItems: \"center\",\n padding: \"var(--j-space-3) 0\",\n }}\n >\n <button\n disabled={page <= 0}\n onClick={() => setPage((p) => p - 1)}\n style={{\n background: \"var(--j-surface-inset)\",\n border: \"2px solid var(--j-panel-edge)\",\n color: \"var(--j-grey)\",\n padding: \"4px 12px\",\n borderRadius: \"var(--j-radius)\",\n cursor: page <= 0 ? \"not-allowed\" : \"pointer\",\n opacity: page <= 0 ? 0.5 : 1,\n fontFamily: \"var(--j-font)\",\n }}\n >\n ← Prev\n </button>\n <Text\n body={`${page + 1} / ${maxPage + 1}`}\n variant=\"muted\"\n />\n <button\n disabled={page >= maxPage}\n onClick={() => setPage((p) => p + 1)}\n style={{\n background: \"var(--j-surface-inset)\",\n border: \"2px solid var(--j-panel-edge)\",\n color: \"var(--j-grey)\",\n padding: \"4px 12px\",\n borderRadius: \"var(--j-radius)\",\n cursor: page >= maxPage ? \"not-allowed\" : \"pointer\",\n opacity: page >= maxPage ? 0.5 : 1,\n fontFamily: \"var(--j-font)\",\n }}\n >\n Next →\n </button>\n </div>\n )}\n </Stack>\n );\n};\n\n/* ─── JokerBadge ─── */\nexport interface JokerBadgeProps {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n rarity?: \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\n className?: string;\n}\n\nexport const JokerBadge: FC<JokerBadgeProps> = ({\n name,\n edition,\n rarity,\n className = \"\",\n}) => {\n const rarityTone: Record<string, string> = {\n Common: \"grey\",\n Uncommon: \"green\",\n Rare: \"red\",\n Legendary: \"gold\",\n };\n\n const editionTone: Record<string, string> = {\n Foil: \"blue\",\n Holographic: \"green\",\n Polychrome: \"purple\",\n Negative: \"red\",\n };\n\n return (\n <div className={className} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <Badge label={name} tone={(rarityTone[rarity ?? \"\"] as BadgeTone) || \"grey\"} />\n {edition && (\n <Badge label={edition} tone={(editionTone[edition] as BadgeTone) || \"grey\"} />\n )}\n </div>\n );\n};\n\n/* ─── EditionBadge ─── */\nexport interface EditionBadgeProps {\n edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n className?: string;\n}\n\nexport const EditionBadge: FC<EditionBadgeProps> = ({\n edition,\n className = \"\",\n}) => {\n const map: Record<string, string> = {\n Foil: \"blue\",\n Holographic: \"green\",\n Polychrome: \"purple\",\n Negative: \"red\",\n };\n\n return <Badge className={className} label={edition} tone={(map[edition] as BadgeTone) || \"grey\"} />;\n};\n","import type { FC } from \"react\";\nimport {\n JamlGameCard as JamlGameCardImpl,\n type JamlGameCardProps as ImplJamlGameCardProps,\n} from \"../../components/GameCard.js\";\n\n/**\n * Game Card wrapper — bridges json-render to jaml-ui's sprite system.\n */\n\nexport interface JamlGameCardProps {\n type: \"joker\" | \"consumable\" | \"playing\";\n card: {\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n scale?: number;\n };\n className?: string;\n}\n\nexport const JamlGameCard: FC<JamlGameCardProps> = ({\n type,\n card,\n className = \"\",\n}) => {\n return (\n <JamlGameCardImpl\n type={type}\n card={card as ImplJamlGameCardProps[\"card\"]}\n className={className}\n />\n );\n};\n","// The real Jammy mascot artwork (hand-drawn) — a big brown seed with a\n// green sprout and a jester/joker character peeking out from behind it.\n// Embedded as base64 (like fonts.css does for m6x11) so the published npm\n// package is self-contained and needs no consumer-provided /public asset.\nexport const JAMMY_SEED_MASCOT_DATA_URI =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAADotGlDQ1BJQ0MgUHJvZmlsZQAAeJyU+gdQWl30N4xqejE9McUUE5No7F1RBAVpFqoFBUUUFAuooGLFgmJDRcFesYGoWLD3Fkt6e9J77+1Jr5/P/yvzvffOnXfu2rP2+q219157zdlnzu+cmaOm9nYnNSoqYpW2mhqTFcPGIyDabtRA7bUv1DaoHVDbrqajpkkN4kQ5YbFuasvyf9v/Vb5cVVP/z142+i8X0tlrt1fA+jsA3tj2ykgtl//v+f+LrKfROUHL9v2ylgRFsWPU1NQzlzGWGxP1H76yjHc6mUNMl/FzNbWYrcvYTE0t9tuy3wcxd1qOczuW45bLeDn+6v5y/FcQg0pTU3tze3mtITs0ZHnO23XLWIMZERv0f+37X8UadJYnYdnGLet+NY4aXg2hBlHTXvYtl3uUGnS5aatFqbHV6GrBy/qfZakFLff/Rf/z/8NRajFqsWpUtYjlaOjyeMz/zIpZ9gKXUczyiLYabXmEszwzYtlLWPaD/gdxlpva/4+aLP+nJqha5PKqhOWdQtVC1Bj/k9VpOfJfJvr/1PhfPcZqhsvYXM10Wa2IPr7a/5/nwnSC/E9s5cr/GfgPY5c1bVm71dQ4r6OobOr/cyLLa/53/v+Z9/8l/xv//9/827Zt+1/Wr1jWtV/TlmXtcGY+N2EdJAfPalpPFbrQz2skijz8bm6ulkR6xW3DVhRhtu+yrcEjb+5Vr38IydNaamx3eHPQufmr3Vrtl62frdE6w/JF88LjYEWp8YCeuCNPX81wnxJ7rM/kQvfKQ8r1lfFrBMTNponlySFbXvBuc3S2TfFtw+g7vmZ7U7s124X6PqK9biIVTrz/gOS2y/whakWvs9+R9zXHQU+Or697b/dRTyyF2GD1fzQ5WcwYSVq2m6JNE1sfGjpaJMvL9QjWcMW2o8M7GyJ/5/M0t7NxGba7C2Nz44f2OiUURBK1SDzn4JUHivl6fsbaK3JwHvePvBV+dw891i/6Cf+td01y1/GuwZuKFcBk41dV72wbzYxqLS2nLNMb9psxbYCNaka37fY0KfQDgC9bAMe/HZSExBZnHGwOzck5fPBR+BOeStsqak1M5+F7MQfCjxwNTthOva3rlrraR/NERuZO7LAhIqcU9dX4hXAAetnslCgXVGYpF8/aGVnXlUGs7tgdruw3D3SQ16qZaDrK660MJqABDSq96BMPKfjyEX29AFHhX10y1Svzu94WumlSnF5BqGXUb4MhliqEZ7yS88ff0HQk0cgzyAKUOujua3U2czf8qU159ltHHKAkn2lfAdxS+I+NsyNLvMtyOzSjjG7KhXtUrjbagdKsRp7otcZ51daHW5l5l5XJLB4QxwtGzFp83/CLTaf99ePl5uyg7cxvVjaMSdpuWwTrF0nDziPmCv4E8Eail8sPUBzvkjPH6RH/PVjbeVX2XzsXRJTQ0toH9atoyhzrFlty0bgMs7+Ub7DZSYY2bn3uxMdsrusAj2L6Sv91YGMbhamAT/iA9Fo7sfeWOBOgym9z2AjYKMgyYNJpb6i/9xbonch5zFG4dSwFaY5ST7wM2e36JO2wgz2alimwbcdey4mzDCMcz/9i6u75ssjCkOP+Bb6tq8btN9xPZu62Gr5YdwHVjHAvHYAJEevyr8D2uJqmCZy7sWhODFzl9TWkDHneb5z8ztWHRvDY6H4lbMgtHesa9Rn2i2AQVwa+7rU/6bK9P5GdxrV+5ivItDUXkq9lTxt7kW6B5ANtZDB4QXnSZxzsIVP3+gxqq9+GpzvElaZiS8C/8vzQr6GQlD+YI8h7UU+xeNyeoFGCPjHb56HnIMUFZ0Mk0G+5uPrORxyBTvn9YANA+AAMFwaoDaQlfbVaS8OkYU0jQ08A8GO7GbmAA/0mIXLbM0okfb0NRKZHZVltqV/0m7GyLrUlxVh/zL3ge9ROmpzkuweyyNpJXufGCxjx1yc88XalrvKtwgQEtlBXINH03pBMiAuDw+wCXgsTsp/aXIogc4Xm9+IqrBamAmIHrNYNl8RILXVU6exc88BOp8jtxu2tP5l1hlcbshlRuuNlX4OtjdE53bR6C7tEAP2tAzqcE+IAX/JXhPLQXzz3h93yJLvrMJ3InvB/Iq8H3nRcYDeFGtsHxSyyTlo9zHC3cJxBZWwz7xyLT2eahQ5apoWZKHr3pFw1suwwTDyvf6cljHtDb3VdaozBsRgJMLpFd0M2L+qWiU28WrSB7U5GP5sM0SQLOA9QP/FX4o7iRlzPxocTZ2GqxDMUBvhc8gSdDDgtpJgpZqVCjFnoxLr8edP1w9a5dYbFfaO5dINPXfcFiSei2qoz5MeKmqhpBUcfVUNSXHXgxbuSUo9pZZ6I/3F8LOZa4ibzCHpEAtt+hshOHoctYNN5992RqPaMBc9gZ3rmXfI6h1eS36ZOc3OleqawSZTklQl6ZETCN9YagIpfGXb2nC4RGRzuSBfRThxqLSrM1X3WwMnXP3a6vDzbXmd9QYvg7nFqumZWj14yuyVz1ux30JPsIw7WPoBcV9h53JF8vts1F3CBJ8EWmlHz2rhofnct3fjfqcJasnHQ2KbaQ0alg1015w0VKkzNCYNyZWdVmP4R+buKGr3SJqsypa5DTYlk4niGZJNY+/j13B8lKL03vC3FBgbTUSnFwVa6Qa9KzoA0fELEUtga7KnSHNdylG6zwhC2kNwCNLw7/aLFxRA37tFy2EAw9Kv5sb6kr7e55kRDd2CTTO+f9r2N4bqfWroa7h3/1QCotzt+vkJaKzhuLJquidMdFsRVP9UvTzKq5pr4RW6q7rdWBe2r4YMIxDu1GGcG9mgn4YRycbRTob97FtQpPJE3kd+ZpQce8e0M1dUeWNEZemyg53wn+Oh4p3qnsU6r7GLnhiN5jSMdfke0azoUD45kl2rJ63QCC3a2Mo495R9tsdQHxQ+2mJpgWLgWA+ttgWdarBySvH+uC8+uzjLbOJD3MomwiVvwkj27ZakYH4badk4yQn2xU7tC6QvWvF8Tj4/Yd6JB17Vj/58mD9iVQ8pWDUfsETM5BIg++kOxyzZSd7H9lGWH/mKnm9k2o0td6oYnTd93y/SOWUz2vD0q336a9y53TnPTf4ypuZBZyo3co5MDZcXvgwnx9IL97SIR+c/BTEmH56rDWhUl7nVH2TUoBEZvRf0Dx1P6mEYY8J5hT7MfAGRi3QqyGjb7JPvXHGF5v63IuNXmdPsm/Zd2LR3+urFaPtxthZID2vEPspoPfkyyTh7UXkjdwKEcIfDRYYeObs3OD/hw3FWIJ5bqFYrKscEGppJCl/3GRyoY0Aoz0+oJkJOlRl22XZB1ZcNH67OAfY0/LHzs55vPmzwHSVqRhsVOTrLSE6hjzMjNErXjs1GT+Qd159jKDJLepdip+F/6RglhkZmGSJ5H8EbjrXxz8muTa9kvPNjmfkJbd2sre1ECYr/NAwnDUWiXX14DtHWwqJLbwsHva4ctcyCtDdZmajATaYfRCGK8aaM+02Qg+F2Vndm2kPfFbWYxoXdzVOaOEdtTRyw4URtifSzpMZvCr1hrxV8OZNsSeUSfEjtLvgXOHJiZPeRSBbYW4p03OL0VBYESnA+Lc+1ocG5ZvnUi8lllsLnSNbr6k8lWtG7ddoMhYK9/gFTDoYxSXbEIigm4LJp1cA8cyjYGnqI7peAdQkLz2XSwFauYIXfM49ApLhCfhJVeVc4jPCB6Bj7P34+MRb7IVjrddYXmLwC/upcXpdlOYDpKVJZK3KtSnumoR3L5HSMjRJPnv3J71HHvTfUfkBeIGuV9yH98ThRxEfdIwiwocisFlUhHAoJeRtqgHEPV6GmubiwJucPtXMxuDw30VALFLQO3njcB341/xw8Hn/P4nR1u7+ytnb/D+qMPrjDSfIlUVBxiPEN44X6+q9pTDf1ZpueFwLrW3fB4hQOVpRMW8f4Fz/DRHmf4Tnhz4m9uNQHp/zBiFaE26GHgVk9saI5PmTcnMhLX7aMXc9oljXQwcTX0sp9n6kaQNeUwXxtQG/BBMG51JPBB3lHT+oA2uNbAaep3BE2poFYi3rXeoHKRg3VXApAuW0tnKDzXX0IIBYaxT8/x8yS0xvzrh/CJDF3n/5pyzf9TwAraQ69pqiIMjzkQdDoKjyykM2KDnMZDUImOwNjQg7wrNoqwkxnd5peYHx1rx3ZGrneK7ZuOlEBWd+ayvkEOtQaxbCDY+hURK6A2pXlhq5wn8h0Y6Qj/1C6GOXo7mxfyzcMm2JHxw1eTnBw2E7DGgxMBoue727O2h3Pgiqg1Ub8d1aL5sfN2U5ydiV5WiUkaQMTU8SQGMGeYk/QY+Lz3c5LMYWOHTWIdcLiFluAKjK/bwz3gsEEyEksFfcl9xCmGHE2BsYuQhyIvcZIwIUHtnDOeW3ytYp77nsMfiZuimrhmxNsGv4OtS3gZ4Q9SJrVEF9neEhgADs80C+IAtmNRAo7t04EJAdk2tkc7C25zRzHGf2Sj03wgg2TdVVOU1muzTWyTygYYZn/kdTmEJOmmBEEtmfCU0y6MgAZeIvar913edS9vzO20635HULMZ8UHboAmZ6xh5wE+ivdYf5jxE2TYHJjCiLOuiYX1RlNXdvoMiTSsN5c/CLEtPeaVwyYLfqJu/0gJepZXrZJFYrJETYXUvSyv7IuBl/IHsUsewsEvZEsRh/8GcavRBL9dcDOEk+mHeC5+HSLIwndLnJKnAW+08qah4YRUxqax4Z/lz5FrFS0v+wPqKaxZvegjlLyxg7d1lfPPEljrJN7Oyero40SyjfGfJRrPRQsPiOUvvDN1iqm1ULKU4CfSI8ay4EcbyqytJcdvtCRMn4ebcv0mueePhVxs4FkHzj6XrLE5O/ZWesBCMOUjNLCwGW6Rm5pdV+xqemEcrHeqvmn2Vx9TFmVk3VtRuNJ2pHqjuMh0Uj1WNmPXmYapCLXelQqrCbLU4WlWdoOQQk6pHzqfJWdWdLpUejjWPsRvcxuQrzVoXFuQC83UzJ+Rys8fjbvISM/bQeXm06Zc+shxuGtn1TZZuqq6obe02CWyxbjllPFw/0nzG+F2FedOQiamooknLbHO2euNFC0FyZeMfG2q0edNRhwr6XFM8VE6KanZG7cRf7+oxebfY3w00jZvV7A4zpU9Yd1uZzA2f7lYzvtqf1nXd6FoPoKvcaG8Hq4toSJOFd+kYlDVSlCUGvjW4zgGDccnbDqZhc4Fz+wETdKaZYsx8T2KQ4l9r9Uh5+0rgSlpreyFkj6/V5jcFz3Jo27giu1TpDrr4CHf7LvPSn6yp3RsrPYOP7nlbM+jXqFXTwPTsPbil6TJ6SDtDtg51WAfSVgbVPvazvR0E1Hve6W2HN7io/GQtNv7ZDbXYbnamJ82EbVnY+9iAaIPo261bv8coa0m4tG84Oy9z1/7iPHAS+KB+AZsN1dYtPhoacXhMUhjQrCOtSCKKj/2oMcHST6Drn6AeGtxu2gEdNoa11IJqTedlQvvVFrw2qE2RNVmxaGkIIHQcMD0DBHbSjbDgbcoSfXXtel5gcZDO/tS6nMVjF/5jTF31zBSugx4p5whrq7620JV2ylBHxCJvMnomcSY8N4VWaLoNWdhU34WbWQPrfcEjtgXSUaCO3c+mK7ZNDuUtfVb2jjiZl9ltyFt5j3EmLKHthYGlPiCOX3bXkM5tLtQ3dko4mCU33ZWkk3zPjM07xwkyv8TfE6ZuSc4GB3RaH8vvJyJtYUXT2AN21eIHqFEHzfJZyENwSfUmh6sQq9qPdludzzfEWqciLBo9LHahJE3fTZrctrR4GXpbDrPQNW3WXyNtJXtsu6Km8rl229mtGffsvsbmJMTZP0zYGHnaIS6lJ5gBPpSB8AtxlAouem6DFOYfdi+HbS6SIHQQQDHFsQMVXCYARrt2V8ba5qA31RhZzmJj65RmGoS1DXlG1Y5/6FebNkEKg29WXYJ+CPlQonCWhE7m9sBCwj+l5cOhkdfjoPB7HGVEC3Jz/MEgDqo/+YvvoGtq+iie5b5GQHZNQH/KuwhbjTMtvAo2JwBKbO0+e7qUGlo/9I4s/8f8X5+ZKmeTPW7Jfsi2Ooyff47UEBtBGag8hjsR8LTYCjsZdCC7Hauk30+5gP0Q+pDjjHvCCg1dJGxkPwu462HJ/UgEeH5J7sOu9B5NP41K9vEXoCD3SJA8G4d2P1DBOMCbYi16bLWHqivuN50i2np86Ob7rvYyknuSjb2ZDXjyNuJi+SeykS+gqIR0yW9lliVpJmAskU5qozVGqZPdQzHB7X5i5gt/Lf9XHDPP1wGs+J3oI4G6KbqI+KDb6XccH9IZWZPA1SEHczE2QYyvwlbzAdord9OBDyEk9KjShdGDXdHKC53DIeruMOT45rLwkBsekILG4D9e5/nuwba+b7m3gumU1xFzwS9pUUE5IV9DTUjA0GRWOCE17C0n080+ghEfDUthqacYgA0j89Ij7UyjN2Udsjoa7YPQHLvPsUQC+27GhKD0Og1iJlGPWu7FfHM5V4eMWelmX8rmmKE3C/eyPbCR6cPR2z1xsTVRj3xpYeToXAomoIFdQQsmznDuhDJwe2LprL8uwXFDnLvQ4XjN+HiHkgRx8neb36kakENTs6lXIZ+GL6Q1Qi/1/pO25OzXfj4t07m3+XbqT5hDrQ+vGG4uyU7xQtzJ60rGuRxI/Zb0EbuD45m06MkJOZ1s5+vvb5Oyk7Lg5cM7SLuB/pOaEUZDtqb9jIyFHM6AxUDsp/O2gIJnIXl/QP+OyfOLwYEDFUIXx7Xd9PwKxy1tF/IuOW5tMs/tdwyvrs2BOumIN2ZjoWty5IIs2KMUh6yfroejVIIsHIlWKZB5pZIuZeuTZB7YnEDqand0bndwDHwmXz1cAn4mhtmrThIkNkCrCZUkA2g1DJFcAIJUpyVLQGvlfvF74DrZpFjD/pyUUvwHeLxSILoNHCg2F90A6wkOihIgqkT7oreIk6wdolj3BSpWdJGQ4HOqGEHMwE+X0Pz6XNvEU0FrnGOq2YCM+dM1lXaaU9Y11wA/R0/UbgE8GjhcCwGc7NGp6QEUtntWXwC4tNhW3QdsqbtX+QAQXPa+4oPdmsLGSnXga75bpa3ja65PxTvYq/C+SgfXPspg5RcciLipqtZrA+5wzUrSSlR9k5tN3OKBZhubn9OXm3Ns3o4NN3fazA6+bD5tU6Q63iy38VXuavployN3aYJav2yMb8y0/lWtks7aECUHpQ62lflIqYE9Li1POgC2j3kulTnHhPZJH7ps9s9vrMUc98ptyiY8xhxR3LHKX9rWXmy9Ztai/Z319vG/7b+szg5j2/9YJfT1tP+w0u7e2861fKdoVzy1HG6xUiAtU+q72nosr1b4tWlaWRRvlE9Z38z+LpcCjvGOyV85uHL2te2CCBkH2jIRX/34imi3Px7zqiMWjFMGKoTl3rkMVaclZdJB1Wy5YkShyrUoHziuirY40NOpOmx+rmOx96S5WNbaSzInNqb1XDQPrmH1cMxHSj27X1j4FPzqFlutzMJ0+9lEJf3sFtkXRqd2tzn2B8/1OMG+kpG7dkichdt3J5Qd4y/tJVbkJmXuu1etzcHt961TC2s9UNNwlwrUVm/m+jw6slZ2F+97NE6x5HZEd0WnE3zliYkuK/AXw/HuIeBuk6O9VNtY872qFMu/Vr59DmZFthb9KKNX9hoDVP2wA3XCKBFKe2MhKjv1iJWIwLutc0O8Mo57zLf0LGvt8QeV62kf9aQ1DLKugXrDCsKUkXtThNtzk7nWeLjM3Ez+wzHe8pFiAnjFZrYDDvC3m+wss17jcEqpMh91HOrqM4mC7u/+Zrji2LUsT8lLvWwBWwjQf599kX/WsCUvMPGt0ceCpOgFk5biw4wWM4wkkNJvYVxx0LvcyrW6DcOxPVhPQV63YzcyISTgUvO0w3uwT+uAHQeySu5vc8BZ3nbe4hTCon23KRXV0+FqtNU4nLe+8rrpB95n0XeL1tQLOUrr6P8Y0yY9M4h7wHYw+y3zhp1L/nVaDXB70QTpscOgOJMwBJ4q93VjQHSq1WA3nWvqDMHtCM2GJeBqVHjjHdt814nmDitN9OpWZ7NqLEOmND5iezN2tJ5t7x2XV/bYYYbLKhSAx+K/CVY48ZPUUo5AingJHAH0cgY3zBlmKPCg2sKb82qJN5EBhQLssEtwSYcLyC25jACdQjdXJoDisI9rcHZ5BHDdPeuTnpEN3y20vaWNwyYRzieYLi328H7m95r7yCnWX0mWS2qUOP+u6wN2Pd/c7WRsaMID95z4gSgX9MXk2yEuWEraZf98XFEW3QtM2JVbhi71+FDwEmnn9aV4ymmI+I/kh8NW37PlFwAryJerSFbb/D/VqMw0Medoo+3p+PP07iYHj4bgueq9ntdDfpVc9SoJU8+d9Y6PCEoTETUjX8eNEds5XCbbp4GbR6v1fZV0n7yT3JjGJPz2+5V5122QUpBrDwdSAwq0wF+DTEXJ9oW0m+IomxPBA2Wm5m0kKulJzzf/1X4abXMBr/wdpVPUp5STld6BdCpN9D6QGPQt2ymwNPhsSlngpbBITk+QlEUPq6CVsvGB6vR2rrrPQIhxEhu3xDidZuLyLGxzZqkzIrwkJxbEYprlfwZ0sH4WoSxHGJYeFkNrwnd6jnX5Rsi87siGWZHeXxq2s7b5pJSXM9+TDAvfMYv9XmdeZoZT4xKjmal0i6hwlmkoMUQUCWf6U4yieGyMNzV6Oq4V08PZlRSBUo/hp36GUGKX+B+A7Vzn7DobbEycu/34He5udGn//vgPmKsdrxNGsd9bRhKx+ON1bglKgrT0c8IxT2yBWXyat4JvHb+ddCV+S7x5AIbpFX+D5kvrTphnjJHrE78ySz23JwPY5u63Ukhxiwg7njhpv2NF6t/UUrui9FTEhZl9GT3IyyMC/g/U9d5fmdUuHe09mXddmc0Vy1c8uuZbJsz9uoTDn8EU5IP4h3Cs9JiMUa+g2EsZD0i24Wr8Vkom9UamF83B1ygrkHENf04wyZxy/Z59gV0Ns8m5zY0EmQp/QpPmLhXucw4YLyy8Bls3qFfUCpvubi+KgZ9oe1NkBy9vOlzYhaBWpy3fSTli7YJoF0wurUDDLZv3tQCAk3KABYFelxiQwqOkEMrBwtkAB+9PRaO0Euwd0ffQbtTfEizrDwRX+gv8Y3F9+ZDj18nAClMnwnBvhdJpVPWj4i1kq3JLRSHEViavsIDQpOByAVSjsqzsHPRJcVGZAI7P3lPmh+Im7yzrQ6tHjZTvIoTRDcqlRBD5RQWZ/MTzdGU61QodVn0i+CQcW0dykC/6NewAeU4faBCDEkdbG16DSgdYUgSop8dOqgmabic3DIOWWlANRNCt+vX1/4Cx5dn1TuALRb/qzaCszJx6H4RpAqF+0TWXZdOAwJ6nPm+Y8Wz1fS8V++4nXGza5l/lWtfyyR6/pJLtt/9n9phsCagxniTXBK4bSpFTgKtUAnkicKUSL98J3CSPlimBOxuLZAggsfpJ6xPgDUlJqxS0WghvbXfMSf/W+sNZzN0i80HtjTghm0YTA0LlHYRdxDuK1URT7K7OAgDwVKsyDNA9V9a1F/Bp4n0XAXB9RKsrG9Dfj+vqB4i687oiAUXtO7p2A0pbkpQjgOr6O8oYuz0VU0ozu7pimXIdcFfuxs6/Dh9S+5T+EHLsDuU1+O8wZhfGTZPC7eZjF71w/X3WD06/G0DYxM0jB77Zak51DOra/Dv6ZNDFZmQQMMiwie8VD2JssJ2Ng6ttkHLUQL8NqPHNAM2GVvNxwNTmZJlG/7vl74C9/XcAfwRx/c+Bh1JYAyvBNzgOAz7OiYzWQS1Unt+i1lwVWBR04EkNIMfgUFcdLO2g9ruGRu6HI5sbv0fe0wG3/AgePkpvA/tbHcd3BHml6RGVr9DvDdS6PyOvGpn0PoEITLf1WYK0zbgDwXaxliODJ6yf2n4bPGyRZf9q8JTpLtC9oZOGKh222FRCOr5bIsqf0tMvQ/HTTpyrSEnSNVhbvZ09ZYipvR9aZiRqyKRcM1E07yVuNAuWATCvLV60/UJdsMZ2IKF+ADXlSpAQuLGLYH8IvLGbbXPRabQny7LIGdjLM7OCN6nERosGx4TAikfGewo0i/pNTQonsw3ND4jqeZUWA+LjcauszErfMP2tVRVfafq25BoQiWrnXV+KPw/Majzn+i9otqUCJnXSkD0E90LH21qBRDit3cj2N/JnR4ZVo2tiZ6c5yP2r8qzxiEVE1pbaZmvvrAFJL0BTkC/Us2dmv+C3OqjnRSW2ghAFhGgu+K5onMF0ihDfp3RCt5TneGc5P6i6h2Ei7OuIyM+oXCkAku463lQI0kCvahHaZWKRMqjNanyO/KRFrscthYnJTeCulPJGIHgvb1NlJ2QrL6040FmWKsp5jUD8x5hIcqYBVw9VkM1m/nG5n69BV3NDFw6Sye4vSsI8wjFdZRru9ripynz4Q8LHGpEj1+tEPQIYT7SWptku+Bo1Uax0yR4txmZ6iK2xBrLHLmGx3Pp4t3tx+PJjGAQXWjiL04z/KNDGdyX+SHEmVPIcODc8TqVfCXvk+TuLFKjvjc8N8HlK/FxwAvev70CxoSuSHC+56vzQH1f+C7w9wLxKab8u8Fjtfps1NEh9qPl1PDsiofOcZzdzTUsUMYq5UHvM15H1W1JIuh7Vn3/az4C9wDfzXx3LTzzifzq+M+o15WpyCMOceiJtNaU1MC4T5t1IU8vZjzlP5wkJKFIIXLQZuoqxKHZ1UIVRy/QBFhGQio+Wfv7bgsCqc1RLmm97Gg1Dj2kKDV4bPF+9M2QTA1EiClkMi8zlMxQRI2mZobAoE6566HOOgKUWdp9rRM+M0Eva5IdgtqXaeeax3vIh6J1Rh7PzEAnRDfkuTjs4toUD9h9iLha/tm4MY5JsR+JZOuS67mtRLn7V8n/ZWP986R72yYADFW0cC+oNkQcHRYsW/OHUh5ilKGLWhV3mvI95yioO14m9xTYNvBf3NM7N9028dSKK4JlQzgt1Iya2Z4zCWpNeCSRgZAo7zwfA4q4j1E7GJlz21B/oTtbxSlMyUwjeJTJ1Xi6xtT6OF+3rVK7FyyGvLczmMf2HMpW8hMDNiU28CbosaiK1LJTH8EtrYNoHuKd3RXcRRzOexQpw9vzvCW9cmFmbeAjogMAt4xRwml/gvmMuP4uFDh5NyLbA5KjCczyw3e2fclfj/ml+lJtA2FMbmuviIS11zD3hFSTMyflMHMpYzPlGnotXy3UOuM8cybOmTdBj8oGMaT+ZkBvxzSu2cG3UdQyuUBg7gyQXBSWpO6IL7yLFCy9EClT1xHRxlQt1aEWJ3NWxR1e83vW3AigOcTvVBBOnuT+sbhAHYJBimtgMty4PVPKRsD8tXWzofSW2XFxHdgsnSloCKIGi0gRaGcmqrI9R7bG9AhKx4Ha/Mo19wHm8/IxzwmlVlQ3s7vSmag04Y+Rp9SX4t747NSkIgXKwpgDxS76/ph+ZKk2qyUXRKq/WEF1ii+/VIN2kOStqSBiLlMGai4QxzoZaAjGbcaHOhSyjPK2HBrwhqhpKaBdx2Y3FYSbIrIZIp7AzWo1lkIzZlU35kN9jd5o1odjBwGYZVN7zuPm0s1r7veZRZ+8WSXOv83S9dnM2rLS8opkBTxKtaE5E6WU1Nk+5gZNMW/ww76JyW256OgWbtS75KP1GZR/8fnhpt70KLHK3lKeA/p7mtd0Cp8z1Kl6Cr0+ktYeA/w6T2184GvaBOgiONOWPjsOOPfJ37V+dVjfebb/tJK4BtF+AUEpXtt+EthZs6lgD+5cP7uCgwuLfd653B7GonZV4TtCg8rLXd1J190lyLvZLtxnw7BlWD8DBZB7Xi3eQTvn0nnZQjVJUjg5zA1GqPocrPamqfodf7Z9VApBp6xEVARTagFBBQJ8qGSoAOK+Ep0I6vsmzU6VD3qev6lsJvxJ3r6/I5UoEt38z5jKVOrDgkU48OBRop3P25LCJ3dzioRFz+/QZ0cic/ex47Oge+5GhytFw+w7V5GijfbNyZjTD/mSb4SjT/nFT+SgKqF0rHQUCs8pejuoDP4mAoy6g0uyx0UzHKN6TsU3Q87EBY/uRDmHysefunhTrI4MNLaUbj75p3Co8d5zZdCvzoW5ty+Pka3pJcmpM1Qly+9qIdfqgzmdBOgb93Tm+VwzzVVvwHGN2v5bbZlOjwaNwfYvSwSuObMu6kb3AYoDz8JLtv8C2kRNWbHDriMx8PYQ4SjHO1D9aOVWpa3i7qlsEM5bXwHI2maJrT6deNnNvyOT6mNs1GbI+WsS0zNILLW/KK8gL1t7tIR5gW1TnZbcndpNdl+Bi4K8etmMc+FZvPfAzpFLVDeiDAfvqrEMQw/0ci1UuBwcAJgLTF+KNtT8ttcTjkiPWIsnTfIFtYpmYfxjwq+KfxGb7ndUctikQWmfEeOOQ1DBNIYJpTTe97Z12twoxRlB6217UWlhDuy2kGXm84wnIyGVRibA75e7RFW8TipF3p1uuxt3tyTLNtCUJkdJQe7FQVcECTS8z5pijrPCq4B0kVnSeZ+S8V2wdK4dll95j7odfq5ijbUJiqu+QKC576z4RNrqdkL51s0C7NGfBt2CDW7vBX/BN8mJglMcdhaHtO++N7ZVWUT64ji9m7Y6ILN2Weef1Weja/QjXLJlk0OWYIFbo4BaU/ZIvc/+Q55o4gLEQPo6ux7JFWxgNuGbxXsq/BFRZA/GE54rKc1iQ9/pabdQdH5P6P1A/0rZGD1Ak+Vuzj928/63WwzaHAj7LHlioo26khCtuujemZDUisR0p/1Y+J1TxGMUJnu9TM3I+Enf/x5g+9vwfXLqvT/YGVgxp+dFOXyLfKxD4BfgXFRt5lgSYSUbRYOrNCgDiQZC82tIpiJ5aOwt8HxLcsNP2Wqh+4w7Lbk+XmLJuJnEu5p3sM9k61r1+0j8/Dl5uErDARRdWBlolrBRsD4pLWpVCo8XxDsSQ6C3pkeGy4MXM6SADxvYcEmlLqCL/EwEYjiuSublFDIhB8NUsuzJ38JPIhcod9i7RBdX11qkBxeHsgS20gxHWnckhvhGPW9Ch95inaz6HZ0TqSPwjPkTdzZ9k/mLf4VuxxmIrEnGR9fGqaGrUxWQtxhe2V2piQA8njI8gPo4ZFizidGI/58250LncQorznvhvxaUgRCJFUmZ7nbk9cGL0dVRX0KPevxwM7ZziXGwtvavxStyLkA1VZdwXjLISs/jqsKlcr4Rg5qq0okStqAguOPE8R8GKTJrjagVDU9QSK/0deXSeo9fZ1LPplZiotNqsu8im9Nu5dRBDPrXADrgqwdU3ezo02Y50fag5VcdvX7dF2oL/AXl0RhLlaENhxt+ACxV4flMgT3SE/4C+RvAikxDSmzKb+ShcLwaadZM1FD4kuMi2DhrKfhZ7hayeC05I8GjJE6bg3fPyMemNcJXQLGsILMuS4n/Ou2T/9lCM78xb47Wy3zx/0BvSWSacJfq3HisY8RHVxRVqkrTLAgtF5PuFKwpPUySZ2CK1wP7EjiJ68P7oXaLo0MuMx8VtzDDqqpK/0Yd9ZiSkGBmeXeqQsNYVWHYoZQJaKfrqXrE0J96ELpyiSvwwCcPA0qvY2t4tZWdw59o1yivw75o+Vez3sKoJqcB4KiWsikzvnPyZCqWveoZ55Xa/U9yXlTXULJZBlZTuGKxTfYtxyz+5lhWR4e1eXxjZiF3RAIz5hfhcBUAdOIuuqXfxmY2t03A1GkuoP+z6auBAA8htqKujYcA9Wn5ZikYDpc+kVRhslZ30ArakxE16G9+YayP947krdaiR54OJTWgC+vmHjzXjqUeD8C1s+g7SWdkRxmsPclsNc7Pbjqb1sHtn5c0/4ZdPCluTEKKJZhkMuW3ogvwQsr73g7wDZd4xIH+PWmzVa0O4RNYntnFd2eWf2ybdBCJ621d0oWBa4YLTSn6nuOV5jP1ve5/PQGh4p4ZfbcC8Mpr6D/Fud2owABvavgW66tyGjnpoz/xfpaYzfIqkPO/cMPKkK9/5bz+32wMW1q3eHQ571TbVLYKzm9jd84jjNRM9G5HbSkU9vihwwfOeOlebzJReTfc/iY290zizqExVvVdmyLr+tb69/qDBtRQXj67eacd956L7NByli779KU4eM8kDMU4nx/cNakE2Dn4cnIN49U4OHYd0dh4bAkF3yfYOUaAZ0jVDWc66VYihfue7YtLQGzg0nzJ8AgnLwA43uLrEV4y4ohtYiaMWhGpazdgn4irfzyMPHIjnU0afgdYuvRo3AA3NiSYoYPIkY+IpOHmENMkCS/sRk5/AC91mU8cc1RWMKbIjqLl8KtKxrk44xXfSLP8wle/UXAybegB1ytWaPgazTmPNGCFU3LoZNdfvEcqZKewS9Zo+vfVZFdcwWb62+K3RRFtH7knj7vaY9HYT/86LCSEmN7odonVNs3trGVmmtH425bqZ6WC7d6a5wXAOJsdyw6gr6rxNzmgttM52aZwEqnLQG19jd8fRa9zPBgvVGp+xuA9bmNA0xZsZN7jVrbSol9qVHrVSNoYJlTZHmrdlcm2BrYbJdoA18t4YdcDLdotwe7vLnd3U9/afujf6qAHne75iCaAfKoULwEmrf6/zGmjGgCV4FRw2uN1+EPl48B9bD1fyEM/ysfvQ8DYzTxurynON/XaCqsiKEQdG9RbRevDumnvZQseyupupGk7ZUkLcaUhi0xArFtrQuo322/mtvJh8FA5TvCXkIg93HnILc/FT/oAfccvpjgN/Q3/vqQD24xC99QAKgauqtPrt2dWXZU5yeCdmt4icSOLumgTnMclq8UUErPREvj1Ko+xHhtIluBKYaOHKqO6MfugWVmfL6HePbyin2GN8m7je0dg/Ld8wEsJOOR7F8TykQEL3e9u2fwYRfAI7I+zOk1KVEzaufme7NS2cYMHCorYHKKSwumHerUv4pMIE87UAVtSAu1H4WPCBkCpS8YAeN0q+xbZ7rStNYpp7m1ZY0EjEmupDpHe+HnXHCR/JJ6Sr3B75qzcVwE9Srrb0OAqpclk2cCwos83U9he9THHNsgtNydqn9MObZOm1dHpOZMFrzYkfsvIkKpJY4CY08qNkT/Ar/VV52xKXKPNCRfTzgE9F4aEugYCSbQFvgs6VFvoco7MqpnDIkM3Vb11mGRfrFM7xYcKGT6A/EYZN6+2eMz+0rLSOJoJTDqjSyOopWMUEpSwlvTErsCPlfOVPegIPWBwYsieVlfOckfUfY4ZO8S9yB8LeC3oit0Vo504GNzADhJ3+2Mhtom1euVEycShmR/SXsgXkQ05SZQVkNHZ3jbZDRNy1uizb+KBkzuOhnhDvGI+uT2HjMX2yPubj2GP1tKi1cYCyL9FfuH6FeewXCZsEWzjXkjakJMe85a2NGYoDpx+PgHIzMslBv+PHs8vJ6okH8h562CdlF2LcNZJfFI/CH/K8JM2OD1Jny+PsjSKrw35PJHKOhiv7U+NsI9Cdm+KvRHxrvpX4lvmqJjs5IRIoWZ8yHr0iX8gr5ezgW6e6xc4npqRZx5+P7k33TN4cmpYxnQqgJmauysjzeZ7lnTWJdxXQc2NcCdnigk3On3I3ipJAlUlYasNsBa898OvIfPoCTb83OnM73VLhL9gSrNuIznYO4VcdziEyPhU/y90Rvj/XJPchk5omzlNEVXL5+cGcQdZNYVTc3+D3BfOJ2hTDIruUZu/noqX01VhhsVvWOlRaiWHOfYggu9zn++JonphEmPgpfEUWDx4rMvU73cUVlfrflhUW/6V8qE8umaJmlXeIa4M2FC2Jv9CLBSoJj2GaMlFqEs6NEZShWOciDMsj2btoERWDsb7k21WA+CueydWdyQVonZratJfwIrEa4dCZ4lKBB2/mZXmE59QostLOe0WfelUPUb+jo3rcB9RiVdPmG1WbUwshPS5tq33t11QQVhceAM7cV7cQ5JK4VB8VXBHNbRCEbQrlSR8x3amPmzqiOnzZLc4xQPxCa2x8o8t8Tb878vxA/QF0wjxBugpTP8FtDMRODo413cBv7X7R3E/QaXvSkuNh1DjbusszvNqhNdfrjJjf+oE4lPdcFkQ6kN4p3+dfz70qfxJoyCpUrKQvBg+0x4TaUzQ6OyO+ewd2V0XlYqAtIah3F2ZlNa5rFq3acl1vTz1UqNyKRsrab7rj+vAdd9B7Oy91JqKvylYrzTF1DceUzdgrFWNde/H6xYQuugcox7PrildV6pHuMl9irH9Pv79VxDbVZuqdoEt9SfQF0ouBotBvBGKnHHHoon5XJeLtEr8HjsydedGbizo8dk+VhOob1O7juKB73Pt+urxW/O6PdhU18/vfurnXnh6guDuUlQ7cRrsX6Q8ewrpkvRnMxP9N7hwK8hJydg6LfSdDl0at/ZMC3o9DA/945/QPOe++8HQQ63z51PTQQ1je3P0RX7jjpOGoFrx1uG/0IWJ7n/mYCMFXZoy9Rq6VY8c9kKLGvePdKEA1bWIT6puEMUFzNRf2T9S4W/OXJrUwJxN9p9bjf0SdmYZ514SQZ7eSzvjlj/12zL/oM9HnlHN6fooACZ8XzWyC/JmunF0F1RtLnO2CEgat53yhmT3P565BL3SYnEx2Xtvqc7LcubHB9OQLGKCSOQ+EPSwpnn+HWJuvtuCA/JSRvLjKtTMhY3EVpopVtXjfo5G21uJAR0d9gmWucn3ZF6umrpzCRmvXHoIg27pS5cALt37THxhHtDEeTGAdtQkdvkrPtzk6RvZbY/NnvNcjEwCZXOUOt5+flCN2OFyfgjsWO4ZMXQOOQc9PnQN4wEun1a0uo45P25ob2D5trW68a4+RBVdtdMDLg4trQXUKjVwcOL/9dvo6R7gSEn/T8Xx3R9SwE673cojCaabvo/8/EN+BMi8tKH1oPdoZJhzWRiIQkuF/nT65HB6pdHjkNjJ62C4coz9aa/0IFz121MIRpNVwsTXIyVaqVbvRebV0QJIC1298KdyASGk+yW9FxrS+TqKh9Nr8OAjUt/axMI7Lzc7vVKDr265fRIHbvZ5qrA76u0rNRRf7pW8/9A/+S/9O0F9P0wE1+ypvj4H7tvt8+IMyyyDnlCqmAoDcURXSUONqVHWp/Af6eLVPEQtTXksSXMGO1WfwXHAt0oE44PLr8hfmF0LlMmP2ejyR+5GNvWwUUo8V3lc6at2u+VxQusJLSbNdXY6ufjPdz4DnKW296gAf6rBqmxXV1VF8UbkWs0V8rnkU3yG+XP3N85dkg5hNBJcez3vuoyh7muHpO1e5I+Edqbk6LHqWPFQ7x3jq97D+PaWLUt24SNxHXdkCwboHTspSXQxoSW1E5w3BdooPoEuMzR2Jdp/Ctnb+tC4j2AjP92p7OwslbRYkTSG9odY/RFhSsZ0aK3xQxA+8XFggWKJtFUXzNOiAkq7Y8WB86TomPyS7PIv2l3G7yoncFhZbC/WYjtjWsME9i9nSSEX0R9o0+zotRZ1pdXTQZRfLjW1jyF1ZmwY+BzRlqXd+pflk3mkpCZnMvF+7O0yS5SQpiqgUmAq3Mc9mD/IFrJ+5vxI/RGkLA9kx0ajCT2Er2fHFydQ2zk9Jm8/T2PTyAfzRuA9VCte2+Kxac1hL4n//5EwlnZcq7JqCHyT3jd4Nu5081fudlZK8oMiMPpf8rHF7DCMlubItbpZnWAzjXkkNy7kTP/wfYyZu5vdxXyV5CmIi45Lrc4NCgCnvhLsom1O9i0y8AWntJVYYafrr0giUio+usIAuZt6seuDQzWZzeFPf43Q4V4YsEqpiNneNJGfH5MroqbDYHfVr03fGmZW1Zyi4jEI8n5agK1DLPJZ0OEWUBeRtjnkryElfE9GefYv/g6bK1Rc8Id/Pa8z97Gkj1CzY7f64QEckRMgK94q/OoFTfoWFz69NTwuHjTtktoff7XuSHR6R2tGQ28O0aPbNT2cZ1mgIP0cGiqcK90fr5kcUPuWA+ZZFNbF3E+Uifvx59qbi4aQrYXvFQF5vIE1Snf7G93bpn6yjBHT57pxiN+2KI0J9mFHuJareqYsFvoHMaXfR5qDOYUZJDm2iRyYh0ofb6kr/BndIs8r3M1ZW5lWYhNKLsysehQtzPlbKmdNpyVXiqHPctup0zmikbU1f3OkQUZ1pQhflTf3llKPEdGlYWhVubaNrJhNFLmX7fDi/vgJAWn/yalU/eff4QM0/flYDhnVX/RHK+IZ9FM/WVikoIK3upPRv4ObyXY0ng5qL7Josg7UEoU3nGW0pHc1j4ZdjRlvXsd5HVMg82Ovpq+RLsdZ+vgp6/EnP+vY3yRJ3WT0H9/zSUelTj91LkGaYZ//01pafXv8OP5BVEff2Tsiv+Oi0c9vu+R5r3qyYIeFqktoTyb2S+Q4r/0ihoONxwCy/ujMy6EJiq5IQcih6vEselhj6pAfKlAciVejog75hfY9ivuO+yXehj122VzAxx0+v6yjDfJtVKCNxW8ZOdl3Huw7o9BwjJHaxel55JMl5vbOeCdJkFc1rsOqo6g9xfYmyL9Pnc55Z/36ySTp84Aglhntq8ETgdda/Q4JgWsiKEXDoMOX4GIZ51YvVzXW1vnymd8xt95kTfVVu0ydzBoju7EmtwXC07vDaoVz04967w2GYho64kSNYRsudkYc433r9URaeX/5qbCVBJWoaI3o+yX44doMI4X2bWEMqjM2bzKZsiMBNbw5UBj2YXRsC9t02pEJ8vzwyokS+O7tvjIJSLuhObHfhTOMntVxXjJZN/nbN6f9n6p3rl+6D0wVuqW33ZizdtzaJZ867T9Y8myWiS0vHZ+9jBgvN5o7jvmcVzI161Cc3nfzH+yXHeMGYdCO0a2kt5RXlzBTLOefKlpkYmOjchjlr+IHFpyefwrmzTxeI8M6Je4t74L+GAxZvIbCqa0tCxKBy36n9SDvZr1PtyLPSi6f1UMLqVafzXOLFV8+sd70m1DmT6H6Ff/LsSmx3Yt7Zix4GUe/O/SVeCoba26vWNF9zUFe9qTFwGOn3FX8EHRn4lj8Msh7q58eBnEYqklxAVmNZnBMgjYnZsDOg/VMvAjsc/s7AfVc5pM3SsDfArbPjLjlO6+Y4zh7OgLmjYAeEzhzCXoW6Mxdku96tYC7I0tZJrXOr7CW0uZNW1wfbqswvc4Vbdr0ueAwf6+nNKkUcVtWkkBG0/lOxXgj54DXmDuS24de0UmTiqIJsgHwy9oyQ70IYb3MrcvOa2ADHoxETjo447NiEFDiA/zW5B7DHEzzJs/KGq8us2mkoA5mTdNiVK/taecA9W35N1IyuVrTl6GBiOvJTyzEvuw5xU7GgnuTIFNxmFSz4FG6pf7V/IL56gOa1h9AxmINO90wYwiGLvA8MfYH4+mgO14N2kcxHfOzYftmj6tYo1w1Sf+UzdK3UtfkFbkkaXv3No1R6T1zoFdJknH/EO75lRUYr0U2mn8gjPm8rZfN8ZtpPh971VXVeo2qTVF1LxAVyeQ8e2+JP681zqQo4qMp3bqFO9/mBvYKq+lH2fXTpgIFNKi69el2vs2dyVb38ss/OKo/6U+RjVZ3lBP8X1dDCe5SXtXsF7gET9XtT7lElUq/Yp4FJTXnM8aDWFjHtAe267Cy5LniDQt1jPMS//bF7ZahGJwtRGdat7HfKiGB3r3bYz3LrAdvW+dhKtAdgfgCxvONTwEWxb7MF7ZgYXV0bslKsEO9nLEre5xWHfi3ryVgd9rNiLuGf8GtV76LvR1yr1Q0FMc/VAwKOR9IaVxBLo2aaw3Cr2aDWGFctzozcDOYRC2+bBndxNdsH7WqprcK5kVn6V6FDT0zoQP4T+T0mJr+2gRb5XLi7/Db7oHCxyJ1jUsgTtMYgRCTellhuiX/st7gCSS7zNbep7C29OH6mMsaPlGhZg/NsSuqte4tmpsCkB5FK3unGv9BNaewWKPBVOCVzYtIpMi6TO+DOcc006RyKq8883GKZwM8k1QwlLWT+kRBS3AXr89/w9LL5fF4qJFeVtCktWriL3Z2uKMwLi814JnoZiMncJ573bcqKLqsnHBQMVsa5SXM0avbCx3Jn6kbBP2JPJ8fOfkhYTCaOIlIYyZDe62k1yYEKKp+fXCW9klWegq6MyI7g7S/WyDFPZeRM5dz+jzHzTPiV8XvzAwWQyDPC7py3IVcLfud7UC4VyQqtiNrFsaIX2NySHRKci1gMLX8DNU0/ysEsnsr8yOmbOpRjw7k4OJKP43zp8ig4H5Pc+q9II/ZAXXFxThywjFByhpteqCmOTQBlPZMYJ5mkNJe6pvyNBZQ1p51iGlSo8yX00EqCIMivs+pmLsvLrIYnxKJv1Y4XjSAuFWiEmZ8tEcWEfZlrFhPCc8cIpR8idvQdqtCN6Gu/X/mbGdukqOayMqvTawYiz4g9atujK/P16/w4Rfzt9TZx6xJHG7zjT7Pp0raklrDyJideZOC75o70GpJXy93Me4QzMrscjNuuigPUNRevVlsHqi/+rNMPvD812CAI+jU01NhC+9stbV4ZrCEfbqGEbGi40OrCiKl4JzMPvSf6JnscoZ5TKFewNNMQbaeiN3CnFPc5tyOFHRZx10I+dp5K6AjAdnmkGBBzuzvTlrDMxiM+rH9GWo6RdM+oyfrIurM/2u75rRkjt9f7/eh72mng/6jTV5lEudXS1dVM3Vq3otszsLqM0P2Hhipk9RQHV2Z97HUL1UxJVSVEmMR86F8VaRzxcSCBDaRDB3/FRvgFDFcnID3OKL4T/r36tfOHZ/FZRbevV8o8vjfNGzVpp3pO9Boi97v7wHvYA0G+tgrfwRiScZPeEJrsVb0w9MevXeI83EkJEh4fQVDb+ezRg7TCxOmxwBA522xiddj9MLOpNcx/AwOmp6J/+DirsBj6tYyBLVjCuX+GjHDExQMj5nj8dN5oFcFt1GDsigew7+z4J88DSsLEba81svLJc15vG85OJRA3VxZPa/nASuymW0kWufdn4H4+6YdnSwLo3Jdzt4IUkaB5/xCX4LuLF8O/k+bHVrtZXR2YcHPXOp86tc398hJ7+jXab7ZvloW+Mv5xLh7jO7T1JB/zpPfwfDC2of3+gi0us4WxuAIfVze6WEaQl1OXjDyeF/1eavbWzs47BfEJ5f04HUfuixWceRuAiDhyrpTWHKg1J0HKr/HnZ1ETF54sZrsYn84+pesSOe91espFMO1wps/l3qjibKGrW//7c36us91653e4RbQ9P7/ofryp9EIkemPN6QtXMaBSt4s+2JMF1Rc/4y9nCS/VeVKSX1yWEec4sH/SyDcYZVC/4d0KlPOt4evSDBh71K5yN6x57KpoCNY+EZGDhuVM/km9DiNNK7kvYeqz1lHbnN+dXM/Qh2nOZwf4O+cv+HtXOHMW3mJ0nIWL35FvkCcWPkHRLr0L0yCme9RCr10z5sOCyroBOaSCdNxwVVdJm265pfTlVLu7Y/ofljx0vzjIzmOijYbXpL9AE0d+JVxEB4y9iz6L7p94EtqBWTmlpF7CMKcLfc5gbs9Y487ggDM+rh74gRkKbJUHboYJFnplzUzYnyIOza62ueg+3NncNYgt7BxrTcN/UG6orfeI69Iq3e5Z3h0rzPYC9+7NXOfV3aeZdN/r4QCB88cbOkQMf+19ccQx6BUxeHSA9MJn1VgToc3XePyE2z2SbJwD/+u3crzJaT9lzYSuw3qq8USc7V38B9kplZbXAVlZm8RnjYzbICCh5CfK//hR5L+L4v0tFdOCF/6fOpp5kZSoruNxiZQ7PWxWQUCryjmYTPXpX+XPDDw6YOEVFbR50Bj9mpY6eAp1kH55CAi1CaEMTYPwofjhMLuVxGbp0oCcbCdFdFyn+ElXNQ0HIqR61Xtoz6XKktFgYtPmPJ8QePN8+mvGqtYHCa8ZhW2m7PWh1Hb3UEUYtBNL9Qq37TLwoUZodPfjIpiZPedcQ1kfe2WwliikigT+xDbtS7W3D9Cq3jhS839Q95ZBbbVv3y533Y0KEtxL3R3aUtpSoLi7a5AIJCFYCEQIhGAJkpBACBpcEjyBIMHdXdpCKS0V6vv+v8+8797P7Hn3/rK/7GvNdc15zvxmXUtmzTHr0+E8lGZTOumuSPnG2vGyoBTS7vsMpN1NaQNOpkvEvfbbzFhBD/uvUNuRpICcrAlId6At451vH0gjZ9VVHqzNOmCrAAnJVzEthJYVfNbPC1YvAr/YgDGKBU+VELYlgQ9fuNck/m4ke7cm6lXd9Ism8YpsApdJTtl8SCwpNf1yUF7ic1IJ7ERSDu4+XDVFJ2IAoULWgnUjvqU5BvwM4WdEe+Yg3ahIh61QAV3M0itcPRtodCUiiemsewu1m6WuHR2VmrejqeZPiXXn9YNn8YWc1uB6vGLZ6ZBjuJU8eJgarpk2FiGGx6Z6R7bGQuNFUHFxotHYKK/4xVAxdHjCFvRcdFCSGPByTFiKlZsUBkWm2SljJ9P1zPrwFzN7XxfFRmc9ftkXd4SR/dQITo1CtEND21G/GrGRmqjS6oPoCBS8GIIxQxFzhnE5qO8ZprG2UY2JPwlo9Ay+Iu5RjBEKEn8LG4y4RryF7wv8m2AeJ+G1TUogvnJaSdwmbVsHJHsmF5hopSST/fViUyfSsdqIqO8hd7sVMAshu/m+sa6IPu52fBWCWu5NMkIM5w8nxYU8ob9OOYFUJv9IdQ89TSwgHwxzwxDI9P8Qk/ILBQ42T78Wvc9fKyMck+sByqzDn3PA0RwIby1l6LJEjGEf43piu04+MR90tR+eJAKybl9KVQAFNcVQNkGJ1Z8yQkBdbGeqOxiUq5YlCtHO/EG/Aw1OnmJcDeoiNDOGYD7o+mwy4hkyL2cE+RkSknsvnO4bz8pG2bku5a1Hi9ldL1DEPjYrLWTGAvWn0wc8/wxXUTe94N3H6C3eR/j8nDvejLqAXFefCxXiedI+MwV/89N8c7L3FjQB29N2Civ9ZUm9RdEBm7jO4meg1sgJ9hPoVXhDiV/wu0B66SSizGu2PCnUyflq5YGIcGufqrtRO8ZPmXTHK+MZeZ+cOnv7C1Od3QULbFHn4SblkjGXmhrHMrgrsiS9vMUtkvW24q87LOt2Jcdjk+xeFexlRYypvu3jjdGuOQx0Db9Q6xCgEbTNiQd981utOwF966FY3wOrc7BqzEC6m4+zv1j7T4yXX7Bh9EdXIm3FO+9Wl9kiePtqrewUuPOcbrvRipI6GfusIs96M4cC5vEGPccPmXkNc86IFLnGYFfpONsmWXcj9Lvmo54FyJSWJJ9kiCbf0g/rC2htDax3+S1wg/par9dEmslM8rggc/mBj/WZ5iNdPxrTLECtz5p1LY83FLekWVbUKPImrfRLMfxl68v5ea3rNgAGu63M9kW6s8DULjvxjeCngzt+vp3klIUCdWS6usBnusQ9oIEaQq73vGdFz5z/afurTdOGxydWeTTD34PbrUNGbd0tgnxjY0Fbh41xfTO/E2VizWV0JZj8rvQTYkzL2Se6HcxYLIeeW+aMrPSeQYtNyqVeXyv9hIK+AzZPsVF9ZXbGEdf7txwhwYcGPV3K/cSGn3oUuhp30nXfTUkI2/Smhqt7SvTje4f7FPU7OrX6i/QH+W0D468lGwGD3a9zam8MVRg8LL87HGV4unB9RMNoD9N15JvRL2rpKMzEKPXZ2EHT8vjhsQJzTkz+uJ3l37B7EwRbWwhk6pXDd2/dV3ONiSXXdAeaEnMr9SybhVQfPSkePHlAt6VVgqCh29VmFNWtSxXkhTB13ds3wB9073cq++rqnu8KcG1/9UMYbqf9Kq37oJmPjmv3T/0EnZ89F15Y6sG6Hz7RNzwtfPSwyNhF+PpuhMF07beyGiMSB5G3afyVezXLzyS2Lim132SpQSz+gunFRnI0ydSw+UqolOnNlg2onuklPhyYYurduul+0ZQoeGG/ZfpeQLXQMtMS/DLINfcTdOuEWNAEWC0LKzlB4KMdmweCzHvNpgkV2ZX65ksV3EJpy+XKE4xga4PKbcqsjX/1iYR7tidqkjAFtvEcxfBjtml1XsHXbEENxf5PbReasjwK7PRabjgi7EZaWi1r7R15koYtDv48yVc5jtiWn88GnLJaRjSPuFS2/LofYRXJflXjYmtU/K2YYc9h78/ZdHzDts7Qcy4ruZaY4zJaGok/4xpffjiS4bpTeQ5e6iZfbRW47YatdfC+476P+9qZ6x5fV2Qj5XGz3slEyfN0fbWesZdKfdHzSG+F+ozHBJ9//z0fFDj452nWKTqnsaLLDrgZsgzzznv8YKnRfLwlWQspb3xW80bjXH1bCiKjRYC+RVbIFiCHXQ2Z8ztd+gG4y2/+3+/1qT+6MsquLeB5Vb45IPBQNe01A6RZI/pyFQyqCdWShUrVyj064TZGf9tY4nWJrla57uuQlVxY46+XdZshDGRnxac9A7fQNRLWoecYJdicIIUc3QjHoMZcU1h6sERedMB6cHFBguc4TLeI4LgA12SbWbkibpVMGK2EBJUd1K1ETpYfen4kzL5it2ad74/0RzxMwI+065z9kDaKccnP4A7yN9YtBJI8To1AOlPSUyRD/6TRCM3hRzPuoaHhn6iHkI4RoVl3IbURPxm6vl8jCTmXXItQhrlXbTeiCHkPzQbQ7Pzfr9tixAszX37DUIuvPG2CNiYWCErg70kJDfdDIxK2KoMiWAlRhU1RAQnmjL/R8IT1NAwGQBKSbmPVkh5iN3B7khciCnDC1FVYG9457XjgqVjFDFGv/bELmaOOvDjRrGtWvvEmjADjZGJKDlpPgySVW6pdEK6H3xCKR+njd7Wsx3BxEM4d3E/sr1IUIRt3lDVLPIB7TXuREIZXT/lO4sUqxZUlgghN0ZCkK/ExoQ+TjyakQ02TxxIbgakpK8lrbvWpH1J/2W1SzNJQ5gNphRnzBuyM0zTsyzwsJ8qoj0wgo2oFbQkPUZcb7ybBI8er3FOfRrYUFVM8UVI5F9NPohrSBzJeRiUmxmeqoevw4MzumPOoQCoPex/hSxvFx4CCst4QpryJjH+I550zsp+T8m00c8qTdUylc8XJp/VoSdohr4bmyScQ08IT6VBEEK+SGom4wt1H10bsLlPOlkTg8uZz6kNksvKZ/H+JGZZbGnqRaMwyCwNjnPL2/oeY+c9RbsHRBa7obf/MQi4m2ONN0R9cu6M6+zGhyjK/hEscNSygfQn8M/Yr+xTodt8p5jzIStCdRwAFNCIKRkDxVVtFA6CBYjL7KTiYmVoChxhmEkqfQZnJ4LI9wUcJwLJWGAlNLGciLJGsijHkDoRRdTmc6Muv5qMeuInXPkCv2tlyMrHqZnfyF7yYU8PFV7zdB01KZrybutTLX3hP8S5X3vdR5spXffUJLT9bY+h7oeBhLcp3ixHI8fY7l4bl3vJ3JcVzvwRewRXVVYJ+Ro7Vt0IN4AsNP4PfBC41RSNo3rtbTEN9nOX4EhGVVgMVdGermcPVcS7Swz6cf1wCuyl1V1yy2s42SLp8aKA2JrhiqlWattxU2JUt+9yVWdq8wx7StE5ekSeBLMs383pHdG9V8FnEPGzbA2wJvykIDYgL3tveAtbw+9oJCApw7+yahn+x49S32kbPbDUZ2W6MzLck253tTeQn2r1ur2jzs4M1Twia7XY4W+3b9uHlnzv3O1gWznT+dMTllHe1OU1k2gutXFyTe4U7bvvjjnSXeRxHT/dUeukgM/u8fB9DTg5c9nfwCRnMB0c6HWmrN6+fPdIhbfF67ErXC4u1/jThT8urXdd68Jb2/IHeMcuSBo++YauH1fP9/VbdpToDRdbCfM/BCJt+RsDQbbsT6eeG1uwDEhOG4x318Tkj952RKN9Rczd1OH/so6dGwPTEhs+yx+s+qGHfrOYAySh53GuIbbxvsHFEy9il+80ow7ikfdcY20SzeWecbTLGHZjwMk2oREyKm5kV/54cMVdnmU5FW+zLIk9ftnxM0ZtetYpM+DYTYEPHVs+a2P2JeDj33OlU0NT8mKsTUN34Ob+9osjkSWt3ob4JTqCZrWQCauenlZqc7rxPOmi83BWBjTNmCzkR4sa47mGYt7FjT0/AmLFc73uvPKOffcvOLKPufm8btpFE/4wpyaiwv06/xuRR3/ALU5PaPp/HQrOd3j8PeBaZjXbVAKvQxopiE2vnplbmXuvZlv0ZSTYiPO/EERspfgf+ts2tNonIIhtpQS6cb73ToQSSttnbGeb9xkaqq931qM0lYZvdZRsXIc+s0oYprHodZJstBLzE2jG78E9JDqJdmo/O2xpzztaO21dyjpVEOypyGlliToFcNJXhbFSXlzzjvF3/haDqotsYEgV3cWg2D9F10eTdAze66PEXfb1dktqs3OJd6gRC+2XXY4IBi2uu1oJtgwg3DUGgDs1dpe2rVrGHYVvyowUnycrD9eou/ApmubzbbAU/385jouJv1qKXTeUE+Y53UdVofJzPrRqbmDM+aZzdoRU+2XVPg076JDaE+yF91pqCPGx9r7WIO5J96S35VqLAcy0/ja4BhS30V7N+sS2AZ/P+ps05GhNuCyXnmvlej9nnqpA+34sTi9T93Ivh2YyAkOJ36QdBj9ntJDPwzVJ17EfwdFlORBVEtqIQtgO5VTUc6AuJq+ny3g9Z5dQ4L0F162RsGND5uh6TnSBavZr+qeCG+vsvtOCn660eU32heSP8WP8NVg1HC/wkV1DChU7kxrF2wa7mYqlWiN2s18lzIeF5FoRgpGX+G7QO8l1hKdI4dE/xJoQTKlEqDxQLZZZtu2WHHasQ2HuEbVROWlwOZ1f1GsxGfKgm6WyjHGuctEDgUoaC4E1wQ1ZXfT7iV9auioRQPi2+oCDiDs2APoY6SntLCYiqzCpPuIoeYFzBikZXZbeFf46RZE7CXGL08/YGvIspy9/xUsacLZx0AmPeFhOtb2On2d9NDuB3l77QC4jFllGf30LqpdV0dUdwKbea+6O6yKk1f2MqySdLruMupP7JDYs1JN/JXCdwKZLJGXFTadoE0/ik9O9oJaJq5hTyIhGWdRTCJC4xjgNlE8jZxW4qJBMmyC4lMZLlYV6flJMvY9CTIlmwo3MRPZxo36eFXSEB2iIItgmq9ZFEeyKxgpy4h4gv2EzWJQ4w3FJGErBpZ8n7SW4Jg+SxxEVsJQWVjI4oSJNOjYV9SQuncAJh6VfSS73KM45lmjtlZz6k+Vs/oVLoDBPbLPHsSb2L8bvwb4c0EpVw77qOpQzizrXoUt5jc2sjM4axL0vqqL3YHNaLrBjcGeo8PRS3nUJjGOO/xHkzFgkR0X7ZofF3Q0E5lgnG0GLmgUR/P4ncA8mp7i6sf1JJ9vl5DmnnLCD5XRmxBg0UVtTDMatMOxSnVzYrDSXb1pidFJnXoJH7NNK8EphnEOlZ+D6fFzmTTS8YQlHTvQqpUdTEJ0UG6D68TtH7f4kZUNyGvYZIZNfiI0H1JZ2EWu9fZXvie10elGuQnts0V5QkPzNh58SGqE8FsbJDJAchBVREZ5dIMQzh18IseYu4ypEqPwb/WZpS8RSBzAustAzZl2VW+Rt5k3ynCh9qTzxTbRRGwGjVnP0PMWvvovSCsznP0M3+A9x+zANPQL0rLt7RsmGLALW8zR4GLcxdK1sEfR5Vq6SA3vZU1xwHNbZ5cjRBtAZl7m9QReVWvS94f9GbBhi4jHms0RKSmHmp8TN0KvlRU0LwfYJxswWsCo1veYRwRdbwgMg5CJ/fEu7gO9tmhdJzO97+T7StbVYtwufSQnidrY/tOLNhzce/H9as6OPYEc6776PbzOYX+CTV/mz97DNb9rJtxzc5nyVYA5oxdrWz/JBpDzuM/LtJ4M4DgdG43M428L3Iia4FKBq+2H0BdiTwTQ8R8dmrp88gzMnxJw/gqrcY0Zrtajt5QzDraj1Y2jHp6iY068p2BbYe7z7jWlzf36PidrkK16vg1svW6BNx78/d7Bv26KQR+kFeN1KXB057E4g3Bt762mAuDHb4HQ6/MmwT8DWoe0QI7vRLHHMJ9nTbLay3u7YY1CO0g0/Z9bXZtQynD9TajfT8GrppN9v+YDjG7nszaARpD+Okjjrb/y3PG1N33FdIHVtyupkDH493RmRemrjs8imZPdHnhiP8ngz3iEP3T0G96pEBM898J8HYuUcB2t7PRpbMDRd3xg+aR0zXTfwyHxjlTfVZyPR3zey2IHcRZzotX7fKzcKt/mlInXtglVGzZ27Y+nmp8bybjXq+3/wP23OMoIUMu5fpFxdN7EmJjYu/HOH4/iWOcxYKs1zjZgUvXDXxrAmQs4rtuF2Tbs3rfFQSYE0QGrFeWYf0aNLMrdL7RFMirVD9pwh/LKcHnqEzLYcGviJplhuDBOh9y60hReAvy4yhTx5elo+GyxynLbxHzlr9slgdrjeRt3g83K9nYZU75PL8lbXo4IJmn8NxvghXynGEH16GdYpvZee/ctoUXKCrOau0+5KjnfU6MuJ7nM06l2OsnF8Kr4Yddj7VnRcU5zTT88v/qNNIn75nilNlv43zA6f0/noblFN8f6Lpdafm/if6Bs6YPosX3i7Wvf5PDFxYjWENee6nGhEVox60xp3C556Mpq+MeS+75p9pJl5feQcSCr21+bpYKe+g1vTwVG9bgQHsjrdy+0bAkrdMJ8hb1ftw1y+XWq+F7gd26l6fhF/M0r3PCJtf63qvd/W+BPo0dL57quXpzKG1vPSR4WhUZwI1OGeKGX4DHAZTMeAh1zKDFmhQ55D4LXCrvgjvArrWqB7ZBLrXLAP/DdJsmQGNgvT4IT6bIKe2I25OIANBvsM/IJSAbuENKhaUGAjAgYI9OgKIaZuzljPwZeVIGzwguWKDMwZ+UHGr9BXUtMKMNRT8oiKG5gJrrvRIqYWvVwHjLiA8qhfQ7xGVtTHIJUQ+lwqNQxDrS/30EYzGSg9nBKMZ49iAWG8RtYoIedry1Ogb8kTLXV1UqEeL5DMC2KMksCM32KR4pH4bcbpYrqII6V80UfAtjFjUzAiMMCo2pcxHTrIvJWiiYkqY2JNRR8okwn9EXawQgyVFXaiSDTSJMqrZ760S5VP7zkU5isW1sZVG3+F+M+1Av63D6LfEaNVffqEUIptnJNwOx+eymiVRErm3ajzQKcxhdm1ME7MhVwzLZH7OjMOL5PYmq8buYX2LnYpNzidF1ccuFnqHvIudK6ZB8LEjJW3A84RbZWC3FQK0QtG+N+5VJcCiOv5g5W/DeKJ99Q2dVVQ7PbtPNuZd1u3WRrwGTauORvhArS1vJWpS8QXHSa+omXT/xAiaN2V/EirLlEhP1qS/wTCTZ7PDwvNSTjHJML0UKRYvcE8KIh/nFZyyUnjZaTuVW9RjvUCeYz8wFUlTKynRa8evpWUNyRGvUWQ6rycdTv3RLJPSkoqveUXRTH3Ezky/ngrPFc0QpL7JTM4sJPOTL1C9KBuxm9Sf6QT0PppLpjPSlOZNo0FFaQn0amBvFjhbyW2BrpVTaq/JIOeWWvhk7+TlGKwlxyRKjE5TkhK2eyQz2hPEWi1oVCK2roZhTVSsUMhxIN4syGB+IcYwTucuJZhSBKw00rMEdJ5SYhOWkpeSbBDRmC+e+hSunA+kGAcKCk6la3hfLfiUsePsUnSGJmK9UBxPNzI5maWJd5gcyW7D1Q3cy23ASXd05qdjMc3+RYex12vG2NcxX0pelThibXJnSu2wq9Tg0g3c1xT9Mt9YsbibZVMEXLRruU68WmhShWrCdehyxXziJT/Hqv3J99yF1RKpKg5yNaS03eZRBS5RT+YAxRGoyZH3pe4opx6NCtHI9dbBqoDIyHrTGvfIZxV9tS2R3oURHHbkaLY51wjFSr/O5UXVJZ6oM0Iv4i/UzcUAUMD6QswvRH5DEV4N9K7xB8HQ53JzUnyUi3vLO5KCjU6lCPL4kkLNqZCciXnOZMjLgZf1PgheR1fjJEK92ag5FCFfe6TlI0K1ZJrXjGCzdviokEtZp/grSBvy3taboWHx662/wzIw19rq/0NMwQhKPritfQYNDjjdaYq566kp/Af/yMGrYRT8fmWtmQ/Om67ja4Chw8C2GPDN7vvtCaDNVrFONdBMvXiXEWin8obwFdiiyLP7DGRXTk13A2Q943vPraAryQo9LcGRBN1eJGwBje1zQCCR3P4q5ChkfFAq/LXv+hATNemq0q7n+3Qtr+uMr9hsdLeO7/7Rll47nx998v1yPsvt4AGOT3fT1GCa7/FakyGwr35p5/BT4P583ZHDwGZ6+0ip30qa3OijgPsk1OjbwF4cdywPbBk5Pb4JrYFzJuEwx8CEafkQJ8/FARnXyrW1IZJr2RxnJM21ZLxtjOxKH1ie2Ota1CWcVHLt5qdMHXNTqPeY6nPLqXo0HeWuzT40c95DO7dxpsdTg+Y86+KVmjo3+8V7kWgxR/NNxDycN/E7GS6/aBxoGRS0bA0xAi5MddgOvjGbfW5bt2A0v2irPXVg0dcWOdywLGob3wtZvmLn145fNrS/0Yxd/mA/yOGu4BwQ5Yuroo5RhSurKU4lOR1r55zfZiLWmK5ayd/evHArj3v29qpHVPT+d0+8OpHwjX1ACbCqE0P4i/vX2b7nScVlJ2T/4cKzTp4Da9lmTl5DCumaTreHT5MqHTeH3+NAjsIRdKSlI2/0JHzFETxaD2I4Xhqz8Xnn0D32yy3Pfmm818HAHjLOsiTZvx8HGE06qI0xdB0dpkcHtbXc+e0vGrw91do3q+y9bnUMFod45XTdYzp7vRdmZ573lujuTPLxBvQewc97fe9zRuG80vvpiPdeMgP54D7PqsEs4EFP56F49zXPA8Pujm0evGG49R4P7PAT4w8ehUMDetqez4Z2P5fzgfOvN30FvuTb12T67+GjSmD+v1v9WJcCBtt8qB8CnQWBKa8DBe2phIbA8Y51tGlgU5cd0i/QVfgWahiw0+Pr9yyA1XfK80TA434f593+G/3zNu7+xf1M0wP+Jf2Oel8Cwvr2vdgbINH0mL8XhGzs5h6BtDQaldGCbjYu5d8M9myqz5qEaTUzyWbw3S2k+BG4Nm8gJhDu16oYdh+u29YarAHf324eoAEb7ljz6oTFdsFc0LDbwnw7Sdgl4WOzZtiNrs+vo2F/ui6+tIL2cljtPFh+7df6DcRybWqlBZJXyypcD9PnyGbjw1M4q+mHI8jcBRIk8mj9NRwgUqshK6I+UrkpBu4UebTlNggS8YXX68OPGGq1dTOKSGp777A3oqatz6IpYrKt1TAosqcNo6OFlK/c170rPKBiTxMvklHeU+MU1VyeU7I3mlTem5uNuV6hSL2DtaoUSabjFKpECXdx4GoY+hwuqVYMaYoDcgFQDdyd+rN+D3GSDZseAdiZpl7HIdyZZk+repx/c46xB/5Zyz+6XlGX2NZ9gBh68bnWk7inRcA6QGxMkWJ5YVxU0dmCW0TDogt0bgK0aINyl2Rd3E9kkYpLbDFI0lbpVLgzabN8AvaU1Fc5FniPNFWd4P2QtFh708Uh8SQHbxuSWMu9YWaVFMT9+HovPjZPfFA3Xjk3t8OChGESmh4nTTKfVRekfGaeZsuTS5mPmKlph5lFmafS2nOxSbHptqz6WN307vznUebpW4WAkOr0+mJjCCqdWOIBfJW+WDrtrpohXa7vcDlTs8LLEkgFVmKNFBOd6Z6j91LDaDPd+mkb1FV+WGYg1YY7TUNT95Q/p2tQlfLrGHVUb7piNox2nZyVcy7rCFE2h0SnY9xzvmSrhFOYu5i3YD45myzzQBOmdv5Bry1mQ0GEc3huQpG4jSers1houiezntI+qU0PJKP7/uQ8Sn3bnp07lWrW9CrvY+qJamFBU8oH9qvCjdRHzLyiwdTOTNViZ3J90lbxwL/EXCr+mw5GH2crZCojPdjXaVLQC2wD+kE/kZJ7jDx3u5KdnCf2C2VWuV4WV1gNJPjs4YKBBNpwaTGRuCTcLj1PfMynlhvEf6q7WSkZ31HeVKVN3FPwqFqNGECvrs5NcKZE1BwgeSVY1Ogl9mAJNfDkJxGDNZ9Tz8Bf174gfwvcqd1JG/YGc3YyKM7cOiVqoXVOGRXvuoirJOOEExo12jjN/iBOBbaz43DdNtasidaAxV6oud24jgWwp5qo2OhccvNV3CmqdXMAHpBys7ks9nKcavM7QkC0R8uFuMlQFk+O2B10ijdP4vjltKol7/Y40Oaeet9BivshCrWa37AUJTej2+yJ4g538ApQT7oNWusiK/kjAttIn7rgdlakScXdjqBIUqFSx1/U3mylTjvUeLp4JzVqIXF31wn0Nv5aFz7mBAojfIXpQix2P8HNgXV6vAhqPpQ+kfgFFyf+ONLzbasgHnlufqrjTwhj3F1oGaLYv6vHEFHWnt8nhTBtcuk/j3he4z1wBqFTAh9IRiyx2INHQoJos4NOSFLq18GS0DTi3iHvMBZGa/jSf4g5Yo1SDO4d9UWHBpwbE2KQHl095yHUDUDfGkRjcXXgN3hncmFoG1w5JDKSCw4SSo7JgjX5V8avgO/UeY3/ARtV1E7UghuKxCYtIT45UZNrUIOMjSmHoOBkg6nN4GxC2jQH9g5dONOJwCMZcx6hRyD4BeXwIl+tUW/fbxvb462+VcvMyWHfqJlT0xW+NiN1s26+13s958J9ZQT982G+Uk3PF677etZsL6z5lpZmLeKBQfn3li773aG3L7X626ZpLusH5JMaVw6BlHArK5vggsiZNd+gY3Di22swYeDp+RS34++dFz+5TqyKrNx3xc3tWm1zTRl/8UbDNX8g7c0vtyNdaW8z3bz52HeGbr318e9+uWtXZa6HuG+yMRsnPIZZhhsRngLa5/eHvf6QLd6n+Vwnlm/SgXsw/h9W/TbDFT6FBmYFHfTq7wM1/PWO7+dWs71LB0NKoF7pIwdZxl6do/a0fi/wmE+qndfpcZf4E56FE2di7nn6TiSGhXtwJg2DMR62k60BEe78KVvvJ24F08qux9wSp7XtPrm+n5a2MHU7O0U3bHHbO3X3lZrfgPBAs2mAgrCxti5Qt5tcBgyc6BnMjwNJ9D2gk0Hq/TGUE6BjA/VESGDV4CrGI1Br6Ec4OIA+/AWW6P9jZDSwxN9/tNzHzW9rDOnm4ec1ftvBy2//+H7LfGDeWJdRB7B47LWuNHhAsMV7C01pl+cOBou14ypuwAAdRoXGsKJOj2wN+MkuQtpbuJWwlWQFt+yRxX6DX++NjyDBqvp3w+GwswPKoKZg7OB9X/fgE0NP3BFBxOGbjvFBssNXrZagzUMbxv3Q6iE73R3YKm+kbQMxxmtoEEdm8HqqHoQB+DLFRuFi/G2mSvha63LGp4jgtg9JYREt7bKxyhEdHQGo0Qhi53KIXYSM0BWCDad0LwJHwiV73T0qw7B9Y05VYWL9AJvboe19ZFPRUEHvZ71PYVcafbo0IuIbRZoKUAUNczUtaGpDf8lk9HhjNosU86aJQDPC4JphKYPYky0ucVCsJi8q2gL7kt8VSsAebHMO6scUCd4HnMSYdLh5VcWsdU65hMRgu9bt5GLSuwrMT8bUdkFf+0VL137ozcNM1j7hB+Pe1O7i/oltrflZvhn3stawoDoeU7vKcCNacJoo74kfuOUJzglSdZvYewlXG5QiThEXm07CRYipzfOgh0RHnotPLVGW3+tmHd/W9sBBlCja5mDxm+jYFmdYHrtU8WGAFV9Svt7uS1Ivf9SYnKRarlkNS/5Zrs+2TAWW05jb5PgKqUwU5VTF56RPFN+qvbEsSkq1aVQJJarmDVKFcp4zBdUgt9S1+NmSMxoMPNhkq8a3TlLkxKZ6azXKyeYLxitJIuyaEclU+2JFITBNoegOryHjReEs150KKKwov0hjFE7kN9L3FKnRNejAom0ynZ5TPBD/nT5bohXzh3G8lB5+kL5czoDdoydXpga60WOrFbwJ9IyaSJdW+nStwG4vo5bDMXuf8YOFnajIss092bc7exczQdDBNGEqNSbl/mTuqtbM8835WTyXj2I+ZT4s0GO2Z1QV1OYykwwL3rK6Y88XLOdfi7pX0FOwFFJdQCv6AeEW+LL/AusLqkpt3NMKvpTlORQUfqzYY5mZO53lMBOZ/57mPBRZ5Elt7/rMTqO+5PFKH1APc6FlhMzP5YByd6pqfkDFUSo0K78CQbMiB1TMZj0mPqx4S2/BoCpGsq+EcypmmQdgmRV9uVuB9ErVvGxv98qiAnmX41UOhZ02iaW/KecWYBVFZPi4cvXh1Pd9wbUHUnHtDzmDqfcav9VJpB6vTqi/lHqArVBfkYpiJjQcJ6tnSjdcogCSZhrupmnEjjVcSC9GqzcoZD5AMhpOUr9BPRt2ZxX7PWpUZpi7M5rEs3/bb3NPk7RXL9WvJ2ROpzSpJkgMfWmRIXKFKN4M0Z9/pfUqUYM73/aQqFSOb+sj+hRcFJwnTtI7BfYJTZQsQRipJiFYkJT4DVsvSErWiRQVfEvdB2e0a5KHQMbt39M6vAc7b2YMuuzj/caj371o68T9mc9rX8Elj9/u/IC72DcjLMD2t8f0PMaGN93sVcdCqrd7N7ER7Jo+Veyn3OQ+cxyC6t/nh/dKed2Hj7WN0+5rI/hFZ/fvjaOF7eqfIyYEoQaiSTh/2cH1ZC0PLaFH1Mx7fM9WVNAysv9c1LHpuwNfUOlDgqF01B2h48jRyGX+kVGJyAbu0uiHSHZ5/xg48k/B8pgQFZx9YFwu6m76tXEgWi7RenwmWg0fM2EQY4CqmNyPFUO8m9zEa4IvTv0l4H0eDvJClbe2RpyRvWsVYwik01zKBDxkeExqyibEoLd7ui5ERFA78wXR1Fg7W49oqV6agyBGS87MvQlxYXnNm4Vs0Rrn25HjZJWFq6GFROzikbAyTPTiwn+IuayNCgnOWUmIPumfO1UNLfj4afYY9NXbmHkpyOwCdWELkjTRvpQJsRo8uDwLUe0yX/kJ3uZVrE6Av9ddXUuFSFc0vHkAwRVpvGmFXsspffs0aE/mmbfc4OPJ/u8MYXKE/PXncEM0ayMUMYKM3zQMhUP2rVgAuz79WEMCQ9dPvUUDLyxFrqsCT09f2IgGyowcfF8DVOpZ2SwG7hdUfkj13W5K2noJvFkbsbUFDClz+xjmJ1vwz8e/ftMM2Cd0wO60vu2TgbcSJba/gUrw4l/OQ/ZHfv4OChKHeYKuD35uUQbvGt7FWQUnjbwuXwX7jf4pDAJfG8dkL4AKJw9lHAYdmNJKHA18Ma2F/xUAnTkS5ehfPFOEvOP3afYKFOb3aJblxwfGzZ3ybPOdmwM683215mJs0306556aP/DRnf1rUBtM6Q3hH4ft9P1TFwV/3y9SGYLwH7hc/BzxapDMDEaIDh/MpMDnRkySX8NBo0TCfdjwWDYaCpMaTwsFBDtM+AVBgrImL/nzgv6ZHPfqgTpN+bksQ1qnhu3mII+mIiyMwFVTlwyzkRVdnm3lYTZd0AZKOEOoVG0T0SL8XXI94k/PZdaTyMO9QTS7SLW+sZTtSLGBi3EVEbWDbtH5EdeGCKE74chhSrBnWPNIYkBPmMJoqHdvaOyYkesX5Na4qAMAaTdWagkKGRzTNqKhHglAHdXoS4LXzYrRLEFbbWnM3/aXZYaYlo5H+SHYp52W9FxsVFc4xR6bKeQQf2M9evZjprBnet3CSzHQvn7YRoyg/zvINkZ+8JivanT80Fn3J+gfw0cd7dBxQ7+thtGXh4jGb7DWPKBwEK/Ce8hXjG3mmdRdibvES6vAxevw7xTWEsVblbKFxKw22fQy4pxAOtGMON9+A69JrO6wQmkQzTr5IdLxQuF9SFj8xW4G8Gscvne/Rz9hqM/ZqZ4Q07dhY0LI7qszVY/fapjtE0tYbyAJ/BN7G2CNWsk2DcLq0JT6xpvs2tSIpnO5ceRTTX+pzmS75pqUk+SoFjRhg+zJC48GkK/zc0IpqT1tF4L3pBoLmAGeKZ/bf3iLpsR06roMpch1weyQKQ+7VsydU35zlAf5FIdaTJd8OqT2Kk8kU65WkytBTasFluvQcmrXCpSzAjjh9M2sIu4DCi6rjvsnQSwrtV4OezHLvOF+xH0ar2k3/CntRnM5KIm6yTvqq0Tt5T91G6OmtUY5pFBH2gwsI6nJFYJRXNZihUjPavbZ8sq2H8yD5SGNgFxMOb76ImugvJCtmldRcYjZmq9REZtpk/+g0ippNV+pyiS2JW+rOjLqe15RzRckNe8JZwQ6wyqrK/Y/wiLX73jasLwadZx4rOgmHes21mBx75R0gW7x+UFAkVFRY9cZtlKRJe9RSVDRfe6jUlzRo/IrZc+LkPn1ZZNFA3SlsvfFSWRG2RTbmShaZlNCwOwtfVOaHy5aulBOgtFLSysDQGdLc6q2fUxKeTUXXKNKV2td7eLLWnNr5vIqT+caj5ZU72Zu98JqYpgFAlztGBPaiOXUMQOrdbgQZmzxJ25H7gHma+52Liuji7vGCkry4fLycLGO3OD8yag87sVCU+Q9zlqxHNSAk8z+6OfLGSx95fGYK1KW5KhUh6d9W0Y0cGkBUwVNGJrIELx5mcoTPm/5TWXwD/JmqFHcMn4K1aP8OX+a2p3fwP9Gs6bL8buzlMi1fEbWT6IVH8PwxYzyLbJHIp7zrzG94aq836zDIGX+szym9zv+YIGai0UrhqL/RiBoJ7fPrXZYkuFjzZ2T5Ot9eUIAeU87pPt56kSTVvdI6lz1dI9W6g82pOcZ2S33UM9D8ufMoh55ykByQPeftDGCezcv4yqa043KzAuV6zah6UAXugFZc35VPRGMZo9d3TRS8UZNbx3pzNJaPySBOVU18CnBbihl6HGCnNBj2IO4xT8/IkP8xJ0eSUk4XR410p3gVGA0spDQwrgwskFCpp0dWU80JImMvE9C4O6NzCXzImNGb6b6Iw6MYig3QPljD9Ov+/wz/Cj28pbLqDaes0Ye+4k3mguaQOO+jGlO/sFR+k5MS+CcBXMzZ3H3Gitn0nCG1fjZ47hgNnjWADeTS56NwxtSG2ebY8VT1mbfxK7H7519H6cWs392JT4y7NhcXQIyyGc+MhHoVz35Db2wzZ05i8atP5vtRJ9Yuj7vFpU4+WlhLUptkLQkhnrT5bOshKrleSxvoMq4kBUKqrYcvyoatbuAvwqO8szeszqOPpauv/YQPZ5IWeuI7sG3vXGL+YCaeOuL7UG8e/c2VhbUu/A5rPLbhSW9sMTN9RWN0E+r7NWd0IDZ8DclyC+jR95dQCb2zK7rIs0EkhtWSKVGz/fnkYrVne8/IC+WXNw0R1JYIZsNyL+09g9yoQ3kXR/CwjyId7eQ4RIY24/+/yHml2HUlyD6ul1Q4Q5kYzyoeEt/Exn06o3P1n7o5nzKRxdo0/jKpwIoZeD5dhPUvfPj517oQx7nCxuqVRf0FQh1qVT+JgrtKKr+xggKZMrtXAu+kInYaQn+mdz83RPWSFj+4Q23Q3f8kUNUhhgi8sdS2iJDesZ06r8ircZtqnchaybKS64jNaaCWJUhoJmXWaYIwWw52QO+MPebiIYtLjzAXgxuW1SNqAp6t1iMOBx0ZvETGA7VXboGvAbJWQr3cIHsWhp1IoGfLVXaQEGkpQdmxyNKBssFsahbg5mNONT7oZqakii/4ZHS9ainow/ykaiZsV7GMRR04nqaWuTmZDBJIlJ6Cofzi7g0HRm5Ea4xoxNyKsxk5g8kPBQ6y/A7jWydk/F8iVSaS3eOCnGbY9uGIdbmXM2fxTj2JncQsPq9Ec0CnE6fI6cCf6zftbwVbzqQUhiOvz64lbMHtzOsn/EERx2JTzqKOzZaH6uI1RrrjvLDuI+3I01jIifyoePRGZMh/uboT1OaXki08dSOS1FUwzTYrieKOG1mUU4w6yoQGscrdSXxkcQUoWw9IAHVLVK5TTLuOVTcRfLvlc9VIwX3GVIxpKv9hBTthJaBujjlBNnB8WgzovfQl9Dh+Pjh38G2ceyRnYBlwp/RP97zBPexP267Y1vHNxzUYt+O/7Q6kNjcfqT3enJa+w2BaerT9rDGJrJdh1INghLaMVTqQBF0JuWVUla69OlHKD3C55QjFG63X4I4BdCDxFqQ8b0FEYxUQd8beG/KRv8OWClFaxDgO5rcOKTjPpmsOuzruJBMHHlgXZwG52MG7me484M671Gv80ktLFokf5v7OIvT6laxl27VulYYRMe2BWYX0SMF59J5dG/BVmJH1mZ7O/53llVHdZQrrbNzDmlMkxSqQjlUZDfY/wpVvIfntTszu0/CeTEzuj/atoie33Rj2D77TeNiN47Z19jbdokV2DjbMJ6HbbpVbZ3v15TBHslnNT/IfZNf1txN/Z1v3xKWMp9/kKcdt5IXyL8a84z1sfVBWA/rSRsVBshNEvwKROTe73jhI8P804l3fZ8rLVR1EClw4O4ajyuicML6GWwYx7fzUelRjm7LRpkYB8a1KBvklJTnl1/nihdUlutw4xkp5bvqtNICyuLrT5Belv5uEMXRS10aL6BkSrhN+SF72X9a1CESbBAPD3Rlv+Iz3LfZ+q0fHZkVg5Wvp6eqWiqPjuyqaa482YOoHa9YavvGGa0Yb/TkOlQeqMZy+yqfszO4nZU1uTe47KrHmdNc9arFZDgnu7qC4MfZV9OEXq8NrN0OpdfMcJFBazX36g8FyFT/bDD1el3d31jojGqoZgMWWprci3smGlv2FecPnuPtLk7tcuYNFyfySvnGxbXcJn5G8fvyAj6WrVtwn2/KbqfTeSslbpRLPJ/SQ8S6f+8bgJVosSm/FBHdvFpBhlc3O1btB/1t3l/t4qvW9LGm0e1UO4lVubrTKcp6PMvuimSZjJ0QmrMk+0y6z7FE2/26C3O/NiG7O1iSNcrdHNZldl23I4uYq9x9NA+QyRam5s0kuwnF8nsI5l24wkPo3K6DRWahSp304rEghU7VEgv/S53GpQwPer9nVsM6bCAzy37JcjA76/EUcgiZdWWoYvh+lpSQP8yj/eLTR85l7a6zHbmVJVP+5d8aWBA3PJQ1wZAbTqRjKLPDhgz9hKKhX9nJ2PWhoJzJyKtDd3LN4JuDn1kjoKnB9/kXfGzGfqUd+qA0sYvCXzsyuYeSPKc0dZbiMvZ8Wopyo89nmk2Ra38+c4Nyrkl+xoXyqnp+Bk/BspkzDpSV3MiZm2lWVPsZ0XTRFL3pD+lbcXrTvMzn0cTpFGpu6MI0NetGEHK6kXHY//ScZCLwU/+8Q+LFd9QFy8Q9i1WLpqS+yfYlHVLC4MzyLpJf18gynWTNa145Rgrj5q04k5rKY1fiE3cXxK1UJ5ox6CvDidtptSvfkipJg6vqyTO476taqSooldU58goieq0k7Tfo4Yoowfdr46otQWXTeQ0c+2bV/U1obP6s51tsrP2o2buoWKlenXUD/B+BycZB/Eaj2wYq9kR12MZ27D12xnu92OhcwfuC2AXqh809hLxU6U3nOHi89uZ4fFmM3Qdf4k5Y4CerxIvQX+uIGIMf1zZYMXKf9r4XRK++27/ZGZ27KPphLfr1xPpHRfSnAfYnNXRz5/i2KrqEp779G13HDftcixaUD3wxiT5WKPdlPhqY7fMVEbMvvfbb6ZiGpN07CpjqWJ3v2zhAFOpPLN4Q/usTNbz4d9o2Plz4JfZzXHjDe9YXQjhsJfdrbLjKDOXbQBhjxOi7Ytj1Hv8fimGibTs/5UJ/NqJ/fg/9VrP7V1fYnhLkb3CYO2vmDyCsP+v2n6bw52TCX1p4InHo79/wj5ixf9d/h4iIMyQQ+j+9mf+7+v/BB/ofr+qD/0t2l4jI37//b/1/c37+U8r9++e19v9p7yw+9/ev0dv/qsMj/jP/l+9zz38WU1ORf6i+/6M/aKf77ymv/P07dui/eUP/Vy4+9b9yB/z/zWn973PLnv+jP7St9+8Fzf3P3K5du/5vXtH/Goq041HVPKeUmmixiZib7Yf6Mvyy7nzZTUx69ALGNR68tYUAeH0d+ft36MJ/22uXm5uIyEdnEZGjz0VERIn/bnj836d6/T/z/+uc75PH/7t39v8bh6ukBqO1ACxDybLKHpD1ph2jS8jDM7PS85Rc06aSeIp3MnTj9ZU/p5XhcMoNlDDMaVVQXAAYrvomtsAtW7Uq1tYlQTU89qQTTHYzpkKnTe4oplMFLZeMlVUslpfBAuWvyzrGoABD57ro2jVcCRgtLu+nrGjmySwruVPphhnrCl8p1GRvJVIqIJ6hqEYWYHFqK9EuEAk1Co4TWKTSh592uaU6hBt3Gle9io212ZFrC3NVfSdfGj6qLCV/PPqbvK78XEyyzLJCJgYgNXG2lHa0Bn7md0ZbxSmJq2kbzDrZGrJruovcj+S1lB6lM4m/CFMK+qi2YLBKO+ZZ8GG1s1HO3llqS1ELzlfUpKJN7U4qsJGjL48o0ILdVGoVukKlFbUUyeFzckhFF3SDVIeSXDREsuv4YmZHx51T8uS2Koez/6QkFd2TcCTmZGRLhcV3JcXJaEfoItcVPofugcBULENEfQFq6rBA58NqTiCEoZ/qXyhM76rSTV/6eTflDbCNcrfS1yBN+UXlxyE/ZPpUDoa/BbQo/4iKEfc7cj1J2AE+oY+/XM45GYGxZrqdEY9qIN+TjEfsRd+RugMiQlzkSaCTwCMqFOCIc7DaK4+/Rnw1Jd+T+j3KW25TtyqUbNyOKxWq6HtR5BtVuwK15SCqVdAr0npq/yDmJVPNO/FxZ54dvIOFd9keOoNpaIYcZ4Xg6ezTUeBvcXriRL9nESiJEvf1ACnZZZe9zjMqoo4TlqGqx+02XlWp5lqQ73xX1bcQUS1UdbU9qNChQnBaA/xWe+3hIfn5WVLgXnGOhTCsS0zf83GctTh3/x4kW0jfZ4rc4TGOtgJ/UkVOyXuyCdCzdIdx+MxZhGWRF1HmskmN9XWlM4ZFryVUW/XWHoWrH3jZe2H+PFpfoNJzwdRYRMrx7l+r1XNOL6fdrc7RLR8F3hDLc1ELERff7X8yZk78+K4LPma9d/7x8sK0uhxct71HJR3KNg/DiB2/ZAgDa4jeeHHJIVb6yNMF42xFhCZMC6iGeXjh5r4Ls4821Q1vvHh2XcHkUZceD/D9VYNFsPghszDHubPtzmDgU7FfAY6wF+KjofNRKxIHj9haa/cm7h627Gjz3IPVu5e1to//gowNP4LSrPUDnX10V932j+TmlVUdH4XES4B706pf/3Pcdrl5Ve30k8hHNQoj+udfvpQxtUgxUQUcdwLZDolFA/M8g8UH4d0QlqRxDDX8H8BtdfcrJwd2S8hdf9nhv+fRQ0iuywG9Wz+w1WeHr0yAHst+v6Bup6sqUMnWzbmqoDT/MP2OuWLGpQAt0gVLterXXjcHFKetaBq35IAuC69uSF/0jTNzllCHOTu5Sb7G5QSGSssl/A4ulU5XD70iMnBQ/enlj/3z50TVPpTfFIOoRMVvK2wq/Qy6dBGgsM9x7FaT1PfXNo9uSGlrcJ59B4hcNTKsUrZTLbGmn5dQIrswbszKJfnlaSpKl0Lf6XhJnkN/Nf8BCCL9cT0tM5Yy6+8gY6uefPnjwHF1/8tD/RsyJMX3jQ/k56XL06/ciJZmhuo+OSwT6PNV10Tmpu1Bo3SAUF/OPFmC8CDd7pmU+MXvrqYKxxR/+s0oFcsxgmIvQ6S+Rl99uk8yiij2olBKKuWtyY50dtYrR6zMunrh5cWBs+qZlyv7f6ickc0TMJ5sSC4xzxhESI/jf1sHy95GJDlYywg897iJA+StvD3axKgv3gM/SCzc3QMqlv6h2ooYlg2V/4P6LfdN9h+8zvlqsYRkY41KCfd0LV0jqW/Mt6bnpR3UeZcHBwDqXZeTB/bpGZ62FbDtIZJGBSPACOknaUaB7jLD0b8gR6QDglmw8xJD7lkhN8TemNmFO4k/0t4dBZRYvk2L2ZQOV5pJAMuGy/9MbZU7ITNM3yPfKh2QR9F8IylT9FqnFwC+EHRpqT/4QtolSr9nUNdZky5L1Mg592Zd9IZkAGsPJhswQjmOXwIAMLJEf4kM6AdSquSI83iyk2SIiWtqsiREqz99B5B/82daq4ym0nkGXLpFjsy+IzMtY91SqfhRbp5fo+KlIHWRd2ujSyZCE9A0eIioIJnW/SOtTyKm7UraBUBs5WHahFRUoR99Q+pAmgVNANgdmUkNB8C8k7LGpUysSYyvgMs664zfknH3U3LfS15U6q/nS6rItfCV5KUVvreOKt1UrG5bVjmvdAlzWqZ6eC3VXoY1MEpDS5n0lDB6JK063paXABoF8AZpKQWeZrmB9CnmeJWe1NGUg431gF0Rn0qWpSRdjEtEAQ+NbdnqEo2PKRWfTn+8LN8aK+OhfLnto8IxZWdBj5KzcnS7k/Jf5SxJTo5xEUbmNX2TmSqrmsVkDMo/pl3IfKSknXE75ZyiYmY4EaE8lt6DT1fOTEvF7lG9FG8Jea06Q3jmbqfKjN1yParqHpvmVC77DjP76rHsD+yI6i45HE5G8YMMAfND5ra0TPyIRKsYNluC0y4RTDcvBMm0UWsZD2UHM75RSxX60+VS3iuByT7EdUUJyhQuXeVMyq/oi2pXYhVA+iptsa4uWaqteG1nZZUPWJY1S/Zd9PHnn+WK0BSlYvmjMZ/kveTrMZ4ymQp4zLqU/7k4OoDTc3aOJllVI16fUZFnIuuZdjTTVI6fGkwOU/yZ/Cr+koIk+gTso0o15n3wW9WqmDk/qqprzAlnH9XfMZ/tw+WhYaMvCPLriEWVAQVGaJ+ipsIntIbsLkWXaJiUjtL1mCuS6iduZTl0FZ+6m65Ze+DMFJnP/iIhQsqgLknBSXtTsmU8ojVQYUozoRvBQSqmSD+gqJoSIsnls1pL0HuzIlVs0IZuuaKff/vF68pLkBUVEaV8eKS8orIbMlrmhXJolKpEoooGWkWMcKQ6dUF47nh9yoNW7ZOaOFreyunpGEzajORu5B/MAek7wY9gkfLqYHu/cJUMf1OXENUhH4JZjdox31H9NeVK9w+34Ior7plKUBW6zx/5cjUx0LbsquoW7D6gT609pF4i1uJmHO7Mw0PNhIc99oc2Y3NaOw+fiPYpWT5lFgIk54jDAnvRphK+3ssQY9lL7k/dfZVXnLFWLJU+x3t6napYm1v3v6osWw6q1qretAPIm6iyXHIBd69p+fyW0HleBzkpftNKL7xF7J5vX+ItCdTB2Iix3tz9gIg4gezRc0H3CmuPB/ufTD54luXqGG54Dm37BGgq7Wo+Z0dWkjHRN/iiAjFI0uxRK9DtvfzkPMzgohLjmqyppSRPQ89u5yzsVYJn0Tmm9WHIFbEZd+PwJLFu0CZ+Xpy8V8pvZ6D9n1vAzQ6L/breA+XTh6PtShK8j+WZ74c/PAXVqXSVA9g9f2DaquD5ZFK7Xw2jOXTn0MUSjTjVc7fGnwfJDT7mGKABjnpFVp3ntqy83MLEnNxvBSyJXwdHhgyLr4VBosXF148lOygOntztY5fWdXmPueHD3Px9Lrr0ON5B2LMHoG2Ah8a4C1v5yP1ck9+XJO98elZ/I+im103svaDbT1SinwEe35IfMbj5als63WrObFjii2u2o6xYfGCqb63E/TABvFqSgR2KGJNkq4OvSA4cO9qkYyw8sQf91KtkZNeh2z6E7jMZt75DapUDrle4rl5DXz1tSr7353KYdvfjmkuht0efYy4lq94yyrsrp9Brs/X0uexztzx9DalDfuVWpyRehPx1JUqm4rNBSOnLSXREkXS2Ov7K4YHT6jZX9vV/O1F3RZR7/pS82k7SAaUQNRACcHOPKsvzlOaCSrml6wsD5Us6SP2fSnL3rhqXKWqqHbLNvHBRscn95a0V2Sz/+ieW0pLwf/R1Jb5gd1vXS11PhnqEyVSn08BXZM6rZ13+OSCpjr28NrBbhqjk2PJHCQV4k/bqdpxUbsRd7SFpobfraxvpdDtlszeAt69vWo1K+Dx863gHEHQ52eOs/N3/gwRzCq+z4bpu7bSNs3FvWzGbNGls27Zt27Ztq7HtNFaTNLXbp8bf/3tP1uGa1zoacyxMkBsfHot47i/CuQ/NiQ2SDIQcZZaotsK8cp7qPIbVlzlbbsMnyD3sr1aR5C726dW7FFtAd1pEShwSWLuk8QQWnpptKoj87H/XmgDfdzi0y4dIGPo6SrBpynu5M4Ar74l6x0C/ko0DFxESaCBaECUBN0tRpfmzPc9eFp8El5Y8Vh0CPtZHa/kACeQl9v1VPCWCNrfiqdHHqLZQY5fB/KnnidshDFLwwUcCMRHLFvAVnuebGvAaVGmbG+oIgunUhj8EHcv8iSWDawQ2EiaBWnxq1jmEEKqnQA7JBmevysX+BzOv/yw+AME1mSjDoaqkr9xcK3CnV9DJzQdBQaD8JYY4ftan4/mxSEhevWKiFiCYv50RDvAnu6Yfg9/6BGcrQBOtXmX3QdI0t/IXIFlS6SVWkPd88JITmBCWsfY9DIn4PLyIokdsjX3FQVFDEy0EdfRMwD34xnZQVAVs6hF9lhOwvmxbIgLemxGp94CeG4spbwH2Gu9XywOqBYm1h5AvsXlV/dASl8iqcEDTmL+yENqu6NYABYeKGjafZwvEd4wuwojoowlbtAxme3IZB8GaTTXjz7B9SZeQYpuX80SQl9fTKlZgK8uPa6rA6wv1nV3QrRn/0XjAf/zduBMsqP3nOAAMFP0aPYGyR6SPXISSXcVaJ6E6mndbPoMnxDUG4fR5eL7JdUQK/u7UP0vA35nOxcHwDDN0+CI8C5S/6klzEZyxorUmCb5f7lQ5hPxT+rbkOhZZNJWTj6ErPkvbwnUUgRP3cd4FT+KRBN20bh8G0tP43zamhJSkeqsG1HISu8kxmpZvYaiFOE24TkiHFcfXovwA5dR5YAEYSRMFy4PkK9/1r0CACr3m83D70oJKC0RU8W5pPzq/8EluJ1Y173u6E+ZyAT7hBPclFx3DQxhLSvAkEX4nylvXEtoSti1S8VVxP/X9EA2xXNJHSLnYMhwH6nocCJWE6IkugXrCfZMOWPnZHCpoAzDWnbKgXhuQSvF6gxriRsGfknxkaJ5efgRmO/skdRbvm1wReYYvi9vwZyPkxCm7EQhysQNW1wlHceqmJUgg7IksG4oSvE5gRquHeWIuok2jQ+AhGOsYA2gbVjb2Ltj5rlN5zqINg2rR577vzN8LzNsJrHY5r6uzAVTm77wtNF+KV3Iz6m2UTEAy3jGs3aOYeC2Y3+aYWOdfqmdDIPk5Kbph2N0rqaWYRa947F+sbRAd0hqXFPoJyMeNRx6DivCD0TDWT7dp+XcXT+78zTuZdmdAZlp0yTAxxD0u5oZej+xNvw2jBNmEGCEPfLo8L+Bvel23+0vocOsxYiGOOu+rHOB07R0EKrGcdjHYv4RLLtqoAMKcxzbsNdE8wBlCoz4Pywdn639PFWZWvT2eyrL0+WZxqtIM6sbjOMcOK8ZXIRcL6UEZ3mWx38Gqrir+uvA79un2j3HRVqlG1/HZFuYqlfgB4xaREAKHYQ/pF37WRB0+QMFbB4LN+GZcmkFgpQF/Mlu+0XzoLMsf54ZMHnDtLf/o86sV1wYj+WdnrxuEOPXE3S737MqvZgqwd4r4zrptBnGXg2kZpJvXYkm6yhqvCViNUsm7xBTVeC5hcpLKHvwVL71OIPjWgzdmD1kSlegcDlgbjAFfDbZfdnbh2mxHfpppXWC7a5Ee4A3x86key4uYq7wub3qMbthbLRV43FYyvBGqADnVJDrb4FRUvU0GKT+U7qhOcZnJ33xwkXdHNo6DS9BFzg5eIzmp4Qm5q6ptFM9Sa1Rl9x9bnL2YlwLI0vtOCCvoVcTtBDJ44O5HK5aNhmscVrFLOecXTa/0RVw9pymQO8nKoswRcgMzJvfCaZeDUcrPmJm/V/ym8rP7MaKxolUS9x6ocKBkciV8EZvqtsqFQJwRWC8PNGI7ZiUJUvFacQPA7uEXAkUhK4neUXlQNnIoB3YVTG+m9mrF6KKpInrw4W3xB79zPqIvP6CE5nIR7oOc+YVjhdqMuSXfCLSpRCvA+LvFcKrOAnYcTzSPhMZQDsbfpHFwG9tctSzINw86IzlwXei23XNoXDK3txHMNLsvOAxWwNlGS1txI3txgFZvXxfjjRgaBVR5XpX+5fzFPRP+80EZV6trjGI7J59Ztroee7vGuo42zVxCwFCd2snlY1rGfhd92S5bUBt+6FEkNQ9NDmZVT4X4J10zV4CrZS86TSKUizM9X8Jh5GaOS6tYcvn/ZxkyD+s0geIWxjHVjktaEWCJPaqfiFd92fW0CQI28yZU3HldvMUOul8m3cYYac5Lb1/9jyzfPZSIAfDcwNe8YIhvXJnUOPRu1pjGc1hO0boJBaFdW+7oBVSRJ9i/rFL/RxlBIgvPfKCcKZit5aU+A7CR9tP8CNEfvGjnAK9x+uV4BRppRHXtBIsqfvOigh2FK/27AU1abcgWQhONj2XACMGk0425VUFeee8lD8DL1QYaqzBS4wW9HKCYHMFZufyMUkA7WEmwyAVdXfNxu85kOSTkHQB+WfY3yBy6lhIYYgrpD/QMdQXdts+KeAOS0juKHgHfk5tIyAfbCgmmUKAnRFDOewQdyrvUDVkD26t/RIqD3W4ylJGEtjX3quVBbSmptC8raV7t8NjtT+FQ6ODqQgorm8H023RNiHA3Qx4DLKVqMvc17Fq6QO5ryLdAUK4K9I3NrXwQFK3tWHQbUiuVWXoGSeHzr5gBDLGCzbGAIII0mot+iGKcEMJLo4sma4gCGI/QYWTrzrMEOOLRxk7uA/jJ2rXyNEjP/HHzNjRmUrLFBjjpMWlhB3bKj1o0oRZJcs2W0BKv2mYZ6HMz1aYVyLDq9SYBcJgYY28uoy3eebwAvoiFTzZi3LC9U9P487jb076EUpxUGj2af5u9AIyy3pCtNkdYraG6rkCXlu/1/AS45wWn4MDO5PHkNVhVx97EOrBRvD2eApWOJI0JQkluoNEzsKyRxZga23cl4jiZaZdDdZoN2Yt/N/0Es43vmzHH7eCLZ3oI9/CJ0N4a39ZOuEdVRl0UPKrStfoVsrX8bRkT5mtJWp4e+n1pZIYjLrq4JlkP5120kNBPCM4E+W4TZjKfuCYTPJMrrINxtQUslpfR5YUORgFAcWIx/irUPP0Kcg26lu4P+AIKOcdgfvCt6vHBHchslVFrCvxi+UT1NoJURlfBglYs/pO/jcUVPMoUQb8uHElyw63kZceGEGySu70MCe+TqDaPCDmJ1ZZIJCqxR2cNYZPgI3UOyR3PgOuH18Rqwzdg+inR4DvwjtQS1n+srBIdcmHbqDjtZwaLlRU2t8Pzi1XKFZDkgpLCj5j63L30KeyV7H/FBR+SgA6YJ+nFVLvLEfjjDq3GCTNxbaYFiLOIMtk6ZGPoDcIMSi+aDo1HC8cUw69iLGPdIJ+RdfEzDKL0GZWfVkgMvaXvhigs0cWeXXMsB/lt9YLQxzlmhRHoG2ndaaxomVhscAiOFGri/pjwNozmACPBQpiMl/GLAayKAUgxr1MeLEbY9w32NdY76BViB3c50hWijgdHzbI5SMqlvqBPZdQuRC3P331QtDL3m0EnZ+4hO4NIpnvTHUhPXHZOBtAUbhmlhDQPYPcSxo36hDpuERo9eU1Sic2u8aoxuBuOj4T+w0w7mOCGCRFu2ciPRFPvEeAS9SRwCEqntpTYxDRotJrOwmxDfzN9anXzVlWm+PzrG3+TvHrj6MViSDXKzIHB4xnnoWKeYUHxMHGnOmde3HV7L/M+wmPrfA0U/rn5ebFcrKexKhnA1xh9Z/3O1WR7ApqT+OleBVrWWA1RY1O3ocYZsV52qc3SBq/ekY1LeFR7UzN2dol2jRI9O9Z+h86fubyBKcq1JX4KumZr5J+KA1u0OoRQDk1+GIlweBpqKY1znumh7lG4F3RDiGg+O90Clh9SHyzPsQprQl152VrNjAPc2I6cTmIm2J4EPswKBi/fXPQZ2Z67wuEnscZ8hcnv9ljnDaRDYoUsU7Ylf4Iexsdo3TeVZqMHsqPjHdIS0jMS0lJXkJu+76pmIfBaXFoDRxSVVtW+BKJqoEyTWURNlRw/s005bfthQDUBvZHOoK+xV9NOoJyML2w3tr/d8rN/t7503sL694TYXapRS4UC8r1OZhyN3UdD0kdbUEQ52gb7QFSBV5dTZlt2XfaroqECp6CKqq3SPVKR5gs1faiaiaphHkjIEbDtBaX7ins+hDBHJYSKQT6nKMUVQT+RkzjYV7HMvjp7G/wX76qfTE+DnZU/1ijT5BS0E8NEFGUCfJJl7kt62OirXBev0X2iWf2gUi5Pz00cJbhlJC+ZQEGZfZVrhb1xoNesB//0STHLhKREs7ssAS2py36qMJuc01AAyCSXc8BXyf+yaP+yIKJccyMkVtHWplv3a+8DCZxKscKmfjd1KELt9uyGrIIuholmBH4VRTkrKD/vvWzbCYFMSr1jqTANbuHFL3sM6Y6A6tyF4lOdrPTgwzlbrtxwo3J+H0PYNvkhx51Vrv9NdmV25dlmUSF2944UjVtcpek0Y4DrZ3Cb5W3OFJdx23n2QtNJx1dUuEqXqxrZ8z7Zw54kSb3qPUKZhDkEVwi8hQglhsr0QotzaFoMsLwysrkQfKPhscscoEhe4Ti3KkCJYr+zki3lD/PaidWNQIUNtFh9x18v3nduIErGKrk34ut8RrzzsYY2F/yW0TyafwLi4NHijUHnIRPsh+EvEeZosbgknBtEITOULwnUXMIjuwEA9S81uQDNpvtG9UD3v/13V7Ip7bSPK5WOMcDvbR2PPdarE59CdAHRyt4oOuTNpJXwTUAx1DiqGjzjEh2LAFUYXo5/D45QWE76DBUWkc8QB9oo+LxZhAgqv/IjmgH2rJXCEQlFtSpJj0BjW/k0YFA5SgH7+ZXCgDfI3j2h2BX4nw1cFglquShaVA82GLYregRI1ScUfIEFZhKK+CAuwc6Fd4AEO2TxB4BeN6ZsDzInU1YBBv/l+1uXCT7BpPa/hvEg2sbNsCZolUl/gjsmYKqEBMMC0UR08N69VD/U9lZWAQPyy6OKakaY13JVxww0b/Zj3x3o09HJDh7Yrar33brQw/SnndbQ537ibVAAYcHeqgx5pYZuOQRHiP3t/8hAxR1M2iDdcIZTb7H5uKzpYfwz3MOZB0RD3EomLyZmp7fwP/Tc5p9afxTjI7U+VsBqbXmQEYhZgk4uwcMmEqevwna66Ke+AV9Kr05WQs2iLk6oQvFuWxOMYB5jjkkI5Jry3OQhK4HLccYA9ZiwMnOAHSLYzOaQWImis4+IrYRzgEgdXfsSfL3GryEI/qw6v46I1Ki6V+GMGS+rKzBFL5W7ZcnhwksHUwVw3aVKSTOE0uwI/zKibn6zFz3pb5qgvTamruScuRiGodjHuALikdGO14H0ZzIiZ6DthQ8AfwS6dAu4A16uzRt+DPWpsepAwv/tr/OCD1WUVO2hXpaFFFljPhSzZbug54qHUyxwhQV+8WSCclqwTyUhIu2Viz7BJWnb8heqKqvHEIS4lEqWLIA5xnthrwCcqccwc5ha2gjoDBGZ58U2BKbUqI4Mg9ar5QZHQE8qf3XOQnHlgTW2iKFip5L3GNsCkywlzLNcZLI5Pib9ZXgl8VuckYcjAZYQb9NIyIynmjIjXkc1ymUhTiJ4iB+Qm7FKaBv0rbg7MEdEWqI6UzGqKmWKUZ8RW6O69phJtpJ+VIr1v7LnD5tZZYv9mnehWvkbpe2o+Uy2jBL07aTE6JvYtHA7z/eEnQiwE5oECS0xFcavBukrX0CU+9UJsKN9Am2wX7G+YfJwV5xWVCboD34+Rpg1UQqUIUwvwPSsZGatl56pnG7piCG1oH6wjf5NrlvbNMQvKa2gHzofPZswjXwWxOBnhhv3C3J+QKjx/mseRHD1UFJXwQa6Coh8xHxw9icRiXIeBYga6p7/DcggZ33oKaheUy15n6nXdCQTYA5mlMxWeZR5JznXdnn+zves0inI3e0Ep6b7TCcRCblrwKD/o6jLeEnvCz5dFGm3EXsoe7TTicE2e5P9eXlmdqzNEh+BI86Ghron0OGoytYhbeH1GMSrtRjGzEZ04E3eZ1V0McupZxtjGEnI3YLefp/ktBZ7nTvhz4znzfBwjZYbYAMfw8xMrIjblfBtKqPjOc8EbjcbY8vn/MkW3trSAlOmVZJh9xpNfTjHRY3MohA2sk42f1m7dJY9SWyfLUtC3rMVuH1KvA1yCk7PbofcuBMQaLKPvX0c+m7zylX6ENJs3613HoJNL9CWjv2ZUVQ767bwHr48Mx53FpEAI05zBnFvfTv1PBmy3k9xRgUZg2ouOhWacSTKXvuaxQTLCyt+13mQqVt5oDFoN+g0+hfoNB6b2QmNYn3g1LuXdPeHq8cO6dw5l/BVDxZjO6m2E1K5GT5HTiDKwCFMRrxM57proXydJpOZpto19YvqVK1Jjffi63pT2h+5C4zPGeCwTWZjJq/ZklycHGVA24FOfrchmrF3w2UgTtmyqUEwN8DMIG7PATRqdLhLuT1kGv2IjI3RS+o4FGTQrM66JHOo6h1mpRaslOl2XXdK4bf5bWOSgox6hXm7gpME2rpJ+RHPK3s5dRW8mFOJrjPkhj/WkgBRibvnfgg8yYgPdID5FTFGEWHT5FYOwiof6R3no9VJRJ/8wI4mzy8FVLejQr4sJctMt0n6Snih6axkooeflYaEnlW03d8HDpqDzmJiTyRj3bESmrxRXlLSaQQ63xrFZnBLVIG+EHQrw9o2Bl5XaOOJhhOrWwPy4RHkqX+uJ0xe50Cvygmq8999PKHYIYAeyjM5uFeb32Onfu9bzF2nEqEJnz9uqQJ/7ZS9vvCF6yL8+HlqpHsCuXnu8BaHKPIt4b3C5oRkQdRUssJzQD5vw0AQoVv+1qoJnthEch8FIskJHO6LDZQidvRKs4Y49ukLfes44tvpJ54AR2BljN8YV0jK48BznOSQ1lAWmqjzQvg0edNwOHKVqCS/HgPC7QleiqNhH+LnE1YJomxuudH36MGMVVxK0oB3o69WMsDTvG1xDYiipLGzrZRT5tkvrwx466CeHxyF0cP6V0ziQzHP2v4kwwgP8n4kHmFr46JSjNH5PtEpq4gtc5Y0EExL9WKaJfT6ff+cUqCFXak4GR6BXGsA4X7DvvWg+L5Bgoc9JW9C/pmIlj3sFqWW/fpKXTgHRuUgKcUIzbdtVwRCTKyZV2aDn0yWV1wDTpt2KrUBbN7XijwoOlykMhPQc3pSuQwoG9RUBUJn5e3r80HPBE9bstlmsJRRJcQCKneShL+KiZ/qJxZgdabGJeKQtbGVWMb975lULMduW0koRmXzfV0mUnzdsPcKdHqpZNgLUJzYHSqDmTbFjeChjTn5I3yQPyEmQ0jIHwfpIWEwTpd+IJmVU8JqTJ9xj8g1zYlmwufPcODG8Z7//GgRbznDQV0nvssdxR7tzhevYtm32+qz0VOb/oMzsPkty7Ep4HR1ecYLvj2NmM2DQ7vHZ4dgyLK6GTloZDT/1Gcoxv3xNBRqbYqaPgFAqs6z6aBJHqU5IuYLsWdOFR9JZJmzJuIJXXOeJFmCBzBVX9X5EsFVZ9LkiVCpnWiwQdJqp2t1MNGViKIpdGXlSE4MbqLiQboy7nP5o5Q9AkeFW9QMsbECHUQhhOX/dunCMpfRWThjQkojTRaYkTke6E7w8xIZxBkCV72PKEc3dbghsZCseufRpwClzqWr6x8xHzbehL+tzqj9iHKuTCoNwTSVvsojokvL1NJOcH7FComFhKSsOP9qwnJWhdtDzJfkZis/9HjBZ+MJFr9cDpF0yG76NuYL6E5GJPg3fKAoAdKOtqs4D/kFuVtnMX4DvFHbMmID/q9msRcH9atqbdBEcJT9qOjGXC9uzi3A9Oa/TUPgNbJVotaIOgnzXqmEC0lOdifo0fhBYyvEi9he+S0EEDfALg7PjzlGCsFvJiuyZSDDUr8x+2OG8jdYmpn66po3sunjG1Fr8yDrKtPBFLZv5W87L0KyiuOrQlFmOdE5orisJKZYL/xi1Lbvd+KLfxRbJdRHkMyP8HrBX1WFER+DjIWqUBUh2jgvzHoUCRDHzcZwswE40/hbdy9KX8t6d3eOxacicKONUb3q51ru3WsVOfOqDOCilJ4FVrUseJUNoBpXk3IX+yUKHfad3BF+z3uDxhZsYgeiHQTc1Nuk0vvel/5MMvGGcU5T9D1RgDrXj8AZcLBkcNQKo5j26zQTphYH4aI5FjSzf97elimDZ2H2etPdmPz389MMhPTXvU7MFvE3yozR3yNskz9RpIP5Q9a4YH633Z7yQr3IFkZ8JLdT9So+vMvYfQ5BkutVipTYFRdbCE2+11+crVw/J2yRxcNpN22K1cstKU8WdJ7ZOSV7l58hKp1lc5fuOO3y4sQN7tjd3stIoZCPJbyUi34BSXE88Z7XArcEHVw4HM/u33OwNwaJvbQ9UaJKrNsOC2HldB0wJC9lHqd3kOcGd3wOQHAbhfActi6f92nSYMXQ2FxWiAwjEPrjKIDRJRqxW3HrcbTkGsBcGkz3sIGA9XpWOsgz6QJPnBB5aZcTUCE1b1XkgFe4boEz8Fa9aF6vgNKUseS7x6zraeNHgRuB7ZeADhs3TzuQmCdHiAfoSdhQgho4KPlV3jUAC3rsLnUkzdzmzXhYe2Ped3a/HJnojh6w5LlhL1G6IH7eoi4hVZFo4ujfrvHJ6KJ9pz7ZAGWgbFxvOKkwbx5okiOcY61vwUZjtFexISAc3GtdXoAxIXOB+pCehN7oXMj73KRMHPwKfNm06nALPmZpfOgADrSbOGrm0LbEDbNK/DSqL+1SR+jdS7xp0KBd4//F/L7mgYOlDVRT3GDIIUIzXOGDi5POpoi1x32DY/Z27/umYijPYFG7c1DlhA0vCaA4+0VwLpBQ/jsRCv9EHuDgXhUnX+TjWp+iXtCmnVHFjTULxji0n6mxlKHM51Rkk+D2Zco3giDOQ4rfnNs9hBXMjLR8UuSNFL8EOCoxirQHz6vd5ogOe661j5qLIxhLAFbZEU5CCM0yM69aOKIhPGQIPvSPX5hVuX+uxLEaKvtV7Pmb5wbXxVtnbzowSf6qPPFgkYpLu+YjJ1kfRgvASHi7DYUUiMWYfAg/E6VT4Y2+dP/N/eo4kPh1DuaEFSkEciXznDocFlqSbFKL4GrQdWQATJqTPQOBOko0O+dKDaWTnX9lyuIxe80XQa9Nbrs1+pCvAhYt6RFqQo/zgqKihdRjqXHuAszeZYmpvD6WLsm73BMahml3OCXEOTNCODg4orM5uQWQtGLh+4Fg//oZVV/on2Y7vSGAu6vRugLi9j9KuvQTvj1TDC7C758Cqa04hn2N7Ffk4OGo7FZqUm1HTjg1KuN6nhE5OFg6v5LEbC9VeJVwRZe7CInllRYpGUGecs9UesLkECptdEQqoN9/JpQA2Rx7q4iF3Z3U1g+BPfp3BdNKV6wSbvdoKIsNt7K/W0mPvbK12kKGbC7PN+kCtF6xhkqgqcShYQfyOgZoeA3A3cYaMcAnE4dmDYixkmtLMEhD6HvvL8ZJbMSEKboE0z31ntCEnZj+SZrC8cxQ5MJR7fH9uPLDyTxB/NV900pFnPlOZIs6+vXW6ZABQL+ROzkIzMzKTqJhpR0yE0vQlXzW8Z9QzjDZsfeQb07u40jQR31gIgAUKrM9dcw6Ryma9cIPEZtnnxFmCJpzYFIU4eacILkUf1gkjOfcO6hoxm3usjZ2YUO2C0dGkdq74vOPYLDNZwvnEepzmQvv4NEP0QuzAKkscr4L2h5zNqcGWHh2zeFgXeYsc9VwmjrdAgx6l890XhfHQEqdFySYEQfnMcQ9ovA8E+mEcAZTbxTtuYpIa5BucUD01L9vqkRWNXrVr6Out0zWlKHdarLyJfAXq+YybfGcVWZpHwm+VYIxeOJKZXDwNaJtRYbnKDakArAswTSXu5p0svlUgnAUeGmrDCYWc7H/I+YnjjiMwdhDjRslxl8CZw2BvQoI1XrB5gpEYF1y43XkXL13jT9GqzK2sAJtWTmWxYM7Lo9OZcJ7lQ9EY4nPyrz9Owh2BfFO7piIEl/TGWb/Qvr7Rizk3FFkCsBfUgerRzXVq8K6sG3tZnA1Fr7Op1swyE4D0/ht6M360v5gIK3uagsv/Hd1RK0/2qtCuAiOcSlhzaJhKvK941DEzynL/tpkILHU+SWhMPaD6RrCO4VPcR4QSYzgUIeepkEQdMDrzATWXPTDIixbEb6i6jzYlkWl8ea2HONpK9/GEfiwdmfUHtxWY/MQB8mreNHwA1lTeFC4i23JUEkgEtdS74bzUPWS9nyYqX3xL2zNKZsxgzoVuGdRa+JoJGfEYwID5k/MFIQdyxM/cue3+NWsmbs2WmWlTgzubJdqRLa7mWPqhDe17mrWba9pMMlVPBoaBuRzoLW7mFcZ4nmixIoUi0QdjgfxV4NnuKWi+t2Q3Dnhp2YJXJ9CFZQ3OGKCmQSWeO4Ei2CGBXLCAlnFpF8nsTMO6+5lqjN5Ol4s02OOYu0ost29z2xc+mArlXG/dG117U55oe+EITw6XaThhCieiMiT5ZyLjo/5xecQ5ui3LigU2GF/dK/Db0P/lsh1n2Fp1gfXfHHcadJJfgOoaWWL4AC2B8aE6G4WFheubGvwrs9ekSr4DRuQEX+gw8KSPbKHYeTMufsogAGW9nU8AxsVd7XhB5dy2JMcZcFngaVR0WILPq+9cqXyPY2sb8gZu5/Xeqy47WYmUa4+6fGHu1xnxjsfo2jcEtAOEnQMjWViG/C3zwoAB4aX5XVDYkBGMcXHKayfElSO8Ez3kiR29WCk6I1Jbw7+YMUGJWFnn+QclHSjOzYqWpnmXOUZpzHmKGjpoLvt0KexYnTb8Vjip1mzqxLPorW9RxNO1/7Mlx3k58sTIQ0ajZpLW4deTcPkFwKK0EbvV6dw8EyA4BMW5p5w5LMAspX/9PQLEXX38gYVBT7HB9lmWl62flGXDf9aM3q6Wjha2ljm2rhZiWvK2X+zpZcyd37vMMrn4r7iQiKoen3zCAKrhz8PvQipTz6LP4D+LPybOwyPR7+wOjv2wJjbB50m4aI96F82Cgs5GsxxKoda8zTMGWybHWW3WSWbuEXZOswaE7zoXGuMJC3HPNuMUJqNvkGmQlInAU8sAf6QEA5bJeKXsHwnNuBKCsUvCXY/rzO8FWZas5BmguAiz3CIrCrR0jT5TtiExEz23pWo/GcktvjdbFCf2HjPsVZXO2fCU1vnVgzRd0Rbz/dekIHmtHVUGLNGjVZuFFRbVJoWe1mvg/95vL+RLakjMcZyHc6fu+J6FW5S2erHC/vR9DVCBf6TPM6BW/Wi/KHlrAXo0Ckwfm21OVYqXu/yvqic0MoVxKTCUzAcJqismcASpaNE8m+JO5EPtTVLEpCT06lO9ZG/LdOZYa44K3Arq1A1ggzP6dWqgBWUz1lA4EVNoi4AINXe4aMC/KW8o9mtmVA5aJ5r8W4WQhf//g0/Evm+9yf+o3jqgFJSoGRtxXgKTvIkbSZDT3wxuCf7l6iOI2NetkiDAW/BC2EB+cTi9HtCggxlBSJxRLuKb+J3wWFNPRpa0OFOmHEU6PFAvtMJmJdSx05d6fNepZi+HIp9Rsl4tl8C5/j8jKVclQe9YF3aw9/YllrKI0BX8KkCypsf5VGlyu3rNlX9H2ezydvaBPYV5YSGD6Tue64tZnh+fOpDHyoVwIzxi9XBuCYL1fng6VPdZl1w0xABYtqZUWITUeKEXKBA3D761nCF6HLA1deGebXv1vsWNzse2sOMO6570b2P1UxV6l7AYP15ug3QcGv67g/wDxpiD2tBXvfPDwYyPCR8nnbGueHWZrpIGrhfs/KiAeiZ2SF1FtTzpFiC1GP/YjJh6/BqHYwQts/SxYFn2muepCCf7X1cPIQ5rUTMZcMFetznioErRV2zPIBqpMjMeRjVVWPmI0zXiG42FrqhcHueEeLJvjzPhxci0c+zEJ8RyfMXyBaEtrn/KBoEq1JOgvsBtGaFILA30ryNv7/bO96NfnoAX3eFyx4YrfxGXlx2Xu1H0A+Mrq4B3pWFK3dhl+MjF7cQCB/IIg553ZJp0QEpr9G2VA3TF3BbiMVzku0WUERRkuX8MSmVOD7fSfYn6sCOm/Ye4hDvmyht5khYE9ByjJJtedkkhbLoUKh/hqY0IIua8fdqjbMT8Hk13hn7hJGaC7F+xE9V28FPiaFVMl5U7NMqmtUKW0ZVjpQW7NbABuEIHTVuSODCxU8N45cJuGkang7ANbNNvgTCmqlD0Yjlxr42IeSNxpQWGCqghdwgjOxq7awRQQfWOeZF4KWrVzOK8M+rybF9xN3KvWBn4pUKJrcLWMGKy+aLLFll82L+4PfVGlg61M22++jz2Of97GgV/I/Bl6gR1qGeph0F6OOmwMkWgNDkMfQI1tZo3sGKOGrQaHJFWTfUVCuiX1edFoyj35SNpTIRcwpXI+2oWrlu3stkw6wx62X4WLavyjZLax6BzwZMyVuEkVGkMh/IR1xvAxhqS1xrW4VdYn3RbL37g4XcKbp9CDVsVJ8Uhfo0nAyJAYP1tPZDrHzF9QoXws9iluxOqnf+14QXnEzZ3MFPuVwzWFxXOIGU36Zi5K4Ud1kE9l5SEnUDu5VYyPwWr5jZS6/2YKnI546Y+Uo9F70UKL2Bbm+GdbQxcJeOsb5FZ0uN1bbebuomAFRU9pwj1BZtV2rQ+nOOsgy5x9Lro6v4yckY330BcHybXQd/fcxf7Q2+45hLYlDBjJgeUp/wafQnFnt53rQERn8jbKER0z2H/2pamDRAL0p/H6DAsxX2u7as9tWTW4/vUKsTl+eRjUWsvQLsEZnu5f18zckJaRBhgXjG8HCx5Sg5jyDxqvA4cxVJ9X+s1JYVD20XYlY2jrhMvq8Fi9ACxVv8STpjCXd1zuVhtQ+0KsuHtIEncyIee0IE8loP9tjiioA9PsilAp1lTnJdumbPC4G4eO/yK+IMUTdSHGV3Qj8HlyszBWU4/1YXD9AyltHa93dReKtvHugtNGAyFxJJObNeDheGo1y+JIqAxAPXc0rBk0mhZa8AO+BtAvRkGnBOWT8RhLZnmB6L4xEpnisi/D+j97uNJb+FAmWNKrr+v1JEtWd89oI2DZ96hTh1mg14zhmOWJ/zmlG0t2f3rRFedLYJOKRZesSG/EXwBYJiXoI+x13M6oKG5PiWG8IeIDQD2M9WUddDbpwV4OCRJ2defDHhb1cTZVwDrnebapZ5bpTJGhu4iaZcsJZ10QjWcfzu9NmZ4GrgzGhE58niaqbk7tPk0X0/JcDep41DJ/gkIAD5K1oxvBtCzdRINYWhSw0L6BEEXKkD6YyF6OBq8dye291T9OmeHMTTd+2nHtK5vfuX1Yp9dBnKRcm2LmXGy8jGP4TDn2C95cwTTLZ2NZoPa7IVVeaO/OzwUtQkluiK4MyL3/BMw1xPdwqCweSKk2NE4TcbPmUyI6HkDQ6ZVT1upL7lUzcZWyu3N4JGQ1b7G8uOIxYsvfze/5kVlqsHp5t6prmHT5oUhF+LeWBMcqlPUDGyNO5J/s/4p3J9Wo25rOiPzHvWG1ye2aoOwti+IoLnBTixbiBoBj7Q3h9HD5/+n4VR2Wj1a+kW5hp9H1551eoM7p6EoXRxg7oxGboDNZwJk7p3stpTEdrPI2UznTQl3DJzhjRumwoWgDUOVe2LPmsXi8WUzOuHcJeX+ZhY43hqJWxOYY9autzdgNCe9UBWGIzyi+axZk+Vp8WslQfFir387pGOkrtxZpDroVg0M5hLUX7ZIpvXpYIubCumU2yOxZb9kNP11K1MlMmxUKlhlD5Vj6zbku5/ENwIldfjNG7OUjqHQnWMayr849cHiyTWsvFI1ybwyf9cL5jG3vlmJ76ER+VlREPnvboP7s2Y+3Nb4AZf8Zf9H+pDJVirVZqB+3+SU1sV7iX4ubR7Czyxsev05VvR9u0x4V6QOOln4xSm7Q9+5p6C9k7uyTAgkqb7dEqQt2csrPkRQuFXyWnPYlN2yKVPFsvMKdunF9oZaZdOPCf/si8/XZ+4zyG6VDVmwsHTuTMmT6PkJ41JUogRfGOqxDNn2rgQrkX/aLIF8VIqdVYOos+hP3dIYiQ8n1ulDBHwcy1SDZiheRcdBfREeiXx1XFR+QNS/tF401dS02H1CA8J91huoQ73+fjtvw6IPNLa+gB8HA/eIkELatJWc+BdcV1LH5EanjNLaOSpmf9SOEJI+d7yC3gj1/zCCWGFLLEgTr5CujD/giJG1J5vo14nvCybJdYfJjT8Ryw7cOyIJYof5E/V4gKPvu50o5HHa5tx6PVHHzeN0Z4ja5tKSI1au/WHKExS2SoYTfFzX4GhLazpVyhoBy29VQqiUihksZugShFbvEkCyDcWishSJPkFDQojcQamO6qw8RSp0sLcoYuMbFFsB1CHHb4tk6iB7t1mKvpy94taGt61/kduB363Xieri6TZpJp0mbRas/+vMWTW0HvV4hRqJGwugF7U1cncQhZMh5GDMc+nfxC98EwzEoR7hMIZb7w9TGCkdQsFo4zkbmDgJy0WndnInJa0dm40pPNcyx2UdLdDoz1GqAtSYYivayDncJLEGq8nTZE2a9NC/hKFqpfdO7Evq/Mt19k6ahkkIPDx/gWCKBY0hsAlEDynmnGlpGvT3NifbH8fzu4VQvSHz28PAo+HzdZX4fstI93fkB6tl9tX0ciO06YpbFhrTLUkEWh4ltdKSq3vSN4l89S8Cz0ktFVuu6wgssqadCxZe8t+8H+BX60lobRxzG1fEDbE6323EMtyPhNkaD+rUfvrI0Y2416RvRmwRn/c1leYQqvxuAb8Z6v3w15kQHtLRyh5o4Gugsr5olI6s4nncqlXTCXPl6IHfnw8xvn5NiUc/LlrKsvEb3nnuXzJgrle4FCqbrkQ45nUYXU4g7o1XbM1IwNEs3nwcAL0p6X/YIzlVefMPi9bWvfmRgqkvL1rKo+4WbfRdp3nYplt0ZqAd8FiSvm9qpzosIciXzOD3UVFXNNWjRuE11IHZWREl1JfcUhKrKb1QYWU8TnVDN+tTKo2GWddWxpJrMxQcGX+41uAaM2HwyjIhcbpg69Mv1vX99JwOTXWE5G8oGL5pkHh5hyPfDqJaxmXEwrlCMndgS0KhEQTB3UlzXh9HTW1K/E24jjtsEQ4F6PhWpIb8ryNYXoBS6pnUWkQ6DRkrEGb7TwsPr/t+DM8u4jweBVmXL5zLIM6V3V5N49zvBA8HiCmk1HQ2CB/Pmkij1vtfjxHzLp2TgyTr5L+j8i/NgnGryNJWpcspKOmJELsJGMjedScnRPUcBKe0al6oJWQknwnCEu6d90Z+D+UWjLdyW+0R7rnyQDOOHv3JJ5TIWd9p1psJmVmTFNpO/ao0VHnUSQlz9okMowUY2p1FPzeh9n+bfA5qwKXW8EHWpc8zodZSSl770aO8FECfGIZ8FMhmwmvwBGJhXmp0K+5p5UWsGLMUpD+01uEc+GBZ4e0wdjGs5/ik/EpO5FqWxE6owPGqkHWjWSbPP/yPFGXHN/J2FvewT7BPp1+KT481sxBV33faX0I9Qh4Jv07YjLEVeBaDF+EPXEy/nasCrQ4VypzAPanElpSiTggtrtSn/vSFjxcn+sLj/qLPRfUDg14srNrsePDM7rvquGR2xDgu+z2MG85BOI6Gfsx8oYrvU9/zIJLqHVDgqlrqrZisqJHo4x1Gs5HW6AiIzOgmXw/uyyMGdZX4ZpohrjQXJMziIwnT3HIr0YLIUznXzdrYByuvOZyvOT0Z5/sc+RwOP4+zNPhWtNk3B17cKFr4m/b3wlP03JtZPyuZJVZT9g05p23OdS5VqBj7yOzWpTh1CiwUzLknkVJK0f5iSK+NU2FtcCf9+QnMSFYyXscgquJVE7a4Fqd80/91A8MYTDznqMnCdNmX+Yy02XMXTqvZ++a85QFFMBM85OnS/iN1gPOl7sbltv+qEoyktf9WfPSJFm2pf6SuYBAXUOl1TL5rPGxwz68olvGKwcQHb4ZNgL5TL1BC1zzoVrQ8td6o+nkff7DF3OqX3/rVdahc239ZSWrntQApUpAz6NWoE5DWzM9r/GdBmOQT4u7mqHDfNsr1S798c551QY53x6KBj//fO+plglh4mGIERX6fFzX3hSyNoXw5oAkUkbZxVbWwrx5P74pzEPw0T5cbHcVb3vt1Rcof/e4uTdO0WmmpttVCdpm+lBP9muuXX+OFFPY7OC6OK/L8Ii2aLIxZixB+IH85BQgJM6rMyMkwoIWmTVQkUU9nsMZIVBmc0b2TAhijDvV+oVqFoF2++n3GtI/cl1uD+GJOj1YxQq9+YBdZryH2bm9ICj0a0huwVbAqEJrYYFXIyFk8R7nttePpR7aeXPDVTsCQYm8cQ79km9hsZP0nvR+IZGdnQhZyFMoxrYsmOh7YJJzysnRJ72VIRSt44m2bcrTY7HJHWrSE/wjborW82tb/TT9XeHtBMrSxJPtKhKurnHLheCRUvCIiu/zk1/rxL23Qq7lYjVVIes7aHXet0sJJGuK16ITBUvaXlihwok/FmVlbXDNFaakJ0ffWk7It44wvQ5kicd35j4QJU6dNg7JvPvWWy+Ja5sZW+1EtrH0rTU8un510xYXkMqznoWrDUhc08GF2nxeC8Hd1rm43ox6Lxy/dEp0oYIWP5J+klsX9ck/SKsLHyiNJCFoyYTLjhyyse1clwryRVtApx7avAfWro5m63Nq80IX9c03BOOpXVfKJgi0Jq4cCZJ6y0DSBzLQphXLRKyofe/NgWup07Plxl2Zv2WggbKZfUYhYpNnHxF/4Utmpwn1RIbZQfw0bHpsbIcLmjihunMN0djW2mOGPGiv62qD3xtg7NpE7Q/wtuVjQX16NYv4snb6wjSSYqtmqiQZ07Ycq0I0qDfwfIDzaTC3GQSSpq+rWqGeT3eQ6nAHMyIEAyJyJgaPJ2XPdOHsIeSB4kN6aNXYmz1FqO3E9e1ciPFcz6YmKrWroacIbjGc0quNkh3l7nLCgQeYakjEOw+H8oVJ0O6q+E38fx1lvi6It20BRvfYStvmhSdRgX0N2BCC3cgZ+j05dioVs6uwOHUKxLEdd+8dfwMb9C8dDkKZRzz31qHM49pbDWD66e9rH6DO4z0TA4Slvp9tu5zp7U2l1TzHzbHpfvxFDX4Rb/gv1Ea76nCnVb3UPqHeqMnlu0HdrakC54uL9G+AK9VURzpAD91/TAJsEgCsTfi4BCrW/u3YC8zaR3r8G5IzJL7fDYaOwjeOiak9O8MSvDPNN+szhUtqmvLhD1rKa+PPJP8rFQuYl6IVFdpwSfIUQpWzpbcLk3kFFRSLORF/1c3LTG6X215vcGGEeja2urDswC/WwI6/IDCNqJMrcIZ2+9NCCLnvw9M/xIIOzlVz/mf1On1NEtVlARVy8hWFXzM/qiXlXY5q1LyW/ctzQPswS8q0T38gS1hBwmQnO18AbZmW204Qsd/Ox7Fk+AfXcIPPJYF6j1kk0CsF/ccCGI2S5eM5bEPV55NJYnVz7Fm2YEDVzJKxjH2RWy+gtpojWL6nN5Wxm2Zkop26HVZoeSF513XFljPZ02jWkTclRpHPbSltRmjfOzUzitLjF5OTBqXGpZeVAibZdC36oF/Yp6nHpyhCdKbFSRWlNe/lqYlQY6nLaZr85dysBSHthjT67lFT3yTLCm7bgvjSNIQLY2xwaJqncky484mvcKy00XTAcryZUluITNKD+3cjqKkStLXokExV+K+0sRITIKbkpOEHsEMoCDl6SqFkRnU8vcRrndj05JdSfnr/SZKBb2LQwk0bnmjX7hw3+oimik4/+nC5tO+hTGHgMNUI9tAmF4For7AR45i48shbKlcSK2JixSRSFhOSOZXSI1MG0TKFarmTcMe6gWo08hZV0v3guTLXa8+mp2tyM0Efnp03k4vkO5V2lg6NX/jgrxII7xqOQAVQKh3juP1DM8SS6fxywiLSDnyfurzKgvsVGj/PFQg4UdHPzwu5L/awcDVimuuwRCQWgvlTi06tRZBa4/Pfo/S4ESbPXkhIz9gMv240/OIy/rLQJ9z75Klu+C2vJ8uHCaeeRX33MsI9tmrSc4I97mfrFJ5zUw9fK5lxVXQ9KW9yTTUZrfzjXqPytYbRK1PsoE7OX5WbUP85xAF3t00nCgsvevgtNQDh9H+/xEBTqk7o+1XvCdPH72oS3RwOXgZllzgybyCKDhxLRmTKvjqmNP6qOrL/kKdR99PmT2R942trI3fjFl1rG7PMNh/by2rnOyrsbcQUO/ecc7kudm16ZGNc+nP8b0CVxlOinCBzVFZa9FqEb7Y87MvfBGG1+k/oMhODn68ZGoQsuPd+tyxaFM9caqOz6O0Y7vQ3LSui9vw2/BjD+vCrgYVnXP8zfT+La0Nues/VgJEUA9T9ytFnRsrU1LEkS33E+NSpizqMfUbA3w7g/b+PZUKSJh/rp6DSz6LU9x9b9RXGXr+YCtYsf/V+dFUHvK4/uq/jN5A6/kfDrsJockwlMmF62lYx1Ddklkeu1lpxfki6Wv3+UqJkl/D4ypwME9FgUVCbDms1/9eiCzUwH+x8CxmdRGKXfOme784JPK+pa+Y6fHZ/VFeI/S3dOo849B3/prXM0PHgeqxM2VTHhqDE48bUjU6xmxnJGxvCkkFvtsQFju37dpe5GTXe7Fyj7QrVrASyJ1N+LJs+2CSMLXlotuPyFl+aVGElCvipJU/+VA/QmE7HOvPZ2U8XptW4ys70HqG5WU+g2xE8ErtaO5+4/kxt78pyjDXK73xgv5Q+tTVCvRyYsvGEHGrzbcOGdF7j1mYzfvle/Qon+Q+1eimLKkVuWuyk/iWVLdWrb+LPVX6lwI4t29op8Y93piHUS6fLK/7kX0+fbmbRfu7jt89oHFv92+VU5Hjj9ilZtyF924Iklk7eqCE2B0k/Eiby2iU8MiY06gZsxGFn75es3CalUD8s7ZB3KFpLzJRmsu5iClWS1ABVmf60twp9t2S8K42i69jp/gO3Hbrcs432GLrS2YfhHaprnsaLPrSsqiSodycW/yHZt31P7iZT2pfjAFrkPE9UCXVg3s57hJCwoGVYj+ZbUKY8wvHMt5HCCKR5BSIbMX7+EgEL15nY3pOA+sw82L/1Lyt8VxJssLW18weeOmrex4v2GLvTvYD9PpzeyIv/MKBe1U5y7tHMukEW7QyKp9G85rGRJ+Ty+YdO13Fy8z5a9Zjb87fJ+fjuuRLiNeLSnAm+iYyf48dtQ6NHQI9BcK9J3D490D1jsffwX9b0rhhEZEtgG4pAzDiMuENn1zIneVAWiwFdxvjMudzqHKLX9JUsAD89YRYyh1Qae2juBOqeuH1/AXd3BkNYJAXNdOB8xEJmnRA/lCxnXyAego/6HJ9oQpmGGo9PgdVJnaN8GHTWcH8Iwr56uufKurV5a7MHxzR/NFrEPjtBaBnglR72K5EWcBlAJOMFGB86+bbwqPXAjAic5r1SQhpc+71tQKnsnfFr0Fhtnskk8BtP7+l80BJcvMPy9D30d8/bp5eBiGHEGR52OmlxagbsLBme0kh2U/tLTHwzg497v4gVdgVW/ZK53HY/21fxuAkVnaRU1nDfdVLJol5T+6XyjwawkJ6mcdMBPsHEv/Uny6zDZnsxE2to8oQFczgGUat+7I/ebrl+aoGp6Gw/g2J7B4eeU2nvhtMPxYTLe/inx+SJTQfNi+r3a2tLavTaKmNTjI2sywnBaqYWpUf2SpbI0g+ah3Z95SQxblefikOOLW+z6mj4pyCHFhxLe5rOUDvzDO5ZYd3xMIGpXPOkiLRT+/D0NbdAi/+TVPFvzQGb/SrhNcFj/PqCZaVN7uapRV8KAmyLC+4khDvl5eH9Td2Ocoetv3s9ynPWHPU/KDCXWA+pLubjkY/8XpqD6UzMrUsEB+U2dh2AEYSzjBunCpQ7OcyneE5sYduT2xK08s+ng5q3S/HrKaaceVojMnZd2U1NbW6/M60LEL6j6R3x3kFraZ2+jmEL6UzW01GiGZlas7Fu2Zel7yV8yf3MJ5UiUUiHF89yq1iDMVRwNj+EGZOHws+ecnCQYoefQsQQKe5PIrXnsmROKqzWMi8/YnLNSrEaUfMvS7rR9Cx8IeF7oWj8+YSbCWJJIvGFvt2pXAl4G+EMnsQW7bSsjJQ5mSc53zMiBTD5w9n2RInSjCI4QrBpp/4DcpRDxBPx3ETg0B/97IfmdOjCWZ+dTMzv0wXfP7H1G4ER41H9o+TEwyig5UGGWKRC0UaucYRLwnghXXiKn01xXfigzcsy9kgLnfaKgJhgWeUqw/hjgYgayWR/UlhjYaYiEt9FKzZDDPMFWsS81NDIddJ4uWo35NH3/CAkI2D5qUtScci17YfZRcHSk8bFLEFrHbfLsUFFZbPVyQGkpPP1FP+L/shGeb/nth+aLQNkdVNazwfFyiq2bYfOCvC0v46UJL7qkY/bh08POaR9gtVTb9LK1mIcTown3o0Hq1g1vyNmjLsxvkorX/VWPCqqeedNXrjY9MA7sdehtdxLuOJPZ7Tbh2TjHl7X6IDW3lqXfnuZvkDXUT2vAbJ7jyzjYINXFj9yyNH3BE8abQ4KARdOBsZQIFZUDC1lLSW8Wj34v4up1brZ73Or2swnXwR35zlFP+Pr03GqXm8bCHHqH7Yb1nQg1TqMnbPRSGsZ17RSCb4woWOp6FA3uW6Rr3dlOs9SW6p71tR6huvJXIc9HQoxV+WxA5+d0w2uhK1FNPO5fcFkMAlLfB6sqZM9fBPYWaGe8/r2xH9G5BcPZycttQ+oCxgzyAxtSdcormVpeUDvYy5xJV/7MPzNapkm2fm/tTvqv/R+rz/VwEgybF7W5GP/sGJjiMVvLf62ncfoL4LcfVBjCb+4n7+YKE/jjn9BbuXgS3rNMGUj5v+Ob8VAwexV3PY5FfEjlf1J9c+r2MNHKnQ9mkeS8utFXIcpMjei645mJeI8wAdtQsK6l/e4eRZF/ltf5WFhv7PqIBdNUl5x0zvBDy35WKtiScUB7IinpbXf2B+dDbVlcgue4JYreG++qtmx5/n1BNi5JSC967t3gX9wRmBPime1qWuPl5s/033XlpMS/HPbgB1pT9mqoS5rWW8rk5/dpy2tcUVw7iwP0GwokUtZtGOyzAqvbhS+rTqZqn+y2BFJu3USPzdFe/DMdKudXeNp6BaMc37vy44hZ/C27o4WB27CaKeNFt+Yu2NK9c7Q37KlaAT3/PO1NPtnm+dJv/UGtm4TfMUiVvnILbSZ5SFKD+XX0grVgny0RKEekgEYfG57/wyYWAncV4GQ9+4e8MLLxuj6nqNXRit7L2CWxsLab+L1BjprnQi+/W7lR5SPi1El87T++bRMLVrOvExULe3yfLW3BAmxiDQKx04tfqcx4A4XE8jXCD0Ly8Ro0sUFRUIE/MXUmwMNmNN8wUEd7Pqq3P47KHZvc/8ZWPQQ2LkNq5qfG+1EPVjK6IfgGccPGgwotkv9lVG0oPmn2ddpafNSkbqUJwshTsLEV4vBaiAcdukS5T9C5uIFYhcpaEGQwEPumX+IlwamxmtPOBGC048Pp2DfFvYPf0JtN9mOlqCyBykHq9Deo7MtSVTGPnTuJ354S2vAjKqxml1vReta6M69TcuYVwuXIysuylvhcaZLS+I/Yb3LBkhZcv/CVby9+NnCI8SE8t+FMOQZcG/Q++w97P+1dtZBVajvol7qFlu32y5KeiWtoqCESKiUdIcIirR0d3cJ0l3S3Q1rsVjdXTTotpOzz+/cO3POnHPvzJ25f3wzXzzzxfvPO+/MN/PkTmXx4sU8FvZYb0UHkVPsI9d+UDQ5uZeQgqd8jpQarRSdryiDuzFKv3V15XbLxzt4OLKoUR20+CH6u9r4orQTX1Vi6ZD6rVvZS/piSw9jlqLETjt0w82E7YNV4FeuVIif74nidYi6DTFWQ8QdJiX4VRIOC/a8SJkrqDWuE0SE0EYXuvMHYnN+5v7eLK9Xw8h5fK7mrlnGKCDnmHnvcGqoqcXAkJHjASvEcKmmm13f6DBw/VnXOO2yZ5jU3NYFXorGAvnMhlR4M5UTJ0XtRPGqZFb7PAW3gdSJC2udysqL9us37htOgzDKJgojtqPhtpa9D1ryXK52WrzOcwe1f0+R8cS0sQP2vTRtw9qf9h9vX36QHSLXOaBcGPmoBy5xPQ43dPTsibynU3bnnGR9ywM4VsBLtVNcS+hM8xS38sb9br1V24ecXg3KvOVE11s42cWydXpg9IVI07F6b7/39WcLiMEHa+3iVcKVa2Z9uqLVa9Ptz8Xfrz9o0JLEbnp00zW9qfWm7Nec+x2QS5tvYkd2LyUCmflGnD0Iu6Sbm6f0vJzGqzPYq/vFy7QXaTAl8591Vk8utPuLViIGToYtlk/X9ccdenMvvzz5YplNrF4apUzVRzNz4421/ascv4qsR6fytau97pQV+daFg8kldU3ZIkcaw3qnhQchbgk4AUQxMt2Nx9WLzFngnbfrKm7m9ntbl4ZQkkM3SnKXoPEZhe8HbqWzC9Xqp/OvFEgX2Ba5FxyKHX19Jx/t01RmV9DqoFGuXhzyOL7StXRFo626vuISrKyWV31MLKSD+BYmuqMwEigpmHxAjFwQYG2S4t0EZ33a0hJ57bH9OQnM9Ix32ckI+yKzLIWhgDelmUON3dWIDGqhVb10+lTc3cacdC3fY8126XuOwNbTWaDHhLaZXEONmreqBU9hE52Xi+PFTw9m1vwlpnX/nuefW7LWt/yOb9j6xAX5rX1OUo4eXZ0uVki24fZWvUp2XllvbE0WG8tqe5DU35reqZqQVZTTzY7Dxx/u/RHn60vsPxa363RuAJhg8ZgyGJA0ol4/hE51hLoMc9PTRKymPhVChYv+qZKaMbl+b5wqd62TU5/XbXUU5QQQNwPaKqNvbex2G0R/JeQMAKO7pieHtaKc3wLHz4TbFPdMmIXaJtyYNA4x8zeaehBS7rQxrRXa/Lh0Bhg+dfvrbERkD/DV3J/Ri5fRC7dTS66Ug+UhJZjSxEvmBR/YxUUOP7eUmjSfeqyHDD3y4W2UztQEw5njc7VBrkuzC82B+T2KSwhf4hs6nOhtkryJeOvlGGi87PHCz6kbWf1i4iF+hfWy+GYzasJ3Qwq+7BnyUXwIERd3UbQtveq2/ecHrzV0wO8fN1x6SNvy7n9to7vuuCDkPLAej1V++WOtFrfodRSrRTzvUTZUT9J2q6i+ROp0Nkg/REpxYAeZkr7aRTjrUAztZg3iael23iqjuGPOcXJWqKNeu1InkTOvdiXOF55R+LDtXK+s8mprr++hWui7g7NK+p+3plEmpi1r1vhfFqF0G2q/FR5rzzpm5jz4jIExhlQ0sr4YrCRvcu7rng1QYpncU7FZod+/NXJPiVR374J8NPbXYw4Qi262y5RBrAx47kodrXaDtQmqG6qUDjDXe82V+3i/MQs33HaMyB9UJzkHyZ81Jyk0epi2CpJOa7+13GFOO61yuiCAFqQUH42jGCuce75GjoL9sDAh50Fl76ph/aDysD9QTGg62A7dYXBBzgLtbN0hE9wUBb3K5fRaQnN5KgtiCttcEP6VApGpTUxS/EZFkZMVf5FqyCyFiJlFirH8sTZDiiz0Zz6YtAFpjNoi6oMbXpwh+oNPWaNJanIfNG9iHEAr0HJUNbgQXLWSCrkMckUuQEKBWcIE5HXGgnA5pphhdrWM/jfz4tVDTAv6CQnwrO6wnui+lX1jl64PzxZ13AUKYSDtx8Aty98qlqGH4P35AEgN3CyhFXIbTggcBqost9lfkPlj5Tz0qowtkgm6KKuDNJH9JBe+nCfDEg1fPMj0FLFZsWAdvsoiTrC9rrKYKFbwNVW2M3VB/B39NWpPIp0aOhctF4VX7rUFt62U1mIhmwhoAQJSDjeLmwHnI7a9JEGeSIyJiqzKSgakWrZ+RU0uHwhC/iUzAnqwrCbdI1I1F8zVEqtehLOSRH+g3NhXhbMohZwZ4ViOPeeIuD47l/RIupthiwgB1pJXx0yhdRhBiwpUE0Er6oV0w3ViqsE2SFu3CmA/5vS9RtAxVBm4EPRzxUbGQQ+FshE/Zqq9YicqKaoxbsLnicXPjPFGrv9eimMPSiSgEzma11XoxbwHMobcB2wxSC27Fjer+p7rBn+oMcYUH6jX/ptqVF2pA6XYpAK14sklHmoaF6l/aeG1xYj6sp6ml9ANYpo+BehjwtGhnUjva0US6b0BfIvrLaMXVt9L+kx7C8Zkbi5t8M9DC7F/ch/eWmOu8yV0b1Ee4aBGPKzE5E8LJlLkLcB2Ew4o7bIPXToWR3HgLtZ6pDh1L00bRnp0IljyNX6f/9mZGgaGf79Sm+0Jn7tgIhPXZseNlbXsieIvAC8Nhq2dgJKmJNaIGtbwHQHZ5OeyJnnQJmfx8VKoW/7U0oD3C99xu4abvlojT/PTAhqHl6Ksg/WG6c9ehqNHuowmYq+Nn72ln6Q8dUg6O8VpKuZcXWHZvPtfacCMykGOAFzYcI13QB7XOsSj3dXtG1mLs9Abv8stczk2sos76mU58GZ69pVq719dDhExXY1VI7ERHVNZvxLL3jaFZaY2dlxzn8z40BlodjD7d4/pXWRecX8QJKdoarDqalDVnSnhS9HgD4UErpm8UtlN3r7bo5WPeTFmtk3S/IPuSm+d2Dv+5W/3Y+YiFFr0ptwTDzXVdPzOyGu0rqjLfdNgmP6jEFi/HSpXTGjIcM8qPdCk/4TwRqdVXPt7xe5bKaXI6oddMRLbrarDR4VHYbXJrQLZ20FZTnxts8q8HM4zl+nSWV5kMKM2gnst4Y+ai9gLme+rNKaiiiormzvjyiMq0ipmqqYrEtK5tVLli6HWdYQK62cHGyKr7lhAG3/WuuvebTncEKqq1ubR7CnN6jvY80QMo+ofVMptM8VGO/J7XIwT3bgSr9ayFPkvMk6W2PArSwAlO/g7VU7FhBnXRt3ijm7dtuDiC5XIjv2FKxlynR8KfoYmdt8qFH7G6rlf1GnR2ttZ8k33YL9wWY7K3wMTFY3S2+OQJlWxZLMDPvs3Al1YAZ1rT4JdQ5XWQamguK+r18pZmesCbOt6rhfZutsgF7J4ZOBC7tn+4OGTWV+rRUedMq9mjI/5Z/wRdn88MP21R+f4z4wSS8WJ4UzG/YzJxux15RNTy3lBEouz2JIN4SFPSyfbXa0wT3fPnf7Ujz4Xtwll+cFhmxmd7xOubrDGItM6mOpTEqlsZN8MK6ViSGv+RiK2pmTBP745a/8CNc413GXRNLbD03xJJnbWwhn+Z9yotiickpAhH4joSkoTnUOcyCRc23rVbc76cCG1y+7De0iZwJmw2dt253nxesfIctCdtdwV9TjhDRzqTGw9XgajGn1x3BzbGnGycT/2e6h9DgsHDH4cKYo786rf0x03+crnCRyfGSR19yVhNcQQxEKVRn6TrEPOJd0Rz80Eabt+nK04pv9zN7Zl2OzKptSQqdP9NeIi5dn1tfeERp9NwW/yfT9dIo3G91mbbGecfNHfZEcneUTn8OhyT/sirlH6XMueDjE6HTUfGzAPueTeXMVHeLwDVaGH/BpkTqCEwnUkbYrrlFi7zq1JN/t2MSNDOh92xBcuPHLY8sbAre0Fg8QWu090DgVrT8R9oA/ZfBjmMkrMW6pcGAamJmnRjNrHP4MArDH9/Q5/Mz11nt33oSk9+KIEJHhY3Qbfx5a4HJRloQ94e0l9r69QuLRq3PlJ6dC6yvSBm8DtXixOHbATSbqiXc1Qo0Q8KKMCGM36qWghRrX27R5tOvm2WPER+lNV5Rg6dUMp0eshVUixzXKDUiKPufcRfwSGlVfBAGCdECWsy5NyuTXMZfsU2T/bwmEufLV+iPwlPmdFU5G6kUmwVo6jfyJSlPuoneRm5U0SnWKkZDP7BwWteKpthrKocDB/hnILNhi9S0qBxnidJa5BkqzqyaJgkNYwNgH8HhaAToQEQnRQ9yAY0PaKC/Qc6IDIa/RLVvk1YdJbzv1r+qxOdto1E84L5rQ4j3EPy5bg0RhL2hKqK4yhyyB5DLn9GUQBqVPRDb0Ln8urgDTCrRNuQTzgvwOBIADyL/s42f6VTShf9vNKF1hVTnklQm5B7hOSIqsuNr6kzAoQE0H/ZIsJz1LgHILwV/Y6R1FMgaNIg0lOMJbQOCkM7fP8a5A84VbvL0gk6kotByqPMCwIgNTC7eOAkEPLN19sQU6udJlQgAaofOgMMAelATIA0lc2ZLVAFOSojITYwkIW1+6619IKW1ciHePEBonF0+9yZ8RP8E5x7aUOcLJJWDk4882yNphJfTz+AjaEDWyJhJ1DPClMhTQuzkbbQDDLH93yINXYHE1tSBiaCU2DdKH15IofvcZdE2+wGMeEiHaIL09e5s9f/zjH4LGkxODDnFRZM6wr5w/pYywXfiA4g+vCwsvHcpzxUDVb3kPEZW0dFnsIrD9EO1+zq1dBS067/yCCuuDZpHOKbqrDMpCihEHSrTzIt68XBB7Aeom7RkDR4yLZUoN9BnyBVOLY5ipFBjSbJaADbyzr8VoVffBW3O67PqwTXLOHy1xr2qB1EGsJ+bfrOHFmcOLZEJ5Sl/TcAofMZLwE4HoC9X1v4qHWzwLuUbZV00PESHTJ+jhNzHmRpIJzK+qXreW03uJ5IUB8b5vACYwYebxurZA9vbZGNGhZeSKotMOQKrkf3DVwaBzM23YlZAb4SgPe2PUurG5xX8WLKI95eComznQ+wH8tsXf+t014iuHSPa39WVfgKcCF3HeIsQstpRiE6vlVsEP1F+5zmELTZe6eErx9lnfCkD2wtBpklz1tzr/2UnlhnXE5KHg2A/k52mByduxJ0tL41TZ0OndUrvRyzrXh94kbBYDhAj/RoqERC7uQkp2xfL0LZZ8mxZUQFcjpWDGVOqH55Eu50IESE2614vXyMF64TkyNMnfH5l4rhNf44l13NGc9EjSwQ/FP2hv4EyGZHdILGW4udu4eb155c6NroPhsZUfXkfjeGvEuL9+XtcXdEfbZ9XG9HMPJxpmB2ludze+GF2RHOxUn44V1FYXS9Xk0bWZOLm/J9kDRGa7586sVRvwzkWEN4rwr2bJtvrT4Es82IcRmdVqL3khm04Nmy+aC1gfNsKLY9sAmt/iit9imR75FHYLmGYfGLp02g8fnuykdRuqbvfRuBfD28KHB7euRuotRtwXD1nVx3wQHPc+mHue+i+rMfSe4kXe2DMs/VzNUw2EQW5xrVlfud1+ogYwN9n+qtm6pGzpTpV3UNOxdqRu/NHK+4p2f9shyZYFj4qig2u3xjXHp2qY7rIl7Dd6g7ZmrbQhxOSv7gOL1Xy/zg8XXKqMQkaaC6ozcJBMBrsYgt35Vsh9eFsfdG5Eve461nJwus5sSmYG+1mqdn50oPl9sP1dQyEgInGMWCvtfmZctvO10dn6qyOAReSGj+NntA4vFr23lJOB3K4giP31DXfftLMUGPf+y+TZrLwC3sV0pEhG7Pth3IuXBpvLi7YLf6yhEUIEOyQ1pkrc4w0KdyrFqb0bxs46WrKL/yniSeBMtn37PPxMtndbgGIcuSgcYTmOupDfcyMVey7wrVYk6nC8hZh6naSP4uy+z22lmO7Tc2F12fb7jsLf5xtqEQljUOgyVkjC92kW8n9JBe0I7lDq1yKYrJsG6uPSLcehSP6pXNDsxkGIWMe6bQHIJp9u4Eo3COTpYgm3ke4VwLDVeSKYBfTXNUyIzZ88A8J5UnWwsuVXU4WyfsX5xVMbFZW1+2c9rel2NuBtwj3uJ9O1VBMmBVh34e+Y8neL7sUWPHup9OP80FfHiY+QkxcZjwwNEeeK5z9SCbvxPakknFXr/gAZi/w7Kkv2J7o02lOp/s0817u8jnaXaBlsaEx4PTbYwcK6F0KYQXtXxFH+WpO0IpU+R69zsiNfpGY7nRv0Y07aWtdsMEUtGRglj0vxcSARLzajFOZB96yFaH874ZmKsgiJt2ddAPmLrParlctCb/mdkbrTaKYmvp/WFKAs2JRBKd6t2B9Di97nrSqRufT06nXrWyJ0aTnN9cgFzgaVoQBwIZ9Xev1mGZhrfGYmfoKurFL18SXuo/NtaneqtdEjLh1Cq8ErhGSFNJwryDi9lEwBEYKNdBmR7WtYVYzgZPUClKC4d3axydAtFGFTB09+ShFXFqK8px27ukW9R3ip/mFWhqikNtP9JfazYWQChOijkxsDJtfLSXh9If8OMrJfJfOhVnXO4JugZeT3MU6gVZAf1DZoGfoX1ssyWyxXfj73JihRmU75zWCJQdjfngagW5wdrvwSNeRL3VKqf3rQ0LaNLyZg6Ab6MtWyvgxQgAytSoC/gC3lKkGa4Y3wlJAshHlACKkHa2+OBx1E5sDigGsocchnogRIHcoGvV3ZlCdevLX1jH5O4iB1mMUQJdBg3Q0yLe5x7SkKPg6GFSK8zGzGeMlmM4wvuYB/CTp8z9ATKo3YF6oIwLTgOqYe7xGZDrJd9XlRDb/9TVauB4OjHsHzQV9QvcBpYCtUtt6zdh1O+PiwRsnSPIyzxG/6WvSEtj/NhP5c4xOzhvZE04RlzPWSauCpkERCN5bE8BjWmKU/IwfqwZs05MBGEaAEVwlzYi8qDyi/vuQFhz3Ehmg7QL5gq2MjdQkKWnIuJI4EgHRPkgT96XUQCOdknOCe1b2GHtyO9ixjmwkCa+ASOkex7zobADNbCjWGNKUZyIfh5zXJeB6LqoSMreEjtcTIdXRf36AwjJd3nYQf99wubRya0GEMVk0WagXy6gyStUPpbqAFJSGIlqgN/TCxd2mEgcPWxDHPi7Wq7nPl8mWANDEZ68FVV4olx3O9aIlxDfqD5FOcQVcNFmLOBSvGe5B6bGQrQYl/tuPkqnLn9GhZCZFZEF4SXMwufKkeU8AzuyMXMMDLASylVxF2Jq8V7uC7RSuBClx7fA0zsKxJsw46PzW3IqujNX1z/avoDvbJ61uEu9Qq/9CWPrkwPCJmh+q1ExJgRKGOMhKe43y0HUmywOQXR6WCMIFIoKwvT4/Y7Pwk19bCh5AQKpWxTysUFinCqfNAWl/cg7+og3A35hmYNXtANZpfHquwTxWEvAdWpaAbHtfLLW9Smv4iFrQQSN1MRy6oLzJxHS0sD6UVRC7r1V0sb5rVzpipOz4WH11YFzuW569QIz/WbiNXlLTrfDm/0RQzLZLT4r4xceCSvXjrN/aRysEKV12NqWl/PT3egtD/h5vtp9nSx8mK3RkwpD3Jrpz7hsaWHJ/CzGzXb4zJ9Sg27Y/I1pS0PRu2zyttqR93CMO27Y7eeSXRcHN97EtIFmMrXrOk5OOsHc+o7uJAnUnczO3OeL2oql2vMOW9/p4THfeefUC3GF47vbergTObldjjT2LVt/WGE1FZ078KcbfdkD773zz5Mz0r1xgC2xycLNHSuxz+sZ+hHb5qH0sjZ/nyL5FHzode6D8faRz+pmI4LxmMkVE3Y0Yf4Iw5/JKkJtHyPZ8jzW+I3Cl7xaUXyFfU8qwbbeh/G5z5KexPlyKhQu+RC+aRjm0LfqWlQS0l12YxVMzVLdXZ/c0MYa7a4GekRPmfUCrB4MS/TRtXRXLj2dkpRY9G064z4EwfJgMrVdV+rUPe1qSSX2L9Xz+ddTjsviGxYKvRcDRzoqjjJzZ2Trv9En1qSr9uGP0f01Zr1w5B51YU1wivqVQlZ+JWnlZnhDStjlfYe31a+ViZaXEIhqijaB1Dcqk9QGvpnjaPwlUB9D5ntn8lFvvu3T2XXvlrbGK/bF7OxXjKwkyG8ab70o3h9Yxkr/eY4S5F0otx15T05r3R68Dq5rkSx9g+yXpFh1gfSXoF3+BLBONfp6WecICfQ2Azbm2Os1omdy6+AoLBHS0ykhFPUHD+8P58X4cLbsq1M81zeONMjE6C/KTRzIGpv/Se6J0WR70kcSR+k5lAnMksRB+hn0qZ6hegnkg3eeFD1EoqSSyjisUX+P4i4mAb7a4T2GPKDLbxhbIVSF+58cg+oHSuVmSp9ubDO8N67tmora4PN1W6Ms/kaeeLSs1drO6hQv8l1D+LJIHUmgNQX2kzqpT0Jk5+7QWMEfW57R38U8LDgB7XW72z0R8pBb/vnu+QP3kBzIZrpS4aGMMkqECbPJ6iHJ4IOYv3izWVEGo/o7NuuenvTYHGTOP2X0fKWEiLIFrDRQEA6XeB+Jam58mi/yQoeA8QIuqGb6wSMUe643SDGKLA3zNpjRNokhCUzQyx/u8WxpCxfGeFZDta0mwuUNy4XYMV4rZdlQBLWMchL9km7knLTptzwAdXl7TNLOw+it0/g7xnu5/mSG41/MiRJhy0eUOyoN6wm8PdZh00ih0lsI4P7Fars27qOyc0cH42TASr0hJsHbRi068o87WGSnNJFxdckh8cGMBlCtF0RaBF7xfOWLL/jLyUcT318S7luwxCLVJnckSAeUX1PDyCV39qh9lOFdIPIBIaYri3Km5qvcqX9NnVC+XJBAE1JCRrrQalQqHnZS2bLb9ngKfkw9P1H+EXYTQVxrA5MDVqAbodpg3/hSm0lgSrinbgJdqroK7oq11eUycnkbIjPcy1Z16RimR24FRllhh5cQtaLaj81BcZj+9vhECYyt8IEmg2fyp35J4u5xAtBjiDWfdHg08hShwsgEfRZ+X0gTRQdggK5ohpBi6Bk1Cs5nsQBhAMnSuIN3pojLN7FDOTduK7B/cWdlJrkPqS1y75hPcKQZd8xmIsHIC5E775qaACquLYOmox4nF8OSVxai1mBlC2XvzCCiaGWTAPA22iavALkKDoTEgmRRd8HHTFMJixIOEuOLe1xCqXcly9xtaQ9CQqcHSlJzhG+mTSNZ8vVlavlNpMNIGGs4eVRmAWNMNErz8WsNQdAry8G5QMg5AVBJFn+EsLC7al8Hf6y5m3YZ+x1+WRtMgkAZJtFkNCyHWE04g+JCMm96XYBVuYevIU7KvsdeYlnDeQRI3jXQfrcNb62ApybzCq4eZGvSKrTPcl3W35lHM6eHO604DIGG0MsDtNZmcpP1BnRPuqmtQyFR3kWk3SOwoQ7mx4EehBVQsuWvp8QS3whkS3zblhy7ZUcfMpjNQh0erFEQIW+XykWHFBjU1L4I4+72CacVFtvdiZV8Vk+ZxwV77cpODt3PLCHZ9ylExzIDX5dHoFifI65Fi7P/eB8K2aDnXlfKvks647CdoEOJUZS580v0sfrMPCVngGBGbSo33X1qTxmInidb3J2aYhvYknE+q+mu0ZSD3CRgXepHtRr0UGMDcxU+mHurSXRnJf0bz0tBTq0LxVlxUhqUrJv6QiZ6/13uRVJySK0RprwVH289gP1qzSlQYSQKnIFNtEgzJ1SaGk15f35KKFfXLBjGznKFEBcv87COaeDzJcuU3kJu+gcIrFAgRSJPf9mDVs5famqG/u8U7b2C2bijUijNJqVlNXshCb52rTGoG/b6Lcj0BTt+U4LfCc0vfs4Xl3yDyVIaTzn7F2LyufcK9bPm5X5xU9PdjnwtQPre+cYJombY6WkokK9mXb8TB0Kboh60Tqz+HVCtfPr4uX25l6xBdvSy/1yC4+StAZiF8/7TQ9aL32zzxj+C5GrXzjStmJ8Q3gsBiMnNXivKBvJy7X+XJDHPepcWjbHywzqrSsQnEmaap5ibhe7d3lQjjSEDDbh0X1NE8kopTHb8ajxjgnexPE23amAcVwJedp34mii1Yzj5FN/l1mraRPHxTm9Wf7j7/Pn5nvv9C1oLPwEnrbWjnvD/+26mVzE9Qg6m/WOH5AaWaLNr3tdVlXCyW5OaSTRsgbwHU9Ij2Z6+u+gthbj+hXH6+DTfT6tE8tmfYdKUpBX+u4mhiIX+kr9n64E9E87zqGuDRo/MkEhhxBqbMzB0XNyyS8OB9esiwRiIn6uLaXIJB4TDBbbZw4IrNtLXgcIqodUqy6ydxaam45RW7DWb4m4bRyn7fNEJbGq9XtbJ0mmhfB6H3GjeSFRlKTVLOf3mwBpdLLbxHEbFR78wOo3MJQoWN02c+CvCOkXgVvAlC+BwltP87+E+m8ENhkkoNbrR3Zz9m0qwhGl+9ZCcegKLdpnSkOtEK6f0VtzdsKETq8gN32lOpe55NFIW8X8yFKCXKG0hzSutMDUlIiNzqeri2Cbi/Pl57FGb54BQ1NJzsLvXhd7el7f/KN27GXZhnYfOFRybW/+RbzGRh02K22IE08kZaGoElTz3J/LMXS17BP9HrT59F8VvyiclJ1Ue3JIEiQQSQxLuObwE/8tXqDPwS0nnlUexJan50LVsPQcEDD2Nd+ka2ehPsDp8/rjviKXjLWZKU8v9PojbHTwxfVm4u3Qv+kjpDNRQiR7Kif6wEIljR9xvoNN9wmuKFGmJgYWxtpS0P7JXsvk0YB9VhBSX+AVLQHRKMREkYsPiE6CPMOdSTaQU24oN7i6bfVW/1Hr1vCEue3XdTPkR2eL9RySlks25wVJ8RmGpkUSvPQjltL+fh4yrcM47Rpeb8uIduLkaDO0HF9GiFMvOGa4ezGG7W1NMplHXMpvj9IhHkIKjoRd/zKwPI4bhpZL6DiqKr+1ONinMb0ptUx/CN5yJBqYfmL/TbC3+JNWQfplF0c1omjbPSBO0dssiaPhjH6T7WohFtJQJA3IkXqgH2TOHFAfti+k599B68tSATfuKdtRYqw+yUsTXzi9A5fh7r6kyb0dklIOW7dEn7j1+J0pyeNGvkCJWKKWQw8gIx8E0U5QQQZ3KJcY6wb9aG8GRJPTe5ompmJYUEFrVk6IHabGKP70tqcMKDrbzlEhCk90vQh8eWeFH7jr8qIwNYLB40DIBXysHRi4LrEPb8reFnvPdOTuibtxH3IDJAFcL+Yv6TWWKl5C1p+BgHvLudKOT9tCvHD72jnQy8jqijNQGYRozuF/sphbnCdECvHDlwEOQMIdDMAAdIy8J/gKWg/6DKyMPg9OApugBMA5SW2kKQcsdRL/g5MkYcFu5qEkFXj3uDiZOW47jQDcx0JhQcCTzMTFKKg4cblvEfoBRa41g5Yi1PNlIJ1wnRg1cM5y9fNOGB4NNM2DoDAP5FshXPRvqDrkM3oIvN/4JPm8xBcpNryR81v6F/In11HmF4HLtZQR4s7wZWVJPEeuDAjI3SO7QYvY15Z35S/RTSalFDKxhS0m8kMr/oWXIZgFQqS4vAfC2fWHQgY+995H+VWMlEKEngw5HjRtYUWpkVGLPkRhSG5Ip85mCBploxBPeSLA+pXfPG9gEtVI4A/5g/uBh1Ey5aax/O5c5deRqKZqPOXlRzZ3OdjRL3bqrJvNUg7BzNhslLUP64gfypbLtDAts5mnLd845tfK0oB4xA0x0uSyUv0py1If5TxHm9btgb4zB9Z8wCHwVMG4UiCqnZds0E3PE2RZKjOnWDYuR5je5C7fq6yplaggby559lTIB+7PrqioemZMaWvsa8Zg7EKsO1fM7WBqOUvqYX7meebZGxOvs6jTcss1QnRxSSykrO+QgAhTHQSvuSiKT0HWS63yELb8alskNl4AfGFGMWb7h1pSY6kX4n8wENhbWVqc/AVu/kvW4b6Xxe4MvaqV16n0ipSP5bY0bz/d6n3Ubuu7deNksXuzTeuUTWhQyy7ph6SYfH6TOM9c+dPbBsFJU8t+pmDb3nfcii/9/NPcdWZPRPNSMEU07QRmkhBc8gdBE2vQ8IEhstzXmktXHJbsOEnTbvjSZUbF5Z3ocaGdj5jveUb84kzqlcb36Vf1uZM+KV8ZgBG3gUuKnHIcr+SRUG0az8L2eesvHsbraPc0Bx5i199GP5yCn8giWrxWm93ApTe9X5b6p6AuwbYvnRruwtIHHUZ3sMh6pQkz7PNc28kwnGNEw7QGvuzZwRkGUcKUOnOXGKIhPJOJn4D+ZXgnL4wXaHeg2JZb9jyi0pGvGjHQYMSTT3NtbWKYlYJ7CsmmTaThKRx8+OTUCvLhYvti+9KdxRdLZf1jS2tLn2rfIJzg1TlGy1YITsRHZDiyx9MCyUUFW55Y6cQo67xH1WJDFaNtihOzBBKeuakC3sEodp6DAJJBKvPi88rValbZwm3dLUpUyaHeLiRBdwEyWId0RdmP98774Vsm5ftFidqT0bUXibGTVdmzxN9TmhEqhEeTJ56J4mImpk3nMcTxnxoiaP6UJwztRQsNXLsX6x+TsSqempyiJqh905bbK+jtlH9zgTc4ElLzkukK927xIqMwr7rOYf1p2v0HF2YYlN613jw6pDu+Uoz87i09JZ90oc0tIJhwrqXbIRa32bKtj8cyWzAqr7FHu+xgQjETvlabHmmHggSb8cXCkYYbV9uNU6PXqyayCqCbXkjJN238PXxl1TJNhezacJNwkoFq2D99lHGlJrlVnna3UqPQmGxd9jzamAh/Xfk8F29UXGtujXtWYqdpgc0p3VU0wlpXQSFOGT9dvmy7lYR5/bmp0Wjra7+hPFgambE+DC9IEdo8g7+XmcmsIMbmJZB/Ug8XbqNAtI78ikFN2vccteoF6oGM1nR9sm0aJliXQEyRcg7EpyeXGC7j1FNlbuhjdbM+wRaw/flY8HL5sIPcln9TnMv+dbF+mJvn+uEZuN8fa+7Y9rCatcsEVGQIzZF0LRZJmqFi4unwe7Tt6ANdZ+ipETWl49TVUOH4fkpNsKOPHPl+8FXrbeJYKEI3kdAZoaKEw23H34ABsOVp70H//iH/4fbFPowtdl1z6pOT/3or+qFL3Xo90dOdykwh7nkdoraT0L4uxFFal8/72T76Fw+Lxhw61V0s14Nu/lQhSpfS9fS5xx5Dy6XJTIU+5m6tPkgOf7miaEl8FTQJPYJ/FX0QuNTVe3NpN3Y+ygCxHbgcYJS26UcEPGlh5BHn7aboVWSofRo1mDzqVEicofvZ50weYtAtQLUNDJhpf0Y786RRU8gO+7v+lKsZy01v2kiZYaK/q/qWVuJ4RMGZfM3dGJKBd/FrBaYNj6pwN/owp9Ut35mQ/NSI/NOkDT0wvYZyybCSBqH2G1tTWmgnzXWw55iZ+lcHf9Pf3w4r1qafUumM/Up7qKzo/Y4aqjRkV0XZUU41sCYBFFIVsbjfCgdgXNKfNn6QTIKs02eQ639yaf5vT+e+xui9vc6s/9f5/8EZWvxPW/gHuPtPi/8v7tH/7AT9P7k//z9x/zEu8v9va/+rv/c7wXFvr/v7f4zGTv6Xff/1lrbjAMCVDgDgRDMAcDbsfzz/X9xbOQDg6iEA4CTo/87V6gIAl/UAgGMd/5n7n3yxT989yRa3evTdMvyT4oUvv8786757GOq/W3DBEmuH92/9E/mDDXFH4SWnmr3p9f/VTevZAjj+V9neD7EMQIrSTQDA3WRv7/3W3kLznf/GCY0F7v0a1gEY1n4BAMzV/8UJblz4b9yBndt7e4GPAKCWIQDgety/uG/Eaf+nigr/EdPjBgDAQd7e3gcZAOBQGQDwK2lv70fV3t6vmn9eVA0ATKT7e7iL/isufl7u/wZf6jevRuTtrwAAAJZlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAENAAIAAAARAAAAVgEaAAUAAAABAAAAaAEbAAUAAAABAAAAcAEoAAMAAAABAAIAAIdpAAQAAAABAAAAeAAAAABVbnRpdGxlZCBBcnR3b3JrAAAAAACEAAAAAQAAAIQAAAABAAKgAgAEAAAAAQAAA+igAwAEAAAAAQAAA+gAAAAAYsNjWQAAAAlwSFlzAAAUTQAAFE0BlMqNLwAAA+9pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6SXB0YzR4bXBFeHQ9Imh0dHA6Ly9pcHRjLm9yZy9zdGQvSXB0YzR4bXBFeHQvMjAwOC0wMi0yOS8iPgogICAgICAgICA8dGlmZjpEb2N1bWVudE5hbWU+VW50aXRsZWQgQXJ0d29yazwvdGlmZjpEb2N1bWVudE5hbWU+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjEzMjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4yPC90aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjEzMjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5VbnRpdGxlZCBBcnR3b3JrPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkFsdD4KICAgICAgICAgPC9kYzp0aXRsZT4KICAgICAgICAgPElwdGM0eG1wRXh0OkFydHdvcmtUaXRsZT5VbnRpdGxlZCBBcnR3b3JrPC9JcHRjNHhtcEV4dDpBcnR3b3JrVGl0bGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrqyfg/AABAAElEQVR4AezdB4AkVZ0/8PeqqnOcvJNncxhYwoK4IDAIAgu7IOiqnAHlBDmFv8Rlj2QTVJKgYkK5Oz29BIqeiRMJAwgCgiKwC5vTbJiZnTzTuar+v9ez3dM9sXumu6t75lu6dHd11XuvPtXdU796iTEsEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCECg8AV8zc1mn49JhV9SlBACEIAABCAAASMEZCMyRZ4Q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AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQwP/fDh0IAAAAAAjytx7kQsiAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDD5bskMAAAKtSURBVBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYGA1EHxh5x0+SvOHAAAAAElFTkSuQmCC\";\n","import { type FC, useState } from \"react\";\nimport { Badge, type BadgeTone } from \"./layout.js\";\nimport { JAMMY_SEED_MASCOT_DATA_URI } from \"./jammySeedMascotImage.js\";\n\nexport interface JammyOrbitalMenuItem {\n label: string;\n action: string;\n tone?: BadgeTone;\n}\n\nexport interface JammyOrbitalMenuProps {\n items: JammyOrbitalMenuItem[];\n onAction?: (action: string) => void;\n radius?: number;\n className?: string;\n}\n\nexport const JammyOrbitalMenu: FC<JammyOrbitalMenuProps> = ({\n items,\n onAction,\n radius = 90,\n className = \"\",\n}) => {\n if (items.length === 0) return null;\n\n const step = (2 * Math.PI) / items.length;\n const start = -Math.PI / 2; // top\n\n return (\n <div\n className={className}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n }}\n >\n {items.map((item, i) => {\n const angle = start + i * step;\n const x = Math.cos(angle) * radius;\n const y = Math.sin(angle) * radius;\n return (\n <button\n key={item.action + i}\n onClick={() => onAction?.(item.action)}\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n transform: `translate(calc(-50% + ${x}px), calc(-50% + ${y}px))`,\n pointerEvents: \"auto\",\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: \"pointer\",\n }}\n >\n <Badge label={item.label} tone={item.tone ?? \"blue\"} />\n </button>\n );\n })}\n </div>\n );\n};\n\nexport interface JammyMascotProps {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n size?: number;\n menuItems?: JammyOrbitalMenuItem[];\n onMenuAction?: (action: string) => void;\n className?: string;\n}\n\nexport const JammyMascot: FC<JammyMascotProps> = ({\n mood = \"idle\",\n size = 96,\n menuItems,\n onMenuAction,\n className = \"\",\n}) => {\n const [open, setOpen] = useState(false);\n\n const handleClick = () => {\n if (menuItems && menuItems.length > 0) {\n setOpen((v) => !v);\n }\n };\n\n const animation =\n mood === \"happy\"\n ? \"jammy-bounce\"\n : mood === \"surprised\"\n ? \"jammy-shake\"\n : \"jammy-idle\";\n\n return (\n <div\n className={`${className} ${animation}`.trim()}\n style={{\n position: \"relative\",\n width: size,\n height: size,\n display: \"inline-block\",\n }}\n >\n <button\n onClick={handleClick}\n style={{\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: menuItems && menuItems.length > 0 ? \"pointer\" : \"default\",\n width: size,\n height: size,\n }}\n aria-label=\"Jammy mascot\"\n >\n <img\n src={JAMMY_SEED_MASCOT_DATA_URI}\n alt=\"Jammy\"\n draggable={false}\n style={{ width: \"100%\", height: \"100%\", objectFit: \"contain\", display: \"block\" }}\n />\n </button>\n {open && menuItems && (\n <JammyOrbitalMenu\n items={menuItems}\n onAction={(action) => {\n onMenuAction?.(action);\n setOpen(false);\n }}\n radius={size * 0.9}\n />\n )}\n </div>\n );\n};\n","/**\n * Balatro Joker Knowledge Base\n * Extracted from the Master Encyclopedia for json-render reference components.\n */\n\nexport type JokerRarity = \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\nexport type JokerCategory = \"Copy\" | \"X-Mult\" | \"Flat\" | \"Economy\" | \"Retrigger\" | \"Utility\";\n\nexport interface JokerInfo {\n name: string;\n rarity: JokerRarity;\n cost: number;\n effect: string;\n category: JokerCategory;\n synergies: string[];\n strategy: string;\n jamlKey: string;\n}\n\nexport const JOKERS: Record<string, JokerInfo> = {\n // ── S-Tier: Copy & Retrigger ──\n Blueprint: {\n name: \"Blueprint\",\n rarity: \"Rare\",\n cost: 10,\n effect: \"Copies the ability of the Joker card directly to its right.\",\n category: \"Copy\",\n synergies: [\"Baron\", \"Mime\", \"Triboulet\", \"Brainstorm\"],\n strategy: \"Place to the right of your highest-value joker. Works with any joker ability.\",\n jamlKey: \"joker: Blueprint\",\n },\n Brainstorm: {\n name: \"Brainstorm\",\n rarity: \"Rare\",\n cost: 10,\n effect: \"Copies the ability of the leftmost Joker currently held.\",\n category: \"Copy\",\n synergies: [\"Baron\", \"Mime\", \"Triboulet\", \"Blueprint\"],\n strategy: \"Place your highest-value joker in the leftmost slot for maximum value.\",\n jamlKey: \"joker: Brainstorm\",\n },\n \"Sock & Buskin\": {\n name: \"Sock & Buskin\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played Face Cards exactly once.\",\n category: \"Retrigger\",\n synergies: [\"Photograph\", \"Hanging Chad\", \"Triboulet\", \"Baron\"],\n strategy: \"Essential for face-card builds. Doubles all face card triggers.\",\n jamlKey: \"joker: Sock & Buskin\",\n },\n \"Hanging Chad\": {\n name: \"Hanging Chad\",\n rarity: \"Common\",\n cost: 4,\n effect: \"Retriggers the first played card scored in a hand exactly 2 additional times.\",\n category: \"Retrigger\",\n synergies: [\"Photograph\", \"Glass Card\", \"Red Seal\", \"Bloodstone\"],\n strategy: \"Place your highest-value card in the leftmost scoring position.\",\n jamlKey: \"joker: Hanging Chad\",\n },\n Hack: {\n name: \"Hack\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played 2s, 3s, 4s, and 5s exactly once.\",\n category: \"Retrigger\",\n synergies: [\"Wee Joker\", \"Ride the Bus\", \"Steel Card\"],\n strategy: \"Build a low-card deck. Each 2-5 retriggers for extra scoring.\",\n jamlKey: \"joker: Hack\",\n },\n Mime: {\n name: \"Mime\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all card held-in-hand abilities (Steel, Gold, Baron, Baron).\",\n category: \"Retrigger\",\n synergies: [\"Baron\", \"Steel Card\", \"Gold Card\", \"Blueprint\"],\n strategy: \"The cornerstone of exponential scaling. Hold Steel Kings for (1.5)^4 per card.\",\n jamlKey: \"joker: Mime\",\n },\n Dusk: {\n name: \"Dusk\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played cards scored in the final hand of any round.\",\n category: \"Retrigger\",\n synergies: [\"Baron\", \"Triboulet\", \"Bloodstone\", \"The Idol\"],\n strategy: \"Save your best hand for last. All cards in final hand retrigger.\",\n jamlKey: \"joker: Dusk\",\n },\n\n // ── X-Mult Jokers ──\n Baron: {\n name: \"Baron\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"Each King held in hand grants X1.5 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Mime\", \"Steel Card\", \"Blueprint\", \"Brainstorm\", \"Sock & Buskin\"],\n strategy: \"Hold as many Steel Kings as possible. With Mime: (1.5)^4 per King. 8 Kings = 431,439x.\",\n jamlKey: \"joker: Baron\",\n },\n Triboulet: {\n name: \"Triboulet\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Each King and Queen played and scored grants X2 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Sock & Buskin\", \"Dusk\", \"Red Seal\", \"Blueprint\"],\n strategy: \"Play face-card heavy hands. Each King/Queen is a 2x multiplier.\",\n jamlKey: \"joker: Triboulet\",\n },\n \"The Idol\": {\n name: \"The Idol\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"X2 Mult for each card scored matching a random Rank+Suit (changes every round).\",\n category: \"X-Mult\",\n synergies: [\"Ouija\", \"Sigil\", \"Death\"],\n strategy: \"Homogenize your deck to match the Idol's target. Use Ouija/Sigil to force match.\",\n jamlKey: \"joker: The Idol\",\n },\n Bloodstone: {\n name: \"Bloodstone\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"1 in 2 chance for played Heart cards to grant X1.5 Mult when scored.\",\n category: \"X-Mult\",\n synergies: [\"Oops! All 6s\", \"The Sun\", \"Hearts suit builds\"],\n strategy: \"Convert deck to Hearts. With Oops! All 6s: 100% proc rate.\",\n jamlKey: \"joker: Bloodstone\",\n },\n Vampire: {\n name: \"Vampire\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Permanently gains X0.2 Mult for each enhanced card scored, stripping the enhancement.\",\n category: \"X-Mult\",\n synergies: [\"Midas Mask\", \"Gold Card\", \"Aura\"],\n strategy: \"Score Gold cards every round. Midas Mask paints them, Vampire consumes them for +X0.2 each.\",\n jamlKey: \"joker: Vampire\",\n },\n Hologram: {\n name: \"Hologram\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Gains X0.25 Mult every time a playing card is permanently added to the deck.\",\n category: \"X-Mult\",\n synergies: [\"Cryptid\", \"Holographic\", \"DNA\"],\n strategy: \"Add cards to deck via Cryptid or packs. Each addition is a permanent 0.25x multiplier.\",\n jamlKey: \"joker: Hologram\",\n },\n Constellation: {\n name: \"Constellation\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Gains X0.1 Mult every time a Planet card is used.\",\n category: \"X-Mult\",\n synergies: [\"Observatory\", \"Perkeo\", \"Planet Merchant\"],\n strategy: \"Use planets every round. Stack with Observatory for planet duplication.\",\n jamlKey: \"joker: Constellation\",\n },\n Cavendish: {\n name: \"Cavendish\",\n rarity: \"Common\",\n cost: 4,\n effect: \"X3 Mult. 1 in 1000 chance to self-destruct.\",\n category: \"X-Mult\",\n synergies: [\"Eternal\", \"Blueprint\"],\n strategy: \"High-risk, high-reward. Get Eternal edition to prevent destruction. Copy with Blueprint.\",\n jamlKey: \"joker: Cavendish\",\n },\n\n // ── Flat Mult / Chip Scaling ──\n Stuntman: {\n name: \"Stuntman\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"+250 Chips, but permanently reduces hand size by 2.\",\n category: \"Flat\",\n synergies: [\"Plasma Deck\", \"Paint Brush\", \"Palette\"],\n strategy: \"On Plasma Deck: (Chips+Mult)/2 scoring makes flat chips incredibly valuable.\",\n jamlKey: \"joker: Stuntman\",\n },\n Bull: {\n name: \"Bull\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"+2 Chips for every $1 currently held.\",\n category: \"Flat\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\", \"Bootstraps\"],\n strategy: \"Hoard cash. With $1000, Bull gives +2000 Chips. Stack with interest vouchers.\",\n jamlKey: \"joker: Bull\",\n },\n Bootstraps: {\n name: \"Bootstraps\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"+4 Mult for every $5 held in capital.\",\n category: \"Flat\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\", \"Bull\"],\n strategy: \"Economic scaling. With $1000, Bootstraps gives +800 Mult.\",\n jamlKey: \"joker: Bootstraps\",\n },\n \"Wee Joker\": {\n name: \"Wee Joker\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"Starts at +10 Chips. Gains +8 Chips every time a 2 is scored.\",\n category: \"Flat\",\n synergies: [\"Hack\", \"DNA\", \"Cryptid\"],\n strategy: \"Score 2s every round. With Hack, each 2 triggers twice for +16 Chips.\",\n jamlKey: \"joker: Wee Joker\",\n },\n \"Joker Stencil\": {\n name: \"Joker Stencil\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"X1 Mult for each empty Joker slot (counts itself as empty).\",\n category: \"Flat\",\n synergies: [\"Blank\", \"Antimatter\", \"Ectoplasm\"],\n strategy: \"Deliberately leave joker slots empty. With Antimatter voucher: +1 slot, +1x multiplier.\",\n jamlKey: \"joker: Joker Stencil\",\n },\n \"Green Joker\": {\n name: \"Green Joker\",\n rarity: \"Common\",\n cost: 4,\n effect: \"+1 Mult per hand played, +12 Chips per discard remaining. Loses 1 Mult per discard used.\",\n category: \"Flat\",\n synergies: [\"Wasteful\", \"Recyclomancy\", \"Hit the Road\"],\n strategy: \"Save discards. With Recyclomancy (+2 discards), start each round with +24 Chips.\",\n jamlKey: \"joker: Green Joker\",\n },\n \"Ride the Bus\": {\n name: \"Ride the Bus\",\n rarity: \"Common\",\n cost: 4,\n effect: \"+1 Mult per consecutive hand played without scoring a Face Card. Resets to 0 on Face Card.\",\n category: \"Flat\",\n synergies: [\"Hack\", \"DNA\", \"Steel Card\"],\n strategy: \"Avoid face cards. Build a low-card deck with Hack for retriggered 2s-5s.\",\n jamlKey: \"joker: Ride the Bus\",\n },\n\n // ── Economy ──\n \"Golden Joker\": {\n name: \"Golden Joker\",\n rarity: \"Common\",\n cost: 4,\n effect: \"Earn $4 at end of round.\",\n category: \"Economy\",\n synergies: [\"Bull\", \"Bootstraps\", \"Money Tree\", \"Seed Money\"],\n strategy: \"Stack multiple copies for massive per-round income. $4 per copy, per round.\",\n jamlKey: \"joker: Golden Joker\",\n },\n \"Matador\": {\n name: \"Matador\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Earn $8 if played hand triggers the Boss Blind's ability.\",\n category: \"Economy\",\n synergies: [\"The Ox\", \"The Tooth\", \"The Arm\"],\n strategy: \"Intentionally trigger boss abilities for $8 payouts. High-risk, high-reward economy.\",\n jamlKey: \"joker: Matador\",\n },\n \"To the Moon\": {\n name: \"To the Moon\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Earn $1 extra interest for every $5 held at end of round.\",\n category: \"Economy\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\"],\n strategy: \"Maximize interest cap. With Money Tree ($20 cap), hold $100+ for maximum returns.\",\n jamlKey: \"joker: To the Moon\",\n },\n\n // ── Legendary Jokers (Soul-exclusive) ──\n Canio: {\n name: \"Canio\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"When a played Face Card is destroyed, gains X1 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Glass Card\", \"Justice\", \"Hologram\"],\n strategy: \"Play and destroy Glass face cards. Each destruction is a permanent 1x multiplier.\",\n jamlKey: \"joker: Canio\",\n },\n Perkeo: {\n name: \"Perkeo\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"At end of shop, duplicates 1 random held consumable with Negative edition.\",\n category: \"Utility\",\n synergies: [\"Observatory\", \"Pluto\", \"Crystal Ball\", \"Omen Globe\"],\n strategy: \"The infinite engine. Hold 1 Pluto, get 2 Plutos next round. Stack to 100+ Negative Plutos.\",\n jamlKey: \"joker: Perkeo\",\n },\n Chicot: {\n name: \"Chicot\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Disables the effect of the current Boss Blind.\",\n category: \"Utility\",\n synergies: [\"The Manacle\", \"Blueprint\", \"Brainstorm\"],\n strategy: \"Essential for survival against counter bosses. Copy with Blueprint for permanent boss nullification.\",\n jamlKey: \"joker: Chicot\",\n },\n Yorick: {\n name: \"Yorick\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Gains X1 Mult every 5 discards used.\",\n category: \"X-Mult\",\n synergies: [\"Wasteful\", \"Recyclomancy\", \"Hit the Road\"],\n strategy: \"Use discards aggressively. With Recyclomancy (+2 discards), scale faster.\",\n jamlKey: \"joker: Yorick\",\n },\n};\n\n/** Get joker info by name. Returns undefined if not found. */\nexport function getJoker(name: string): JokerInfo | undefined {\n return JOKERS[name] ?? Object.values(JOKERS).find((j) => j.name === name);\n}\n\n/** Get all jokers in a category. */\nexport function getJokersByCategory(category: JokerCategory): JokerInfo[] {\n return Object.values(JOKERS).filter((j) => j.category === category);\n}\n\n/** Get jokers that synergize with a given joker. */\nexport function getSynergies(jokerName: string): JokerInfo[] {\n const joker = getJoker(jokerName);\n if (!joker) return [];\n return joker.synergies\n .map((name) => getJoker(name))\n .filter((j): j is JokerInfo => j !== undefined);\n}\n","/**\n * Balatro Synergy Knowledge Base\n * Meta combinations and their mathematical breakdowns.\n */\n\nexport interface SynergyInfo {\n name: string;\n jokers: string[];\n description: string;\n math: string;\n setup: string[];\n difficulty: \"Easy\" | \"Medium\" | \"Hard\" | \"Legendary\";\n bossCounters: string[];\n tags: string[];\n}\n\nexport const SYNERGIES: SynergyInfo[] = [\n {\n name: \"Baron + Mime Exponential Loop\",\n jokers: [\"Baron\", \"Mime\"],\n description:\n \"The ultimate mathematical engine. Hold Steel Kings in hand. Each King grants X1.5 from Steel and X1.5 from Baron. Mime retriggers both.\",\n math: \"1 Steel King = (1.5)^4 = X5.06. 8 Kings = (1.5)^32 = X431,439. With Blueprint/Brainstorm: exponents in thousands.\",\n setup: [\n \"Find Baron and Mime\",\n \"Get The Chariot (Steel) or find Steel-enhanced Kings\",\n \"Hold as many Steel Kings as possible in hand\",\n \"Copy with Blueprint or Brainstorm for additional multipliers\",\n ],\n difficulty: \"Hard\",\n bossCounters: [\"The Plant\", \"The Manacle\", \"The Psychic\"],\n tags: [\"endless\", \"steel\", \"x-mult\", \"s-tier\"],\n },\n {\n name: \"Photochad Retrigger\",\n jokers: [\"Photograph\", \"Hanging Chad\"],\n description:\n \"Cheap, efficient early-game burst. Photograph gives X2 on first face card. Hanging Chad retriggers that card 2 more times.\",\n math: \"X2 × X2 × X2 = X8 Mult on first face card. With Glass: 8 × 2 = X16. With Red Seal: X32.\",\n setup: [\n \"Get Photograph (Common) and Hanging Chad (Common)\",\n \"Place face card in leftmost scoring position\",\n \"Enhance face card to Glass for additional X2\",\n \"Add Red Seal for another retrigger\",\n ],\n difficulty: \"Easy\",\n bossCounters: [\"The Plant\", \"The Flint\"],\n tags: [\"early-game\", \"burst\", \"cheap\", \"face-cards\"],\n },\n {\n name: \"Observatory Infinite (Perkeo Stack)\",\n jokers: [\"Perkeo\"],\n description:\n \"Perkeo duplicates 1 held consumable at end of shop with Negative edition. Stack Negative Plutos for infinite X1.5 multipliers.\",\n math: \"10 Negative Plutos = (1.5)^10 = X57.66. 100 Plutos = (1.5)^100 ≈ X400 billion. Requires Observatory voucher.\",\n setup: [\n \"Get Perkeo (Legendary)\",\n \"Buy Observatory voucher (Telescope → Observatory)\",\n \"Hold exactly 1 Pluto planet card\",\n \"Perkeo duplicates it every round\",\n \"Play High Card as your dominant hand type\",\n ],\n difficulty: \"Legendary\",\n bossCounters: [\"The Ox\", \"The Flint\"],\n tags: [\"endless\", \"consumable\", \"x-mult\", \"legendary\"],\n },\n {\n name: \"Vampire + Midas Mask Economy\",\n jokers: [\"Vampire\", \"Midas Mask\"],\n description:\n \"Midas Mask paints played Face Cards Gold. Vampire consumes the Gold enhancement for +X0.2 Mult permanently. Cards remain for repainting.\",\n math: \"5 Face Cards per round = +X1.0 Mult per round. Sustainable infinite scaling.\",\n setup: [\n \"Get Vampire (Uncommon) and Midas Mask (Uncommon)\",\n \"Play hands with Face Cards every round\",\n \"Midas paints them Gold, Vampire consumes for scaling\",\n \"Cards stay in deck for next round's painting\",\n ],\n difficulty: \"Medium\",\n bossCounters: [\"The Plant\", \"The Ox\"],\n tags: [\"economy\", \"sustainable\", \"x-mult\", \"mid-game\"],\n },\n {\n name: \"Bull + Bootstraps Economic Scaling\",\n jokers: [\"Bull\", \"Bootstraps\"],\n description:\n \"Bull gives +2 Chips per $1 held. Bootstraps gives +4 Mult per $5 held. Both scale with cash hoarding.\",\n math: \"$1000: Bull = +2000 Chips, Bootstraps = +800 Mult. Stack with interest vouchers for $20+ per round.\",\n setup: [\n \"Get Bull and Bootstraps (both Uncommon)\",\n \"Buy Seed Money → Money Tree vouchers ($20 interest cap)\",\n \"Hoard cash, never spend unless necessary\",\n \"Add Golden Joker for +$4 per round per copy\",\n ],\n difficulty: \"Easy\",\n bossCounters: [\"The Ox\", \"The Tooth\"],\n tags: [\"economy\", \"flat\", \"chips\", \"mult\", \"easy\"],\n },\n {\n name: \"Plasma Deck + Stuntman\",\n jokers: [\"Stuntman\"],\n description:\n \"Plasma Deck scores by ((Chips + Mult) / 2)^2. Flat chip additions become exponentially powerful. Stuntman gives +250 Chips.\",\n math: \"Stuntman alone: base 250 chips. With 50 mult: ((250+50)/2)^2 = 22,500. With 100 mult: ((250+100)/2)^2 = 30,625.\",\n setup: [\n \"Select Plasma Deck\",\n \"Get Stuntman (Rare) as early as possible\",\n \"Add any flat mult (Bootstraps, Green Joker)\",\n \"Avoid X-Mult jokers (wasted on Plasma's formula)\",\n ],\n difficulty: \"Medium\",\n bossCounters: [\"The Flint\", \"The Wall\"],\n tags: [\"plasma\", \"chips\", \"exponential\", \"deck-specific\"],\n },\n {\n name: \"Chicot + Manacle Hand Size Exploit\",\n jokers: [\"Chicot\"],\n description:\n \"Multiple Chicots (cloned via Ankh/Blueprint) vs The Manacle Boss. Each Chicot applies +1 Hand Size instead of just nullifying.\",\n math: \"5 Chicots vs Manacle: +5 permanent hand size. 10 Chicots: +10 hand size.\",\n setup: [\n \"Get Chicot (Legendary)\",\n \"Clone with Ankh or Blueprint\",\n \"Fight The Manacle Boss Blind\",\n \"Each Chicot triggers +1 Hand Size independently\",\n ],\n difficulty: \"Legendary\",\n bossCounters: [\"The Manacle\"], // this is the boss you WANT to fight\n tags: [\"exploit\", \"hand-size\", \"legendary\", \"niche\"],\n },\n {\n name: \"Canio Glass Destruction Loop\",\n jokers: [\"Canio\"],\n description:\n \"Canio gains X1 Mult when a played Face Card is destroyed. Glass cards destroy themselves 1 in 4 times when scored.\",\n math: \"Each Glass face card destruction: +X1 Mult. With 20 destroyed face cards: X20 Mult. With Oops! All 6s: destruction rate increases.\",\n setup: [\n \"Get Canio (Legendary)\",\n \"Enhance face cards to Glass (Justice tarot)\",\n \"Play and destroy Glass face cards repeatedly\",\n \"Add Oops! All 6s for higher destruction rate\",\n ],\n difficulty: \"Hard\",\n bossCounters: [\"The Plant\", \"The Flint\"],\n tags: [\"destruction\", \"x-mult\", \"legendary\", \"face-cards\"],\n },\n];\n\n/** Find synergies that involve a specific joker. */\nexport function findSynergies(jokerName: string): SynergyInfo[] {\n return SYNERGIES.filter((s) =>\n s.jokers.some((j) => j.toLowerCase() === jokerName.toLowerCase())\n );\n}\n\n/** Find synergies by tag. */\nexport function findSynergiesByTag(tag: string): SynergyInfo[] {\n return SYNERGIES.filter((s) =>\n s.tags.some((t) => t.toLowerCase() === tag.toLowerCase())\n );\n}\n\n/** Get recommended synergies for a set of jokers. */\nexport function getRecommendedSynergies(\n jokerNames: string[]\n): SynergyInfo[] {\n const normalized = jokerNames.map((n) => n.toLowerCase());\n return SYNERGIES.filter((s) =>\n s.jokers.some((j) => normalized.includes(j.toLowerCase()))\n ).sort((a, b) => {\n const aMatches = a.jokers.filter((j) => normalized.includes(j.toLowerCase())).length;\n const bMatches = b.jokers.filter((j) => normalized.includes(j.toLowerCase())).length;\n return bMatches - aMatches; // most matches first\n });\n}\n","/**\n * Balatro Deck & Stake Knowledge Base\n */\n\nexport interface DeckInfo {\n name: string;\n jamlKey: string;\n effect: string;\n strategy: string;\n synergies: string[];\n difficulty: \"Easy\" | \"Medium\" | \"Hard\";\n}\n\nexport const DECKS: Record<string, DeckInfo> = {\n Red: {\n name: \"Red Deck\",\n jamlKey: \"Red\",\n effect: \"Grants +1 Discard per round.\",\n strategy:\n \"Excellent baseline for high-consistency discard strategies. Amplifies Hit the Road, Yorick, and Castle.\",\n synergies: [\"Yorick\", \"Hit the Road\", \"Castle\", \"Green Joker\"],\n difficulty: \"Easy\",\n },\n Blue: {\n name: \"Blue Deck\",\n jamlKey: \"Blue\",\n effect: \"Grants +1 Hand per round.\",\n strategy:\n \"Provides stable scoring buffer. Ideal for hands that require deep cycling but need a final play.\",\n synergies: [\"Grabber\", \"Nacho Tong\", \"Dusk\"],\n difficulty: \"Easy\",\n },\n Yellow: {\n name: \"Yellow Deck\",\n jamlKey: \"Yellow\",\n effect: \"Starts with +$10 (total $14 instead of $4).\",\n strategy:\n \"Drastically reduces time to hit $25 interest cap. Highly synergistic with early economic scaling jokers.\",\n synergies: [\"Golden Joker\", \"Bootstraps\", \"Bull\", \"To the Moon\"],\n difficulty: \"Easy\",\n },\n Green: {\n name: \"Green Deck\",\n jamlKey: \"Green\",\n effect:\n \"Interest disabled. Earns $2 per played hand remaining and $1 per discard remaining at end of round.\",\n strategy:\n \"Inverts economic model. Minimize played hands and save discards for maximum payout. Prioritize flat-scoring jokers.\",\n synergies: [\"Stuntman\", \"Bull\", \"Bootstraps\", \"Green Joker\"],\n difficulty: \"Hard\",\n },\n Black: {\n name: \"Black Deck\",\n jamlKey: \"Black\",\n effect: \"Grants +1 Joker slot, but reduces played hands by 1.\",\n strategy:\n \"High-ceiling, high-risk. Early game is extremely punishing. Look for immediate flat chip/mult support to survive Ante 1-2.\",\n synergies: [\"Stuntman\", \"Joker Stencil\", \"Wee Joker\"],\n difficulty: \"Hard\",\n },\n Magic: {\n name: \"Magic Deck\",\n jamlKey: \"Magic\",\n effect:\n \"Starts with Crystal Ball voucher (+1 consumable slot) and two copies of The Fool tarot.\",\n strategy:\n \"Ideal for duplicating early spectral transformations or high-value tarots (Death, The Hermit).\",\n synergies: [\"The Fool\", \"Death\", \"The Hermit\", \"Crystal Ball\"],\n difficulty: \"Medium\",\n },\n Nebula: {\n name: \"Nebula Deck\",\n jamlKey: \"Nebula\",\n effect:\n \"Starts with Telescope voucher (Celestial packs always contain planet for most played hand), but -1 consumable slot.\",\n strategy:\n \"Restricts holding space for Tarots/Spectrals. Forces immediate commits. Synergizes with rapid planetary scaling.\",\n synergies: [\"Constellation\", \"Observatory\", \"Perkeo\", \"Pluto\"],\n difficulty: \"Medium\",\n },\n Zodiac: {\n name: \"Zodiac Deck\",\n jamlKey: \"Zodiac\",\n effect:\n \"Starts with Tarot Merchant, Planet Merchant, and Overstock vouchers pre-equipped.\",\n strategy:\n \"Vastly increases shop variety and consumable spawn rate. Synergizes with economy-heavy seeds for reroll abuse.\",\n synergies: [\"Reroll Surplus\", \"Reroll Glut\", \"Clearance Sale\", \"Liquidation\"],\n difficulty: \"Easy\",\n },\n Ghost: {\n name: \"Ghost Deck\",\n jamlKey: \"Ghost\",\n effect:\n \"Spectral cards can appear in standard shops. Starts with Hex card (applies Polychrome to random Joker, destroys others).\",\n strategy:\n \"Ultimate environment for early Polychrome S-tier jokers. Look for Cryptid, Ectoplasm, Ankh in shops.\",\n synergies: [\"Hex\", \"Ankh\", \"Ectoplasm\", \"Cryptid\", \"The Soul\"],\n difficulty: \"Medium\",\n },\n Checkered: {\n name: \"Checkered Deck\",\n jamlKey: \"Checkered\",\n effect:\n \"Starting deck contains exactly 26 Spades and 26 Hearts (no Diamonds or Clubs).\",\n strategy:\n \"Simplifies flush and flush-five building to near-certainty. Synergizes with Bloodstone, The Idol, and Wrathful/Lusty Joker.\",\n synergies: [\"Bloodstone\", \"The Idol\", \"The Sun\", \"The Star\"],\n difficulty: \"Medium\",\n },\n Painted: {\n name: \"Painted Deck\",\n jamlKey: \"Painted\",\n effect: \"Grants +2 Hand Size, but permanently reduces Joker slots by 1.\",\n strategy:\n \"Maximizes held-in-hand scaling triggers (Baron, Mime, Steel cards). Must account for 4-joker slot limit.\",\n synergies: [\"Baron\", \"Mime\", \"Steel Card\", \"Joker Stencil\"],\n difficulty: \"Hard\",\n },\n Anaglyph: {\n name: \"Anaglyph Deck\",\n jamlKey: \"Anaglyph\",\n effect: \"Grants a Double Tag every time a Boss Blind is defeated.\",\n strategy:\n \"Stack dozens of Double Tags, redeem them simultaneously on a high-value blind skip Tag for massive value.\",\n synergies: [\"Double Tag\", \"Negative Joker\", \"Mega Arcana Pack\"],\n difficulty: \"Medium\",\n },\n Plasma: {\n name: \"Plasma Deck\",\n jamlKey: \"Plasma\",\n effect:\n \"Score = ((Chips + Mult) / 2)^2. Base blind requirements permanently doubled.\",\n strategy:\n \"Fundamentally alters scoring. Flat additions (+Chips or +Mult) are mathematically balanced. Stuntman and Bull are insanely powerful.\",\n synergies: [\"Stuntman\", \"Bull\", \"Bootstraps\", \"Green Joker\"],\n difficulty: \"Hard\",\n },\n Abandoned: {\n name: \"Abandoned Deck\",\n jamlKey: \"Abandoned\",\n effect:\n \"Starting deck contains exactly 40 cards (all 12 face cards removed).\",\n strategy:\n \"Increases probability of low-card straights and pairs. Baron, Triboulet, Photograph are completely inert.\",\n synergies: [\"Hack\", \"Ride the Bus\", \"Wee Joker\", \"DNA\"],\n difficulty: \"Hard\",\n },\n Erratic: {\n name: \"Erratic Deck\",\n jamlKey: \"Erratic\",\n effect:\n \"Starting deck: 52 cards, but all suits and ranks are completely randomized at seed initialization.\",\n strategy:\n \"The only deck where ErraticSuit and ErraticRank JAML rules are valid. Find seeds with high-density ranks (e.g., 18 Aces).\",\n synergies: [\"The Idol\", \"Bloodstone\", \"DNA\", \"Death\"],\n difficulty: \"Medium\",\n },\n};\n\nexport interface StakeInfo {\n name: string;\n jamlKey: string;\n effect: string;\n strategy: string;\n difficulty: \"Easy\" | \"Medium\" | \"Hard\" | \"Expert\";\n}\n\nexport const STAKES: StakeInfo[] = [\n {\n name: \"White Stake\",\n jamlKey: \"White\",\n effect: \"Base configuration. No modifications.\",\n strategy: \"Standard play. Use for learning or testing new strategies.\",\n difficulty: \"Easy\",\n },\n {\n name: \"Red Stake\",\n jamlKey: \"Red\",\n effect: \"Small Blinds provide no monetary reward on victory.\",\n strategy: \"Skips are encouraged to secure early-game Tags.\",\n difficulty: \"Easy\",\n },\n {\n name: \"Green Stake\",\n jamlKey: \"Green\",\n effect: \"Required score scaling accelerates for each successive Ante.\",\n strategy: \"Requires geometric scaling engines by Ante 3.\",\n difficulty: \"Medium\",\n },\n {\n name: \"Black Stake\",\n jamlKey: \"Black\",\n effect: \"Eternal Jokers introduced (30% spawn chance). Cannot be sold or destroyed.\",\n strategy: \"Blocks self-destruct synergies (Madness, Ceremonial Dagger). Avoid these jokers.\",\n difficulty: \"Hard\",\n },\n {\n name: \"Blue Stake\",\n jamlKey: \"Blue\",\n effect: \"Player's baseline discard pool reduced by 1.\",\n strategy: \"Severely impacts discard economies (Merry Andy, Hit the Road, Yorick).\",\n difficulty: \"Medium\",\n },\n {\n name: \"Purple Stake\",\n jamlKey: \"Purple\",\n effect: \"Required scoring accelerates exponentially.\",\n strategy: \"Flat additions become unviable past Ante 4. Need X-Mult or exponential engines.\",\n difficulty: \"Hard\",\n },\n {\n name: \"Orange Stake\",\n jamlKey: \"Orange\",\n effect: \"Perishable Jokers introduced (30% chance). Debuffed after 5 rounds.\",\n strategy: \"Blocks long-term scaling engines (Wee Joker, Constellation). Look for immediate impact.\",\n difficulty: \"Expert\",\n },\n {\n name: \"Gold Stake\",\n jamlKey: \"Gold\",\n effect: \"Rental Jokers introduced (30% chance). Cost $3 per round to maintain.\",\n strategy: \"Massive economic stress. Prioritize interest-generating engines and cheap builds.\",\n difficulty: \"Expert\",\n },\n];\n\nexport function getDeck(name: string): DeckInfo | undefined {\n return DECKS[name] ?? Object.values(DECKS).find((d) => d.name === name);\n}\n\nexport function getStake(name: string): StakeInfo | undefined {\n return STAKES.find(\n (s) => s.name === name || s.jamlKey === name\n );\n}\n","/**\n * Balatro Boss Blind Knowledge Base\n */\n\nexport type BossCategory = \"Debuffer\" | \"Restrictor\" | \"Obfuscator\" | \"Scaler\" | \"Economic\";\n\nexport interface BossInfo {\n name: string;\n jamlKey: string;\n category: BossCategory;\n effect: string;\n counters: string[];\n jamlAvoid: string;\n threatLevel: \"Low\" | \"Medium\" | \"High\" | \"Lethal\";\n}\n\nexport const BOSSES: Record<string, BossInfo> = {\n // ── Debuffers ──\n \"The Club\": {\n name: \"The Club\",\n jamlKey: \"boss: The Club\",\n category: \"Debuffer\",\n effect: \"Debuffs all Club cards.\",\n counters: [\"Non-Club decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Club\",\n threatLevel: \"High\",\n },\n \"The Goad\": {\n name: \"The Goad\",\n jamlKey: \"boss: The Goad\",\n category: \"Debuffer\",\n effect: \"Debuffs all Spade cards.\",\n counters: [\"Non-Spade decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Goad\",\n threatLevel: \"High\",\n },\n \"The Window\": {\n name: \"The Window\",\n jamlKey: \"boss: The Window\",\n category: \"Debuffer\",\n effect: \"Debuffs all Diamond cards.\",\n counters: [\"Non-Diamond decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Window\",\n threatLevel: \"High\",\n },\n \"The Head\": {\n name: \"The Head\",\n jamlKey: \"boss: The Head\",\n category: \"Debuffer\",\n effect: \"Debuffs all Heart cards.\",\n counters: [\"Non-Heart decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Head\",\n threatLevel: \"High\",\n },\n \"The Plant\": {\n name: \"The Plant\",\n jamlKey: \"boss: The Plant\",\n category: \"Debuffer\",\n effect: \"Debuffs all Face Cards (Jacks, Queens, Kings).\",\n counters: [\"Non-face card builds\", \"Chicot\", \"Director's Cut\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Plant\",\n threatLevel: \"Lethal\",\n },\n \"The Pillar\": {\n name: \"The Pillar\",\n jamlKey: \"boss: The Pillar\",\n category: \"Debuffer\",\n effect: \"Debuffs any playing card played previously in the current Ante.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Pillar\",\n threatLevel: \"Medium\",\n },\n\n // ── Restrictors ──\n \"The Psychic\": {\n name: \"The Psychic\",\n jamlKey: \"boss: The Psychic\",\n category: \"Restrictor\",\n effect: \"Every played hand must contain exactly 5 cards.\",\n counters: [\"5-card builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Psychic\",\n threatLevel: \"High\",\n },\n \"The Eye\": {\n name: \"The Eye\",\n jamlKey: \"boss: The Eye\",\n category: \"Restrictor\",\n effect: \"Disallows playing repeat hand types in the current round.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Eye\",\n threatLevel: \"Medium\",\n },\n \"The Mouth\": {\n name: \"The Mouth\",\n jamlKey: \"boss: The Mouth\",\n category: \"Restrictor\",\n effect: \"Restricts player to one specific hand type for the entire round.\",\n counters: [\"Versatile builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Mouth\",\n threatLevel: \"High\",\n },\n \"The Needle\": {\n name: \"The Needle\",\n jamlKey: \"boss: The Needle\",\n category: \"Restrictor\",\n effect: \"Restricts player to exactly 1 hand for the entire round.\",\n counters: [\"High-scoring single hand\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Needle\",\n threatLevel: \"High\",\n },\n\n // ── Obfuscators ──\n \"The House\": {\n name: \"The House\",\n jamlKey: \"boss: The House\",\n category: \"Obfuscator\",\n effect: \"First drawn hand is drawn face down.\",\n counters: [\"Memory\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The House\",\n threatLevel: \"Low\",\n },\n \"The Wheel\": {\n name: \"The Wheel\",\n jamlKey: \"boss: The Wheel\",\n category: \"Obfuscator\",\n effect: \"1 in 7 cards drawn face down. (2 in 7 with Oops! All 6s).\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Wheel\",\n threatLevel: \"Low\",\n },\n \"The Fish\": {\n name: \"The Fish\",\n jamlKey: \"boss: The Fish\",\n category: \"Obfuscator\",\n effect: \"All cards drawn face down after a hand is played.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Fish\",\n threatLevel: \"Medium\",\n },\n \"The Mark\": {\n name: \"The Mark\",\n jamlKey: \"boss: The Mark\",\n category: \"Obfuscator\",\n effect: \"All Face Cards drawn face down.\",\n counters: [\"Non-face card builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Mark\",\n threatLevel: \"Medium\",\n },\n\n // ── Scalers ──\n \"The Wall\": {\n name: \"The Wall\",\n jamlKey: \"boss: The Wall\",\n category: \"Scaler\",\n effect: \"Extends required blind score to 4X the base Ante requirement.\",\n counters: [\"Exponential scaling\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Wall\",\n threatLevel: \"High\",\n },\n \"The Flint\": {\n name: \"The Flint\",\n jamlKey: \"boss: The Flint\",\n category: \"Scaler\",\n effect: \"Halves all base Chips and Mult for the played hand's base level.\",\n counters: [\"High flat mult/chip\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Flint\",\n threatLevel: \"High\",\n },\n\n // ── Economic / Meta ──\n \"The Ox\": {\n name: \"The Ox\",\n jamlKey: \"boss: The Ox\",\n category: \"Economic\",\n effect: \"Sets player's capital to $0 if they play their most frequently played hand.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Ox\",\n threatLevel: \"Medium\",\n },\n \"The Tooth\": {\n name: \"The Tooth\",\n jamlKey: \"boss: The Tooth\",\n category: \"Economic\",\n effect: \"Subtracts $1 from capital for every card played.\",\n counters: [\"High-card spam builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Tooth\",\n threatLevel: \"Medium\",\n },\n \"The Arm\": {\n name: \"The Arm\",\n jamlKey: \"boss: The Arm\",\n category: \"Economic\",\n effect: \"Permanently decreases level of played hand type by 1.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Arm\",\n threatLevel: \"High\",\n },\n \"The Hook\": {\n name: \"The Hook\",\n jamlKey: \"boss: The Hook\",\n category: \"Economic\",\n effect: \"Involuntarily discards 2 random cards after every play.\",\n counters: [\"Large hand size\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Hook\",\n threatLevel: \"Medium\",\n },\n \"The Manacle\": {\n name: \"The Manacle\",\n jamlKey: \"boss: The Manacle\",\n category: \"Restrictor\",\n effect: \"Temporarily reduces hand size by 1.\",\n counters: [\"Chicot exploit\", \"Paint Brush\", \"Palette\"],\n jamlAvoid: \"mustNot: boss: The Manacle\",\n threatLevel: \"Medium\",\n },\n \"The Water\": {\n name: \"The Water\",\n jamlKey: \"boss: The Water\",\n category: \"Restrictor\",\n effect: \"Removes all discards for the round.\",\n counters: [\"Chicot\", \"Retcon\", \"High-scoring hands\"],\n jamlAvoid: \"mustNot: boss: The Water\",\n threatLevel: \"High\",\n },\n};\n\n// ── Finisher Blinds (Ante 8) ──\nexport const FINISHERS: BossInfo[] = [\n {\n name: \"Cerulean Bell\",\n jamlKey: \"boss: Cerulean Bell\",\n category: \"Restrictor\",\n effect: \"Forces a random card to be permanently selected. Selling or discarding it triggers debuffs.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Cerulean Bell\",\n threatLevel: \"High\",\n },\n {\n name: \"Violet Vessel\",\n jamlKey: \"boss: Violet Vessel\",\n category: \"Scaler\",\n effect: \"Triples the baseline required score benchmark.\",\n counters: [\"Exponential scaling\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Violet Vessel\",\n threatLevel: \"Lethal\",\n },\n {\n name: \"Crimson Heart\",\n jamlKey: \"boss: Crimson Heart\",\n category: \"Debuffer\",\n effect: \"Disables 1 random Joker after every hand played.\",\n counters: [\"Multiple jokers\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Crimson Heart\",\n threatLevel: \"Lethal\",\n },\n {\n name: \"Verdant Leaf\",\n jamlKey: \"boss: Verdant Leaf\",\n category: \"Debuffer\",\n effect: \"Debuffs every card unless you sell at least 1 Joker.\",\n counters: [\"Cheap jokers to sell\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Verdant Leaf\",\n threatLevel: \"High\",\n },\n {\n name: \"Amber Acorn\",\n jamlKey: \"boss: Amber Acorn\",\n category: \"Obfuscator\",\n effect: \"Shuffles all Jokers and flips them face down.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Amber Acorn\",\n threatLevel: \"High\",\n },\n];\n\nexport function getBoss(name: string): BossInfo | undefined {\n return BOSSES[name] ?? FINISHERS.find((b) => b.name === name);\n}\n\nexport function getBossesByCategory(category: BossCategory): BossInfo[] {\n return [\n ...Object.values(BOSSES),\n ...FINISHERS,\n ].filter((b) => b.category === category);\n}\n\nexport function getAllBosses(): BossInfo[] {\n return [...Object.values(BOSSES), ...FINISHERS];\n}\n","import { type FC } from \"react\";\nimport { Badge, Panel, Stack, Text, Divider, type BadgeTone } from \"./layout.js\";\nimport {\n getJoker,\n getSynergies,\n type JokerInfo,\n type JokerCategory,\n} from \"../knowledge/jokers.js\";\nimport {\n findSynergies,\n type SynergyInfo,\n} from \"../knowledge/synergies.js\";\nimport {\n getDeck,\n getStake,\n type DeckInfo,\n type StakeInfo,\n} from \"../knowledge/decks.js\";\nimport {\n getBoss,\n type BossInfo,\n type BossCategory,\n} from \"../knowledge/bosses.js\";\n\n/**\n * Reference Components — Encyclopedia UI for Balatro entities.\n *\n * All components query the knowledge base and render rich info cards.\n * Zero external dependencies. Pure React + CSS tokens.\n */\n\n/* ─── JokerCard ─── */\nexport interface JokerCardProps {\n name: string;\n showSynergies?: boolean;\n className?: string;\n}\n\nexport const JokerCard: FC<JokerCardProps> = ({\n name,\n showSynergies = true,\n className = \"\",\n}) => {\n const joker = getJoker(name);\n if (!joker) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Joker not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const categoryTone: Record<JokerCategory, BadgeTone> = {\n Copy: \"blue\",\n \"X-Mult\": \"purple\",\n Flat: \"green\",\n Economy: \"gold\",\n Retrigger: \"orange\",\n Utility: \"grey\",\n };\n\n const synergies = showSynergies ? getSynergies(name) : [];\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={joker.name} variant=\"title\" />\n <div style={{ display: \"flex\", gap: 6, alignItems: \"center\" }}>\n <Badge\n label={joker.rarity}\n tone={joker.rarity === \"Legendary\" ? \"gold\" : joker.rarity === \"Rare\" ? \"blue\" : joker.rarity === \"Uncommon\" ? \"green\" : \"grey\"}\n />\n <Badge label={`$${joker.cost}`} tone=\"gold\" />\n </div>\n </div>\n\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n <Badge label={joker.category} tone={categoryTone[joker.category]} />\n <Badge label={joker.jamlKey} tone=\"grey\" />\n </div>\n\n <Text body={joker.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={joker.strategy} variant=\"muted\" />\n\n {synergies.length > 0 && (\n <>\n <Divider />\n <Text body=\"Synergies\" variant=\"accent\" />\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {synergies.map((s) => (\n <Badge key={s.name} label={s.name} tone=\"purple\" />\n ))}\n </div>\n </>\n )}\n </Stack>\n </Panel>\n );\n};\n\n/* ─── SynergyCard ─── */\nexport interface SynergyCardProps {\n name: string;\n className?: string;\n}\n\nexport const SynergyCard: FC<SynergyCardProps> = ({\n name,\n className = \"\",\n}) => {\n const synergy = findSynergies(name).find((s) => s.name === name);\n if (!synergy) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Synergy not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<SynergyInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n Legendary: \"gold\",\n };\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={10}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={synergy.name} variant=\"title\" />\n <Badge label={synergy.difficulty} tone={difficultyTone[synergy.difficulty]} />\n </div>\n\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {synergy.jokers.map((j) => (\n <Badge key={j} label={j} tone=\"blue\" />\n ))}\n </div>\n\n <Text body={synergy.description} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"The Math\" variant=\"accent\" />\n <Text body={synergy.math} variant=\"muted\" />\n\n <Divider />\n\n <Text body=\"Setup Steps\" variant=\"accent\" />\n <Stack gap={6}>\n {synergy.setup.map((step, i) => (\n <div key={i} style={{ display: \"flex\", gap: 8, alignItems: \"flex-start\" }}>\n <span style={{ color: \"var(--j-gold)\", fontWeight: 700, minWidth: 20 }}>\n {i + 1}.\n </span>\n <Text body={step} variant=\"muted\" />\n </div>\n ))}\n </Stack>\n\n <Divider />\n\n <Text body=\"Boss Counters\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {synergy.bossCounters.map((b) => (\n <Badge key={b} label={b} tone=\"red\" />\n ))}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── BossBlindCard ─── */\nexport interface BossBlindCardProps {\n name: string;\n className?: string;\n}\n\nexport const BossBlindCard: FC<BossBlindCardProps> = ({\n name,\n className = \"\",\n}) => {\n const boss = getBoss(name);\n if (!boss) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Boss not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const threatTone: Record<BossInfo[\"threatLevel\"], BadgeTone> = {\n Low: \"green\",\n Medium: \"orange\",\n High: \"red\",\n Lethal: \"purple\",\n };\n\n const categoryTone: Record<BossCategory, BadgeTone> = {\n Debuffer: \"red\",\n Restrictor: \"orange\",\n Obfuscator: \"blue\",\n Scaler: \"purple\",\n Economic: \"gold\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={boss.name} variant=\"title\" />\n <div style={{ display: \"flex\", gap: 6 }}>\n <Badge label={boss.category} tone={categoryTone[boss.category]} />\n <Badge label={boss.threatLevel} tone={threatTone[boss.threatLevel]} />\n </div>\n </div>\n\n <Badge label={boss.jamlKey} tone=\"grey\" />\n\n <Text body={boss.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Counters\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {boss.counters.map((c) => (\n <Badge key={c} label={c} tone=\"green\" />\n ))}\n </div>\n\n <Divider />\n\n <Text body=\"JAML Filter\" variant=\"accent\" />\n <div\n style={{\n background: \"var(--j-surface-inset)\",\n padding: \"8px 12px\",\n borderRadius: \"var(--j-radius)\",\n fontFamily: \"var(--j-font-code)\",\n fontSize: \"var(--j-text-sm)\",\n color: \"var(--j-grey)\",\n }}\n >\n {boss.jamlAvoid}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── DeckCard ─── */\nexport interface DeckCardProps {\n name: string;\n className?: string;\n}\n\nexport const DeckCard: FC<DeckCardProps> = ({\n name,\n className = \"\",\n}) => {\n const deck = getDeck(name);\n if (!deck) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Deck not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<DeckInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={deck.name} variant=\"title\" />\n <Badge label={deck.difficulty} tone={difficultyTone[deck.difficulty]} />\n </div>\n\n <Badge label={deck.jamlKey} tone=\"grey\" />\n\n <Text body={deck.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={deck.strategy} variant=\"muted\" />\n\n <Divider />\n\n <Text body=\"Synergies\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {deck.synergies.map((s) => (\n <Badge key={s} label={s} tone=\"blue\" />\n ))}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── StakeCard ─── */\nexport interface StakeCardProps {\n name: string;\n className?: string;\n}\n\nexport const StakeCard: FC<StakeCardProps> = ({\n name,\n className = \"\",\n}) => {\n const stake = getStake(name);\n if (!stake) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Stake not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<StakeInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n Expert: \"purple\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={stake.name} variant=\"title\" />\n <Badge label={stake.difficulty} tone={difficultyTone[stake.difficulty]} />\n </div>\n\n <Badge label={stake.jamlKey} tone=\"grey\" />\n\n <Text body={stake.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={stake.strategy} variant=\"muted\" />\n </Stack>\n </Panel>\n );\n};\n\n/* ─── StrategyAdvisor ─── */\nexport interface StrategyAdvisorProps {\n jokers: string[];\n className?: string;\n}\n\nexport const StrategyAdvisor: FC<StrategyAdvisorProps> = ({\n jokers,\n className = \"\",\n}) => {\n const foundJokers = jokers\n .map((name) => getJoker(name))\n .filter((j): j is JokerInfo => j !== undefined);\n\n const foundSynergies = findSynergies(jokers.join(\" \"));\n\n const recommended = foundSynergies.filter((s) =>\n s.jokers.some((j) => jokers.map((n) => n.toLowerCase()).includes(j.toLowerCase()))\n );\n\n const bossWarnings = new Set<string>();\n recommended.forEach((s) => s.bossCounters.forEach((b) => bossWarnings.add(b)));\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={12}>\n <Text body={`Strategy Advisor (${foundJokers.length} jokers)`} variant=\"title\" />\n\n {foundJokers.length > 0 && (\n <>\n <Text body=\"Detected Jokers\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {foundJokers.map((j) => (\n <Badge key={j.name} label={j.name} tone=\"blue\" />\n ))}\n </div>\n </>\n )}\n\n {recommended.length > 0 && (\n <>\n <Divider />\n <Text body=\"Recommended Strategies\" variant=\"accent\" />\n <Stack gap={8}>\n {recommended.slice(0, 3).map((s) => (\n <div key={s.name}>\n <Text body={s.name} variant=\"body\" />\n <Text body={s.description} variant=\"muted\" />\n <div style={{ display: \"flex\", gap: 4, flexWrap: \"wrap\", marginTop: 4 }}>\n {s.jokers.map((j) => (\n <Badge key={j} label={j} tone=\"purple\" />\n ))}\n </div>\n </div>\n ))}\n </Stack>\n </>\n )}\n\n {bossWarnings.size > 0 && (\n <>\n <Divider />\n <Text body=\"Boss Blind Warnings\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {Array.from(bossWarnings).map((b) => (\n <Badge key={b} label={b} tone=\"red\" />\n ))}\n </div>\n </>\n )}\n\n {foundJokers.length === 0 && recommended.length === 0 && (\n <Text body=\"No recognized jokers or synergies found. Add jokers to get strategy advice.\" variant=\"muted\" />\n )}\n </Stack>\n </Panel>\n );\n};\n","import type { Registry } from \"./engine.js\";\nimport {\n Panel,\n Stack,\n Grid,\n Text,\n Spacer,\n Divider,\n Badge,\n} from \"./components/layout.js\";\nimport {\n SearchStats,\n ErrorBanner,\n LoadingPulse,\n SeedCard,\n SeedList,\n JokerBadge,\n EditionBadge,\n} from \"./components/domain.js\";\nimport { JamlGameCard } from \"./components/game.js\";\nimport { JammyMascot, JammyOrbitalMenu } from \"./components/mascot.js\";\nimport {\n JokerCard,\n SynergyCard,\n BossBlindCard,\n DeckCard,\n StakeCard,\n StrategyAdvisor,\n} from \"./components/reference.js\";\n\n/**\n * Balatro Component Registry\n *\n * Maps catalog component names to real React implementations.\n * This is the ONLY place where catalog names are bound to code.\n * Add new components here → they instantly work in json-render specs.\n */\nexport const balatroRegistry: Registry = {\n // ── Layout ──\n Panel,\n Stack,\n Grid,\n Text,\n Spacer,\n Divider,\n Badge,\n\n // ── Status ──\n SearchStats,\n ErrorBanner,\n LoadingPulse,\n\n // ── Results ──\n SeedCard,\n SeedList,\n JokerBadge,\n EditionBadge,\n\n // ── Game Cards ──\n JamlGameCard,\n\n // ── Mascot ──\n JammyMascot,\n JammyOrbitalMenu,\n\n // ── Encyclopedia ──\n JokerCard,\n SynergyCard,\n BossBlindCard,\n DeckCard,\n StakeCard,\n StrategyAdvisor,\n};\n\n/**\n * Type-safe registry helper.\n * Ensures all catalog names have a matching component at compile time.\n */\nexport type BalatroRegistry = typeof balatroRegistry;\n","import { JsonNode } from \"../engine.js\";\n\n/**\n * Build a json-render spec for search results.\n *\n * Pure function. Converts raw Motely search data into a JsonNode tree.\n * The tree renders into a full search UI via `render(spec, registry)`.\n */\n\nexport interface SearchResult {\n seed: string;\n score: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n}\n\nexport interface SearchParams {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n error?: string | null;\n results: SearchResult[];\n}\n\nexport function buildSearchSpec(params: SearchParams): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Search Stats ──\n children.push({\n type: \"SearchStats\",\n props: {\n status: params.status,\n seedsSearched: params.seedsSearched,\n matchesFound: params.matchesFound,\n seedsPerSecond: params.seedsPerSecond,\n elapsed: params.elapsed,\n },\n });\n\n // ── Error Banner ──\n if (params.error) {\n children.push({\n type: \"ErrorBanner\",\n props: {\n message: params.error,\n onDismiss: true,\n },\n });\n }\n\n // ── Spacer ──\n children.push({ type: \"Spacer\", props: { size: 16 } });\n\n // ── Results ──\n if (params.results.length > 0) {\n const resultCards: JsonNode[] = params.results.map((r, i) => ({\n type: \"SeedCard\",\n props: {\n seed: r.seed,\n score: r.score,\n rank: i + 1,\n highlights: r.highlights,\n jokers: r.jokers,\n edition: r.edition,\n onClick: true,\n },\n }));\n\n children.push({\n type: \"Panel\",\n props: {\n title: `Results (${params.matchesFound ?? params.results.length})`,\n subtitle: params.status === \"running\" ? \"More matches arriving…\" : undefined,\n },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: resultCards,\n },\n ],\n });\n } else if (params.status === \"completed\") {\n children.push({\n type: \"Panel\",\n props: { title: \"No matches found\", variant: \"muted\" },\n children: [\n {\n type: \"Text\",\n props: {\n body: \"Try relaxing your filter or checking for typos.\",\n variant: \"muted\",\n },\n },\n ],\n });\n } else if (params.status === \"running\") {\n children.push({\n type: \"LoadingPulse\",\n props: { text: \"Searching seeds…\" },\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n","import { JsonNode } from \"../engine.js\";\nimport { getRecommendedSynergies } from \"../knowledge/synergies.js\";\n\n/**\n * Build a json-render spec for the encyclopedia view.\n *\n * Shows joker info, synergies, and strategy advice for a set of jokers.\n */\n\nexport interface EncyclopediaParams {\n jokers: string[];\n decks?: string[];\n stakes?: string[];\n bosses?: string[];\n showStrategies?: boolean;\n}\n\nexport function buildEncyclopediaSpec(params: EncyclopediaParams): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Joker Cards ──\n if (params.jokers.length > 0) {\n const jokerCards: JsonNode[] = params.jokers.map((name) => ({\n type: \"JokerCard\",\n props: { name, showSynergies: true },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Jokers\", variant: \"accent\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: jokerCards,\n },\n ],\n });\n }\n\n // ── Strategy Advisor ──\n if (params.showStrategies && params.jokers.length > 0) {\n children.push({\n type: \"StrategyAdvisor\",\n props: { jokers: params.jokers },\n });\n }\n\n // ── Synergy Cards ──\n const synergies = getRecommendedSynergies(params.jokers);\n if (synergies.length > 0) {\n const synergyCards: JsonNode[] = synergies.map((s) => ({\n type: \"SynergyCard\",\n props: { name: s.name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Synergies\", variant: \"accent\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: synergyCards,\n },\n ],\n });\n }\n\n // ── Deck Cards ──\n if (params.decks && params.decks.length > 0) {\n const deckCards: JsonNode[] = params.decks.map((name) => ({\n type: \"DeckCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Decks\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: deckCards,\n },\n ],\n });\n }\n\n // ── Stake Cards ──\n if (params.stakes && params.stakes.length > 0) {\n const stakeCards: JsonNode[] = params.stakes.map((name) => ({\n type: \"StakeCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Stakes\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: stakeCards,\n },\n ],\n });\n }\n\n // ── Boss Blind Cards ──\n if (params.bosses && params.bosses.length > 0) {\n const bossCards: JsonNode[] = params.bosses.map((name) => ({\n type: \"BossBlindCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Boss Blinds\", variant: \"muted\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: bossCards,\n },\n ],\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n","import { JsonNode } from \"../engine.js\";\n\n/**\n * Build a json-render spec for seed analysis results.\n *\n * Shows the full breakdown of a single seed: jokers, shop, blinds, etc.\n */\n\nexport interface AnalyzerResult {\n seed: string;\n jokers: Array<{\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n }>;\n shopItems?: Array<{\n name: string;\n type: string;\n edition?: string;\n }>;\n score?: number;\n notes?: string[];\n}\n\nexport function buildAnalyzerSpec(result: AnalyzerResult): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Header ──\n children.push({\n type: \"Panel\",\n props: { title: `Seed: ${result.seed}`, variant: \"accent\" },\n children: [\n {\n type: \"Text\",\n props: { body: `Score: ${result.score ?? \"N/A\"}`, variant: \"title\" },\n },\n ],\n });\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Jokers ──\n if (result.jokers.length > 0) {\n const jokerCards: JsonNode[] = result.jokers.map((j) => ({\n type: \"JamlGameCard\",\n props: {\n type: \"joker\",\n card: {\n name: j.name,\n edition: j.edition,\n seal: j.seal,\n isEternal: j.isEternal,\n },\n scale: 0.8,\n },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Jokers\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 3, gap: 12 },\n children: jokerCards,\n },\n ],\n });\n }\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Shop ──\n if (result.shopItems && result.shopItems.length > 0) {\n const shopBadges: JsonNode[] = result.shopItems.map((s) => ({\n type: \"Badge\",\n props: { label: s.name, tone: \"blue\" },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Shop\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 4, gap: 8 },\n children: shopBadges,\n },\n ],\n });\n }\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Notes ──\n if (result.notes && result.notes.length > 0) {\n const noteTexts: JsonNode[] = result.notes.map((n) => ({\n type: \"Text\",\n props: { body: `• ${n}`, variant: \"muted\" },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Notes\", variant: \"muted\" },\n children: noteTexts,\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n"],"names":["loadImage","url","resolve","image","renderImage","canvas","context","layer","timestamp","cardWidth","cardHeight","canvasStyle","elapsed","yOffset","xOffset","useJamlCardRenderer","layers","invert","hoverTilt","canvasRef","useRef","containerRef","imageCacheRef","ratio","setRatio","useState","forceUpdate","frameRef","targetRef","currentRef","hasAnimatedLayer","useEffect","cancelled","imageCache","urls","SPRITE_SHEETS","sheet","images","index","prev","err","frame","startTime","drawOnce","animTime","a","b","cached","imageRatio","img","tick","stopTiltLoop","useCallback","writeCardTransform","c","runTiltLoop","rate","onSettled","previous","now","dt","target","current","alpha","event","_a","rect","nx","ny","_b","JamlCardRenderer","className","handlers","jsxs","jsx","normalizeCardRank","raw","value","normalizeCardSuit","parseStandardcardName","name","trimmed","ofMatch","shortMatch","suitMap","MODIFIER_PREFIXES","stripModifiers","remaining","edition","isEternal","isPerishable","isRental","changed","prefix","stripped","resolvePackedAnalyzerItem","item","scale","decoded","decodeMotelyItem","resolveAnalyzerShopItem","displayName","packedResolved","VOUCHERS","voucher","JOKERS","joker","TAROTS_AND_PLANETS","consumable","baseName","standardcard","JamlGameCard","card","type","rank","suit","enhancements","seal","jokerData","j","Layer","face","JOKER_FACES","t","CONSUMABLE_FACES","enhancerPos","m","ENHANCER_MAP","pos","RANK_MAP","SUIT_MAP","EDITION_MAP","STICKER_MAP","sealPos","SEAL_MAP","JamlVoucher","voucherName","voucherData","v","JamlTag","tagName","tagData","TAGS","JamlBoss","bossName","bossData","BOSSES","CardSuit","CardRank","CardEnhancement","CardSeal","CardEdition","CARD_WIDTH","CARD_HEIGHT","match","rawRank","rawSuit","StandardCard","enhancement","size","style","parsed","finalRank","finalSuit","col","row","finalH","bgX","bgY","PLAIN_BASE","enhPos","editionCol","isNegative","baseFilter","enhancersUrl","resolveJamlAssetUrl","deckUrl","editionsUrl","layerBase","ALIAS","DOC","MAP","PAIR","SCALAR","SEQ","NODE_TYPE","isAlias","node","isDocument","isMap","isPair","isScalar","isSeq","isCollection","isNode","hasAnchor","BREAK","SKIP","REMOVE","visit","visitor","visitor_","initVisitor","visit_","key","path","ctrl","callVisitor","replaceNode","ci","ck","cv","_c","_d","_e","parent","pt","escapeChars","escapeTagName","tn","ch","Directives","yaml","tags","copy","res","line","onError","parts","handle","version","isValid","source","verbatim","suffix","error","tag","doc","lines","tagEntries","tagNames","_key","anchorIsValid","anchor","msg","anchorNames","root","anchors","findNewAnchor","exclude","i","createNodeAnchors","aliasObjects","sourceObjects","prevAnchors","ref","applyReviver","reviver","obj","val","len","v0","v1","k","toJS","arg","ctx","data","NodeBase","mapAsMap","maxAliasCount","onAnchor","count","Alias","nodes","found","_arg","getAliasCount","_onComment","_onChompKeep","src","kc","vc","isScalarValue","Scalar","defaultTagPrefix","findTagObject","tagObj","createNode","map","aliasDuplicateObjects","onTagObj","schema","collectionFromPath","isEmptyPath","Collection","it","rest","keepScalar","allowScalar","n","stringifyComment","str","indentComment","comment","indent","lineComment","FOLD_FLOW","FOLD_BLOCK","FOLD_QUOTED","foldFlowLines","text","mode","indentAtStart","lineWidth","minContentWidth","onFold","onOverflow","endStep","folds","escapedFolds","end","split","overflow","escStart","escEnd","consumeMoreIndentedLines","next","fold","start","getFoldOptions","isBlock","containsDocumentMarker","lineLengthOverLimit","indentLength","limit","strLen","doubleQuotedString","json","implicitKey","minMultiLineLength","code","singleQuotedString","quotedString","singleQuote","qs","hasDouble","hasSingle","blockEndNewlines","blockString","onComment","onChompKeep","blockQuote","commentString","literal","chomp","endStart","endNlPos","startWithSpace","startEnd","startNlPos","header","foldedValue","literalFallback","foldOptions","body","plainString","actualString","indentStep","inFlow","test","compat","stringifyString","ss","_stringify","_type","defaultKeyType","defaultStringType","createStringifyContext","options","opt","getTagObject","testMatch","stringifyProps","props","stringify","o","stringifyPair","allNullValues","indentSeq","simpleKeys","keyComment","explicitKey","keyCommentDone","chompKeep","vsb","vcb","valueComment","valueCommentDone","valueStr","ws","cs","vs0","nl0","hasNewline","flow","hasPropsLine","sp0","warn","logLevel","warning","MERGE_KEY","merge","addMergeToJSMap","isMergeKey","resolveAliasValue","mergeValue","srcMap","addPairToJSMap","jsKey","stringKey","stringifyKey","jsValue","strCtx","strKey","jsonStr","createPair","Pair","_","pair","stringifyCollection","collection","stringifyFlowCollection","stringifyBlockCollection","items","blockItemPrefix","flowChars","itemIndent","itemCtx","addCommentBefore","ik","fcPadding","reqNewline","linesAtValue","iv","sum","ic","findPair","YAMLMap","keepUndefined","replacer","add","overwrite","_pair","sortEntries","Type","YAMLSeq","idx","asItemIndex","seq","string","nullTag","boolTag","sv","stringifyNumber","format","minFractionDigits","num","d","floatNaN","floatExp","float","dot","intIdentify","intResolve","offset","radix","intAsBigInt","intStringify","intOct","_onError","int","intHex","stringifyJSON","jsonScalars","jsonError","binary","buffer","buf","s","resolvePairs","cn","createPairs","iterable","pairs","keys","YAMLOMap","omap","seenKeys","boolStringify","trueTag","falseTag","f","sign","intBin","YAMLSet","keepPair","set","parseSexagesimal","asBigInt","p","stringifySexagesimal","_60","intTime","floatTime","year","month","day","hour","minute","second","millisec","date","tz","schemas","schema$1","schema$2","tagsByName","coreKnownTags","getTags","customTags","schemaName","addMergeTag","schemaTags","sortMapEntriesByKey","Schema","resolveKnownTags","sortMapEntries","toStringDefaults","stringifyDocument","hasDirectives","dir","contentComment","dc","Document","_replacer","assertCollection","keyToStr","asStr","anchorPrefix","setAnchors","jsonArg","contents","YAMLError","message","YAMLParseError","YAMLWarning","prettifyError","lc","lineStr","trimStart","pointer","resolveProps","tokens","indicator","parentIndent","startOnNewline","spaceBefore","atNewline","hasSpace","commentSep","reqSpace","tab","newlineAfterProp","comma","token","cb","last","containsNewline","st","flowIndentCheck","fc","mapIncludes","search","uniqueKeys","isEqual","startColMsg","resolveBlockMap","composeNode","composeEmptyNode","bm","NodeClass","commentEnd","collItem","sep","keyProps","keyStart","keyNode","valueProps","valueNode","resolveBlockSeq","bs","resolveEnd","blockMsg","resolveFlowCollection","fcName","coll","atRoot","prevItemComment","loop","endRange","expectedEnd","ce","ee","cePos","resolveCollection","CN","Coll","composeCollection","tagToken","nl","lastProp","expType","kt","resolveBlockScalar","scalar","parseBlockScalarHeader","splitLines","chompStart","content","trimIndent","contentStart","prevMoreIndented","crlf","strict","length","ts","first","resolveFlowScalar","rel","plainValue","singleQuotedValue","doubleQuotedValue","valueEnd","re","badChar","foldLines","foldNewline","cc","escapeCodes","parseCharCode","wsStart","composeScalar","range","findScalarTagByName","findScalarTagByTest","matchWithTest","atKey","directives","emptyScalarPosition","before","isSrcToken","composeAlias","alias","composeDoc","opts","contentEnd","getErrorPos","parsePrelude","prelude","atComment","afterEmptyLine","Composer","afterDoc","forceDoc","endOffset","BOM","DOCUMENT","FLOW_END","tokenType","isEmpty","hexDigits","tagChars","flowIndicatorChars","invalidAnchorChars","isNotAnchorChar","Lexer","incomplete","state","dirEnd","sp","ch0","ch1","quote","qb","lastChar","allowEmpty","allowTabs","LineCounter","low","high","mid","includesToken","list","findNonEmptyIndex","isFlowToken","getPrevProps","getFirstKeyStartProps","arrayPushArray","fixFlowSeqItems","Parser","onNewLine","lexeme","top","bv","atMapIndent","atNextItem","fs","docEnd","parseOptions","prettyErrors","parseDocument","lineCounter","parser","composer","_doc","parse","_reviver","ITEM_KEYS","asArray","toStringArray","extractNames","clause","parseClauseList","kind","itemType","names","antes","score","label","parseJamlClauses","jamlText","parseYaml","must","should","mustNot","splitCamelCase","normalizeName","matchClauseToItem","itemName","needle","matchClauseToAnte","ante","highlightClassForKind","matchMotelyItemToClause","category","packDisplayName","pack","MotelyBoosterPack","bossDisplayName","boss","MotelyBossBlind","tagDisplayName","MotelyTag","voucherDisplayName","MotelyVoucher","deckDisplayName","deck","MotelyDeck","stakeDisplayName","stake","MotelyStake","ItemCard","highlight","resolved","useMemo","decodeMotelyItemToJamlCard","itemTypeOfCategory","buildMatchMap","clauses","selectHighlight","matches","matching","primary","PackSection","PullsDrawer","pulls","groups","g","group","EventsSection","events","rolls","r","roll","ErraticDeckPanel","cards","JamlyzerView","result","maxAnteProp","clausesProp","tallies","onHoverClause","maxAnte","selectedAnte","setSelectedAnte","hoveredClause","setHoveredClause","shouldClauses","activeMatches","filtered","anteNumbers","handleClauseHover","SUITS","JimboBalatroFooter","hidden","children","char","kf","pullItems","seedClauseMatches","seedResult","JamlyzerBulk","results","expandedSeed","setExpandedSeed","isExpanded","seedTallies","hitAntes","tally","color","DECK_SPRITE_POS","STAKE_SPRITE_POS","SPRITE_WIDTH","SPRITE_HEIGHT","DECK_COLS","DECK_ROWS","STICKER_COLS","STICKER_ROWS","DeckSprite","deckKey","deckPos","stakePos","displayHeight","render","registry","Component","child","Fragment","renderList","defineCatalog","catalog","balatroCatalog","Panel","title","subtitle","variant","Stack","gap","align","Grid","columns","Text","colors","sizes","Spacer","Divider","Badge","tone","toneMap","SearchStats","status","seedsSearched","matchesFound","seedsPerSecond","statusColor","statusLabel","ErrorBanner","onDismiss","dismissed","setDismissed","LoadingPulse","SeedCard","seed","highlights","jokers","onClick","e","h","SeedList","seeds","scores","total","pageSize","page","setPage","maxPage","visible","JokerBadge","rarity","rarityTone","editionTone","EditionBadge","JamlGameCardImpl","JAMMY_SEED_MASCOT_DATA_URI","JammyOrbitalMenu","onAction","radius","step","angle","x","y","JammyMascot","mood","menuItems","onMenuAction","open","setOpen","handleClick","action","getJoker","getJokersByCategory","getSynergies","jokerName","SYNERGIES","findSynergies","findSynergiesByTag","getRecommendedSynergies","jokerNames","normalized","aMatches","DECKS","STAKES","getDeck","getStake","FINISHERS","getBoss","getBossesByCategory","getAllBosses","JokerCard","showSynergies","categoryTone","synergies","SynergyCard","synergy","difficultyTone","BossBlindCard","threatTone","DeckCard","StakeCard","StrategyAdvisor","foundJokers","recommended","bossWarnings","balatroRegistry","buildSearchSpec","params","resultCards","buildEncyclopediaSpec","jokerCards","synergyCards","deckCards","stakeCards","bossCards","buildAnalyzerSpec","shopBadges","noteTexts"],"mappings":"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","x_google_ignoreList":[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72]}
|