orcasvn-react-diagrams 0.2.2 → 0.2.4
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/CHANGELOG.md +69 -0
- package/README.md +15 -3
- package/dist/cjs/examples.js +2616 -291
- package/dist/cjs/index.js +1186 -153
- package/dist/cjs/types/api/createDiagramEditor.d.ts +19 -1
- package/dist/cjs/types/api/index.d.ts +1 -1
- package/dist/cjs/types/api/types.d.ts +41 -0
- package/dist/cjs/types/displaybox/DisplayBoxControls.d.ts +5 -1
- package/dist/cjs/types/displaybox/demos/AsymmetricPortMultiAnchorDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/LayoutLabelReservedSpaceDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/VertexControlLinkSessionDemoTab.d.ts +3 -0
- package/dist/cjs/types/displaybox/demos/asymmetricPortMultiAnchorDemo.d.ts +31 -0
- package/dist/cjs/types/displaybox/demos/labelStyleDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/layoutLabelReservedSpaceDemo.d.ts +11 -0
- package/dist/cjs/types/displaybox/demos/portPositionLimitsDemo.d.ts +2 -0
- package/dist/cjs/types/displaybox/demos/vertexControlLinkSessionDemo.d.ts +12 -0
- package/dist/cjs/types/displaybox/useDemoControls.d.ts +4 -0
- package/dist/cjs/types/engine/AutoLayoutService.d.ts +2 -0
- package/dist/cjs/types/engine/DiagramEngine.d.ts +11 -0
- package/dist/cjs/types/engine/LinkRoutingService.d.ts +9 -1
- package/dist/cjs/types/models/PortModel.d.ts +5 -0
- package/dist/cjs/types/renderer/RenderTypes.d.ts +3 -1
- package/dist/cjs/types/renderer/konva/KonvaInteraction.d.ts +14 -0
- package/dist/cjs/types/renderer/konva/KonvaNodeFactory.d.ts +12 -0
- package/dist/cjs/types/renderer/konva/KonvaRenderer.d.ts +2 -1
- package/dist/cjs/types/shapes/BuiltInShapes.d.ts +3 -1
- package/dist/cjs/types/strategies/ObstacleRouter.d.ts +2 -0
- package/dist/cjs/types/utils/__tests__/portGeometry.test.d.ts +1 -0
- package/dist/cjs/types/utils/portGeometry.d.ts +44 -0
- package/dist/esm/examples.js +2617 -292
- package/dist/esm/examples.js.map +1 -1
- package/dist/esm/index.js +1186 -153
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/api/createDiagramEditor.d.ts +19 -1
- package/dist/esm/types/api/index.d.ts +1 -1
- package/dist/esm/types/api/types.d.ts +41 -0
- package/dist/esm/types/displaybox/DisplayBoxControls.d.ts +5 -1
- package/dist/esm/types/displaybox/demos/AsymmetricPortMultiAnchorDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/LayoutLabelReservedSpaceDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/VertexControlLinkSessionDemoTab.d.ts +3 -0
- package/dist/esm/types/displaybox/demos/asymmetricPortMultiAnchorDemo.d.ts +31 -0
- package/dist/esm/types/displaybox/demos/labelStyleDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/layoutLabelReservedSpaceDemo.d.ts +11 -0
- package/dist/esm/types/displaybox/demos/portPositionLimitsDemo.d.ts +2 -0
- package/dist/esm/types/displaybox/demos/vertexControlLinkSessionDemo.d.ts +12 -0
- package/dist/esm/types/displaybox/useDemoControls.d.ts +4 -0
- package/dist/esm/types/engine/AutoLayoutService.d.ts +2 -0
- package/dist/esm/types/engine/DiagramEngine.d.ts +11 -0
- package/dist/esm/types/engine/LinkRoutingService.d.ts +9 -1
- package/dist/esm/types/models/PortModel.d.ts +5 -0
- package/dist/esm/types/renderer/RenderTypes.d.ts +3 -1
- package/dist/esm/types/renderer/konva/KonvaInteraction.d.ts +14 -0
- package/dist/esm/types/renderer/konva/KonvaNodeFactory.d.ts +12 -0
- package/dist/esm/types/renderer/konva/KonvaRenderer.d.ts +2 -1
- package/dist/esm/types/shapes/BuiltInShapes.d.ts +3 -1
- package/dist/esm/types/strategies/ObstacleRouter.d.ts +2 -0
- package/dist/esm/types/utils/__tests__/portGeometry.test.d.ts +1 -0
- package/dist/esm/types/utils/portGeometry.d.ts +44 -0
- package/dist/examples.d.ts +59 -0
- package/dist/index.d.ts +67 -1
- package/package.json +2 -1
- package/src/displaybox/demos/AsymmetricPortMultiAnchorDemoTab.tsx +269 -0
- package/src/displaybox/demos/AutoLayoutDemoTab.tsx +113 -11
- package/src/displaybox/demos/DeletionEventsDemoTab.tsx +6 -1
- package/src/displaybox/demos/EngineEventsDemoTab.tsx +5 -0
- package/src/displaybox/demos/EventHandlersDemoTab.tsx +5 -0
- package/src/displaybox/demos/ExternalDragDropDemoTab.tsx +5 -0
- package/src/displaybox/demos/LayoutLabelReservedSpaceDemoTab.tsx +291 -0
- package/src/displaybox/demos/LinkCancelDemoTab.tsx +5 -0
- package/src/displaybox/demos/ObstacleRoutingDemoTab.tsx +11 -10
- package/src/displaybox/demos/ShapeHoverControlsDemoTab.tsx +6 -1
- package/src/displaybox/demos/SimpleDemo.tsx +5 -0
- package/src/displaybox/demos/SvgPathDemoTab.tsx +5 -0
- package/src/displaybox/demos/TextLayoutDemoTab.tsx +6 -1
- package/src/displaybox/demos/VertexControlLinkSessionDemoTab.tsx +302 -0
- package/src/displaybox/demos/asymmetricPortMultiAnchorDemo.ts +357 -0
- package/src/displaybox/demos/autoLayoutDemo.ts +23 -5
- package/src/displaybox/demos/index.tsx +110 -80
- package/src/displaybox/demos/labelStyleDemo.ts +101 -0
- package/src/displaybox/demos/layoutLabelReservedSpaceDemo.ts +121 -0
- package/src/displaybox/demos/obstacleRoutingDemo.ts +212 -176
- package/src/displaybox/demos/portPositionLimitsDemo.ts +211 -0
- package/src/displaybox/demos/vertexControlLinkSessionDemo.ts +145 -0
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/api/types.ts","../../node_modules/tslib/tslib.es6.js","../../src/models/ElementModel.ts","../../src/models/LinkModel.ts","../../src/models/OwnershipIndex.ts","../../src/models/PortModel.ts","../../src/models/TextModel.ts","../../src/utils/geometry.ts","../../src/models/DiagramModel.ts","../../src/engine/CommandQueue.ts","../../src/engine/EventBus.ts","../../src/engine/SelectionState.ts","../../src/engine/ViewportState.ts","../../src/utils/patches.ts","../../src/engine/EngineCommands.ts","../../src/renderer/RenderScheduler.ts","../../src/strategies/ObstacleRouter.ts","../../src/strategies/DefaultSnapper.ts","../../src/renderer/RenderTypes.ts","../../src/measure/textStyleDefaults.ts","../../src/measure/CanvasTextMeasurer.ts","../../src/utils/borderGeometry.ts","../../src/engine/TextLayoutService.ts","../../src/engine/AutoLayoutService.ts","../../src/engine/LinkRoutingService.ts","../../src/engine/MutationPipeline.ts","../../src/engine/DiagramEngine.ts","../../src/renderer/konva/KonvaLayers.ts","../../src/renderer/konva/KonvaNodeFactory.ts","../../src/renderer/konva/KonvaRenderer.ts","../../src/renderer/konva/KonvaHitTester.ts","../../src/utils/ids.ts","../../src/renderer/konva/KonvaInteraction.ts","../../src/shapes/BuiltInShapes.ts","../../src/api/createDiagramEditor.ts"],"sourcesContent":["export type Point = { x: number; y: number };\r\nexport type Size = { width: number; height: number };\r\nexport type Rect = { x: number; y: number; width: number; height: number };\r\nexport type ClientRectLike = { left: number; top: number };\r\nexport type DiagramContainer = { getBoundingClientRect: () => ClientRectLike };\nexport type MoveConstraint = 'free' | 'inside' | 'border';\nexport type BorderSide = 'left' | 'right' | 'top' | 'bottom';\nexport type HostAnchorPreset = 'vertices' | 'cardinal';\nexport type PortAnchor = {\n id: string;\n position: Point;\n side?: BorderSide;\n normal?: Point;\n meta?: Record<string, unknown>;\n};\nexport type PortAnchorConstraint = {\n preset: HostAnchorPreset;\n fallback?: 'nearest';\n};\nexport type ResolvePortAnchorsOptions = {\n preset: HostAnchorPreset;\n};\nexport type ShapeVertexTarget = {\n id: string;\n position: Point;\n};\nexport type ShapeEdgeTarget = {\n id: string;\n start: Point;\n end: Point;\n midpoint: Point;\n};\nexport enum EllipseMidPoint {\n top = 'top',\n right = 'right',\n bottom = 'bottom',\n left = 'left',\n}\nexport type ShapeEllipseMidPointTarget = {\n id: EllipseMidPoint;\n ellipseMidPoint: EllipseMidPoint;\n position: Point;\n};\nexport type ShapeHoverGeometry = {\n vertices: ShapeVertexTarget[];\n edges: ShapeEdgeTarget[];\n};\nexport type HoverControlIcon = {\n svgPath: string;\n size?: Size;\n style?: Record<string, unknown>;\n};\nexport type ShapeControlTargetKind = 'vertex' | 'edge' | 'midpoint' | 'ellipse-midpoint';\nexport type ShapeControlVisibilityTrigger = 'element-hover' | 'target-hover';\nexport type ShapeControlDefinition = {\n id: string;\n targetKind: ShapeControlTargetKind;\n icon: HoverControlIcon;\n targetIndices?: number[];\n ellipseMidPoints?: EllipseMidPoint | EllipseMidPoint[];\n allowAllTargets?: boolean;\n visibilityTriggers?: ShapeControlVisibilityTrigger[];\n lineStyle?: Record<string, unknown>;\n tolerance?: number;\n};\n/**\n * @deprecated Use ShapeControlDefinition with targetKind='edge'.\n */\nexport type EdgeHoverControl = {\n kind: 'edge';\n icon: HoverControlIcon;\n lineStyle?: Record<string, unknown>;\n tolerance?: number;\n};\n/**\n * @deprecated Use ShapeControlDefinition with targetKind='vertex'.\n */\nexport type VertexHoverControl = {\n kind: 'vertex';\n icon: HoverControlIcon;\n tolerance?: number;\n};\nexport type ElementShapeHoverControls = {\n controls?: ShapeControlDefinition[];\n /**\n * @deprecated Legacy singleton edge control. Use controls[] instead.\n */\n edge?: EdgeHoverControl;\n /**\n * @deprecated Legacy singleton vertex control. Use controls[] instead.\n */\n vertex?: VertexHoverControl;\n /**\n * @deprecated Legacy resolution preference for singleton edge/vertex controls.\n */\n priority?: 'vertex-first';\n};\nexport type ElementShapeControlEventType = 'click' | 'drag-start' | 'drag-move' | 'drag-end';\nexport type ElementShapeControlDragEvent = {\n sessionId: string;\n startPointer: EnginePointerInfo;\n delta: Point;\n};\nexport type ElementShapeHoverControlInteractionEvent = {\n eventType: ElementShapeControlEventType;\n controlId: string;\n elementId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n pointer: EnginePointerInfo;\n edge?: ShapeEdgeTarget;\n vertex?: ShapeVertexTarget;\n ellipseMidPoint?: EllipseMidPoint;\n drag?: ElementShapeControlDragEvent;\n};\n/**\n * @deprecated Use ElementShapeHoverControlInteractionEvent with eventType='click'.\n */\nexport type ElementShapeHoverControlActivationEvent = {\n controlKind: 'edge' | 'vertex';\n elementId: string;\n targetId: string;\n pointer: EnginePointerInfo;\n edge?: ShapeEdgeTarget;\n vertex?: ShapeVertexTarget;\n};\nexport type ElementPortMovementPolicy = {\n moveMode: MoveConstraint | 'anchors';\n anchorConstraint?: PortAnchorConstraint;\n};\nexport type LinkRoutingMode = 'auto' | 'manual';\nexport type AnchorReference = 'top-left' | 'center';\nexport type RerouteLinksOptions = { includeManual?: boolean };\nexport type ElementLayoutMode = 'manual' | 'horizontal' | 'vertical';\nexport type ElementLayoutAlign = 'start' | 'center' | 'end';\nexport type ElementLayoutChildFitMainAxis = 'none' | 'distribute';\nexport type ElementLayoutChildFitCrossAxis = 'none' | 'stretch';\nexport type TextLayoutBoundsMode = 'owner-width' | 'owner-box' | 'fixed';\nexport type TextLayoutWrapMode = 'none' | 'word' | 'char';\nexport type TextLayoutOverflowMode = 'clip' | 'ellipsis-end' | 'ellipsis-middle' | 'ellipsis-start';\nexport type ElementLayout = {\n mode: ElementLayoutMode;\n padding?: number | { x: number; y: number };\n gap?: number;\n align?: ElementLayoutAlign;\n childFitMainAxis?: ElementLayoutChildFitMainAxis;\n childFitCrossAxis?: ElementLayoutChildFitCrossAxis;\n childFitMinSize?: Partial<Size>;\n childFitMaxSize?: Partial<Size>;\n};\n\nexport type TextLayout = {\n boundsMode?: TextLayoutBoundsMode;\n wrap?: TextLayoutWrapMode;\n overflow?: TextLayoutOverflowMode;\n padding?: number;\n maxLines?: number;\n fixedSize?: Size;\n};\n\r\nexport type ElementDropEvent = {\r\n elementId: string;\r\n startWorld: Point;\r\n endWorld: Point;\r\n delta: Point;\r\n startParentId?: string | null;\r\n selectionIds: string[];\r\n anchor: AnchorReference;\r\n};\r\n\r\nexport type OverlayShapeConfig = {\r\n shapeId: string;\r\n position: Point;\r\n size: Size;\r\n style?: Record<string, unknown>;\r\n anchorCenter?: boolean;\r\n};\r\n\r\nexport type OverlayShapeHandle = {\r\n update: (config: OverlayShapeConfig) => void;\r\n destroy: () => void;\r\n};\r\n\r\nexport type ElementData = {\r\n id: string;\r\n position: Point;\r\n size: Size;\r\n shapeId: string;\r\n style?: Record<string, unknown>;\r\n portIds?: string[];\r\n textIds?: string[];\r\n parentId?: string | null;\r\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n layout?: ElementLayout;\n portMovement?: ElementPortMovementPolicy;\n};\n\r\nexport type PortData = {\n id: string;\n elementId: string;\n position: Point;\n shapeId?: string;\n size?: Size;\n style?: Record<string, unknown>;\n textIds?: string[];\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n orientToHostBorder?: boolean;\n currentAnchorId?: string;\n};\n\r\nexport type ShapeDrawContext = {\r\n ctx: CanvasRenderingContext2D;\r\n model: ElementData | PortData;\r\n};\r\n\r\nexport type LinkData = {\r\n id: string;\r\n sourcePortId: string;\r\n targetPortId: string;\r\n points: Point[];\r\n routing?: LinkRoutingMode;\r\n style?: Record<string, unknown>;\r\n textIds?: string[];\r\n};\r\n\r\nexport type TextData = {\n id: string;\n content: string;\n position: Point;\n size?: Size;\n style?: Record<string, unknown>;\n ownerId?: string | null;\n layout?: TextLayout;\n displayContent?: string;\n displayOffset?: Point;\n displayClipSize?: Size;\n};\n\r\nexport type DiagramState = {\r\n elements: ElementData[];\r\n ports: PortData[];\r\n links: LinkData[];\r\n texts: TextData[];\r\n};\r\n\r\nexport type DiagramPatch = {\r\n type: string;\r\n entity: 'element' | 'port' | 'link' | 'text' | 'selection' | 'viewport' | 'config';\r\n id?: string;\r\n payload?: Record<string, unknown>;\r\n};\r\n\r\nexport type EngineChangeEvent = {\r\n patches: DiagramPatch[];\r\n state: DiagramState;\r\n};\r\n\r\nexport type EngineSelectionEvent = {\r\n selectedIds: string[];\r\n};\r\n\r\nexport type EngineConfigEvent = {\r\n type: 'routing' | 'snapping' | 'rendering';\r\n};\r\n\r\nexport type EnginePointerInfo = {\r\n client: Point;\r\n world: Point;\r\n button?: number;\r\n buttons?: number;\r\n altKey?: boolean;\r\n ctrlKey?: boolean;\r\n metaKey?: boolean;\r\n shiftKey?: boolean;\r\n pointerType?: string;\r\n};\r\n\r\nexport type PaperClickEvent = {\r\n pointer: EnginePointerInfo;\r\n};\r\n\r\nexport type PortMouseEvent = {\r\n portId: string;\r\n elementId: string;\r\n pointer: EnginePointerInfo;\r\n};\r\n\r\nexport type PortMovedEvent = {\r\n portId: string;\r\n elementId: string;\r\n oldWorld: Point;\r\n newWorld: Point;\r\n delta: Point;\r\n};\r\n\r\nexport type PortSelectedEvent = {\r\n portId: string;\r\n elementId: string;\r\n};\r\n\r\nexport type ElementPointerEvent = {\r\n elementId: string;\r\n pointer: EnginePointerInfo;\r\n isMulti: boolean;\r\n};\r\n\r\nexport type ElementMovedEvent = {\r\n elementId: string;\r\n oldWorld: Point;\r\n newWorld: Point;\r\n delta: Point;\r\n};\r\n\r\nexport type ElementResizedEvent = {\r\n elementId: string;\r\n oldSize: Size;\r\n newSize: Size;\r\n};\r\n\r\nexport type ElementDeletedEvent = {\n elementId: string;\n};\n\nexport type PortDeletedEvent = {\n portId: string;\n elementId: string;\n};\n\nexport type LinkDeletedEvent = {\n linkId: string;\n sourcePortId: string;\n targetPortId: string;\n};\n\nexport type TextDeletedEvent = {\n textId: string;\n ownerId?: string | null;\n};\n\nexport type TextUpdatedEvent = {\n textId: string;\n ownerId?: string | null;\n content: string;\n displayContent: string;\n reason: 'content' | 'layout';\n};\n\nexport type ElementLinkStartedEvent = {\n sourcePortId: string;\n sourceElementId: string;\n startWorld: Point;\n};\n\r\nexport type ElementLinkConnectingEvent = {\r\n sourcePortId: string;\r\n sourceElementId: string;\r\n targetPortId: string;\r\n targetElementId: string;\r\n cancel: () => void;\r\n cancelled: boolean;\r\n};\r\n\r\nexport type ElementLinkEndedEvent = {\r\n sourcePortId: string;\r\n sourceElementId: string;\r\n linkId?: string;\r\n targetPortId?: string;\r\n targetElementId?: string;\r\n cancelled: boolean;\r\n};\r\n\r\n\r\nexport type ElementSelectedEvent = {\r\n elementId: string;\r\n};\r\n\r\nexport type TextSelectedEvent = {\r\n textId: string;\r\n};\r\n\r\nexport type EngineEventMap = {\r\n change: EngineChangeEvent;\r\n selection: EngineSelectionEvent;\r\n config: EngineConfigEvent;\r\n /**\r\n * Deprecated (legacy kebab-case). Prefer `elementDrop`.\r\n */\r\n 'element-drop': ElementDropEvent;\r\n elementDrop: ElementDropEvent;\r\n\r\n // Legacy event surface (camelCase)\r\n paperClick: PaperClickEvent;\r\n\r\n portMouseDown: PortMouseEvent;\r\n portMouseUp: PortMouseEvent;\r\n portMoved: PortMovedEvent;\r\n portSelected: PortSelectedEvent;\r\n\r\n elementClick: ElementPointerEvent;\r\n elementDragged: ElementDropEvent;\r\n elementMoved: ElementMovedEvent;\n elementResized: ElementResizedEvent;\n elementDeleted: ElementDeletedEvent;\n portDeleted: PortDeletedEvent;\n linkDeleted: LinkDeletedEvent;\n textDeleted: TextDeletedEvent;\n textUpdated: TextUpdatedEvent;\n elementSelected: ElementSelectedEvent;\n\r\n elementLinkStarted: ElementLinkStartedEvent;\r\n elementLinkConnecting: ElementLinkConnectingEvent;\r\n elementLinkEnded: ElementLinkEndedEvent;\r\n\r\n textSelected: TextSelectedEvent;\r\n};\r\n\r\nexport type DiagramEngineHandle = {\r\n load: (state: DiagramState) => void;\r\n getState: () => DiagramState;\r\n getViewport: () => { pan: Point; zoom: number };\r\n /**\r\n * Convert client/screen coordinates into diagram world coordinates.\r\n * Formula: world = (client - containerRect - pan) / zoom.\r\n */\r\n clientToWorld: (clientPoint: Point, container: DiagramContainer) => Point;\r\n createOverlayShape: (config: OverlayShapeConfig) => OverlayShapeHandle;\r\n on: <T extends keyof EngineEventMap>(\r\n event: T,\r\n handler: (payload: EngineEventMap[T]) => void\r\n ) => () => void;\r\n addElement: (element: ElementData) => void;\r\n moveElementTo: (id: string, x: number, y: number) => void;\r\n resizeElement: (id: string, width: number, height: number) => void;\r\n setElementLayout: (id: string, layout: ElementLayout | undefined) => void;\r\n removeElement: (id: string) => void;\r\n addPortToElement: (elementId: string, port: PortData) => void;\r\n movePortTo: (id: string, x: number, y: number) => void;\r\n removePort: (id: string) => void;\r\n addLink: (link: LinkData) => void;\r\n updateLinkPoints: (id: string, points: Point[]) => void;\r\n setLinkRoutingMode: (id: string, mode: LinkRoutingMode) => void;\r\n rerouteAllLinks: () => void;\r\n rerouteLinks: (linkIds: string[], options?: RerouteLinksOptions) => void;\r\n removeLink: (id: string) => void;\r\n addText: (text: TextData) => void;\r\n updateText: (id: string, content: string) => void;\r\n moveTextTo: (id: string, x: number, y: number) => void;\r\n removeText: (id: string) => void;\r\n setSelection: (ids: string[]) => void;\r\n setViewport: (pan: Point, zoom: number) => void;\r\n setRouting: (router: unknown) => void;\r\n setSnapping: (snapper: unknown) => void;\r\n registerShape: (shape: {\n id: string;\n baseRotation?: number;\n draw?: (context: ShapeDrawContext) => void;\n createNode?: (model: ElementData | PortData) => unknown;\n svgPath?: string;\n svgSize?: Size;\n projectToBorder?: (point: Point, rect: Rect) => Point;\n resolveBorderSide?: (point: Point, rect: Rect) => BorderSide;\n resolvePortAnchors?: (rect: Rect, options: ResolvePortAnchorsOptions) => PortAnchor[];\n resolveHoverGeometry?: (rect: Rect) => ShapeHoverGeometry | undefined;\n resolveEllipseMidPoints?: (rect: Rect) => ShapeEllipseMidPointTarget[] | undefined;\n }) => void;\n render: () => void;\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import { ElementData, MoveConstraint, Point, Size } from '../api/types';\r\n\r\nexport default class ElementModel {\r\n id: string;\r\n position: Point;\r\n size: Size;\r\n shapeId: string;\r\n style?: Record<string, unknown>;\r\n portIds: string[];\r\n textIds: string[];\r\n parentId: string | null;\r\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n layout?: ElementData['layout'];\n portMovement?: ElementData['portMovement'];\n\r\n constructor(data: ElementData) {\r\n this.id = data.id;\r\n this.position = { ...data.position };\r\n this.size = { ...data.size };\r\n this.shapeId = data.shapeId;\r\n this.style = data.style;\r\n this.portIds = data.portIds ? [...data.portIds] : [];\r\n this.textIds = data.textIds ? [...data.textIds] : [];\r\n this.parentId = data.parentId ?? null;\r\n this.moveMode = data.moveMode;\n this.anchorCenter = data.anchorCenter;\n this.layout = data.layout;\n this.portMovement = data.portMovement;\n }\r\n\r\n setPosition(position: Point): void {\r\n this.position = { ...position };\r\n }\r\n\r\n setSize(size: Size): void {\r\n this.size = { ...size };\r\n }\r\n\r\n addPort(portId: string): void {\r\n if (!this.portIds.includes(portId)) {\r\n this.portIds.push(portId);\r\n }\r\n }\r\n\r\n removePort(portId: string): void {\r\n this.portIds = this.portIds.filter((id) => id !== portId);\r\n }\r\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): ElementData {\r\n return {\r\n id: this.id,\r\n position: { ...this.position },\r\n size: { ...this.size },\r\n shapeId: this.shapeId,\r\n style: this.style,\r\n portIds: [...this.portIds],\r\n textIds: [...this.textIds],\r\n parentId: this.parentId,\r\n moveMode: this.moveMode,\n anchorCenter: this.anchorCenter,\n layout: this.layout,\n portMovement: this.portMovement,\n };\n }\n}\n","import { LinkData, LinkRoutingMode, Point } from '../api/types';\r\n\r\nexport default class LinkModel {\r\n id: string;\r\n sourcePortId: string;\r\n targetPortId: string;\r\n points: Point[];\r\n routing: LinkRoutingMode;\r\n style?: Record<string, unknown>;\r\n textIds: string[];\r\n\r\n constructor(data: LinkData) {\r\n this.id = data.id;\r\n this.sourcePortId = data.sourcePortId;\r\n this.targetPortId = data.targetPortId;\r\n this.points = data.points.map((point) => ({ ...point }));\r\n this.routing = data.routing ?? 'auto';\r\n this.style = data.style;\r\n this.textIds = data.textIds ? [...data.textIds] : [];\r\n }\r\n\r\n setPoints(points: Point[]): void {\r\n this.points = points.map((point) => ({ ...point }));\r\n }\r\n\r\n setRouting(mode: LinkRoutingMode): void {\r\n this.routing = mode;\r\n }\r\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): LinkData {\r\n return {\r\n id: this.id,\r\n sourcePortId: this.sourcePortId,\r\n targetPortId: this.targetPortId,\r\n points: this.points.map((point) => ({ ...point })),\r\n routing: this.routing,\r\n style: this.style,\r\n textIds: [...this.textIds],\r\n };\r\n }\r\n}\r\n","export default class OwnershipIndex {\r\n private ownerToTexts = new Map<string, Set<string>>();\r\n\r\n add(ownerId: string, textId: string): void {\r\n const set = this.ownerToTexts.get(ownerId) ?? new Set<string>();\r\n set.add(textId);\r\n this.ownerToTexts.set(ownerId, set);\r\n }\r\n\r\n remove(ownerId: string, textId: string): void {\r\n const set = this.ownerToTexts.get(ownerId);\r\n if (!set) return;\r\n set.delete(textId);\r\n if (set.size === 0) {\r\n this.ownerToTexts.delete(ownerId);\r\n }\r\n }\r\n\r\n getTexts(ownerId: string): string[] {\r\n const set = this.ownerToTexts.get(ownerId);\r\n if (!set) return [];\r\n return Array.from(set.values());\r\n }\r\n\r\n clearOwner(ownerId: string): void {\r\n this.ownerToTexts.delete(ownerId);\r\n }\r\n}\r\n","import { MoveConstraint, Point, PortData, Size } from '../api/types';\r\n\r\nexport default class PortModel {\r\n id: string;\r\n elementId: string;\r\n position: Point;\r\n shapeId?: string;\r\n size?: Size;\r\n style?: Record<string, unknown>;\r\n textIds: string[];\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n orientToHostBorder: boolean;\n currentAnchorId?: string;\n\r\n constructor(data: PortData) {\r\n this.id = data.id;\r\n this.elementId = data.elementId;\r\n this.position = { ...data.position };\r\n this.shapeId = data.shapeId;\r\n this.size = data.size ? { ...data.size } : undefined;\r\n this.style = data.style;\r\n this.textIds = data.textIds ? [...data.textIds] : [];\n this.moveMode = data.moveMode;\n this.anchorCenter = data.anchorCenter ?? true;\n this.orientToHostBorder = data.orientToHostBorder ?? true;\n this.currentAnchorId = data.currentAnchorId;\n }\n\r\n setPosition(position: Point): void {\n this.position = { ...position };\n }\n\n setCurrentAnchorId(currentAnchorId?: string): void {\n this.currentAnchorId = currentAnchorId;\n }\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): PortData {\r\n return {\r\n id: this.id,\r\n elementId: this.elementId,\r\n position: { ...this.position },\r\n shapeId: this.shapeId,\r\n size: this.size ? { ...this.size } : undefined,\r\n style: this.style,\r\n textIds: [...this.textIds],\n moveMode: this.moveMode,\n anchorCenter: this.anchorCenter,\n orientToHostBorder: this.orientToHostBorder,\n currentAnchorId: this.currentAnchorId,\n };\n }\n}\n","import { Point, TextData, Size } from '../api/types';\n\r\nexport default class TextModel {\r\n id: string;\r\n content: string;\r\n position: Point;\r\n size?: Size;\n style?: Record<string, unknown>;\n ownerId?: string | null;\n layout?: TextData['layout'];\n displayContent?: string;\n displayOffset?: Point;\n displayClipSize?: Size;\n\r\n constructor(data: TextData) {\r\n this.id = data.id;\r\n this.content = data.content;\r\n this.position = { ...data.position };\r\n this.size = data.size ? { ...data.size } : undefined;\n this.style = data.style;\n this.ownerId = data.ownerId ?? null;\n this.layout = data.layout ? { ...data.layout } : undefined;\n this.displayContent = data.displayContent ?? data.content;\n this.displayOffset = data.displayOffset ? { ...data.displayOffset } : undefined;\n this.displayClipSize = data.displayClipSize ? { ...data.displayClipSize } : undefined;\n }\n\r\n setContent(content: string): void {\n this.content = content;\n this.displayContent = content;\n }\n\r\n setSize(size: Size): void {\n this.size = { ...size };\n }\n\n setDisplayContent(content: string): void {\n this.displayContent = content;\n }\n\n setDisplayOffset(offset: Point | undefined): void {\n this.displayOffset = offset ? { ...offset } : undefined;\n }\n\n setDisplayClipSize(size: Size | undefined): void {\n this.displayClipSize = size ? { ...size } : undefined;\n }\n\n setLayout(layout: TextData['layout']): void {\n this.layout = layout ? { ...layout } : undefined;\n }\n\r\n setPosition(position: Point): void {\r\n this.position = { ...position };\r\n }\r\n\r\n toData(): TextData {\r\n return {\r\n id: this.id,\r\n content: this.content,\r\n position: { ...this.position },\r\n size: this.size ? { ...this.size } : undefined,\n style: this.style,\n ownerId: this.ownerId,\n layout: this.layout ? { ...this.layout } : undefined,\n displayContent: this.displayContent ?? this.content,\n displayOffset: this.displayOffset ? { ...this.displayOffset } : undefined,\n displayClipSize: this.displayClipSize ? { ...this.displayClipSize } : undefined,\n };\n }\n}\n","import { Point, Rect } from '../api/types';\r\n\r\nexport const addPoints = (a: Point, b: Point): Point => ({ x: a.x + b.x, y: a.y + b.y });\r\nexport const subtractPoints = (a: Point, b: Point): Point => ({ x: a.x - b.x, y: a.y - b.y });\r\nexport const scalePoint = (point: Point, factor: number): Point => ({\r\n x: point.x * factor,\r\n y: point.y * factor,\r\n});\r\n\r\nexport const distance = (a: Point, b: Point): number => {\r\n const dx = a.x - b.x;\r\n const dy = a.y - b.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const clamp = (value: number, min: number, max: number): number => {\r\n if (value < min) return min;\r\n if (value > max) return max;\r\n return value;\r\n};\r\n\r\nexport const rectContainsPoint = (rect: Rect, point: Point): boolean => {\r\n return (\r\n point.x >= rect.x &&\r\n point.x <= rect.x + rect.width &&\r\n point.y >= rect.y &&\r\n point.y <= rect.y + rect.height\r\n );\r\n};\r\n\r\nexport const rectsIntersect = (a: Rect, b: Rect): boolean => {\n return !(\n a.x + a.width < b.x ||\n b.x + b.width < a.x ||\n a.y + a.height < b.y ||\n b.y + b.height < a.y\n );\n};\n\nexport const degreesToRadians = (degrees: number): number => (degrees * Math.PI) / 180;\n\nexport const rotatePoint = (point: Point, center: Point, degrees: number): Point => {\n if (Math.abs(degrees) < 1e-9) return { ...point };\n const radians = degreesToRadians(degrees);\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const dx = point.x - center.x;\n const dy = point.y - center.y;\n return {\n x: center.x + dx * cos - dy * sin,\n y: center.y + dx * sin + dy * cos,\n };\n};\n\nexport const resolveRectRotationPivot = (\n topLeft: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n): Point => {\n if (anchorCenter) {\n return { x: topLeft.x + size.width / 2, y: topLeft.y + size.height / 2 };\n }\n return { x: topLeft.x, y: topLeft.y };\n};\n\nexport const getRotatedRectCorners = (\n topLeft: Point,\n size: { width: number; height: number },\n rotation: number,\n anchorCenter = false,\n): { nw: Point; ne: Point; sw: Point; se: Point } => {\n const nw = { ...topLeft };\n const ne = { x: topLeft.x + size.width, y: topLeft.y };\n const sw = { x: topLeft.x, y: topLeft.y + size.height };\n const se = { x: topLeft.x + size.width, y: topLeft.y + size.height };\n if (Math.abs(rotation) < 1e-9) return { nw, ne, sw, se };\n const pivot = resolveRectRotationPivot(topLeft, size, anchorCenter);\n return {\n nw: rotatePoint(nw, pivot, rotation),\n ne: rotatePoint(ne, pivot, rotation),\n sw: rotatePoint(sw, pivot, rotation),\n se: rotatePoint(se, pivot, rotation),\n };\n};\n\nexport const pointInPolygon = (point: Point, polygon: Point[]): boolean => {\n if (polygon.length < 3) return false;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i, i += 1) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n const intersects =\n yi > point.y !== yj > point.y &&\n point.x < ((xj - xi) * (point.y - yi)) / ((yj - yi) || 1e-12) + xi;\n if (intersects) inside = !inside;\n }\n return inside;\n};\n\nconst orientation = (a: Point, b: Point, c: Point): number =>\n (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);\n\nconst onSegment = (a: Point, b: Point, c: Point): boolean =>\n Math.min(a.x, c.x) <= b.x &&\n b.x <= Math.max(a.x, c.x) &&\n Math.min(a.y, c.y) <= b.y &&\n b.y <= Math.max(a.y, c.y);\n\nexport const segmentsIntersect = (a1: Point, a2: Point, b1: Point, b2: Point): boolean => {\n const o1 = orientation(a1, a2, b1);\n const o2 = orientation(a1, a2, b2);\n const o3 = orientation(b1, b2, a1);\n const o4 = orientation(b1, b2, a2);\n\n if (o1 * o2 < 0 && o3 * o4 < 0) return true;\n if (Math.abs(o1) < 1e-9 && onSegment(a1, b1, a2)) return true;\n if (Math.abs(o2) < 1e-9 && onSegment(a1, b2, a2)) return true;\n if (Math.abs(o3) < 1e-9 && onSegment(b1, a1, b2)) return true;\n if (Math.abs(o4) < 1e-9 && onSegment(b1, a2, b2)) return true;\n return false;\n};\n\nexport const pointInRotatedRect = (\n point: Point,\n topLeft: Point,\n size: { width: number; height: number },\n rotation: number,\n anchorCenter = false,\n): boolean => {\n if (Math.abs(rotation) < 1e-9) {\n return rectContainsPoint({ x: topLeft.x, y: topLeft.y, width: size.width, height: size.height }, point);\n }\n const pivot = resolveRectRotationPivot(topLeft, size, anchorCenter);\n const unrotatedPoint = rotatePoint(point, pivot, -rotation);\n return rectContainsPoint({ x: topLeft.x, y: topLeft.y, width: size.width, height: size.height }, unrotatedPoint);\n};\n\nexport const polygonIntersectsRect = (polygon: Point[], rect: Rect): boolean => {\n if (polygon.length < 2) return false;\n if (polygon.some((point) => rectContainsPoint(rect, point))) return true;\n\n const rectCorners = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n\n if (rectCorners.some((corner) => pointInPolygon(corner, polygon))) return true;\n\n const polygonEdges = polygon.map((point, index) => [point, polygon[(index + 1) % polygon.length]] as const);\n const rectEdges = [\n [rectCorners[0], rectCorners[1]],\n [rectCorners[1], rectCorners[2]],\n [rectCorners[2], rectCorners[3]],\n [rectCorners[3], rectCorners[0]],\n ] as const;\n\n for (let i = 0; i < polygonEdges.length; i += 1) {\n const [a1, a2] = polygonEdges[i];\n for (let j = 0; j < rectEdges.length; j += 1) {\n const [b1, b2] = rectEdges[j];\n if (segmentsIntersect(a1, a2, b1, b2)) return true;\n }\n }\n\n return false;\n};\n\nexport const snapToGrid = (point: Point, gridSize: number): Point => {\n if (gridSize <= 0) return { ...point };\n return {\n x: Math.round(point.x / gridSize) * gridSize,\r\n y: Math.round(point.y / gridSize) * gridSize,\r\n };\r\n};\r\n","import { DiagramState, ElementData, LinkData, LinkRoutingMode, Point, PortData, TextData } from '../api/types';\r\nimport ElementModel from './ElementModel';\r\nimport LinkModel from './LinkModel';\r\nimport OwnershipIndex from './OwnershipIndex';\r\nimport PortModel from './PortModel';\r\nimport TextModel from './TextModel';\r\nimport { distance } from '../utils/geometry';\r\n\r\nexport default class DiagramModel {\r\n elements = new Map<string, ElementModel>();\r\n ports = new Map<string, PortModel>();\r\n links = new Map<string, LinkModel>();\r\n texts = new Map<string, TextModel>();\r\n ownership = new OwnershipIndex();\r\n\r\n load(state: DiagramState): void {\r\n this.elements.clear();\r\n this.ports.clear();\r\n this.links.clear();\r\n this.texts.clear();\r\n this.ownership = new OwnershipIndex();\r\n\r\n state.elements.forEach((data) => this.elements.set(data.id, new ElementModel(data)));\r\n state.ports.forEach((data) => this.ports.set(data.id, new PortModel(data)));\r\n state.links.forEach((data) => this.links.set(data.id, new LinkModel(data)));\r\n state.texts.forEach((data) => {\r\n const text = new TextModel(data);\r\n this.texts.set(data.id, text);\r\n });\r\n\r\n this.ports.forEach((port) => {\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.addPort(port.id);\r\n }\r\n });\r\n\r\n this.texts.forEach((text) => {\r\n if (!text.ownerId) return;\r\n this.ownership.add(text.ownerId, text.id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.addText(text.id);\r\n return;\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.addText(text.id);\r\n return;\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.addText(text.id);\r\n }\r\n });\r\n }\r\n\r\n toState(): DiagramState {\r\n return {\r\n elements: Array.from(this.elements.values()).map((element) => element.toData()),\r\n ports: Array.from(this.ports.values()).map((port) => port.toData()),\r\n links: Array.from(this.links.values()).map((link) => link.toData()),\r\n texts: Array.from(this.texts.values()).map((text) => text.toData()),\r\n };\r\n }\r\n\r\n getElement(id: string): ElementModel | undefined {\r\n return this.elements.get(id);\r\n }\r\n\r\n setElementLayout(id: string, layout: ElementData['layout']): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.layout = layout;\r\n }\r\n\r\n getChildren(parentId: string): ElementModel[] {\r\n return Array.from(this.elements.values()).filter((child) => child.parentId === parentId);\r\n }\r\n\r\n getElementWorldPosition(id: string): Point | null {\r\n const element = this.elements.get(id);\r\n if (!element) return null;\r\n return this.resolveElementWorldPosition(element);\r\n }\r\n\r\n getPort(id: string): PortModel | undefined {\r\n return this.ports.get(id);\r\n }\r\n\r\n getPortWorldPosition(id: string): Point | null {\r\n const port = this.ports.get(id);\r\n if (!port) return null;\r\n const elementPosition = this.getElementWorldPosition(port.elementId);\r\n if (!elementPosition) return { ...port.position };\r\n return {\r\n x: elementPosition.x + port.position.x,\r\n y: elementPosition.y + port.position.y,\r\n };\r\n }\r\n\r\n getLink(id: string): LinkModel | undefined {\r\n return this.links.get(id);\r\n }\r\n\r\n getLinkMidpoint(id: string): Point | null {\r\n const link = this.links.get(id);\r\n if (!link) return null;\r\n return this.resolveLinkMidpoint(link);\r\n }\r\n\r\n getText(id: string): TextModel | undefined {\r\n return this.texts.get(id);\r\n }\r\n\r\n getTextWorldPosition(id: string): Point | null {\r\n const text = this.texts.get(id);\r\n if (!text) return null;\r\n if (!text.ownerId) return { ...text.position };\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n const elementPosition = this.resolveElementWorldPosition(element);\r\n return {\r\n x: elementPosition.x + text.position.x,\r\n y: elementPosition.y + text.position.y,\r\n };\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n const portPosition = this.getPortWorldPosition(port.id);\r\n if (!portPosition) return { ...text.position };\r\n return {\r\n x: portPosition.x + text.position.x,\r\n y: portPosition.y + text.position.y,\r\n };\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n const midpoint = this.resolveLinkMidpoint(link);\r\n return {\r\n x: midpoint.x + text.position.x,\r\n y: midpoint.y + text.position.y,\r\n };\r\n }\r\n\r\n return { ...text.position };\r\n }\r\n\r\n addElement(data: ElementData): ElementModel {\r\n const element = new ElementModel(data);\r\n this.elements.set(element.id, element);\r\n return element;\r\n }\r\n\r\n moveElement(id: string, position: Point): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.setPosition(position);\r\n }\r\n\r\n resizeElement(id: string, size: { width: number; height: number }): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.setSize(size);\r\n }\r\n\r\n removeElement(id: string): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n\r\n const portIds = [...element.portIds];\r\n const textIds = [...element.textIds];\r\n\r\n portIds.forEach((portId) => this.removePort(portId));\r\n textIds.forEach((textId) => this.removeText(textId));\r\n\r\n this.elements.delete(id);\r\n }\r\n\r\n addPort(data: PortData): PortModel {\r\n const port = new PortModel(data);\r\n this.ports.set(port.id, port);\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.addPort(port.id);\r\n }\r\n return port;\r\n }\r\n\r\n movePort(id: string, position: Point): void {\n const port = this.ports.get(id);\n if (!port) return;\n port.setPosition(position);\n }\n\n setPortCurrentAnchorId(id: string, currentAnchorId?: string): void {\n const port = this.ports.get(id);\n if (!port) return;\n port.setCurrentAnchorId(currentAnchorId);\n }\n\r\n removePort(id: string): void {\r\n const port = this.ports.get(id);\r\n if (!port) return;\r\n\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.removePort(id);\r\n }\r\n\r\n const portTextIds = [...port.textIds];\r\n portTextIds.forEach((textId) => this.removeText(textId));\r\n\r\n const linksToRemove = Array.from(this.links.values())\r\n .filter((link) => link.sourcePortId === id || link.targetPortId === id)\r\n .map((link) => link.id);\r\n\r\n linksToRemove.forEach((linkId) => this.removeLink(linkId));\r\n\r\n this.ports.delete(id);\r\n }\r\n\r\n addLink(data: LinkData): LinkModel {\r\n const link = new LinkModel(data);\r\n this.links.set(link.id, link);\r\n return link;\r\n }\r\n\r\n updateLinkPoints(id: string, points: Point[]): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n link.setPoints(points);\r\n }\r\n\r\n setLinkRoutingMode(id: string, mode: LinkRoutingMode): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n link.setRouting(mode);\r\n }\r\n\r\n removeLink(id: string): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n\r\n const textIds = [...link.textIds];\r\n textIds.forEach((textId) => this.removeText(textId));\r\n\r\n this.links.delete(id);\r\n }\r\n\r\n addText(data: TextData): TextModel {\r\n const text = new TextModel(data);\r\n this.texts.set(text.id, text);\r\n\r\n if (text.ownerId) {\r\n this.ownership.add(text.ownerId, text.id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.addText(text.id);\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.addText(text.id);\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.addText(text.id);\r\n }\r\n }\r\n\r\n return text;\r\n }\r\n\r\n updateText(id: string, content: string): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n text.setContent(content);\r\n }\r\n\r\n moveText(id: string, position: Point): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n text.setPosition(position);\r\n }\r\n\r\n removeText(id: string): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n\r\n if (text.ownerId) {\r\n this.ownership.remove(text.ownerId, id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.removeText(id);\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.removeText(id);\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.removeText(id);\r\n }\r\n }\r\n\r\n this.texts.delete(id);\r\n }\r\n\r\n private resolveElementWorldPosition(element: ElementModel): Point {\r\n let x = element.position.x;\r\n let y = element.position.y;\r\n if (element.anchorCenter) {\r\n x -= element.size.width / 2;\r\n y -= element.size.height / 2;\r\n }\r\n let current: ElementModel | undefined = element;\r\n while (current?.parentId) {\r\n const parent = this.elements.get(current.parentId);\r\n if (!parent) break;\r\n let parentX = parent.position.x;\r\n let parentY = parent.position.y;\r\n if (parent.anchorCenter) {\r\n parentX -= parent.size.width / 2;\r\n parentY -= parent.size.height / 2;\r\n }\r\n x += parentX;\r\n y += parentY;\r\n current = parent;\r\n }\r\n return { x, y };\r\n }\r\n\r\n private resolveLinkMidpoint(link: LinkModel): Point {\r\n const points = link.points;\r\n if (points.length === 0) return { x: 0, y: 0 };\r\n if (points.length === 1) return { ...points[0] };\r\n\r\n let total = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n total += distance(points[i - 1], points[i]);\r\n }\r\n\r\n const halfway = total / 2;\r\n let traveled = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n const segment = distance(points[i - 1], points[i]);\r\n if (traveled + segment >= halfway) {\r\n const ratio = segment === 0 ? 0 : (halfway - traveled) / segment;\r\n return {\r\n x: points[i - 1].x + (points[i].x - points[i - 1].x) * ratio,\r\n y: points[i - 1].y + (points[i].y - points[i - 1].y) * ratio,\r\n };\r\n }\r\n traveled += segment;\r\n }\r\n\r\n return { ...points[points.length - 1] };\r\n }\r\n}\r\n","import { DiagramPatch } from '../api/types';\r\nimport DiagramModel from '../models/DiagramModel';\r\nimport { EngineCommand } from './EngineCommands';\r\n\r\nexport default class CommandQueue {\r\n private queue: EngineCommand[] = [];\r\n\r\n enqueue(command: EngineCommand): void {\r\n this.queue.push(command);\r\n }\r\n\r\n flush(model: DiagramModel): DiagramPatch[] {\r\n const patches: DiagramPatch[] = [];\r\n while (this.queue.length > 0) {\r\n const command = this.queue.shift();\r\n if (!command) continue;\r\n const next = command.apply(model);\r\n patches.push(...next);\r\n }\r\n return patches;\r\n }\r\n\r\n run(command: EngineCommand, model: DiagramModel): DiagramPatch[] {\r\n this.enqueue(command);\r\n return this.flush(model);\r\n }\r\n}\r\n","export type Unsubscribe = () => void;\r\n\r\nexport default class EventBus<TEvents extends Record<string, unknown>> {\r\n private handlers = new Map<keyof TEvents, Set<(payload: TEvents[keyof TEvents]) => void>>();\r\n\r\n subscribe<TEvent extends keyof TEvents>(\r\n event: TEvent,\r\n handler: (payload: TEvents[TEvent]) => void\r\n ): Unsubscribe {\r\n const set = this.handlers.get(event) ?? new Set();\r\n set.add(handler as (payload: TEvents[keyof TEvents]) => void);\r\n this.handlers.set(event, set);\r\n\r\n return () => {\r\n const existing = this.handlers.get(event);\r\n if (!existing) return;\r\n existing.delete(handler as (payload: TEvents[keyof TEvents]) => void);\r\n if (existing.size === 0) {\r\n this.handlers.delete(event);\r\n }\r\n };\r\n }\r\n\r\n emit<TEvent extends keyof TEvents>(event: TEvent, payload: TEvents[TEvent]): void {\r\n const set = this.handlers.get(event);\r\n if (!set) return;\r\n Array.from(set.values()).forEach((handler) => {\r\n handler(payload as TEvents[keyof TEvents]);\r\n });\r\n }\r\n}\r\n","export default class SelectionState {\r\n private selectedIds = new Set<string>();\r\n\r\n set(ids: string[]): void {\r\n this.selectedIds = new Set(ids);\r\n }\r\n\r\n toggle(id: string): void {\r\n if (this.selectedIds.has(id)) {\r\n this.selectedIds.delete(id);\r\n } else {\r\n this.selectedIds.add(id);\r\n }\r\n }\r\n\r\n get(): string[] {\r\n return Array.from(this.selectedIds.values());\r\n }\r\n\r\n clear(): void {\r\n this.selectedIds.clear();\r\n }\r\n}\r\n","import { Point } from '../api/types';\r\n\r\nexport default class ViewportState {\r\n pan: Point = { x: 0, y: 0 };\r\n zoom = 1;\r\n\r\n setPan(point: Point): void {\r\n this.pan = { ...point };\r\n }\r\n\r\n setZoom(value: number): void {\r\n this.zoom = value;\r\n }\r\n}\r\n","import { DiagramPatch } from '../api/types';\r\n\r\nexport const patchAdd = (entity: DiagramPatch['entity'], id: string, payload?: Record<string, unknown>): DiagramPatch => ({\r\n type: 'add',\r\n entity,\r\n id,\r\n payload,\r\n});\r\n\r\nexport const patchUpdate = (entity: DiagramPatch['entity'], id: string, payload?: Record<string, unknown>): DiagramPatch => ({\r\n type: 'update',\r\n entity,\r\n id,\r\n payload,\r\n});\r\n\r\nexport const patchRemove = (entity: DiagramPatch['entity'], id: string): DiagramPatch => ({\r\n type: 'remove',\r\n entity,\r\n id,\r\n});\r\n","import { DiagramPatch, DiagramState, ElementData, LinkData, LinkRoutingMode, Point, PortData, TextData } from '../api/types';\r\nimport DiagramModel from '../models/DiagramModel';\r\nimport { patchAdd, patchRemove, patchUpdate } from '../utils/patches';\r\n\r\nexport type EngineCommand = {\r\n type: string;\r\n apply: (model: DiagramModel) => DiagramPatch[];\r\n};\r\n\r\nexport const createLoadCommand = (state: DiagramState): EngineCommand => ({\r\n type: 'load',\r\n apply: (model) => {\r\n model.load(state);\r\n return [{ type: 'load', entity: 'config', payload: {} }];\r\n },\r\n});\r\n\r\nexport const createAddElementCommand = (element: ElementData): EngineCommand => ({\r\n type: 'addElement',\r\n apply: (model) => {\r\n model.addElement(element);\r\n return [patchAdd('element', element.id, element)];\r\n },\r\n});\r\n\r\nexport const createMoveElementCommand = (id: string, position: Point): EngineCommand => ({\r\n type: 'moveElement',\r\n apply: (model) => {\r\n model.moveElement(id, position);\r\n return [patchUpdate('element', id, { position })];\r\n },\r\n});\r\n\r\nexport const createResizeElementCommand = (\n id: string,\n size: { width: number; height: number }\n): EngineCommand => ({\n type: 'resizeElement',\n apply: (model) => {\n const current = model.getElement(id);\n const previousSize = current ? { ...current.size } : undefined;\n model.resizeElement(id, size);\n return [patchUpdate('element', id, { size, previousSize })];\n },\n});\n\r\nexport const createRemoveElementCommand = (id: string): EngineCommand => ({\r\n type: 'removeElement',\r\n apply: (model) => {\r\n model.removeElement(id);\r\n return [patchRemove('element', id)];\r\n },\r\n});\r\n\r\nexport const createSetElementLayoutCommand = (\r\n id: string,\r\n layout: ElementData['layout'],\r\n): EngineCommand => ({\r\n type: 'setElementLayout',\r\n apply: (model) => {\r\n model.setElementLayout(id, layout);\r\n return [patchUpdate('element', id, { layout })];\r\n },\r\n});\r\n\r\nexport const createAddPortCommand = (port: PortData): EngineCommand => ({\r\n type: 'addPort',\r\n apply: (model) => {\r\n model.addPort(port);\r\n return [patchAdd('port', port.id, port)];\r\n },\r\n});\r\n\r\nexport const createMovePortCommand = (\n id: string,\n update: { position: Point; currentAnchorId?: string | null },\n): EngineCommand => ({\n type: 'movePort',\n apply: (model) => {\n const hasCurrentAnchorId = Object.prototype.hasOwnProperty.call(update, 'currentAnchorId');\n model.movePort(id, update.position);\n if (hasCurrentAnchorId) {\n model.setPortCurrentAnchorId(id, update.currentAnchorId ?? undefined);\n }\n const payload: Record<string, unknown> = { position: update.position };\n if (hasCurrentAnchorId) {\n payload.currentAnchorId = update.currentAnchorId ?? null;\n }\n return [patchUpdate('port', id, payload)];\n },\n});\n\r\nexport const createRemovePortCommand = (id: string): EngineCommand => ({\r\n type: 'removePort',\r\n apply: (model) => {\r\n model.removePort(id);\r\n return [patchRemove('port', id)];\r\n },\r\n});\r\n\r\nexport const createAddLinkCommand = (link: LinkData): EngineCommand => ({\r\n type: 'addLink',\r\n apply: (model) => {\r\n model.addLink(link);\r\n return [patchAdd('link', link.id, link)];\r\n },\r\n});\r\n\r\nexport const createUpdateLinkCommand = (\r\n id: string,\r\n update: { points?: Point[]; routing?: LinkRoutingMode }\r\n): EngineCommand => ({\r\n type: 'updateLink',\r\n apply: (model) => {\r\n if (update.points !== undefined) {\r\n model.updateLinkPoints(id, update.points);\r\n }\r\n if (update.routing !== undefined) {\r\n model.setLinkRoutingMode(id, update.routing);\r\n }\r\n const payload: Record<string, unknown> = {};\r\n if (update.points !== undefined) payload.points = update.points;\r\n if (update.routing !== undefined) payload.routing = update.routing;\r\n return [patchUpdate('link', id, payload)];\r\n },\r\n});\r\n\r\nexport const createRemoveLinkCommand = (id: string): EngineCommand => ({\r\n type: 'removeLink',\r\n apply: (model) => {\r\n model.removeLink(id);\r\n return [patchRemove('link', id)];\r\n },\r\n});\r\n\r\nexport const createAddTextCommand = (text: TextData): EngineCommand => ({\r\n type: 'addText',\r\n apply: (model) => {\r\n model.addText(text);\r\n return [patchAdd('text', text.id, text)];\r\n },\r\n});\r\n\r\nexport const createUpdateTextCommand = (id: string, content: string): EngineCommand => ({\r\n type: 'updateText',\r\n apply: (model) => {\r\n model.updateText(id, content);\r\n return [patchUpdate('text', id, { content })];\r\n },\r\n});\r\n\r\nexport const createMoveTextCommand = (id: string, position: Point): EngineCommand => ({\r\n type: 'moveText',\r\n apply: (model) => {\r\n model.moveText(id, position);\r\n return [patchUpdate('text', id, { position })];\r\n },\r\n});\r\n\r\nexport const createRemoveTextCommand = (id: string): EngineCommand => ({\r\n type: 'removeText',\r\n apply: (model) => {\r\n model.removeText(id);\r\n return [patchRemove('text', id)];\r\n },\r\n});\r\n","export default class RenderScheduler {\r\n private pending = false;\r\n private lastCallback: (() => void) | null = null;\r\n\r\n requestRender(callback: () => void): void {\r\n this.lastCallback = callback;\r\n if (this.pending) return;\r\n this.pending = true;\r\n\r\n const schedule = typeof requestAnimationFrame !== 'undefined'\r\n ? requestAnimationFrame\r\n : (cb: FrameRequestCallback) => setTimeout(() => cb(Date.now()), 16);\r\n\r\n schedule(() => {\r\n this.pending = false;\r\n const next = this.lastCallback;\r\n this.lastCallback = null;\r\n if (next) {\r\n next();\r\n }\r\n });\r\n }\r\n}\r\n","import { Point, Rect } from '../api/types';\r\nimport type { RouteContext, RouteObstacle, RouterStrategy } from './RouterStrategy';\r\n\r\ntype ObstacleRouterOptions = {\r\n padding?: number;\r\n tolerance?: number;\r\n stubLength?: number;\r\n};\r\n\r\nconst DEFAULT_PADDING = 12;\r\nconst DEFAULT_TOLERANCE = 0.5;\r\nconst DEFAULT_STUB_LENGTH = 12;\r\n\r\nconst shrinkRect = (rect: Rect, amount: number): Rect | null => {\r\n const width = rect.width - amount * 2;\r\n const height = rect.height - amount * 2;\r\n if (width <= 0 || height <= 0) return null;\r\n return {\r\n x: rect.x + amount,\r\n y: rect.y + amount,\r\n width,\r\n height,\r\n };\r\n};\r\n\r\nconst segmentIntersectsRect = (start: Point, end: Point, rect: Rect): boolean => {\r\n const dx = end.x - start.x;\r\n const dy = end.y - start.y;\r\n const p = [-dx, dx, -dy, dy];\r\n const q = [\r\n start.x - rect.x,\r\n rect.x + rect.width - start.x,\r\n start.y - rect.y,\r\n rect.y + rect.height - start.y,\r\n ];\r\n\r\n let t0 = 0;\r\n let t1 = 1;\r\n\r\n for (let i = 0; i < 4; i += 1) {\r\n const pi = p[i];\r\n const qi = q[i];\r\n if (pi === 0) {\r\n if (qi < 0) return false;\r\n } else {\r\n const r = qi / pi;\r\n if (pi < 0) {\r\n if (r > t1) return false;\r\n if (r > t0) t0 = r;\r\n } else {\r\n if (r < t0) return false;\r\n if (r < t1) t1 = r;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst segmentIntersectsRectInterior = (start: Point, end: Point, rect: Rect, tolerance: number): boolean => {\r\n const inner = shrinkRect(rect, tolerance);\r\n if (!inner) return false;\r\n return segmentIntersectsRect(start, end, inner);\r\n};\r\n\r\nconst pointWithinRect = (point: Point, rect: Rect, tolerance: number): boolean => {\r\n return (\r\n point.x >= rect.x - tolerance &&\r\n point.x <= rect.x + rect.width + tolerance &&\r\n point.y >= rect.y - tolerance &&\r\n point.y <= rect.y + rect.height + tolerance\r\n );\r\n};\r\n\r\nconst compactPath = (points: Point[]): Point[] => {\r\n const deduped: Point[] = [];\r\n points.forEach((point) => {\r\n const last = deduped[deduped.length - 1];\r\n if (!last || last.x !== point.x || last.y !== point.y) {\r\n deduped.push(point);\r\n }\r\n });\r\n\r\n if (deduped.length < 3) return deduped;\r\n\r\n const compacted: Point[] = [deduped[0]];\r\n for (let i = 1; i < deduped.length; i += 1) {\r\n const prev = compacted[compacted.length - 1];\r\n const next = deduped[i];\r\n const beforePrev = compacted[compacted.length - 2];\r\n if (\r\n beforePrev &&\r\n ((beforePrev.x === prev.x && prev.x === next.x) || (beforePrev.y === prev.y && prev.y === next.y))\r\n ) {\r\n compacted[compacted.length - 1] = next;\r\n } else {\r\n compacted.push(next);\r\n }\r\n }\r\n return compacted;\r\n};\r\n\r\nconst pathLength = (points: Point[]): number => {\r\n let total = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n const dx = points[i].x - points[i - 1].x;\r\n const dy = points[i].y - points[i - 1].y;\r\n total += Math.sqrt(dx * dx + dy * dy);\r\n }\r\n return total;\r\n};\r\n\r\nexport default class ObstacleRouter implements RouterStrategy {\r\n private padding: number;\r\n private tolerance: number;\r\n private stubLength: number;\r\n\r\n constructor(options?: ObstacleRouterOptions) {\r\n this.padding = options?.padding ?? DEFAULT_PADDING;\r\n this.tolerance = options?.tolerance ?? DEFAULT_TOLERANCE;\r\n this.stubLength = options?.stubLength ?? DEFAULT_STUB_LENGTH;\r\n }\r\n\r\n route(source: Point, target: Point, context?: RouteContext): Point[] {\r\n const obstacles = context?.obstacles ?? [];\r\n const bounds = context?.bounds;\r\n\r\n const sourceStub = this.computeStubEndpoint(source, context?.sourceEndpoint, bounds, obstacles);\r\n const targetStub = this.computeStubEndpoint(target, context?.targetEndpoint, bounds, obstacles);\r\n\r\n const innerSource = sourceStub ?? source;\r\n const innerTarget = targetStub ?? target;\r\n\r\n const core = this.routeBetween(innerSource, innerTarget, obstacles, bounds);\r\n const normalizedCore = this.ensureEndpoints(core, innerSource, innerTarget);\r\n\r\n const middle = normalizedCore.slice(1, -1).map((p) => ({ ...p }));\r\n const result: Point[] = [{ ...source }];\r\n const hasSourceStub = Boolean(sourceStub);\r\n const hasTargetStub = Boolean(targetStub);\r\n if (hasSourceStub && sourceStub) {\r\n result.push({ ...sourceStub });\r\n }\r\n result.push(...middle);\r\n if (hasTargetStub && targetStub) {\r\n result.push({ ...targetStub });\r\n }\r\n result.push({ ...target });\r\n\r\n return this.compactPreservingStubs(result, hasSourceStub, hasTargetStub);\r\n }\r\n\r\n private buildCandidates(source: Point, target: Point, obstacles: RouteObstacle[]): Point[][] {\r\n const midXValues = new Set<number>();\r\n const midYValues = new Set<number>();\r\n\r\n midXValues.add(Math.round((source.x + target.x) / 2));\r\n midXValues.add(source.x);\r\n midXValues.add(target.x);\r\n\r\n midYValues.add(Math.round((source.y + target.y) / 2));\r\n midYValues.add(source.y);\r\n midYValues.add(target.y);\r\n\r\n obstacles.forEach((obstacle) => {\r\n midXValues.add(obstacle.rect.x - this.padding);\r\n midXValues.add(obstacle.rect.x + obstacle.rect.width + this.padding);\r\n midYValues.add(obstacle.rect.y - this.padding);\r\n midYValues.add(obstacle.rect.y + obstacle.rect.height + this.padding);\r\n });\r\n\r\n const candidates: Point[][] = [];\r\n\r\n midXValues.forEach((midX) => {\r\n const path = compactPath([\r\n { ...source },\r\n { x: midX, y: source.y },\r\n { x: midX, y: target.y },\r\n { ...target },\r\n ]);\r\n candidates.push(path);\r\n });\r\n\r\n midYValues.forEach((midY) => {\r\n const path = compactPath([\r\n { ...source },\r\n { x: source.x, y: midY },\r\n { x: target.x, y: midY },\r\n { ...target },\r\n ]);\r\n candidates.push(path);\r\n });\r\n\r\n return candidates;\r\n }\r\n\r\n private routeBetween(source: Point, target: Point, obstacles: RouteObstacle[], bounds?: Rect): Point[] {\r\n const direct = compactPath([{ ...source }, { ...target }]);\r\n\r\n if (obstacles.length === 0 && (!bounds || this.pointsWithinBounds(direct, bounds))) {\r\n return direct;\r\n }\r\n\r\n if (this.isPathClear(direct, obstacles, bounds)) {\r\n return direct;\r\n }\r\n\r\n const candidates = this.buildCandidates(source, target, obstacles);\r\n let best: Point[] | null = null;\r\n let bestLength = Number.POSITIVE_INFINITY;\r\n\r\n candidates.forEach((candidate) => {\r\n if (!this.isPathClear(candidate, obstacles, bounds)) return;\r\n const length = pathLength(candidate);\r\n if (length < bestLength) {\r\n best = candidate;\r\n bestLength = length;\r\n }\r\n });\r\n\r\n return best ?? direct;\r\n }\r\n\r\n private pointsWithinBounds(points: Point[], bounds: Rect): boolean {\r\n return points.every((point) => pointWithinRect(point, bounds, this.tolerance));\r\n }\r\n\r\n private isPathClear(points: Point[], obstacles: RouteObstacle[], bounds?: Rect): boolean {\r\n if (points.length < 2) return true;\r\n if (bounds && !this.pointsWithinBounds(points, bounds)) return false;\r\n\r\n for (let i = 1; i < points.length; i += 1) {\r\n const start = points[i - 1];\r\n const end = points[i];\r\n if (start.x === end.x && start.y === end.y) continue;\r\n for (let j = 0; j < obstacles.length; j += 1) {\r\n if (segmentIntersectsRectInterior(start, end, obstacles[j].rect, this.tolerance)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private computeStubEndpoint(\r\n point: Point,\r\n endpoint: RouteContext['sourceEndpoint'],\r\n bounds: Rect | undefined,\r\n obstacles: RouteObstacle[],\r\n ): Point | null {\r\n if (!endpoint?.onEdgeSide || !endpoint.rect) return null;\r\n const normal = this.getNormal(endpoint.onEdgeSide);\r\n\r\n let maxLength = this.stubLength;\r\n if (bounds) {\r\n maxLength = Math.min(maxLength, this.distanceToBounds(point, normal, bounds));\r\n }\r\n\r\n const obstacleLimit = this.distanceToObstacles(point, normal, obstacles, endpoint.elementId);\r\n if (obstacleLimit !== null) {\r\n maxLength = Math.min(maxLength, obstacleLimit);\r\n }\r\n\r\n if (maxLength <= 0) return null;\r\n\r\n return {\r\n x: point.x + normal.x * maxLength,\r\n y: point.y + normal.y * maxLength,\r\n };\r\n }\r\n\r\n private getNormal(side: 'left' | 'right' | 'top' | 'bottom'): Point {\r\n switch (side) {\r\n case 'left':\r\n return { x: -1, y: 0 };\r\n case 'right':\r\n return { x: 1, y: 0 };\r\n case 'top':\r\n return { x: 0, y: -1 };\r\n case 'bottom':\r\n default:\r\n return { x: 0, y: 1 };\r\n }\r\n }\r\n\r\n private distanceToBounds(point: Point, normal: Point, bounds: Rect): number {\r\n if (normal.x < 0) {\r\n return Math.max(0, point.x - bounds.x);\r\n }\r\n if (normal.x > 0) {\r\n return Math.max(0, bounds.x + bounds.width - point.x);\r\n }\r\n if (normal.y < 0) {\r\n return Math.max(0, point.y - bounds.y);\r\n }\r\n return Math.max(0, bounds.y + bounds.height - point.y);\r\n }\r\n\r\n private distanceToObstacles(\r\n point: Point,\r\n normal: Point,\r\n obstacles: RouteObstacle[],\r\n ignoreId?: string,\r\n ): number | null {\r\n let limit = Number.POSITIVE_INFINITY;\r\n const overlapsHorizontally = (rect: Rect) =>\r\n point.y >= rect.y - this.tolerance && point.y <= rect.y + rect.height + this.tolerance;\r\n const overlapsVertically = (rect: Rect) =>\r\n point.x >= rect.x - this.tolerance && point.x <= rect.x + rect.width + this.tolerance;\r\n\r\n obstacles.forEach((obstacle) => {\r\n if (ignoreId && obstacle.id === ignoreId) return;\r\n const rect = obstacle.rect;\r\n if (normal.x < 0 && overlapsHorizontally(rect) && rect.x + rect.width <= point.x) {\r\n const available = point.x - (rect.x + rect.width + this.tolerance);\r\n if (available < limit) limit = available;\r\n } else if (normal.x > 0 && overlapsHorizontally(rect) && rect.x >= point.x) {\r\n const available = rect.x - this.tolerance - point.x;\r\n if (available < limit) limit = available;\r\n } else if (normal.y < 0 && overlapsVertically(rect) && rect.y + rect.height <= point.y) {\r\n const available = point.y - (rect.y + rect.height + this.tolerance);\r\n if (available < limit) limit = available;\r\n } else if (normal.y > 0 && overlapsVertically(rect) && rect.y >= point.y) {\r\n const available = rect.y - this.tolerance - point.y;\r\n if (available < limit) limit = available;\r\n }\r\n });\r\n\r\n if (!Number.isFinite(limit)) return null;\r\n return Math.max(0, limit);\r\n }\r\n\r\n private ensureEndpoints(points: Point[], source: Point, target: Point): Point[] {\r\n if (points.length === 0) return [{ ...source }, { ...target }];\r\n const result = [...points];\r\n if (result.length === 1) {\r\n result.unshift({ ...source });\r\n result.push({ ...target });\r\n return result;\r\n }\r\n if (result[0].x !== source.x || result[0].y !== source.y) {\r\n result.unshift({ ...source });\r\n }\r\n const last = result[result.length - 1];\r\n if (last.x !== target.x || last.y !== target.y) {\r\n result.push({ ...target });\r\n }\r\n return result;\r\n }\r\n\r\n private compactPreservingStubs(points: Point[], hasSourceStub: boolean, hasTargetStub: boolean): Point[] {\r\n if (points.length <= 2) return points.map((p) => ({ ...p }));\r\n const deduped: Point[] = [];\r\n points.forEach((point) => {\r\n const last = deduped[deduped.length - 1];\r\n if (!last || last.x !== point.x || last.y !== point.y) {\r\n deduped.push(point);\r\n }\r\n });\r\n if (deduped.length < 3) return deduped.map((p) => ({ ...p }));\r\n\r\n const result: Point[] = [deduped[0]];\r\n for (let i = 1; i < deduped.length - 1; i += 1) {\r\n const prev = result[result.length - 1];\r\n const current = deduped[i];\r\n const next = deduped[i + 1];\r\n const isFirstTurn = hasSourceStub && result.length === 1;\r\n const isLastTurn = hasTargetStub && i === deduped.length - 2;\r\n const collinear =\r\n (prev.x === current.x && current.x === next.x) || (prev.y === current.y && current.y === next.y);\r\n if (collinear && !isFirstTurn && !isLastTurn) {\r\n continue;\r\n }\r\n result.push(current);\r\n }\r\n result.push(deduped[deduped.length - 1]);\r\n return result.map((p) => ({ ...p }));\r\n }\r\n}\r\n","import { Point } from '../api/types';\r\nimport { snapToGrid } from '../utils/geometry';\r\nimport { SnapStrategy } from './SnapStrategy';\r\n\r\nexport default class DefaultSnapper implements SnapStrategy {\r\n private gridSize: number;\r\n\r\n constructor(gridSize = 0) {\r\n this.gridSize = gridSize;\r\n }\r\n\r\n setGridSize(size: number): void {\r\n this.gridSize = size;\r\n }\r\n\r\n snap(point: Point): Point {\r\n return snapToGrid(point, this.gridSize);\r\n }\r\n}\r\n","import {\n ElementData,\n Point,\n PortAnchor,\n PortData,\n Rect,\n ResolvePortAnchorsOptions,\n ShapeEllipseMidPointTarget,\n ShapeDrawContext,\n ShapeHoverGeometry,\n} from '../api/types';\nimport { BorderSide } from '../utils/borderGeometry';\n\nexport type ShapeNodeSizeUpdateContext = {\n size: { width: number; height: number };\n anchorCenter: boolean;\n updateOffsetX: boolean;\n updateOffsetY: boolean;\n getNodeAttr: <T = unknown>(key: string) => T | undefined;\n};\n\nexport type ShapeNodeSizeUpdater = (context: ShapeNodeSizeUpdateContext) => Record<string, unknown>;\n\nexport type ShapeResizeHandle = 'nw' | 'ne' | 'sw' | 'se';\n\nexport type ShapeResizeNormalizeContext = {\n element: ElementData;\n handle: ShapeResizeHandle;\n minSize: number;\n proposal: { width: number; height: number };\n};\n\nexport type ShapeDefinition = {\n id: string;\n baseRotation?: number;\n draw?: (context: ShapeDrawContext) => void;\n createNode?: (model: ElementData | PortData) => unknown;\n svgPath?: string;\n svgSize?: { width: number; height: number };\n sizeUpdater?: ShapeNodeSizeUpdater;\n normalizeResize?: (context: ShapeResizeNormalizeContext) => { width: number; height: number };\n projectToBorder?: (point: Point, rect: Rect) => Point;\n resolveBorderSide?: (point: Point, rect: Rect) => BorderSide;\n resolvePortAnchors?: (rect: Rect, options: ResolvePortAnchorsOptions) => PortAnchor[];\n resolveHoverGeometry?: (rect: Rect) => ShapeHoverGeometry | undefined;\n resolveEllipseMidPoints?: (rect: Rect) => ShapeEllipseMidPointTarget[] | undefined;\n};\n\nexport class ShapeRegistry {\n private shapes = new Map<string, ShapeDefinition>();\n\n register(shape: ShapeDefinition): void {\n this.shapes.set(shape.id, shape);\n }\n\r\n get(id: string): ShapeDefinition | undefined {\r\n return this.shapes.get(id);\r\n }\r\n\r\n has(id: string): boolean {\r\n return this.shapes.has(id);\r\n }\r\n}\r\n","export const DEFAULT_TEXT_FONT_SIZE = 12;\nexport const DEFAULT_TEXT_FONT_FAMILY = 'Arial';\nexport const DEFAULT_TEXT_LINE_HEIGHT = 1.2;\n\nexport type ResolvedTextStyle = {\n fontSize: number;\n fontFamily: string;\n lineHeight: number;\n};\n\nexport const resolveTextStyleDefaults = (\n style?: Record<string, unknown>,\n): ResolvedTextStyle => {\n const fontSize = (style?.fontSize as number | undefined) ?? DEFAULT_TEXT_FONT_SIZE;\n const fontFamily = (style?.fontFamily as string | undefined) ?? DEFAULT_TEXT_FONT_FAMILY;\n const lineHeight = (style?.lineHeight as number | undefined) ?? DEFAULT_TEXT_LINE_HEIGHT;\n return { fontSize, fontFamily, lineHeight };\n};\n","import { Size, TextData } from '../api/types';\nimport { TextMeasurer } from './TextMeasurer';\nimport { resolveTextStyleDefaults } from './textStyleDefaults';\n\r\nexport default class CanvasTextMeasurer implements TextMeasurer {\r\n private context: CanvasRenderingContext2D | null = null;\r\n\r\n private getContext(): CanvasRenderingContext2D | null {\r\n if (this.context) return this.context;\r\n if (typeof document === 'undefined') return null;\r\n const canvas = document.createElement('canvas');\r\n try {\r\n this.context = canvas.getContext('2d');\r\n } catch {\r\n this.context = null;\r\n }\r\n return this.context;\r\n }\n\n measure(text: TextData): Size {\n const { fontSize, fontFamily, lineHeight } = resolveTextStyleDefaults(text.style);\n const ctx = this.getContext();\n if (!ctx) {\n return {\n width: Math.max(text.content.length, 1) * fontSize * 0.6,\n height: fontSize * lineHeight,\n };\n }\n ctx.font = `${fontSize}px ${fontFamily}`;\n const metrics = ctx.measureText(text.content || '');\n const width = metrics.width;\n const height = fontSize * lineHeight;\n return { width, height };\n }\n}\n","import { Point, Rect } from '../api/types';\n\nexport type BorderSide = 'left' | 'right' | 'top' | 'bottom';\nexport type BoundaryKind = 'rect' | 'ellipse' | 'diamond';\n\nconst resolveNearestRectSide = (point: Point, rect: Rect): BorderSide => {\n const clampedX = Math.min(rect.x + rect.width, Math.max(rect.x, point.x));\n const clampedY = Math.min(rect.y + rect.height, Math.max(rect.y, point.y));\n const left = Math.abs(clampedX - rect.x);\n const right = Math.abs(clampedX - (rect.x + rect.width));\n const top = Math.abs(clampedY - rect.y);\n const bottom = Math.abs(clampedY - (rect.y + rect.height));\n const min = Math.min(left, right, top, bottom);\n\n if (min === left) return 'left';\n if (min === right) return 'right';\n if (min === top) return 'top';\n return 'bottom';\n};\n\nconst projectPointToRectBorder = (point: Point, rect: Rect): Point => {\n const clampedX = Math.min(rect.x + rect.width, Math.max(rect.x, point.x));\n const clampedY = Math.min(rect.y + rect.height, Math.max(rect.y, point.y));\n const side = resolveNearestRectSide(point, rect);\n if (side === 'left') return { x: rect.x, y: clampedY };\n if (side === 'right') return { x: rect.x + rect.width, y: clampedY };\n if (side === 'top') return { x: clampedX, y: rect.y };\n return { x: clampedX, y: rect.y + rect.height };\n};\n\nconst resolveDirectionalSide = (point: Point, rect: Rect): BorderSide => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return resolveNearestRectSide(point, rect);\n }\n\n const nx = (point.x - cx) / rx;\n const ny = (point.y - cy) / ry;\n if (Math.abs(nx) < 1e-6 && Math.abs(ny) < 1e-6) {\n return 'top';\n }\n if (Math.abs(nx) >= Math.abs(ny)) {\n return nx < 0 ? 'left' : 'right';\n }\n return ny < 0 ? 'top' : 'bottom';\n};\n\nconst projectPointToEllipseBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return projectPointToRectBorder(point, rect);\n }\n\n const dx = point.x - cx;\n const dy = point.y - cy;\n if (Math.abs(dx) < 1e-6 && Math.abs(dy) < 1e-6) {\n return { x: cx, y: cy - ry };\n }\n\n const scale = 1 / Math.sqrt((dx * dx) / (rx * rx) + (dy * dy) / (ry * ry));\n return { x: cx + dx * scale, y: cy + dy * scale };\n};\n\nconst projectPointToDiamondBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return projectPointToRectBorder(point, rect);\n }\n\n const dx = point.x - cx;\n const dy = point.y - cy;\n const scale = Math.abs(dx) / rx + Math.abs(dy) / ry;\n if (scale < 1e-6) {\n return { x: cx, y: rect.y };\n }\n return {\n x: cx + dx / scale,\n y: cy + dy / scale,\n };\n};\n\nexport const projectPointToBoundary = (point: Point, rect: Rect, boundary: BoundaryKind): Point => {\n if (boundary === 'ellipse') {\n return projectPointToEllipseBorder(point, rect);\n }\n if (boundary === 'diamond') {\n return projectPointToDiamondBorder(point, rect);\n }\n return projectPointToRectBorder(point, rect);\n};\n\nexport const resolveBoundarySide = (point: Point, rect: Rect, boundary: BoundaryKind): BorderSide => {\n if (boundary === 'ellipse' || boundary === 'diamond') {\n return resolveDirectionalSide(point, rect);\n }\n return resolveNearestRectSide(point, rect);\n};\n\nexport const borderSideToInwardRotation = (side: BorderSide): number => {\n if (side === 'top') return 180;\n if (side === 'right') return -90;\n if (side === 'left') return 90;\n return 0;\n};\n","import {\n DiagramPatch,\n EngineEventMap,\n Point,\n TextData,\n TextLayoutOverflowMode,\n TextLayoutWrapMode,\n} from '../api/types';\nimport { TextMeasurer } from '../measure/TextMeasurer';\nimport DiagramModel from '../models/DiagramModel';\nimport { patchUpdate } from '../utils/patches';\n\nconst POSITION_EPSILON = 1e-6;\nconst MIN_TRUNCATION_WIDTH_SAFETY_EPSILON = 0.5;\nconst FONT_SIZE_TRUNCATION_SAFETY_RATIO = 1.4;\nconst FONT_SIZE_TRUNCATION_SAFETY_BASE = 2;\n\nexport type ResolvedTextPresentation = {\n size: { width: number; height: number };\n displayContent: string;\n displayOffset?: Point;\n displayClipSize?: { width: number; height: number };\n};\n\nexport type TextLayoutServiceConfig = {\n model: DiagramModel;\n textMeasurer: TextMeasurer;\n};\n\nexport default class TextLayoutService {\n private model: DiagramModel;\n private textMeasurer: TextMeasurer;\n\n constructor(config: TextLayoutServiceConfig) {\n this.model = config.model;\n this.textMeasurer = config.textMeasurer;\n }\n\n resolveTextPresentation(text: TextData): ResolvedTextPresentation {\n const layout = text.layout;\n if (!layout) {\n const measured = this.textMeasurer.measure(text);\n return { size: measured, displayContent: text.content, displayOffset: undefined, displayClipSize: undefined };\n }\n\n const wrap = layout.wrap ?? 'none';\n const overflow = layout.overflow ?? 'clip';\n const padding = Math.max(0, layout.padding ?? 0);\n const bounds = this.resolveTextLayoutBounds(text, padding);\n const maxWidth = bounds.width;\n const maxHeight = bounds.height;\n const textRenderPadding = this.resolveTextRenderPadding(text.style);\n const horizontalRenderInset = textRenderPadding * 2;\n const verticalRenderInset = textRenderPadding * 2;\n const zeroPaddingInset = padding <= POSITION_EPSILON && this.shouldTrackOwnerBoundLayout(text) ? 0.5 : 0;\n const drawableWidth =\n maxWidth !== undefined ? Math.max(0, maxWidth - zeroPaddingInset * 2 - horizontalRenderInset) : undefined;\n const drawableHeight =\n maxHeight !== undefined ? Math.max(0, maxHeight - zeroPaddingInset * 2 - verticalRenderInset) : undefined;\n const lineHeight = this.textMeasurer.measure({ ...text, content: 'M' }).height;\n const content = text.content ?? '';\n\n const lines =\n wrap === 'none'\n ? [this.truncateToWidth(content, drawableWidth, overflow, text)]\n : this.wrapText(content, drawableWidth, wrap, text);\n\n let resolvedLines = lines.length > 0 ? lines : [''];\n const maxLinesFromHeight =\n drawableHeight !== undefined && lineHeight > 0\n ? Math.max(1, Math.floor(drawableHeight / lineHeight))\n : undefined;\n const configuredMaxLines =\n typeof layout.maxLines === 'number' && Number.isFinite(layout.maxLines)\n ? Math.max(1, Math.floor(layout.maxLines))\n : undefined;\n const effectiveMaxLines =\n configuredMaxLines !== undefined && maxLinesFromHeight !== undefined\n ? Math.min(configuredMaxLines, maxLinesFromHeight)\n : configuredMaxLines ?? maxLinesFromHeight;\n\n if (effectiveMaxLines !== undefined && resolvedLines.length > effectiveMaxLines) {\n resolvedLines = resolvedLines.slice(0, effectiveMaxLines);\n if (overflow !== 'clip' && resolvedLines.length > 0) {\n const lastIndex = resolvedLines.length - 1;\n resolvedLines[lastIndex] = this.truncateToWidth(\n resolvedLines[lastIndex],\n drawableWidth,\n 'ellipsis-end',\n text,\n );\n }\n }\n\n const lineWidths = resolvedLines.map((line) => this.measureTextWidth(text, line));\n const contentWidth = lineWidths.length > 0 ? Math.max(...lineWidths) : 0;\n const contentHeight = Math.max(lineHeight, lineHeight * resolvedLines.length);\n const contentBoxWidth = contentWidth + horizontalRenderInset;\n const contentBoxHeight = contentHeight + verticalRenderInset;\n const frameWidth = Math.max(0, maxWidth !== undefined ? maxWidth : contentBoxWidth);\n const frameHeight = Math.max(0, maxHeight !== undefined ? Math.min(contentBoxHeight, maxHeight) : contentBoxHeight);\n const clipWidth = Math.max(0, frameWidth - zeroPaddingInset * 2);\n const clipHeight = Math.max(0, frameHeight - zeroPaddingInset * 2);\n const width = frameWidth + padding * 2;\n const height = frameHeight + padding * 2;\n\n return {\n size: { width: Math.max(0, width), height: Math.max(0, height) },\n displayContent: resolvedLines.join('\\n'),\n displayOffset: { x: padding + zeroPaddingInset, y: padding + zeroPaddingInset },\n displayClipSize: { width: clipWidth, height: clipHeight },\n };\n }\n\n appendTextLayoutPatches(\n patches: DiagramPatch[],\n options?: {\n emitTextUpdated?: boolean;\n onTextUpdated?: (payload: EngineEventMap['textUpdated']) => void;\n },\n ): DiagramPatch[] {\n const resizedOwnerIds = this.collectResizedElementIds(patches);\n if (resizedOwnerIds.size === 0) return patches;\n\n const textPatches: DiagramPatch[] = [];\n this.model.texts.forEach((text) => {\n if (!text.ownerId || !resizedOwnerIds.has(text.ownerId)) return;\n const current = text.toData();\n if (!this.shouldTrackOwnerBoundLayout(current)) return;\n const resolved = this.resolveTextPresentation(current);\n const currentDisplay = current.displayContent ?? current.content;\n const sizeChanged =\n !current.size ||\n current.size.width !== resolved.size.width ||\n current.size.height !== resolved.size.height;\n const displayChanged = currentDisplay !== resolved.displayContent;\n const offsetChanged =\n (current.displayOffset?.x ?? 0) !== (resolved.displayOffset?.x ?? 0) ||\n (current.displayOffset?.y ?? 0) !== (resolved.displayOffset?.y ?? 0);\n const clipChanged =\n (current.displayClipSize?.width ?? 0) !== (resolved.displayClipSize?.width ?? 0) ||\n (current.displayClipSize?.height ?? 0) !== (resolved.displayClipSize?.height ?? 0);\n if (!sizeChanged && !displayChanged && !offsetChanged && !clipChanged) return;\n\n text.setSize(resolved.size);\n text.setDisplayContent(resolved.displayContent);\n text.setDisplayOffset(resolved.displayOffset);\n text.setDisplayClipSize(resolved.displayClipSize);\n textPatches.push(\n patchUpdate('text', text.id, {\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n );\n\n if (options?.emitTextUpdated ?? true) {\n options?.onTextUpdated?.({\n textId: text.id,\n ownerId: text.ownerId,\n content: text.content,\n displayContent: resolved.displayContent,\n reason: 'layout',\n });\n }\n });\n\n return textPatches.length > 0 ? [...patches, ...textPatches] : patches;\n }\n\n private collectResizedElementIds(patches: DiagramPatch[]): Set<string> {\n const ids = new Set<string>();\n patches.forEach((patch) => {\n if (patch.entity !== 'element' || patch.type !== 'update' || !patch.id) return;\n if (patch.payload?.size) ids.add(patch.id);\n });\n return ids;\n }\n\n private shouldTrackOwnerBoundLayout(text: TextData): boolean {\n if (!text.layout) return false;\n const boundsMode = text.layout.boundsMode ?? (text.ownerId ? 'owner-width' : undefined);\n return boundsMode === 'owner-width' || boundsMode === 'owner-box';\n }\n\n private resolveTextLayoutBounds(text: TextData, padding: number): { width?: number; height?: number } {\n const layout = text.layout;\n if (!layout) return {};\n\n const boundsMode = layout.boundsMode ?? (text.ownerId ? 'owner-width' : undefined);\n if (boundsMode === 'fixed') {\n const width = layout.fixedSize?.width;\n const height = layout.fixedSize?.height;\n return {\n width: typeof width === 'number' ? Math.max(0, width - padding * 2) : undefined,\n height: typeof height === 'number' ? Math.max(0, height - padding * 2) : undefined,\n };\n }\n\n if ((boundsMode === 'owner-width' || boundsMode === 'owner-box') && text.ownerId) {\n const owner = this.model.getElement(text.ownerId);\n if (!owner) return {};\n const width = Math.max(0, owner.size.width - padding * 2);\n if (boundsMode === 'owner-width') return { width };\n return {\n width,\n height: Math.max(0, owner.size.height - padding * 2),\n };\n }\n\n return {};\n }\n\n private wrapText(content: string, maxWidth: number | undefined, mode: TextLayoutWrapMode, text: TextData): string[] {\n if (maxWidth === undefined || !Number.isFinite(maxWidth)) {\n return content.replace(/\\r\\n/g, '\\n').split('\\n');\n }\n\n const width = Math.max(0, maxWidth);\n const lines = content.replace(/\\r\\n/g, '\\n').split('\\n');\n const wrapped: string[] = [];\n lines.forEach((line) => {\n if (line.length === 0) {\n wrapped.push('');\n return;\n }\n const chunks = mode === 'word' ? this.wrapByWord(line, width, text) : this.wrapByChar(line, width, text);\n wrapped.push(...chunks);\n });\n return wrapped;\n }\n\n private wrapByWord(line: string, maxWidth: number, text: TextData): string[] {\n const words = line.trim().split(/\\s+/).filter((item) => item.length > 0);\n if (words.length === 0) return [''];\n\n const lines: string[] = [];\n let current = '';\n words.forEach((word) => {\n const candidate = current.length > 0 ? `${current} ${word}` : word;\n if (this.measureTextWidth(text, candidate) <= maxWidth) {\n current = candidate;\n return;\n }\n if (current.length > 0) {\n lines.push(current);\n }\n if (this.measureTextWidth(text, word) <= maxWidth) {\n current = word;\n return;\n }\n const charLines = this.wrapByChar(word, maxWidth, text);\n if (charLines.length === 0) {\n current = '';\n return;\n }\n lines.push(...charLines.slice(0, -1));\n current = charLines[charLines.length - 1];\n });\n\n if (current.length > 0) lines.push(current);\n return lines.length > 0 ? lines : [''];\n }\n\n private wrapByChar(line: string, maxWidth: number, text: TextData): string[] {\n if (maxWidth <= 0) return [''];\n const lines: string[] = [];\n let current = '';\n Array.from(line).forEach((char) => {\n const candidate = current + char;\n if (current.length === 0 || this.measureTextWidth(text, candidate) <= maxWidth) {\n current = candidate;\n return;\n }\n lines.push(current);\n current = char;\n });\n if (current.length > 0) lines.push(current);\n return lines.length > 0 ? lines : [''];\n }\n\n private truncateToWidth(\n content: string,\n maxWidth: number | undefined,\n overflow: TextLayoutOverflowMode,\n text: TextData,\n ): string {\n if (maxWidth === undefined || !Number.isFinite(maxWidth)) return content;\n if (maxWidth <= 0) return '';\n const truncationSafety = this.resolveTruncationWidthSafety(text);\n const safeWidth = Math.max(0, maxWidth - truncationSafety);\n if (this.measureTextWidth(text, content) <= safeWidth) return content;\n if (overflow === 'clip') return this.clipToWidth(content, safeWidth, text);\n\n const ellipsis = '...';\n if (this.measureTextWidth(text, ellipsis) > safeWidth) {\n return this.clipToWidth(content, safeWidth, text);\n }\n\n if (overflow === 'ellipsis-start') {\n for (let i = 0; i < content.length; i += 1) {\n const candidate = `${ellipsis}${content.slice(i)}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n return ellipsis;\n }\n\n if (overflow === 'ellipsis-middle') {\n for (let left = content.length; left >= 0; left -= 1) {\n for (let rightStart = left; rightStart <= content.length; rightStart += 1) {\n const candidate = `${content.slice(0, left)}${ellipsis}${content.slice(rightStart)}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n }\n return ellipsis;\n }\n\n for (let i = content.length; i >= 0; i -= 1) {\n const candidate = `${content.slice(0, i)}${ellipsis}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n return ellipsis;\n }\n\n private clipToWidth(content: string, maxWidth: number, text: TextData): string {\n let clipped = '';\n Array.from(content).forEach((char) => {\n const candidate = clipped + char;\n if (this.measureTextWidth(text, candidate) <= maxWidth) {\n clipped = candidate;\n }\n });\n return clipped;\n }\n\n private measureTextWidth(text: TextData, content: string): number {\n return this.textMeasurer.measure({ ...text, content }).width;\n }\n\n private resolveTruncationWidthSafety(text: TextData): number {\n const rawFontSize = text.style?.fontSize;\n let fontSize = 12;\n if (typeof rawFontSize === 'number' && Number.isFinite(rawFontSize)) {\n fontSize = rawFontSize;\n } else if (typeof rawFontSize === 'string') {\n const parsed = Number.parseFloat(rawFontSize);\n if (Number.isFinite(parsed)) {\n fontSize = parsed;\n }\n }\n const derivedSafety = FONT_SIZE_TRUNCATION_SAFETY_BASE + Math.max(0, fontSize) * FONT_SIZE_TRUNCATION_SAFETY_RATIO;\n return Math.max(MIN_TRUNCATION_WIDTH_SAFETY_EPSILON, derivedSafety);\n }\n\n private resolveTextRenderPadding(style?: Record<string, unknown>): number {\n const rawPadding = style?.padding;\n if (typeof rawPadding === 'number' && Number.isFinite(rawPadding)) {\n return Math.max(0, rawPadding);\n }\n if (typeof rawPadding === 'string') {\n const parsed = Number.parseFloat(rawPadding);\n if (Number.isFinite(parsed)) return Math.max(0, parsed);\n }\n return 0;\n }\n}\n","import { DiagramPatch, ElementData, Point } from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport {\n createMoveElementCommand,\n createResizeElementCommand,\n} from './EngineCommands';\nimport CommandQueue from './CommandQueue';\n\nexport type AutoLayoutResult = { patches: DiagramPatch[]; movedPortIds: string[] };\n\nexport type AutoLayoutServiceConfig = {\n model: DiagramModel;\n commandQueue: CommandQueue;\n collectElementPortIds: (elementId: string) => string[];\n};\n\nexport default class AutoLayoutService {\n private model: DiagramModel;\n private commandQueue: CommandQueue;\n private collectElementPortIds: (elementId: string) => string[];\n\n constructor(config: AutoLayoutServiceConfig) {\n this.model = config.model;\n this.commandQueue = config.commandQueue;\n this.collectElementPortIds = config.collectElementPortIds;\n }\n\n applyLayoutForParent(parentId: string): AutoLayoutResult {\n const parent = this.model.getElement(parentId);\n if (!parent) return { patches: [], movedPortIds: [] };\n const layout = parent.layout;\n if (!layout || layout.mode === 'manual') return { patches: [], movedPortIds: [] };\n\n const children = this.model.getChildren(parentId);\n if (children.length === 0) return { patches: [], movedPortIds: [] };\n\n const axis = layout.mode;\n const padding = this.resolveLayoutPadding(layout);\n const gap = layout.gap ?? 12;\n const align = layout.align ?? 'center';\n const childFitMainAxis = layout.childFitMainAxis ?? 'none';\n const childFitCrossAxis = layout.childFitCrossAxis ?? 'none';\n const childFitMinSize = layout.childFitMinSize;\n const childFitMaxSize = layout.childFitMaxSize;\n\n const sorted = [...children].sort((a, b) => {\n const aPos = axis === 'horizontal' ? a.position.x : a.position.y;\n const bPos = axis === 'horizontal' ? b.position.x : b.position.y;\n if (aPos === bPos) return a.id.localeCompare(b.id);\n return aPos - bPos;\n });\n\n const gapCount = Math.max(0, sorted.length - 1);\n const calculateFittedSizes = (parentWidth: number, parentHeight: number) => {\n const availableWidth = Math.max(0, parentWidth - padding.x * 2);\n const availableHeight = Math.max(0, parentHeight - padding.y * 2);\n const availableMain =\n axis === 'horizontal'\n ? Math.max(0, availableWidth - gap * gapCount)\n : Math.max(0, availableHeight - gap * gapCount);\n\n const distributedMainSizes =\n childFitMainAxis === 'distribute'\n ? this.distributeLayoutSizes(\n availableMain,\n sorted.length,\n sorted.map(() =>\n axis === 'horizontal' ? childFitMinSize?.width ?? 0 : childFitMinSize?.height ?? 0,\n ),\n sorted.map(() =>\n axis === 'horizontal'\n ? childFitMaxSize?.width ?? Number.POSITIVE_INFINITY\n : childFitMaxSize?.height ?? Number.POSITIVE_INFINITY,\n ),\n )\n : null;\n\n return sorted.map((child, index) => {\n let width = child.size.width;\n let height = child.size.height;\n\n if (distributedMainSizes) {\n if (axis === 'horizontal') {\n width = distributedMainSizes[index];\n } else {\n height = distributedMainSizes[index];\n }\n }\n\n if (childFitCrossAxis === 'stretch') {\n if (axis === 'horizontal') {\n height = availableHeight;\n } else {\n width = availableWidth;\n }\n }\n\n return {\n width: this.clampLayoutSize(width, childFitMinSize?.width, childFitMaxSize?.width),\n height: this.clampLayoutSize(height, childFitMinSize?.height, childFitMaxSize?.height),\n };\n });\n };\n\n const resolveParentSize = (fittedSizes: Array<{ width: number; height: number }>) => {\n const maxWidth = Math.max(...fittedSizes.map((size) => size.width));\n const maxHeight = Math.max(...fittedSizes.map((size) => size.height));\n const totalWidth = fittedSizes.reduce((sum, size) => sum + size.width, 0);\n const totalHeight = fittedSizes.reduce((sum, size) => sum + size.height, 0);\n\n if (axis === 'horizontal') {\n return {\n width: Math.max(parent.size.width, padding.x * 2 + totalWidth + gap * gapCount),\n height: Math.max(parent.size.height, padding.y * 2 + maxHeight),\n };\n }\n return {\n width: Math.max(parent.size.width, padding.x * 2 + maxWidth),\n height: Math.max(parent.size.height, padding.y * 2 + totalHeight + gap * gapCount),\n };\n };\n\n let fittedSizes = calculateFittedSizes(parent.size.width, parent.size.height);\n let { width: newParentWidth, height: newParentHeight } = resolveParentSize(fittedSizes);\n fittedSizes = calculateFittedSizes(newParentWidth, newParentHeight);\n ({ width: newParentWidth, height: newParentHeight } = resolveParentSize(fittedSizes));\n\n const availableWidth = Math.max(0, newParentWidth - padding.x * 2);\n const availableHeight = Math.max(0, newParentHeight - padding.y * 2);\n\n let cursorX = padding.x;\n let cursorY = padding.y;\n const desiredPositions = new Map<string, Point>();\n const desiredSizes = new Map<string, { width: number; height: number }>();\n\n sorted.forEach((child, index) => {\n const fittedSize = fittedSizes[index];\n desiredSizes.set(child.id, fittedSize);\n if (axis === 'horizontal') {\n const y =\n align === 'start'\n ? padding.y\n : align === 'end'\n ? newParentHeight - padding.y - fittedSize.height\n : padding.y + Math.max(0, (availableHeight - fittedSize.height) / 2);\n desiredPositions.set(child.id, { x: cursorX, y });\n cursorX += fittedSize.width + (index < sorted.length - 1 ? gap : 0);\n } else {\n const x =\n align === 'start'\n ? padding.x\n : align === 'end'\n ? newParentWidth - padding.x - fittedSize.width\n : padding.x + Math.max(0, (availableWidth - fittedSize.width) / 2);\n desiredPositions.set(child.id, { x, y: cursorY });\n cursorY += fittedSize.height + (index < sorted.length - 1 ? gap : 0);\n }\n });\n\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n\n desiredPositions.forEach((position, childId) => {\n const child = this.model.getElement(childId);\n if (!child) return;\n if (child.position.x !== position.x || child.position.y !== position.y) {\n const movePatches = this.commandQueue.run(createMoveElementCommand(childId, position), this.model);\n patches.push(...movePatches);\n movedPortIds.push(...this.collectElementPortIds(childId));\n }\n const fittedSize = desiredSizes.get(childId);\n if (fittedSize && (child.size.width !== fittedSize.width || child.size.height !== fittedSize.height)) {\n const resizePatches = this.commandQueue.run(createResizeElementCommand(childId, fittedSize), this.model);\n patches.push(...resizePatches);\n movedPortIds.push(...this.collectElementPortIds(childId));\n const nested = this.applyLayoutForParent(childId);\n patches.push(...nested.patches);\n movedPortIds.push(...nested.movedPortIds);\n }\n });\n\n if (newParentWidth !== parent.size.width || newParentHeight !== parent.size.height) {\n const resizePatches = this.commandQueue.run(\n createResizeElementCommand(parentId, { width: newParentWidth, height: newParentHeight }),\n this.model,\n );\n patches.push(...resizePatches);\n movedPortIds.push(...parent.portIds);\n }\n\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n applyLayoutCascade(startParentId: string | null): AutoLayoutResult {\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n const visited = new Set<string>();\n let current = startParentId;\n while (current) {\n if (visited.has(current)) break;\n visited.add(current);\n const result = this.applyLayoutForParent(current);\n patches.push(...result.patches);\n movedPortIds.push(...result.movedPortIds);\n const parent = this.model.getElement(current);\n current = parent?.parentId ?? null;\n }\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n applyAllLayouts(): AutoLayoutResult {\n const layoutParents = Array.from(this.model.elements.values()).filter(\n (element) => element.layout && element.layout.mode !== 'manual',\n );\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n const depth = (elementId: string): number => {\n let level = 0;\n let current = this.model.getElement(elementId);\n while (current?.parentId) {\n level += 1;\n current = this.model.getElement(current.parentId);\n }\n return level;\n };\n layoutParents\n .sort((a, b) => depth(b.id) - depth(a.id))\n .forEach((element) => {\n const result = this.applyLayoutForParent(element.id);\n patches.push(...result.patches);\n movedPortIds.push(...result.movedPortIds);\n });\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n private resolveLayoutPadding(layout: ElementData['layout']): { x: number; y: number } {\n const padding = layout?.padding ?? 12;\n if (typeof padding === 'number') return { x: padding, y: padding };\n return {\n x: padding.x ?? 12,\n y: padding.y ?? 12,\n };\n }\n\n private clampLayoutSize(value: number, min?: number, max?: number): number {\n const minValue = min ?? 0;\n const maxValue = max ?? Number.POSITIVE_INFINITY;\n return Math.max(minValue, Math.min(maxValue, value));\n }\n\n private distributeLayoutSizes(\n total: number,\n count: number,\n minValues: number[],\n maxValues: number[],\n ): number[] {\n if (count <= 0) return [];\n const safeTotal = Math.max(0, total);\n const mins = Array.from({ length: count }, (_, index) => Math.max(0, minValues[index] ?? 0));\n const maxs = Array.from({ length: count }, (_, index) => {\n const max = maxValues[index];\n if (!Number.isFinite(max)) return Number.POSITIVE_INFINITY;\n return Math.max(mins[index], max);\n });\n const values = [...mins];\n let remaining = safeTotal - values.reduce((sum, value) => sum + value, 0);\n if (remaining <= 0) {\n return values.map((value) => Math.round(value));\n }\n\n let active = values\n .map((_, index) => index)\n .filter((index) => maxs[index] - values[index] > 1e-6);\n\n while (remaining > 1e-6 && active.length > 0) {\n const share = remaining / active.length;\n let progressed = false;\n const nextActive: number[] = [];\n\n active.forEach((index) => {\n const capacity = maxs[index] - values[index];\n if (capacity <= 1e-6) return;\n const add = Math.min(capacity, share);\n if (add > 0) {\n values[index] += add;\n remaining -= add;\n progressed = true;\n }\n if (maxs[index] - values[index] > 1e-6) {\n nextActive.push(index);\n }\n });\n\n if (!progressed) break;\n active = nextActive;\n }\n\n const floored = values.map((value) => Math.floor(value));\n let remainder = Math.round(\n values.reduce((sum, value) => sum + value, 0) - floored.reduce((sum, value) => sum + value, 0),\n );\n const fractions = values\n .map((value, index) => ({ index, fraction: value - floored[index] }))\n .sort((a, b) => b.fraction - a.fraction || a.index - b.index);\n let cursor = 0;\n while (remainder > 0 && fractions.length > 0) {\n const index = fractions[cursor % fractions.length].index;\n floored[index] += 1;\n remainder -= 1;\n cursor += 1;\n }\n return floored.map((value) => Math.max(0, value));\n }\n}\n","import { DiagramPatch, LinkData, Point, Rect } from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport { ShapeRegistry } from '../renderer/RenderTypes';\nimport { RouteContext, RouterStrategy } from '../strategies/RouterStrategy';\nimport CommandQueue from './CommandQueue';\nimport { createUpdateLinkCommand } from './EngineCommands';\n\nconst EDGE_TOLERANCE = 0.5;\n\nexport type LinkRoutingServiceConfig = {\n model: DiagramModel;\n commandQueue: CommandQueue;\n router: RouterStrategy;\n shapeRegistry: ShapeRegistry;\n};\n\nexport default class LinkRoutingService {\n private model: DiagramModel;\n private commandQueue: CommandQueue;\n private router: RouterStrategy;\n private shapeRegistry: ShapeRegistry;\n\n constructor(config: LinkRoutingServiceConfig) {\n this.model = config.model;\n this.commandQueue = config.commandQueue;\n this.router = config.router;\n this.shapeRegistry = config.shapeRegistry;\n }\n\n setRouter(router: RouterStrategy): void {\n this.router = router;\n }\n\n updateLinksForPorts(portIds: string[]): DiagramPatch[] {\n if (portIds.length === 0) return [];\n const portIdSet = new Set(portIds);\n const patches: DiagramPatch[] = [];\n const updatedLinks = new Set<string>();\n\n this.model.links.forEach((link) => {\n if (!portIdSet.has(link.sourcePortId) && !portIdSet.has(link.targetPortId)) {\n return;\n }\n if (updatedLinks.has(link.id)) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points = this.resolveLinkPointsForUpdate(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n updatedLinks.add(link.id);\n });\n\n return patches;\n }\n\n routeLinksWithEmptyPoints(): DiagramPatch[] {\n const patches: DiagramPatch[] = [];\n this.model.links.forEach((link) => {\n if (link.points.length > 0) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points =\n (link.routing ?? 'auto') === 'manual'\n ? [{ ...source }, { ...target }]\n : this.computeAutoRoute(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n });\n return patches;\n }\n\n computeAutoRoute(link: LinkData, source: Point, target: Point): Point[] {\n const routed = this.router.route(source, target, this.buildRouteContext(link));\n if (!routed || routed.length < 2) {\n return [{ ...source }, { ...target }];\n }\n const normalized = routed.map((point) => ({ ...point }));\n normalized[0] = { ...source };\n normalized[normalized.length - 1] = { ...target };\n return normalized;\n }\n\n private resolveLinkPointsForUpdate(link: LinkData, source: Point, target: Point): Point[] {\n const routing = link.routing ?? 'auto';\n if (routing === 'manual') {\n return this.updateManualRoute(link.points, source, target);\n }\n return this.computeAutoRoute(link, source, target);\n }\n\n private updateManualRoute(points: Point[], source: Point, target: Point): Point[] {\n if (points.length < 2) {\n return [{ ...source }, { ...target }];\n }\n return points.map((point, index) => {\n if (index === 0) return { ...source };\n if (index === points.length - 1) return { ...target };\n return { ...point };\n });\n }\n\n private buildRouteContext(link: LinkData): RouteContext {\n const sourcePort = this.model.getPort(link.sourcePortId);\n const targetPort = this.model.getPort(link.targetPortId);\n const sourceElementId = sourcePort?.elementId;\n const targetElementId = targetPort?.elementId;\n\n const sourcePosition = this.model.getPortWorldPosition(link.sourcePortId);\n const targetPosition = this.model.getPortWorldPosition(link.targetPortId);\n const sourceRect = sourceElementId ? this.getElementRect(sourceElementId) : null;\n const targetRect = targetElementId ? this.getElementRect(targetElementId) : null;\n const sourceEndpointGeometry =\n sourcePosition && sourceRect\n ? this.resolveEndpointGeometry(sourcePosition, sourceRect, sourceElementId, targetPosition ?? undefined)\n : undefined;\n const targetEndpointGeometry =\n targetPosition && targetRect\n ? this.resolveEndpointGeometry(targetPosition, targetRect, targetElementId, sourcePosition ?? undefined)\n : undefined;\n const sourceOnEdge = sourceEndpointGeometry?.onEdge ?? false;\n const targetOnEdge = targetEndpointGeometry?.onEdge ?? false;\n\n const ancestorExclusions = this.getAncestorExclusions(sourceElementId, targetElementId);\n const { bounds, boundsElementId } = this.resolveRouteBounds(sourceElementId, targetElementId);\n\n const forcedObstacles = new Set<string>();\n if (sourceElementId && sourceOnEdge) forcedObstacles.add(sourceElementId);\n if (targetElementId && targetOnEdge) forcedObstacles.add(targetElementId);\n if (boundsElementId) {\n forcedObstacles.delete(boundsElementId);\n }\n\n const excluded = new Set<string>();\n ancestorExclusions.forEach((id) => excluded.add(id));\n if (sourceElementId && !sourceOnEdge) excluded.add(sourceElementId);\n if (targetElementId && !targetOnEdge) excluded.add(targetElementId);\n if (boundsElementId) excluded.add(boundsElementId);\n\n const obstacles = Array.from(this.model.elements.values())\n .filter((element) => {\n if (forcedObstacles.has(element.id)) return true;\n if (excluded.has(element.id)) return false;\n return true;\n })\n .map((element) => {\n const position = this.model.getElementWorldPosition(element.id) ?? element.position;\n return {\n id: element.id,\n rect: {\n x: position.x,\n y: position.y,\n width: element.size.width,\n height: element.size.height,\n },\n };\n });\n\n return {\n linkId: link.id,\n sourcePortId: link.sourcePortId,\n targetPortId: link.targetPortId,\n obstacles,\n bounds,\n sourceEndpoint:\n sourcePosition && sourceRect\n ? {\n elementId: sourceElementId ?? undefined,\n rect: sourceRect,\n onEdgeSide: sourceEndpointGeometry?.onEdgeSide,\n }\n : undefined,\n targetEndpoint:\n targetPosition && targetRect\n ? {\n elementId: targetElementId ?? undefined,\n rect: targetRect,\n onEdgeSide: targetEndpointGeometry?.onEdgeSide,\n }\n : undefined,\n };\n }\n\n private resolveEndpointGeometry(\n point: Point,\n rect: Rect,\n elementId?: string,\n oppositePoint?: Point,\n ): { onEdge: boolean; onEdgeSide?: 'left' | 'right' | 'top' | 'bottom' } {\n const shape = this.resolveElementShape(elementId);\n const onEdge = shape?.projectToBorder\n ? this.isPointOnProjectedBorder(point, rect, shape.projectToBorder, EDGE_TOLERANCE)\n : this.isPointOnRectEdge(point, rect, EDGE_TOLERANCE);\n let onEdgeSide = onEdge ? shape?.resolveBorderSide?.(point, rect) ?? this.resolveEdgeSide(point, rect) : undefined;\n if (onEdgeSide && oppositePoint) {\n onEdgeSide = this.resolveCornerTieBreakSide(point, rect, oppositePoint, onEdgeSide);\n }\n return { onEdge, onEdgeSide };\n }\n\n private resolveCornerTieBreakSide(\n point: Point,\n rect: Rect,\n oppositePoint: Point,\n currentSide: 'left' | 'right' | 'top' | 'bottom',\n ): 'left' | 'right' | 'top' | 'bottom' {\n const onLeft = Math.abs(point.x - rect.x) <= EDGE_TOLERANCE;\n const onRight = Math.abs(point.x - (rect.x + rect.width)) <= EDGE_TOLERANCE;\n const onTop = Math.abs(point.y - rect.y) <= EDGE_TOLERANCE;\n const onBottom = Math.abs(point.y - (rect.y + rect.height)) <= EDGE_TOLERANCE;\n const horizontalSide = onLeft ? 'left' : onRight ? 'right' : null;\n const verticalSide = onTop ? 'top' : onBottom ? 'bottom' : null;\n if (!horizontalSide || !verticalSide) {\n return currentSide;\n }\n const direction = {\n x: oppositePoint.x - point.x,\n y: oppositePoint.y - point.y,\n };\n const horizontalScore = horizontalSide === 'left' ? -direction.x : direction.x;\n const verticalScore = verticalSide === 'top' ? -direction.y : direction.y;\n if (Math.abs(horizontalScore - verticalScore) <= 1e-6) {\n return currentSide;\n }\n return verticalScore > horizontalScore ? verticalSide : horizontalSide;\n }\n\n private resolveElementShape(elementId?: string) {\n if (!elementId) return undefined;\n const element = this.model.getElement(elementId);\n if (!element) return undefined;\n return this.shapeRegistry.get(element.shapeId);\n }\n\n private isPointOnProjectedBorder(\n point: Point,\n rect: Rect,\n projectToBorder: (point: Point, rect: Rect) => Point,\n tolerance: number,\n ): boolean {\n const projected = projectToBorder(point, rect);\n return Math.abs(projected.x - point.x) <= tolerance && Math.abs(projected.y - point.y) <= tolerance;\n }\n\n private getElementRect(elementId: string): Rect | null {\n const element = this.model.getElement(elementId);\n if (!element) return null;\n const position = this.model.getElementWorldPosition(elementId) ?? element.position;\n return {\n x: position.x,\n y: position.y,\n width: element.size.width,\n height: element.size.height,\n };\n }\n\n private getAncestorChain(elementId: string): string[] {\n const chain: string[] = [];\n let currentId: string | null = elementId;\n while (currentId) {\n const element = this.model.getElement(currentId);\n if (!element) break;\n chain.push(element.id);\n currentId = element.parentId ?? null;\n }\n return chain;\n }\n\n private getAncestorExclusions(sourceElementId?: string, targetElementId?: string): Set<string> {\n const exclusions = new Set<string>();\n if (sourceElementId) {\n this.getAncestorChain(sourceElementId).forEach((id) => exclusions.add(id));\n }\n if (targetElementId) {\n this.getAncestorChain(targetElementId).forEach((id) => exclusions.add(id));\n }\n return exclusions;\n }\n\n private resolveRouteBounds(\n sourceElementId?: string,\n targetElementId?: string,\n ): { bounds?: Rect; boundsElementId?: string } {\n if (!sourceElementId || !targetElementId) return {};\n if (sourceElementId === targetElementId) return {};\n\n const sourceChain = this.getAncestorChain(sourceElementId);\n if (sourceChain.includes(targetElementId)) {\n const rect = this.getElementRect(targetElementId);\n if (rect) {\n return { bounds: rect, boundsElementId: targetElementId };\n }\n }\n\n const targetChain = this.getAncestorChain(targetElementId);\n if (targetChain.includes(sourceElementId)) {\n const rect = this.getElementRect(sourceElementId);\n if (rect) {\n return { bounds: rect, boundsElementId: sourceElementId };\n }\n }\n\n return {};\n }\n\n private isPointOnRectEdge(point: Point, rect: Rect, tolerance: number): boolean {\n const withinX = point.x >= rect.x - tolerance && point.x <= rect.x + rect.width + tolerance;\n const withinY = point.y >= rect.y - tolerance && point.y <= rect.y + rect.height + tolerance;\n if (!withinX || !withinY) return false;\n const onLeft = Math.abs(point.x - rect.x) <= tolerance;\n const onRight = Math.abs(point.x - (rect.x + rect.width)) <= tolerance;\n const onTop = Math.abs(point.y - rect.y) <= tolerance;\n const onBottom = Math.abs(point.y - (rect.y + rect.height)) <= tolerance;\n return onLeft || onRight || onTop || onBottom;\n }\n\n private resolveEdgeSide(point: Point, rect: Rect): 'left' | 'right' | 'top' | 'bottom' | undefined {\n const distances: Array<{ side: 'left' | 'right' | 'top' | 'bottom'; value: number }> = [\n { side: 'left', value: Math.abs(point.x - rect.x) },\n { side: 'right', value: Math.abs(point.x - (rect.x + rect.width)) },\n { side: 'top', value: Math.abs(point.y - rect.y) },\n { side: 'bottom', value: Math.abs(point.y - (rect.y + rect.height)) },\n ];\n const nearest = distances.reduce((best, current) => (current.value < best.value ? current : best), distances[0]);\n return nearest.value <= EDGE_TOLERANCE ? nearest.side : undefined;\n }\n}\n","import { DiagramPatch } from '../api/types';\nimport { AutoLayoutResult } from './AutoLayoutService';\n\nexport type MutationPipelineConfig = {\n routeLinksWithEmptyPoints: () => DiagramPatch[];\n reprojectBorderPortsForResizedElements: (\n patches: DiagramPatch[],\n ) => { patches: DiagramPatch[]; movedPortIds: string[] };\n updateLinksForPorts: (portIds: string[]) => DiagramPatch[];\n};\n\nexport type MutationPipelineRunOptions = {\n basePatches: DiagramPatch[];\n layoutSteps?: Array<() => AutoLayoutResult>;\n movedPortIds?: string[];\n includeEmptyLinkRouting?: boolean;\n};\n\nexport default class MutationPipeline {\n private routeLinksWithEmptyPoints: () => DiagramPatch[];\n private reprojectBorderPortsForResizedElements: (\n patches: DiagramPatch[],\n ) => { patches: DiagramPatch[]; movedPortIds: string[] };\n private updateLinksForPorts: (portIds: string[]) => DiagramPatch[];\n\n constructor(config: MutationPipelineConfig) {\n this.routeLinksWithEmptyPoints = config.routeLinksWithEmptyPoints;\n this.reprojectBorderPortsForResizedElements = config.reprojectBorderPortsForResizedElements;\n this.updateLinksForPorts = config.updateLinksForPorts;\n }\n\n run(options: MutationPipelineRunOptions): DiagramPatch[] {\n const allPatches: DiagramPatch[] = [...options.basePatches];\n const movedPortIds = new Set(options.movedPortIds ?? []);\n\n (options.layoutSteps ?? []).forEach((step) => {\n const result = step();\n allPatches.push(...result.patches);\n result.movedPortIds.forEach((id) => movedPortIds.add(id));\n });\n\n if (options.includeEmptyLinkRouting) {\n allPatches.push(...this.routeLinksWithEmptyPoints());\n }\n\n const normalizedBorderPorts = this.reprojectBorderPortsForResizedElements(allPatches);\n allPatches.push(...normalizedBorderPorts.patches);\n normalizedBorderPorts.movedPortIds.forEach((id) => movedPortIds.add(id));\n\n const reroutePortIds = Array.from(movedPortIds);\n if (reroutePortIds.length > 0) {\n allPatches.push(...this.updateLinksForPorts(reroutePortIds));\n }\n\n return allPatches;\n }\n}\n","import {\n DiagramEngineHandle,\n DiagramPatch,\n DiagramState,\n ElementData,\n EngineEventMap,\n ElementDropEvent,\n EnginePointerInfo,\n LinkData,\n ElementLinkConnectingEvent,\n LinkRoutingMode,\n MoveConstraint,\n OverlayShapeConfig,\n OverlayShapeHandle,\n Point,\n PortData,\n PortAnchor,\n Rect,\n RerouteLinksOptions,\n TextData,\n ElementPortMovementPolicy,\n HostAnchorPreset,\n PortMouseEvent,\n} from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport CommandQueue from './CommandQueue';\nimport EventBus from './EventBus';\nimport SelectionState from './SelectionState';\nimport ViewportState from './ViewportState';\nimport {\n createAddElementCommand,\n createAddLinkCommand,\n createAddPortCommand,\n createAddTextCommand,\n createLoadCommand,\n createMoveElementCommand,\n createMovePortCommand,\n createRemoveElementCommand,\n createRemoveLinkCommand,\n createRemovePortCommand,\n createRemoveTextCommand,\n createResizeElementCommand,\n createMoveTextCommand,\n createUpdateLinkCommand,\n createUpdateTextCommand,\n createSetElementLayoutCommand,\n} from './EngineCommands';\nimport { Renderer } from '../renderer/Renderer';\nimport RenderScheduler from '../renderer/RenderScheduler';\nimport ObstacleRouter from '../strategies/ObstacleRouter';\nimport DefaultSnapper from '../strategies/DefaultSnapper';\nimport { RouterStrategy } from '../strategies/RouterStrategy';\nimport { SnapStrategy } from '../strategies/SnapStrategy';\nimport { ShapeDefinition, ShapeRegistry, ShapeResizeHandle } from '../renderer/RenderTypes';\nimport CanvasTextMeasurer from '../measure/CanvasTextMeasurer';\nimport { TextMeasurer } from '../measure/TextMeasurer';\nimport { clamp } from '../utils/geometry';\nimport { patchRemove, patchUpdate } from '../utils/patches';\nimport { projectPointToBoundary } from '../utils/borderGeometry';\nimport TextLayoutService from './TextLayoutService';\nimport AutoLayoutService from './AutoLayoutService';\nimport LinkRoutingService from './LinkRoutingService';\nimport MutationPipeline from './MutationPipeline';\n\nconst clampToRect = (point: Point, rect: Rect): Point => ({\n x: clamp(point.x, rect.x, rect.x + rect.width),\n y: clamp(point.y, rect.y, rect.y + rect.height),\n});\n\nconst snapToRectBorder = (point: Point, rect: Rect): Point => {\n const clamped = clampToRect(point, rect);\n const left = Math.abs(clamped.x - rect.x);\n const right = Math.abs(clamped.x - (rect.x + rect.width));\n const top = Math.abs(clamped.y - rect.y);\n const bottom = Math.abs(clamped.y - (rect.y + rect.height));\n const min = Math.min(left, right, top, bottom);\n\n if (min === left) return { x: rect.x, y: clamped.y };\n if (min === right) return { x: rect.x + rect.width, y: clamped.y };\n if (min === top) return { x: clamped.x, y: rect.y };\n return { x: clamped.x, y: rect.y + rect.height };\n};\n\nconst POSITION_EPSILON = 1e-6;\nconst ANCHOR_PRESET_FALLBACK_ORDER: HostAnchorPreset[] = ['vertices', 'cardinal'];\n\nexport type DiagramEngineConfig = {\n renderer: Renderer;\n scheduler?: RenderScheduler;\n router?: RouterStrategy;\n snapper?: SnapStrategy;\n shapeRegistry?: ShapeRegistry;\n textMeasurer?: TextMeasurer;\n};\n\nexport default class DiagramEngine {\n private model = new DiagramModel();\n private events = new EventBus<EngineEventMap>();\n private commandQueue = new CommandQueue();\n private selection = new SelectionState();\n private viewport = new ViewportState();\n private renderer: Renderer;\n private scheduler: RenderScheduler;\n private snapper: SnapStrategy;\n private shapeRegistry: ShapeRegistry;\n private textLayoutService: TextLayoutService;\n private autoLayoutService: AutoLayoutService;\n private linkRoutingService: LinkRoutingService;\n private mutationPipeline: MutationPipeline;\n\n constructor(config: DiagramEngineConfig) {\n this.renderer = config.renderer;\n this.scheduler = config.scheduler ?? new RenderScheduler();\n const router = config.router ?? new ObstacleRouter();\n this.snapper = config.snapper ?? new DefaultSnapper();\n this.shapeRegistry = config.shapeRegistry ?? new ShapeRegistry();\n const textMeasurer = config.textMeasurer ?? new CanvasTextMeasurer();\n this.textLayoutService = new TextLayoutService({ model: this.model, textMeasurer });\n this.autoLayoutService = new AutoLayoutService({\n model: this.model,\n commandQueue: this.commandQueue,\n collectElementPortIds: (elementId) => this.collectElementPortIds(elementId),\n });\n this.linkRoutingService = new LinkRoutingService({\n model: this.model,\n commandQueue: this.commandQueue,\n router,\n shapeRegistry: this.shapeRegistry,\n });\n this.mutationPipeline = new MutationPipeline({\n routeLinksWithEmptyPoints: () => this.routeLinksWithEmptyPoints(),\n reprojectBorderPortsForResizedElements: (patches) => this.reprojectBorderPortsForResizedElements(patches),\n updateLinksForPorts: (portIds) => this.updateLinksForPorts(portIds),\n });\n }\n\n static create(config: DiagramEngineConfig): DiagramEngine {\n return new DiagramEngine(config);\n }\n\n load(state: DiagramState): void {\n const patches = this.commandQueue.run(createLoadCommand(state), this.model);\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyAllLayouts()],\n includeEmptyLinkRouting: true,\n });\n this.emitChange(allPatches);\n }\n\n getState(): DiagramState {\n return this.model.toState();\n }\n\n getViewport(): { pan: Point; zoom: number } {\n return { pan: { ...this.viewport.pan }, zoom: this.viewport.zoom };\n }\n\n clientToWorld(clientPoint: Point, container: { getBoundingClientRect: () => { left: number; top: number } }): Point {\n const rect = container.getBoundingClientRect();\n const { pan, zoom } = this.getViewport();\n const safeZoom = zoom === 0 ? 1 : zoom;\n return {\n x: (clientPoint.x - rect.left - pan.x) / safeZoom,\n y: (clientPoint.y - rect.top - pan.y) / safeZoom,\n };\n }\n\n createOverlayShape(config: OverlayShapeConfig): OverlayShapeHandle {\n return this.renderer.createOverlayShape(config);\n }\n\n on<TEvent extends keyof EngineEventMap>(event: TEvent, handler: (payload: EngineEventMap[TEvent]) => void): () => void {\n return this.events.subscribe(event, handler);\n }\n\n addElement(element: ElementData): void {\n const patches = this.commandQueue.run(createAddElementCommand(element), this.model);\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutCascade(element.parentId ?? null)],\n });\n this.emitChange(allPatches);\n }\n\n moveElementTo(id: string, x: number, y: number): void {\n const oldWorld = this.model.getElementWorldPosition(id);\n const snapped = this.snapper.snap({ x, y });\n const element = this.model.getElement(id);\n let position = snapped;\n if (element?.parentId) {\n const parentPosition = this.model.getElementWorldPosition(element.parentId);\n if (parentPosition) {\n position = {\n x: snapped.x - parentPosition.x,\n y: snapped.y - parentPosition.y,\n };\n const parent = this.model.getElement(element.parentId);\n if (parent && element.moveMode && element.moveMode !== 'free') {\n const widthLimit = Math.max(0, parent.size.width - element.size.width);\n const heightLimit = Math.max(0, parent.size.height - element.size.height);\n let bounds: Rect = {\n x: 0,\n y: 0,\n width: widthLimit,\n height: heightLimit,\n };\n if (element.anchorCenter) {\n bounds = element.moveMode === 'inside'\n ? {\n x: element.size.width / 2,\n y: element.size.height / 2,\n width: widthLimit,\n height: heightLimit,\n }\n : {\n x: 0,\n y: 0,\n width: parent.size.width,\n height: parent.size.height,\n };\n }\n position = element.moveMode === 'inside' ? clampToRect(position, bounds) : snapToRectBorder(position, bounds);\n }\n }\n }\n const patches = this.commandQueue.run(createMoveElementCommand(id, position), this.model);\n const movedPortIds: string[] = [];\n if (element) {\n movedPortIds.push(...this.collectElementPortIds(element.id));\n }\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutCascade(element?.parentId ?? null)],\n movedPortIds,\n });\n this.emitChange(allPatches);\n\n const newWorld = this.model.getElementWorldPosition(id);\n if (oldWorld && newWorld) {\n const delta = { x: newWorld.x - oldWorld.x, y: newWorld.y - oldWorld.y };\n if (delta.x !== 0 || delta.y !== 0) {\n this.events.emit('elementMoved', {\n elementId: id,\n oldWorld: { ...oldWorld },\n newWorld: { ...newWorld },\n delta,\n });\n }\n }\n }\n\n resizeElement(id: string, width: number, height: number): void {\n const element = this.model.getElement(id);\n const oldSize = element?.size;\n const patches = this.commandQueue.run(createResizeElementCommand(id, { width, height }), this.model);\n const movedPortIds = element ? this.collectElementPortIds(element.id) : [];\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutForParent(id), () => this.applyLayoutCascade(element?.parentId ?? null)],\n movedPortIds,\n });\n this.emitChange(allPatches);\n const newSize = this.model.getElement(id)?.size;\n if (oldSize && newSize && (oldSize.width !== newSize.width || oldSize.height !== newSize.height)) {\n this.events.emit('elementResized', { elementId: id, oldSize: { ...oldSize }, newSize: { ...newSize } });\n }\n }\n\n setElementLayout(id: string, layout: ElementData['layout']): void {\n const patches = this.commandQueue.run(createSetElementLayoutCommand(id, layout), this.model);\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [\n () => this.applyLayoutForParent(id),\n () => this.applyLayoutCascade(this.model.getElement(id)?.parentId ?? null),\n ],\n });\n this.emitChange(allPatches);\n }\n\n removeElement(id: string): void {\n const existing = this.model.getElement(id);\n const parentId = existing?.parentId ?? null;\n const before = this.model.toState();\n this.commandQueue.run(createRemoveElementCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n const allPatches = this.mutationPipeline.run({\n basePatches: removal.patches,\n layoutSteps: [() => this.applyLayoutCascade(parentId)],\n });\n this.emitChange(allPatches);\n if (existing) {\n this.events.emit('elementDeleted', { elementId: id });\n }\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addPortToElement(elementId: string, port: PortData): void {\n const element = this.model.getElement(elementId);\n const nextPort: PortData = { ...port, elementId };\n if (element) {\n const constrained = this.resolveConstrainedPortRelativePosition(nextPort, element, nextPort.position);\n nextPort.position = constrained.position;\n nextPort.currentAnchorId = constrained.currentAnchorId ?? undefined;\n }\n const patches = this.commandQueue.run(createAddPortCommand(nextPort), this.model);\n this.emitChange(patches);\n }\n\n movePortTo(id: string, x: number, y: number): void {\n const snapped = this.snapper.snap({ x, y });\n const port = this.model.getPort(id);\n const oldWorld = this.model.getPortWorldPosition(id);\n let position = snapped;\n let currentAnchorId: string | null | undefined;\n if (port) {\n const elementPosition = this.model.getElementWorldPosition(port.elementId);\n if (elementPosition) {\n const requestedRelative = {\n x: snapped.x - elementPosition.x,\n y: snapped.y - elementPosition.y,\n };\n const element = this.model.getElement(port.elementId);\n if (element) {\n const constrained = this.resolveConstrainedPortRelativePosition(port, element, requestedRelative);\n position = constrained.position;\n currentAnchorId = constrained.currentAnchorId;\n } else {\n position = requestedRelative;\n }\n }\n }\n const moveUpdate: { position: Point; currentAnchorId?: string | null } = { position };\n if (currentAnchorId !== undefined) {\n moveUpdate.currentAnchorId = currentAnchorId;\n }\n const patches = this.commandQueue.run(createMovePortCommand(id, moveUpdate), this.model);\n if (port) {\n patches.push(...this.updateLinksForPorts([port.id]));\n }\n this.emitChange(patches);\n\n const newWorld = this.model.getPortWorldPosition(id);\n if (port && oldWorld && newWorld) {\n const delta = { x: newWorld.x - oldWorld.x, y: newWorld.y - oldWorld.y };\n if (delta.x !== 0 || delta.y !== 0) {\n this.events.emit('portMoved', {\n portId: id,\n elementId: port.elementId,\n oldWorld: { ...oldWorld },\n newWorld: { ...newWorld },\n delta,\n });\n }\n }\n }\n\n removePort(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemovePortCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addLink(link: LinkData): void {\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n const routing = link.routing ?? 'auto';\n let points = link.points;\n if (source && target) {\n if (routing === 'auto') {\n points = this.computeAutoRoute(link, source, target);\n } else if (points.length < 2) {\n points = [{ ...source }, { ...target }];\n }\n }\n const patches = this.commandQueue.run(\n createAddLinkCommand({ ...link, points, routing }),\n this.model\n );\n this.emitChange(patches);\n }\n\n updateLinkPoints(id: string, points: Point[]): void {\n const patches = this.commandQueue.run(\n createUpdateLinkCommand(id, { points, routing: 'manual' }),\n this.model\n );\n this.emitChange(patches);\n }\n\n setLinkRoutingMode(id: string, mode: LinkRoutingMode): void {\n const link = this.model.getLink(id);\n if (!link) return;\n const update: { points?: Point[]; routing: LinkRoutingMode } = { routing: mode };\n if (mode === 'auto') {\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (source && target) {\n update.points = this.computeAutoRoute(link, source, target);\n }\n }\n const patches = this.commandQueue.run(createUpdateLinkCommand(id, update), this.model);\n this.emitChange(patches);\n }\n\n rerouteAllLinks(): void {\n const linkIds: string[] = [];\n this.model.links.forEach((link) => {\n if ((link.routing ?? 'auto') === 'auto') {\n linkIds.push(link.id);\n }\n });\n this.rerouteLinks(linkIds);\n }\n\n rerouteLinks(linkIds: string[], options?: RerouteLinksOptions): void {\n const includeManual = Boolean(options?.includeManual);\n const patches: DiagramPatch[] = [];\n const visited = new Set<string>();\n\n linkIds.forEach((id) => {\n if (visited.has(id)) return;\n visited.add(id);\n const link = this.model.getLink(id);\n if (!link) return;\n const routing = link.routing ?? 'auto';\n if (routing === 'manual' && !includeManual) return;\n const source = this.model.getPortWorldPosition(link.sourcePortId);\n const target = this.model.getPortWorldPosition(link.targetPortId);\n if (!source || !target) return;\n const points = this.computeAutoRoute(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n });\n\n if (patches.length > 0) {\n this.emitChange(patches);\n }\n }\n\n removeLink(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemoveLinkCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addText(text: TextData): void {\n const resolved = this.resolveTextPresentation(text);\n const patches = this.commandQueue.run(\n createAddTextCommand({\n ...text,\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n this.model,\n );\n this.emitChange(patches);\n }\n\n updateText(id: string, content: string): void {\n const patches = this.commandQueue.run(createUpdateTextCommand(id, content), this.model);\n const text = this.model.getText(id);\n if (text) {\n const resolved = this.resolveTextPresentation(text.toData());\n text.setSize(resolved.size);\n text.setDisplayContent(resolved.displayContent);\n text.setDisplayOffset(resolved.displayOffset);\n text.setDisplayClipSize(resolved.displayClipSize);\n patches.push(\n patchUpdate('text', id, {\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n );\n this.events.emit('textUpdated', {\n textId: text.id,\n ownerId: text.ownerId,\n content: text.content,\n displayContent: resolved.displayContent,\n reason: 'content',\n });\n }\n this.emitChange(patches);\n }\n\n moveTextTo(id: string, x: number, y: number): void {\n const text = this.model.getText(id);\n if (!text) return;\n let position: Point = { x, y };\n if (text.ownerId) {\n const element = this.model.getElement(text.ownerId);\n if (element) {\n const elementPosition = this.model.getElementWorldPosition(text.ownerId);\n if (elementPosition) {\n position = { x: x - elementPosition.x, y: y - elementPosition.y };\n }\n } else {\n const port = this.model.getPort(text.ownerId);\n if (port) {\n const portPosition = this.model.getPortWorldPosition(text.ownerId);\n if (portPosition) {\n position = { x: x - portPosition.x, y: y - portPosition.y };\n }\n } else {\n const link = this.model.getLink(text.ownerId);\n if (link) {\n const midpoint = this.model.getLinkMidpoint(text.ownerId);\n if (midpoint) {\n position = { x: x - midpoint.x, y: y - midpoint.y };\n }\n }\n }\n }\n }\n const patches = this.commandQueue.run(createMoveTextCommand(id, position), this.model);\n this.emitChange(patches);\n }\n\n removeText(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemoveTextCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n setSelection(ids: string[]): void {\n this.selection.set(ids);\n this.emitSelection();\n }\n\n toggleSelection(id: string): void {\n this.selection.toggle(id);\n this.emitSelection();\n }\n\n getSelection(): string[] {\n return this.selection.get();\n }\n\n getElementWorldPosition(id: string): Point | null {\n return this.model.getElementWorldPosition(id);\n }\n\n getElementRotation(id: string): number {\n const element = this.model.getElement(id);\n if (!element) return 0;\n const shape = this.shapeRegistry.get(element.shapeId);\n const baseRotation = shape?.baseRotation ?? 0;\n const instanceRotation = (element.style?.rotation as number | undefined) ?? 0;\n return baseRotation + instanceRotation;\n }\n\n normalizeElementResize(\n id: string,\n proposal: { x: number; y: number; width: number; height: number },\n handle: ShapeResizeHandle,\n minSize = 20,\n ): { x: number; y: number; width: number; height: number } {\n const clamped = {\n x: proposal.x,\n y: proposal.y,\n width: Math.max(minSize, proposal.width),\n height: Math.max(minSize, proposal.height),\n };\n const element = this.model.getElement(id);\n if (!element) return clamped;\n\n const shape = this.shapeRegistry.get(element.shapeId);\n if (!shape?.normalizeResize) return clamped;\n\n const normalized = shape.normalizeResize({\n element: element.toData(),\n handle,\n minSize,\n proposal: { width: clamped.width, height: clamped.height },\n });\n const width = Math.max(minSize, normalized.width);\n const height = Math.max(minSize, normalized.height);\n\n let x = clamped.x;\n let y = clamped.y;\n if (handle === 'sw' || handle === 'nw') {\n x += clamped.width - width;\n }\n if (handle === 'ne' || handle === 'nw') {\n y += clamped.height - height;\n }\n\n return { x, y, width, height };\n }\n\n getPortWorldPosition(id: string): Point | null {\n return this.model.getPortWorldPosition(id);\n }\n\n getTextWorldPosition(id: string): Point | null {\n return this.model.getTextWorldPosition(id);\n }\n\n getPortElementId(portId: string): string | null {\n return this.model.getPort(portId)?.elementId ?? null;\n }\n\n deleteSelection(): void {\n const selected = this.selection.get();\n if (selected.length === 0) return;\n const before = this.model.toState();\n\n const elementIds: string[] = [];\n const portIds: string[] = [];\n const linkIds: string[] = [];\n const textIds: string[] = [];\n selected.forEach((id) => {\n if (this.model.getElement(id)) elementIds.push(id);\n else if (this.model.getPort(id)) portIds.push(id);\n else if (this.model.getLink(id)) linkIds.push(id);\n else if (this.model.getText(id)) textIds.push(id);\n });\n\n selected.forEach((id) => {\n if (this.model.getElement(id)) {\n this.commandQueue.run(createRemoveElementCommand(id), this.model);\n return;\n }\n if (this.model.getPort(id)) {\n this.commandQueue.run(createRemovePortCommand(id), this.model);\n return;\n }\n if (this.model.getLink(id)) {\n this.commandQueue.run(createRemoveLinkCommand(id), this.model);\n return;\n }\n if (this.model.getText(id)) {\n this.commandQueue.run(createRemoveTextCommand(id), this.model);\n }\n });\n\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n elementIds.forEach((elementId) => this.events.emit('elementDeleted', { elementId }));\n this.selection.clear();\n this.emitSelection();\n }\n\n setViewport(pan: Point, zoom: number): void {\n const hasPanChange = this.viewport.pan.x !== pan.x || this.viewport.pan.y !== pan.y;\n const hasZoomChange = this.viewport.zoom !== zoom;\n if (!hasPanChange && !hasZoomChange) return;\n\n this.viewport.setPan(pan);\n this.viewport.setZoom(zoom);\n this.emitChange(\n [\n {\n type: 'viewport',\n entity: 'viewport',\n payload: { pan: { ...pan }, zoom },\n },\n ],\n { render: false },\n );\n }\n\n setRouting(router: RouterStrategy): void {\n this.linkRoutingService.setRouter(router);\n this.events.emit('config', { type: 'routing' });\n }\n\n setSnapping(snapper: SnapStrategy): void {\n this.snapper = snapper;\n this.events.emit('config', { type: 'snapping' });\n }\n\n registerShape(shape: ShapeDefinition): void {\n this.shapeRegistry.register(shape);\n this.events.emit('config', { type: 'rendering' });\n }\n\n render(): void {\n this.renderer.render(this.model);\n }\n\n emitElementDrop(event: ElementDropEvent): void {\n this.events.emit('element-drop', event);\n this.events.emit('elementDrop', event);\n this.events.emit('elementDragged', event);\n }\n\n emitPaperClick(pointer: EnginePointerInfo): void {\n this.events.emit('paperClick', { pointer });\n }\n\n emitPortMouseDown(event: PortMouseEvent): void {\n this.events.emit('portMouseDown', event);\n }\n\n emitPortMouseUp(event: PortMouseEvent): void {\n this.events.emit('portMouseUp', event);\n }\n\n emitElementClick(elementId: string, pointer: EnginePointerInfo, isMulti: boolean): void {\n this.events.emit('elementClick', { elementId, pointer, isMulti });\n }\n\n emitElementLinkStarted(event: { sourcePortId: string; sourceElementId: string; startWorld: Point }): void {\n this.events.emit('elementLinkStarted', event);\n }\n\n emitElementLinkConnecting(event: ElementLinkConnectingEvent): boolean {\n let cancelled = false;\n const payload: ElementLinkConnectingEvent = {\n ...event,\n cancelled: false,\n cancel: () => {\n cancelled = true;\n payload.cancelled = true;\n },\n };\n this.events.emit('elementLinkConnecting', payload);\n return cancelled || payload.cancelled;\n }\n\n emitElementLinkEnded(event: {\n sourcePortId: string;\n sourceElementId: string;\n linkId?: string;\n targetPortId?: string;\n targetElementId?: string;\n cancelled: boolean;\n }): void {\n this.events.emit('elementLinkEnded', event);\n }\n\n private emitChange(patches: DiagramPatch[], options?: { render?: boolean; emitTextUpdated?: boolean }): void {\n const allPatches = this.appendTextLayoutPatches(patches, options?.emitTextUpdated ?? true);\n const state = this.model.toState();\n this.events.emit('change', { patches: allPatches, state });\n if (options?.render === false) return;\n this.scheduler.requestRender(() => this.renderer.render(this.model));\n }\n\n private appendTextLayoutPatches(patches: DiagramPatch[], emitTextUpdated: boolean): DiagramPatch[] {\n return this.textLayoutService.appendTextLayoutPatches(patches, {\n emitTextUpdated,\n onTextUpdated: (payload) => this.events.emit('textUpdated', payload),\n });\n }\n\n private reprojectBorderPortsForResizedElements(\n patches: DiagramPatch[],\n ): { patches: DiagramPatch[]; movedPortIds: string[] } {\n const resizedElements = this.collectResizedElementSizes(patches);\n if (resizedElements.size === 0) return { patches: [], movedPortIds: [] };\n\n const reprojectionPatches: DiagramPatch[] = [];\n const movedPortIds = new Set<string>();\n\n resizedElements.forEach((sizeInfo, elementId) => {\n const host = this.model.getElement(elementId);\n if (!host) return;\n host.portIds.forEach((portId) => {\n const port = this.model.getPort(portId);\n if (!port) return;\n const effectiveMoveMode = this.resolveEffectivePortMoveMode(port, host);\n if (!effectiveMoveMode || effectiveMoveMode === 'free' || effectiveMoveMode === 'inside') return;\n if (effectiveMoveMode === 'anchors') {\n const anchored = this.resolveAnchoredPortResizeProjection(port, host, sizeInfo, host.size);\n const unchanged =\n Math.abs(anchored.position.x - port.position.x) <= POSITION_EPSILON &&\n Math.abs(anchored.position.y - port.position.y) <= POSITION_EPSILON &&\n anchored.currentAnchorId === (port.currentAnchorId ?? null);\n if (unchanged) return;\n const patchesForPort = this.commandQueue.run(\n createMovePortCommand(port.id, {\n position: anchored.position,\n currentAnchorId: anchored.currentAnchorId,\n }),\n this.model,\n );\n reprojectionPatches.push(...patchesForPort);\n movedPortIds.add(port.id);\n return;\n }\n const projected = this.resolveBorderPortResizeProjection(port.position, host.shapeId, sizeInfo, host.size);\n const unchanged =\n Math.abs(projected.x - port.position.x) <= POSITION_EPSILON &&\n Math.abs(projected.y - port.position.y) <= POSITION_EPSILON;\n if (unchanged) return;\n const patchesForPort = this.commandQueue.run(\n createMovePortCommand(port.id, { position: projected, currentAnchorId: null }),\n this.model,\n );\n reprojectionPatches.push(...patchesForPort);\n movedPortIds.add(port.id);\n });\n });\n\n return { patches: reprojectionPatches, movedPortIds: Array.from(movedPortIds) };\n }\n\n private collectResizedElementSizes(\n patches: DiagramPatch[],\n ): Map<string, { previousSize?: { width: number; height: number }; size: { width: number; height: number } }> {\n const resized = new Map<string, { previousSize?: { width: number; height: number }; size: { width: number; height: number } }>();\n patches.forEach((patch) => {\n if (patch.entity !== 'element' || patch.type !== 'update' || !patch.id || !patch.payload?.size) return;\n const payload = patch.payload as {\n size?: { width?: number; height?: number };\n previousSize?: { width?: number; height?: number };\n };\n if (typeof payload.size?.width !== 'number' || typeof payload.size?.height !== 'number') return;\n const existing = resized.get(patch.id);\n const previousSize =\n existing?.previousSize ??\n (typeof payload.previousSize?.width === 'number' && typeof payload.previousSize?.height === 'number'\n ? { width: payload.previousSize.width, height: payload.previousSize.height }\n : undefined);\n resized.set(patch.id, {\n previousSize,\n size: { width: payload.size.width, height: payload.size.height },\n });\n });\n return resized;\n }\n\n private resolveBorderPortResizeProjection(\n position: Point,\n shapeId: string,\n resize: { previousSize?: { width: number; height: number }; size: { width: number; height: number } },\n currentSize: { width: number; height: number },\n ): Point {\n const nextSize = {\n width: Math.max(0, currentSize.width),\n height: Math.max(0, currentSize.height),\n };\n const previousSize = resize.previousSize\n ? {\n width: Math.max(0, resize.previousSize.width),\n height: Math.max(0, resize.previousSize.height),\n }\n : undefined;\n if (!previousSize || (previousSize.width <= POSITION_EPSILON && previousSize.height <= POSITION_EPSILON)) {\n return this.projectPointToHostBorder(position, shapeId, nextSize);\n }\n\n const previousCenter = { x: previousSize.width / 2, y: previousSize.height / 2 };\n const nextCenter = { x: nextSize.width / 2, y: nextSize.height / 2 };\n const previousProjected = this.projectPointToHostBorder(position, shapeId, previousSize);\n const previousHalfWidth = previousSize.width / 2;\n const previousHalfHeight = previousSize.height / 2;\n const nextHalfWidth = nextSize.width / 2;\n const nextHalfHeight = nextSize.height / 2;\n const normalizedX =\n previousHalfWidth > POSITION_EPSILON ? (previousProjected.x - previousCenter.x) / previousHalfWidth : 0;\n const normalizedY =\n previousHalfHeight > POSITION_EPSILON ? (previousProjected.y - previousCenter.y) / previousHalfHeight : 0;\n const projectedTarget = {\n x: nextCenter.x + normalizedX * nextHalfWidth,\n y: nextCenter.y + normalizedY * nextHalfHeight,\n };\n return this.projectPointToHostBorder(projectedTarget, shapeId, nextSize);\n }\n\n private resolveConstrainedPortRelativePosition(\n port: Pick<PortData, 'position' | 'size' | 'style' | 'moveMode' | 'anchorCenter' | 'currentAnchorId'>,\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n requestedPosition: Point,\n ): { position: Point; currentAnchorId: string | null } {\n let position = { ...requestedPosition };\n const effectiveMoveMode = this.resolveEffectivePortMoveMode(port, element);\n\n if (effectiveMoveMode && effectiveMoveMode !== 'free' && effectiveMoveMode !== 'anchors') {\n const widthLimit = Math.max(0, element.size.width - (port.size?.width ?? 0));\n const heightLimit = Math.max(0, element.size.height - (port.size?.height ?? 0));\n let bounds: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n if (port.anchorCenter && port.size) {\n bounds = effectiveMoveMode === 'inside'\n ? {\n x: port.size.width / 2,\n y: port.size.height / 2,\n width: widthLimit,\n height: heightLimit,\n }\n : {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n }\n position = effectiveMoveMode === 'inside'\n ? clampToRect(position, bounds)\n : this.constrainPortToHostBorder(position, element);\n }\n\n const style = port.style as\n | { moveBounds?: { x: number; y: number; width: number; height: number }; moveAxis?: 'horizontal' | 'vertical' }\n | undefined;\n if (style?.moveAxis === 'horizontal') {\n position.y = port.position.y;\n } else if (style?.moveAxis === 'vertical') {\n position.x = port.position.x;\n }\n if (style?.moveBounds) {\n const bounds = style.moveBounds;\n position.x = clamp(position.x, bounds.x, bounds.x + bounds.width);\n position.y = clamp(position.y, bounds.y, bounds.y + bounds.height);\n }\n\n if (effectiveMoveMode === 'anchors') {\n const anchor = this.resolveNearestPortAnchor(element, position);\n if (anchor) {\n return {\n position: { ...anchor.position },\n currentAnchorId: anchor.id,\n };\n }\n return { position, currentAnchorId: port.currentAnchorId ?? null };\n }\n\n return { position, currentAnchorId: null };\n }\n\n private resolveEffectivePortMoveMode(\n port: Pick<PortData, 'moveMode'>,\n element: Pick<ElementData, 'portMovement'>,\n ): MoveConstraint | 'anchors' | undefined {\n return element.portMovement?.moveMode ?? port.moveMode;\n }\n\n private resolvePortAnchorsForElement(\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n ): PortAnchor[] {\n const shape = this.shapeRegistry.get(element.shapeId);\n if (!shape?.resolvePortAnchors) return [];\n const rect: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n const explicitPreset = element.portMovement?.anchorConstraint?.preset;\n const presetOrder: HostAnchorPreset[] = [];\n if (explicitPreset) {\n presetOrder.push(explicitPreset);\n }\n ANCHOR_PRESET_FALLBACK_ORDER.forEach((preset) => {\n if (!presetOrder.includes(preset)) {\n presetOrder.push(preset);\n }\n });\n for (const preset of presetOrder) {\n const anchors = shape.resolvePortAnchors(rect, { preset });\n if (anchors.length > 0) return anchors;\n }\n return [];\n }\n\n private resolveNearestPortAnchor(\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n target: Point,\n preferredAnchorId?: string,\n ): PortAnchor | null {\n const anchors = this.resolvePortAnchorsForElement(element);\n if (anchors.length === 0) return null;\n if (preferredAnchorId) {\n const preferred = anchors.find((anchor) => anchor.id === preferredAnchorId);\n if (preferred) return preferred;\n }\n return this.findNearestPortAnchor(target, anchors);\n }\n\n private findNearestPortAnchor(target: Point, anchors: PortAnchor[]): PortAnchor {\n return anchors.reduce((best, current) => {\n const bestDistance = (best.position.x - target.x) ** 2 + (best.position.y - target.y) ** 2;\n const currentDistance = (current.position.x - target.x) ** 2 + (current.position.y - target.y) ** 2;\n return currentDistance < bestDistance ? current : best;\n }, anchors[0]);\n }\n\n private resolveAnchoredPortResizeProjection(\n port: Pick<PortData, 'position' | 'currentAnchorId'>,\n host: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n resize: { previousSize?: { width: number; height: number }; size: { width: number; height: number } },\n currentSize: { width: number; height: number },\n ): { position: Point; currentAnchorId: string | null } {\n const nextSize = {\n width: Math.max(0, currentSize.width),\n height: Math.max(0, currentSize.height),\n };\n const nextHost: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'> = {\n shapeId: host.shapeId,\n size: nextSize,\n portMovement: host.portMovement,\n };\n const preferred = this.resolveNearestPortAnchor(nextHost, port.position, port.currentAnchorId);\n if (preferred && preferred.id === port.currentAnchorId) {\n return { position: { ...preferred.position }, currentAnchorId: preferred.id };\n }\n\n const previousSize = resize.previousSize\n ? {\n width: Math.max(0, resize.previousSize.width),\n height: Math.max(0, resize.previousSize.height),\n }\n : undefined;\n let projectedTarget = { ...port.position };\n if (previousSize && (previousSize.width > POSITION_EPSILON || previousSize.height > POSITION_EPSILON)) {\n const previousCenter = { x: previousSize.width / 2, y: previousSize.height / 2 };\n const nextCenter = { x: nextSize.width / 2, y: nextSize.height / 2 };\n const previousHalfWidth = previousSize.width / 2;\n const previousHalfHeight = previousSize.height / 2;\n const nextHalfWidth = nextSize.width / 2;\n const nextHalfHeight = nextSize.height / 2;\n const normalizedX =\n previousHalfWidth > POSITION_EPSILON ? (port.position.x - previousCenter.x) / previousHalfWidth : 0;\n const normalizedY =\n previousHalfHeight > POSITION_EPSILON ? (port.position.y - previousCenter.y) / previousHalfHeight : 0;\n projectedTarget = {\n x: nextCenter.x + normalizedX * nextHalfWidth,\n y: nextCenter.y + normalizedY * nextHalfHeight,\n };\n }\n\n const fallback = this.resolveNearestPortAnchor(nextHost, projectedTarget);\n if (!fallback) {\n return { position: { ...port.position }, currentAnchorId: port.currentAnchorId ?? null };\n }\n return {\n position: { ...fallback.position },\n currentAnchorId: fallback.id,\n };\n }\n\n private resolveTextPresentation(text: TextData): {\n size: { width: number; height: number };\n displayContent: string;\n displayOffset?: Point;\n displayClipSize?: { width: number; height: number };\n } {\n return this.textLayoutService.resolveTextPresentation(text);\n }\n\n private emitSelection(): void {\n const selectedIds = this.selection.get();\n this.events.emit('selection', { selectedIds });\n selectedIds.forEach((id) => {\n const element = this.model.getElement(id);\n if (element) {\n this.events.emit('elementSelected', { elementId: id });\n return;\n }\n const port = this.model.getPort(id);\n if (port) {\n this.events.emit('portSelected', { portId: id, elementId: port.elementId });\n return;\n }\n const text = this.model.getText(id);\n if (text) {\n this.events.emit('textSelected', { textId: id });\n }\n });\n this.renderer.renderSelection(selectedIds);\n }\n\n private applyLayoutForParent(parentId: string): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyLayoutForParent(parentId);\n }\n\n private applyLayoutCascade(startParentId: string | null): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyLayoutCascade(startParentId);\n }\n\n private applyAllLayouts(): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyAllLayouts();\n }\n\n private updateLinksForPorts(portIds: string[]): DiagramPatch[] {\n return this.linkRoutingService.updateLinksForPorts(portIds);\n }\n\n private collectElementPortIds(elementId: string): string[] {\n const childrenByParent = new Map<string, string[]>();\n this.model.elements.forEach((element) => {\n if (!element.parentId) return;\n const list = childrenByParent.get(element.parentId) ?? [];\n list.push(element.id);\n childrenByParent.set(element.parentId, list);\n });\n\n const portIds: string[] = [];\n const stack = [elementId];\n while (stack.length > 0) {\n const currentId = stack.pop();\n if (!currentId) continue;\n const element = this.model.getElement(currentId);\n if (element) {\n portIds.push(...element.portIds);\n }\n const children = childrenByParent.get(currentId);\n if (children) {\n children.forEach((childId) => stack.push(childId));\n }\n }\n return portIds;\n }\n\n private computeAutoRoute(link: LinkData, source: Point, target: Point): Point[] {\n return this.linkRoutingService.computeAutoRoute(link, source, target);\n }\n\n private constrainPortToHostBorder(\n position: Point,\n element: { shapeId: string; size: { width: number; height: number } },\n ): Point {\n return this.projectPointToHostBorder(position, element.shapeId, element.size);\n }\n\n private projectPointToHostBorder(\n position: Point,\n shapeId: string,\n size: { width: number; height: number },\n ): Point {\n const rect: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, size.width),\n height: Math.max(0, size.height),\n };\n const shape = this.shapeRegistry.get(shapeId);\n if (shape?.projectToBorder) {\n return shape.projectToBorder(position, rect);\n }\n return projectPointToBoundary(position, rect, 'rect');\n }\n\n private routeLinksWithEmptyPoints(): DiagramPatch[] {\n return this.linkRoutingService.routeLinksWithEmptyPoints();\n }\n\n private computeRemovalDiff(before: DiagramState): {\n patches: DiagramPatch[];\n removed: { ports: PortData[]; links: LinkData[]; texts: TextData[] };\n } {\n const after = this.model.toState();\n const removedPatches: DiagramPatch[] = [];\n const beforeElements = new Set(before.elements.map((element) => element.id));\n const beforePorts = new Set(before.ports.map((port) => port.id));\n const beforeLinks = new Set(before.links.map((link) => link.id));\n const beforeTexts = new Set(before.texts.map((text) => text.id));\n\n const afterElements = new Set(after.elements.map((element) => element.id));\n const afterPorts = new Set(after.ports.map((port) => port.id));\n const afterLinks = new Set(after.links.map((link) => link.id));\n const afterTexts = new Set(after.texts.map((text) => text.id));\n\n beforeElements.forEach((id) => {\n if (!afterElements.has(id)) removedPatches.push(patchRemove('element', id));\n });\n const removedPorts: PortData[] = [];\n beforePorts.forEach((id) => {\n if (!afterPorts.has(id)) {\n removedPatches.push(patchRemove('port', id));\n const removedPort = before.ports.find((port) => port.id === id);\n if (removedPort) removedPorts.push(removedPort);\n }\n });\n const removedLinks: LinkData[] = [];\n beforeLinks.forEach((id) => {\n if (!afterLinks.has(id)) {\n removedPatches.push(patchRemove('link', id));\n const removedLink = before.links.find((link) => link.id === id);\n if (removedLink) removedLinks.push(removedLink);\n }\n });\n const removedTexts: TextData[] = [];\n beforeTexts.forEach((id) => {\n if (!afterTexts.has(id)) {\n removedPatches.push(patchRemove('text', id));\n const removedText = before.texts.find((text) => text.id === id);\n if (removedText) removedTexts.push(removedText);\n }\n });\n\n return {\n patches: removedPatches,\n removed: { ports: removedPorts, links: removedLinks, texts: removedTexts },\n };\n }\n\n private emitEntityDeletionEvents(removed: { ports: PortData[]; links: LinkData[]; texts: TextData[] }): void {\n removed.ports.forEach((port) => {\n this.events.emit('portDeleted', { portId: port.id, elementId: port.elementId });\n });\n removed.links.forEach((link) => {\n this.events.emit('linkDeleted', {\n linkId: link.id,\n sourcePortId: link.sourcePortId,\n targetPortId: link.targetPortId,\n });\n });\n removed.texts.forEach((text) => {\n this.events.emit('textDeleted', { textId: text.id, ownerId: text.ownerId });\n });\n }\n}\n\nexport const createDiagramEngine = (config: DiagramEngineConfig): DiagramEngineHandle => {\n const engine = new DiagramEngine(config);\n return {\n load: (state) => engine.load(state),\n getState: () => engine.getState(),\n getViewport: () => engine.getViewport(),\n clientToWorld: (clientPoint, container) => engine.clientToWorld(clientPoint, container),\n createOverlayShape: (config) => engine.createOverlayShape(config),\n on: (event, handler) => engine.on(event, handler),\n addElement: (element) => engine.addElement(element),\n moveElementTo: (id, x, y) => engine.moveElementTo(id, x, y),\n resizeElement: (id, width, height) => engine.resizeElement(id, width, height),\n setElementLayout: (id, layout) => engine.setElementLayout(id, layout),\n removeElement: (id) => engine.removeElement(id),\n addPortToElement: (elementId, port) => engine.addPortToElement(elementId, port),\n movePortTo: (id, x, y) => engine.movePortTo(id, x, y),\n removePort: (id) => engine.removePort(id),\n addLink: (link) => engine.addLink(link),\n updateLinkPoints: (id, points) => engine.updateLinkPoints(id, points),\n setLinkRoutingMode: (id, mode) => engine.setLinkRoutingMode(id, mode as LinkRoutingMode),\n rerouteAllLinks: () => engine.rerouteAllLinks(),\n rerouteLinks: (linkIds, options) => engine.rerouteLinks(linkIds, options),\n removeLink: (id) => engine.removeLink(id),\n addText: (text) => engine.addText(text),\n updateText: (id, content) => engine.updateText(id, content),\n moveTextTo: (id, x, y) => engine.moveTextTo(id, x, y),\n removeText: (id) => engine.removeText(id),\n setSelection: (ids) => engine.setSelection(ids),\n setViewport: (pan, zoom) => engine.setViewport(pan, zoom),\n setRouting: (router) => engine.setRouting(router as RouterStrategy),\n setSnapping: (snapper) => engine.setSnapping(snapper as SnapStrategy),\n registerShape: (shape) => engine.registerShape(shape as ShapeDefinition),\n render: () => engine.render(),\n };\n};\n","export type KonvaLayerLike = {\r\n name?: string;\r\n draw: () => void;\r\n destroy?: () => void;\r\n add?: (node: unknown) => void;\r\n};\r\n\r\nexport default class KonvaLayers {\r\n private layers = new Map<string, KonvaLayerLike>();\r\n private dirty = new Set<string>();\r\n\r\n addLayer(name: string, layer: KonvaLayerLike): void {\r\n this.layers.set(name, layer);\r\n }\r\n\r\n getLayer(name: string): KonvaLayerLike | undefined {\r\n return this.layers.get(name);\r\n }\r\n\r\n markDirty(name: string): void {\r\n if (this.layers.has(name)) {\r\n this.dirty.add(name);\r\n }\r\n }\r\n\r\n markAllDirty(): void {\r\n Array.from(this.layers.keys()).forEach((name) => this.dirty.add(name));\r\n }\r\n\r\n drawDirty(): void {\r\n const names = Array.from(this.dirty.values());\r\n names.forEach((name) => {\r\n const layer = this.layers.get(name);\r\n if (layer) {\r\n layer.draw();\r\n }\r\n });\r\n this.dirty.clear();\r\n }\r\n\r\n destroy(): void {\r\n Array.from(this.layers.values()).forEach((layer) => layer.destroy?.());\r\n this.layers.clear();\r\n this.dirty.clear();\r\n }\r\n}\r\n","import { ElementData, LinkData, Point, PortData, TextData } from '../../api/types';\nimport { ShapeDefinition, ShapeNodeSizeUpdater, ShapeRegistry } from '../RenderTypes';\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\n\r\nexport type KonvaNodeLike = {\r\n id?: () => string;\r\n setAttrs?: (attrs: Record<string, unknown>) => void;\r\n destroy?: () => void;\r\n position?: (pos: { x: number; y: number }) => void;\r\n x?: (value?: number) => number;\r\n y?: (value?: number) => number;\r\n getAttr?: (key: string) => unknown;\r\n getClientRect?: (config?: Record<string, unknown>) => { width: number; height: number };\r\n attrs?: Record<string, unknown>;\r\n moveToTop?: () => void;\r\n zIndex?: (value?: number) => number;\r\n};\r\n\r\nexport type KonvaLike = {\r\n Group: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Rect: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Circle: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Line: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Path: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Text: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n Shape: new (config?: Record<string, unknown>) => KonvaNodeLike;\r\n};\r\n\r\nlet cachedKonva: KonvaLike | null = null;\r\n\r\nconst getKonva = (): KonvaLike => {\r\n if (cachedKonva) return cachedKonva;\r\n // Lazy-load Konva to avoid Jest ESM import issues in tests.\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const module = require('konva') as KonvaLike | { default?: KonvaLike };\r\n const resolved = (module as { default?: KonvaLike }).default ?? module;\r\n cachedKonva = resolved as KonvaLike;\r\n return cachedKonva;\r\n};\r\n\r\nexport default class KonvaNodeFactory {\r\n private registry: ShapeRegistry;\r\n private konva: KonvaLike;\r\n\r\n constructor(registry: ShapeRegistry, konva: KonvaLike = getKonva()) {\r\n this.registry = registry;\r\n this.konva = konva;\r\n }\r\n\r\n createElementNode(model: ElementData): KonvaNodeLike {\n const shape = this.registry.get(model.shapeId);\n if (shape?.createNode) {\n const node = shape.createNode(model) as KonvaNodeLike;\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.svgPath) {\n const node = this.createSvgPathNode(model, shape, { name: 'element', size: model.size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.draw) {\n const node = this.createDrawNode(model, shape, { name: 'element', size: model.size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n const node = new this.konva.Group({\r\n x: model.position.x,\r\n y: model.position.y,\r\n id: model.id,\r\n name: 'element',\r\n });\r\n return node;\r\n }\r\n\r\n createPortNode(model: PortData): KonvaNodeLike {\n if (model.shapeId) {\n const shape = this.registry.get(model.shapeId);\n if (shape?.createNode) {\n const node = shape.createNode(model) as KonvaNodeLike;\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.svgPath) {\n const size = model.size ?? { width: 8, height: 8 };\n const node = this.createSvgPathNode(model, shape, { name: 'port', size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.draw) {\n const size = model.size ?? { width: 8, height: 8 };\n const node = this.createDrawNode(model, shape, { name: 'port', size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n }\n const node = new this.konva.Circle({\r\n x: model.position.x,\r\n y: model.position.y,\r\n id: model.id,\r\n radius: 4,\r\n name: 'port',\r\n });\r\n return node;\r\n }\r\n\r\n createLinkNode(model: LinkData): KonvaNodeLike {\r\n const flatPoints: number[] = [];\r\n model.points.forEach((point) => {\r\n flatPoints.push(point.x, point.y);\r\n });\r\n const style = model.style as Record<string, unknown> | undefined;\r\n const strokeWidth = (style?.strokeWidth as number | undefined) ?? 2;\r\n const hitStrokeWidth = (style?.hitStrokeWidth as number | undefined) ?? 15;\r\n const stroke = (style?.stroke as string | undefined) ?? 'black';\r\n const node = new this.konva.Line({\r\n points: flatPoints,\r\n id: model.id,\r\n stroke,\r\n strokeWidth,\r\n hitStrokeWidth,\r\n name: 'link',\r\n ...(style ?? {}),\r\n });\r\n if (node.setAttrs) {\r\n node.setAttrs({ __baseStroke: stroke, __baseStrokeWidth: strokeWidth });\r\n }\r\n return node;\r\n }\r\n\r\n createTextNode(model: TextData): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const defaults = resolveTextStyleDefaults(style);\n const baseFill = (style?.fill as string | undefined) ?? 'black';\n const displayOffset = model.displayOffset ?? { x: 0, y: 0 };\n const clip = model.displayClipSize;\n const node = new this.konva.Text({\n x: model.position.x + displayOffset.x,\n y: model.position.y + displayOffset.y,\n text: model.displayContent ?? model.content,\n id: model.id,\n name: 'text',\n fontSize: defaults.fontSize,\n fontFamily: defaults.fontFamily,\n lineHeight: defaults.lineHeight,\n ...(style ?? {}),\n width: clip?.width,\n height: clip?.height,\n wrap: clip ? 'none' : undefined,\n ellipsis: false,\n // Keep metadata for tests/debugging; Konva clip attrs do not apply on Text nodes.\n clipX: clip ? 0 : undefined,\n clipY: clip ? 0 : undefined,\n clipWidth: clip?.width,\n clipHeight: clip?.height,\n });\n if (node.setAttrs) {\r\n node.setAttrs({ __baseFill: baseFill });\r\n }\r\n return node;\r\n }\r\n\r\n createHandleNode(config: { id: string; x: number; y: number; size: number; name: string }): KonvaNodeLike {\r\n return new this.konva.Rect({\r\n id: config.id,\r\n x: config.x,\r\n y: config.y,\r\n width: config.size,\r\n height: config.size,\r\n fill: '#ffffff',\r\n stroke: '#ff7a00',\r\n strokeWidth: 2,\r\n name: config.name,\r\n });\r\n }\r\n\r\n createHandleCircleNode(config: { id: string; x: number; y: number; radius: number; name: string }): KonvaNodeLike {\r\n return new this.konva.Circle({\r\n id: config.id,\r\n x: config.x,\r\n y: config.y,\r\n radius: config.radius,\r\n fill: '#ffffff',\r\n stroke: '#ff7a00',\r\n strokeWidth: 2,\r\n name: config.name,\r\n });\r\n }\r\n\r\n createTempLinkNode(config: { id: string; points: number[] }): KonvaNodeLike {\r\n return new this.konva.Line({\r\n id: config.id,\r\n points: config.points,\r\n stroke: '#999999',\r\n dash: [6, 4],\r\n strokeWidth: 2,\r\n name: 'temp-link',\r\n listening: false,\r\n });\r\n }\r\n\r\n createMarqueeNode(config: { id: string; x: number; y: number; width: number; height: number }): KonvaNodeLike {\n return new this.konva.Rect({\n id: config.id,\n x: config.x,\r\n y: config.y,\r\n width: config.width,\r\n height: config.height,\r\n fill: 'rgba(66, 133, 244, 0.12)',\r\n stroke: '#4285f4',\r\n strokeWidth: 1,\r\n dash: [4, 4],\r\n name: 'marquee',\r\n listening: false,\n });\n }\n\n createHoverControlEdgeLineNode(config: {\n id: string;\n start: Point;\n end: Point;\n style?: Record<string, unknown>;\n }): KonvaNodeLike {\n return new this.konva.Line({\n id: config.id,\n points: [config.start.x, config.start.y, config.end.x, config.end.y],\n stroke: '#ff7a00',\n strokeWidth: 3,\n name: 'shape-hover-edge',\n listening: false,\n ...(config.style ?? {}),\n });\n }\n\n createHoverControlIconNode(config: {\n id: string;\n position: Point;\n svgPath: string;\n size?: { width: number; height: number };\n style?: Record<string, unknown>;\n }): KonvaNodeLike {\n const targetSize = config.size ?? { width: 16, height: 16 };\n const node = new this.konva.Path({\n id: config.id,\n x: config.position.x,\n y: config.position.y,\n data: config.svgPath,\n name: 'shape-hover-control',\n fill: '#ffffff',\n stroke: '#ff7a00',\n strokeWidth: 2,\n ...(config.style ?? {}),\n });\n const rect = node.getClientRect ? node.getClientRect({ skipTransform: true }) : null;\n const baseWidth = rect?.width || targetSize.width || 1;\n const baseHeight = rect?.height || targetSize.height || 1;\n const scaleX = targetSize.width > 0 ? targetSize.width / baseWidth : 1;\n const scaleY = targetSize.height > 0 ? targetSize.height / baseHeight : 1;\n if (node.setAttrs) {\n node.setAttrs({\n offsetX: baseWidth / 2,\n offsetY: baseHeight / 2,\n scaleX,\n scaleY,\n __hoverIconBaseWidth: baseWidth,\n __hoverIconBaseHeight: baseHeight,\n });\n }\n return node;\n }\n\r\n private createDrawNode(\n model: ElementData | PortData,\n shape: ShapeDefinition,\n config: { name: string; size?: { width: number; height: number } },\n ): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const attrs: Record<string, unknown> = {\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n name: config.name,\n ...(style ?? {}),\n __shapeDraw: true,\n __model: model,\n sceneFunc: (ctx: CanvasRenderingContext2D, node: KonvaNodeLike) => {\n const resolvedModel =\n (node.getAttr ? node.getAttr('__model') : node.attrs?.__model) ?? model;\n shape.draw?.({ ctx, model: resolvedModel as ElementData | PortData });\r\n },\r\n };\r\n if (config.size?.width !== undefined) {\r\n attrs.width = config.size.width;\r\n }\r\n if (config.size?.height !== undefined) {\r\n attrs.height = config.size.height;\r\n }\r\n return new this.konva.Shape(attrs);\r\n }\r\n\r\n private createSvgPathNode(\n model: ElementData | PortData,\n shape: ShapeDefinition,\n config: { name: string; size?: { width: number; height: number } },\n ): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const sizeUpdater: ShapeNodeSizeUpdater = ({\n size: nextSize,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n }) => {\n const attrs: Record<string, unknown> = {};\n const baseWidth = getNodeAttr<number>('__pathBaseWidth') ?? nextSize.width;\n const baseHeight = getNodeAttr<number>('__pathBaseHeight') ?? nextSize.height;\n if (baseWidth) {\n attrs.scaleX = nextSize.width / baseWidth;\n }\n if (baseHeight) {\n attrs.scaleY = nextSize.height / baseHeight;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? baseWidth / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? baseHeight / 2 : 0;\n }\n return attrs;\n };\n\n const size = config.size ?? { width: 0, height: 0 };\n const node = new this.konva.Path({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n data: shape.svgPath,\n name: config.name,\n ...(style ?? {}),\n shapeKind: 'svg-path',\n __autoOffsetX: true,\n __autoOffsetY: true,\n });\n\r\n const rect = node.getClientRect ? node.getClientRect({ skipTransform: true }) : null;\r\n const baseWidth = shape.svgSize?.width ?? rect?.width ?? size.width;\r\n const baseHeight = shape.svgSize?.height ?? rect?.height ?? size.height;\r\n const scaleX = baseWidth === 0 ? 1 : size.width / baseWidth;\r\n const scaleY = baseHeight === 0 ? 1 : size.height / baseHeight;\r\n\r\n if (node.setAttrs) {\n node.setAttrs({\n scaleX,\n scaleY,\n __pathBaseWidth: baseWidth,\n __pathBaseHeight: baseHeight,\n __sizeUpdater: sizeUpdater,\n });\n }\n return node;\n }\n\n private applyShapeBehaviorAttrs(node: KonvaNodeLike, shape: ShapeDefinition): void {\n if (!node.setAttrs || !shape.sizeUpdater) return;\n node.setAttrs({\n __sizeUpdater: shape.sizeUpdater,\n });\n }\n}\n","import { ElementData, EllipseMidPoint, LinkData, OverlayShapeConfig, OverlayShapeHandle, Point, PortData } from '../../api/types';\nimport DiagramModel from '../../models/DiagramModel';\nimport ElementModel from '../../models/ElementModel';\nimport { ShapeNodeSizeUpdater, ShapeRegistry } from '../RenderTypes';\nimport { Renderer } from '../Renderer';\nimport KonvaLayers, { KonvaLayerLike } from './KonvaLayers';\nimport KonvaNodeFactory, { KonvaLike, KonvaNodeLike } from './KonvaNodeFactory';\nimport { borderSideToInwardRotation, resolveBoundarySide } from '../../utils/borderGeometry';\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\nimport { getRotatedRectCorners } from '../../utils/geometry';\n\r\nexport type KonvaStageLike = {\r\n add: (layer: KonvaLayerLike) => void;\r\n width?: (value?: number) => number;\r\n height?: (value?: number) => number;\r\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n};\r\n\r\nexport type KonvaRendererConfig = {\n stage?: KonvaStageLike;\r\n container?: HTMLDivElement | string;\r\n width?: number;\r\n height?: number;\r\n nodeFactory?: KonvaNodeFactory;\r\n konva?: KonvaLike & { Stage: new (config: Record<string, unknown>) => KonvaStageLike; Layer: new () => KonvaLayerLike };\r\n shapeRegistry?: ShapeRegistry;\n};\n\nexport type ShapeHoverControlRenderConfig = {\n controlId: string;\n targetKind: 'edge' | 'vertex' | 'midpoint' | 'ellipse-midpoint';\n targetIndex: number;\n targetRef?: string;\n elementId: string;\n targetId: string;\n icon: {\n svgPath: string;\n size?: { width: number; height: number };\n style?: Record<string, unknown>;\n };\n edge?: {\n start: Point;\n end: Point;\n midpoint: Point;\n lineStyle?: Record<string, unknown>;\n };\n vertex?: {\n position: Point;\n };\n ellipseMidPoint?: {\n id: EllipseMidPoint;\n position: Point;\n };\n};\n\r\nlet cachedKonva: KonvaRendererConfig['konva'] | null = null;\r\n\r\nconst getKonva = (): NonNullable<KonvaRendererConfig['konva']> => {\r\n if (cachedKonva) return cachedKonva as NonNullable<KonvaRendererConfig['konva']>;\r\n // Lazy-load Konva to avoid Jest ESM import issues in tests.\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const module = require('konva') as KonvaRendererConfig['konva'] | { default?: KonvaRendererConfig['konva'] };\r\n const resolved = (module as { default?: KonvaRendererConfig['konva'] }).default ?? module;\r\n cachedKonva = resolved as KonvaRendererConfig['konva'];\r\n return resolved as NonNullable<KonvaRendererConfig['konva']>;\r\n};\r\n\r\nexport default class KonvaRenderer implements Renderer {\r\n private stage: KonvaStageLike;\n private layers = new KonvaLayers();\n private nodeFactory: KonvaNodeFactory;\n private shapeRegistry: ShapeRegistry;\n private elementNodes = new Map<string, KonvaNodeLike>();\r\n private portNodes = new Map<string, KonvaNodeLike>();\r\n private linkNodes = new Map<string, KonvaNodeLike>();\r\n private textNodes = new Map<string, KonvaNodeLike>();\r\n private selectedIds = new Set<string>();\r\n private overlayLayer: KonvaLayerLike;\r\n private tempLinkNode: KonvaNodeLike | null = null;\r\n private tempPortNode: KonvaNodeLike | null = null;\r\n private tempPortShapeId: string | undefined;\r\n private marqueeNode: KonvaNodeLike | null = null;\r\n private resizeHandleNodes = new Map<string, KonvaNodeLike>();\r\n private linkHandleNodes = new Map<string, KonvaNodeLike>();\n private shapeHoverControlNodes: { edgeLine?: KonvaNodeLike; icon?: KonvaNodeLike } | null = null;\n private overlayShapes = new Map<string, { node: KonvaNodeLike; shapeId: string; config: OverlayShapeConfig }>();\n private overlayId = 0;\n\r\n constructor(config: KonvaRendererConfig = {}) {\n const konva = config.konva ?? getKonva();\n const registry = config.shapeRegistry ?? new ShapeRegistry();\n this.shapeRegistry = registry;\n this.nodeFactory = config.nodeFactory ?? new KonvaNodeFactory(registry, konva);\n\r\n if (config.stage) {\r\n this.stage = config.stage;\r\n } else {\r\n this.stage = new (konva as NonNullable<typeof konva>).Stage({\r\n container: config.container ?? undefined,\r\n width: config.width ?? 800,\r\n height: config.height ?? 600,\r\n });\r\n }\r\n\r\n const elementLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const linkLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const portLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const textLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const overlayLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n\r\n this.layers.addLayer('elements', elementLayer);\r\n this.layers.addLayer('links', linkLayer);\r\n this.layers.addLayer('ports', portLayer);\r\n this.layers.addLayer('texts', textLayer);\r\n this.layers.addLayer('overlays', overlayLayer);\r\n this.stage.add(elementLayer);\r\n this.stage.add(linkLayer);\r\n this.stage.add(portLayer);\r\n this.stage.add(textLayer);\r\n this.stage.add(overlayLayer);\r\n\r\n this.overlayLayer = overlayLayer;\r\n }\r\n\r\n render(model: DiagramModel): void {\r\n this.syncElements(model);\r\n this.syncPorts(model);\r\n this.syncLinks(model);\r\n this.syncTexts(model);\r\n this.layers.drawDirty();\r\n }\r\n\r\n renderSelection(ids: string[]): void {\r\n this.selectedIds = new Set(ids);\r\n this.elementNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : '#1f4d99',\r\n strokeWidth: isSelected ? 3 : 2,\r\n });\r\n });\r\n this.portNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : '#1f4d99',\r\n strokeWidth: isSelected ? 3 : 2,\r\n });\r\n });\r\n this.linkNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n const baseStroke =\r\n this.getNodeAttr<string>(node, '__baseStroke') ??\r\n this.getNodeAttr<string>(node, 'stroke') ??\r\n 'black';\r\n const baseStrokeWidth =\r\n this.getNodeAttr<number>(node, '__baseStrokeWidth') ??\r\n this.getNodeAttr<number>(node, 'strokeWidth') ??\r\n 2;\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : baseStroke,\r\n strokeWidth: isSelected ? baseStrokeWidth + 1 : baseStrokeWidth,\r\n });\r\n });\r\n this.textNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n const baseFill =\r\n this.getNodeAttr<string>(node, '__baseFill') ??\r\n this.getNodeAttr<string>(node, 'fill') ??\r\n 'black';\r\n node.setAttrs({\r\n fill: isSelected ? '#ff7a00' : baseFill,\r\n __baseFill: baseFill,\r\n });\r\n });\r\n this.layers.markDirty('elements');\r\n this.layers.markDirty('ports');\r\n this.layers.markDirty('links');\r\n this.layers.markDirty('texts');\r\n }\r\n\r\n renderResizeHandles(\n elementId: string,\n position: Point,\n size: { width: number; height: number },\n options?: { rotation?: number; anchorCenter?: boolean },\n ): void {\n this.clearResizeHandles();\n const handleSize = 8;\n const half = handleSize / 2;\n const rotated = getRotatedRectCorners(\n position,\n size,\n options?.rotation ?? 0,\n options?.anchorCenter ?? false,\n );\n const corners: Array<[string, number, number]> = [\n ['nw', rotated.nw.x, rotated.nw.y],\n ['ne', rotated.ne.x, rotated.ne.y],\n ['sw', rotated.sw.x, rotated.sw.y],\n ['se', rotated.se.x, rotated.se.y],\n ];\n\r\n corners.forEach(([handle, x, y]) => {\r\n const node = this.nodeFactory.createHandleNode({\r\n id: `resize:${elementId}:${handle}`,\r\n x: x - half,\r\n y: y - half,\r\n size: handleSize,\r\n name: 'resize-handle',\r\n });\r\n this.resizeHandleNodes.set(`${elementId}:${handle}`, node);\r\n this.overlayLayer.add?.(node);\r\n });\r\n this.drawOverlays();\r\n }\r\n\r\n clearResizeHandles(): void {\r\n this.resizeHandleNodes.forEach((node) => node.destroy?.());\r\n this.resizeHandleNodes.clear();\r\n this.drawOverlays();\r\n }\r\n\r\n renderLinkHandles(linkId: string, points: Point[]): void {\r\n this.clearLinkHandles();\r\n const radius = 5;\r\n points.forEach((point, index) => {\r\n const node = this.nodeFactory.createHandleCircleNode({\r\n id: `link-handle:${linkId}:${index}`,\r\n x: point.x,\r\n y: point.y,\r\n radius,\r\n name: 'link-handle',\r\n });\r\n this.linkHandleNodes.set(`${linkId}:${index}`, node);\r\n this.overlayLayer.add?.(node);\r\n });\r\n this.drawOverlays();\r\n }\r\n\r\n clearLinkHandles(): void {\r\n this.linkHandleNodes.forEach((node) => node.destroy?.());\r\n this.linkHandleNodes.clear();\r\n this.drawOverlays();\r\n }\r\n\r\n renderTempLink(points: Point[]): void {\r\n const flatPoints: number[] = [];\r\n points.forEach((point) => flatPoints.push(point.x, point.y));\r\n if (!this.tempLinkNode) {\r\n this.tempLinkNode = this.nodeFactory.createTempLinkNode({\r\n id: 'temp-link',\r\n points: flatPoints,\r\n });\r\n this.overlayLayer.add?.(this.tempLinkNode);\r\n } else if (this.tempLinkNode.setAttrs) {\r\n this.tempLinkNode.setAttrs({ points: flatPoints });\r\n }\r\n this.drawOverlays();\r\n }\r\n\r\n renderPortPlaceholder(\n port: PortData,\n hostElement?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ): void {\n const shapeId = port.shapeId;\n if (!this.tempPortNode || this.tempPortShapeId !== shapeId) {\n this.tempPortNode?.destroy?.();\n const node = this.nodeFactory.createPortNode(port);\n if (node.setAttrs) {\n node.setAttrs({ listening: false, opacity: 0.6, name: 'port-placeholder' });\r\n }\r\n this.tempPortNode = node;\r\n this.tempPortShapeId = shapeId;\r\n this.overlayLayer.add?.(node);\r\n } else {\n this.updatePosition(this.tempPortNode, port.position);\n if (this.tempPortNode.setAttrs) {\n this.tempPortNode.setAttrs({ opacity: 0.6 });\n }\n }\n if (this.tempPortNode) {\n this.applyPortOrientation(this.tempPortNode, port, port.position, undefined, hostElement);\n }\n this.drawOverlays();\n }\n\r\n clearPortPlaceholder(): void {\r\n this.tempPortNode?.destroy?.();\r\n this.tempPortNode = null;\r\n this.tempPortShapeId = undefined;\r\n this.drawOverlays();\r\n }\r\n\r\n clearTempLink(): void {\r\n this.tempLinkNode?.destroy?.();\r\n this.tempLinkNode = null;\r\n this.drawOverlays();\r\n }\r\n\r\n renderMarquee(rect: { x: number; y: number; width: number; height: number }): void {\r\n if (!this.marqueeNode) {\r\n this.marqueeNode = this.nodeFactory.createMarqueeNode({\r\n id: 'marquee',\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n });\r\n this.overlayLayer.add?.(this.marqueeNode);\r\n } else if (this.marqueeNode.setAttrs) {\r\n this.marqueeNode.setAttrs(rect);\r\n }\r\n this.drawOverlays();\r\n }\r\n\r\n clearMarquee(): void {\n this.marqueeNode?.destroy?.();\n this.marqueeNode = null;\n this.drawOverlays();\n }\n\n renderShapeHoverControl(config: ShapeHoverControlRenderConfig): void {\n this.clearShapeHoverControl(false);\n let edgeLine: KonvaNodeLike | undefined;\n if (config.targetKind === 'edge' && config.edge) {\n edgeLine = this.nodeFactory.createHoverControlEdgeLineNode({\n id: `shape-hover-edge:${config.elementId}:${config.targetId}`,\n start: config.edge.start,\n end: config.edge.end,\n style: config.edge.lineStyle,\n });\n this.overlayLayer.add?.(edgeLine);\n }\n const iconPosition =\n config.targetKind === 'edge' || config.targetKind === 'midpoint'\n ? config.edge?.midpoint\n : config.targetKind === 'ellipse-midpoint'\n ? config.ellipseMidPoint?.position\n : config.vertex?.position;\n if (!iconPosition) {\n this.shapeHoverControlNodes = edgeLine ? { edgeLine } : null;\n this.drawOverlays();\n return;\n }\n const targetRef = config.targetRef ?? String(config.targetIndex);\n const icon = this.nodeFactory.createHoverControlIconNode({\n id: `shape-hover-control:${config.elementId}:${config.controlId}:${config.targetKind}:${targetRef}`,\n position: iconPosition,\n svgPath: config.icon.svgPath,\n size: config.icon.size,\n style: config.icon.style,\n });\n this.overlayLayer.add?.(icon);\n this.shapeHoverControlNodes = { edgeLine, icon };\n this.drawOverlays();\n }\n\n clearShapeHoverControl(draw = true): void {\n if (!this.shapeHoverControlNodes) return;\n this.shapeHoverControlNodes.edgeLine?.destroy?.();\n this.shapeHoverControlNodes.icon?.destroy?.();\n this.shapeHoverControlNodes = null;\n if (draw) {\n this.drawOverlays();\n }\n }\n\r\n createOverlayShape(config: OverlayShapeConfig): OverlayShapeHandle {\r\n const id = `overlay-${this.overlayId++}`;\r\n const record = this.createOverlayRecord(id, config);\r\n this.overlayShapes.set(id, record);\r\n this.drawOverlays();\r\n\r\n return {\r\n update: (next) => {\r\n this.updateOverlayRecord(id, next);\r\n },\r\n destroy: () => {\r\n this.destroyOverlayRecord(id);\r\n },\r\n };\r\n }\r\n\r\n destroy(): void {\r\n this.layers.destroy();\r\n this.elementNodes.clear();\r\n this.portNodes.clear();\r\n this.linkNodes.clear();\r\n this.textNodes.clear();\r\n this.resizeHandleNodes.clear();\r\n this.linkHandleNodes.clear();\r\n this.tempLinkNode = null;\r\n this.tempPortNode?.destroy?.();\n this.tempPortNode = null;\n this.tempPortShapeId = undefined;\n this.marqueeNode = null;\n this.clearShapeHoverControl(false);\n this.overlayShapes.forEach((record) => record.node.destroy?.());\n this.overlayShapes.clear();\n }\n\r\n private drawOverlays(): void {\r\n this.layers.markDirty('overlays');\r\n this.layers.drawDirty();\r\n }\r\n\r\n private createOverlayRecord(\r\n id: string,\r\n config: OverlayShapeConfig,\r\n ): { node: KonvaNodeLike; shapeId: string; config: OverlayShapeConfig } {\r\n const model: ElementData = {\r\n id,\r\n position: { ...config.position },\r\n size: { ...config.size },\r\n shapeId: config.shapeId,\r\n style: config.style,\r\n anchorCenter: config.anchorCenter,\r\n };\r\n const node = this.nodeFactory.createElementNode(model);\r\n this.overlayLayer.add?.(node);\r\n this.applyOverlayConfig(node, model, config);\r\n return { node, shapeId: config.shapeId, config: { ...config } };\r\n }\r\n\r\n private updateOverlayRecord(id: string, config: OverlayShapeConfig): void {\r\n const record = this.overlayShapes.get(id);\r\n if (!record) return;\r\n const shouldRecreate = record.shapeId !== config.shapeId;\r\n if (shouldRecreate) {\r\n record.node.destroy?.();\r\n const nextRecord = this.createOverlayRecord(id, config);\r\n this.overlayShapes.set(id, nextRecord);\r\n this.drawOverlays();\r\n return;\r\n }\r\n\r\n const model: ElementData = {\r\n id,\r\n position: { ...config.position },\r\n size: { ...config.size },\r\n shapeId: config.shapeId,\r\n style: config.style,\r\n anchorCenter: config.anchorCenter,\r\n };\r\n this.applyOverlayConfig(record.node, model, config);\r\n record.config = { ...config };\r\n this.drawOverlays();\r\n }\r\n\r\n private destroyOverlayRecord(id: string): void {\r\n const record = this.overlayShapes.get(id);\r\n if (!record) return;\r\n record.node.destroy?.();\r\n this.overlayShapes.delete(id);\r\n this.drawOverlays();\r\n }\r\n\r\n private applyOverlayConfig(node: KonvaNodeLike, model: ElementData, config: OverlayShapeConfig): void {\r\n const anchorCenter = config.anchorCenter ?? false;\r\n const anchoredPosition = anchorCenter\r\n ? {\r\n x: model.position.x + model.size.width / 2,\r\n y: model.position.y + model.size.height / 2,\r\n }\r\n : model.position;\r\n this.updatePosition(node, anchoredPosition);\r\n this.updateSize(node, model.size, { anchorCenter });\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: model });\r\n }\r\n if (node.setAttrs) {\r\n node.setAttrs({\r\n ...(config.style ?? {}),\r\n listening: false,\r\n name: 'overlay-shape',\r\n });\r\n }\r\n }\r\n\r\n private syncElements(model: DiagramModel): void {\r\n const elements = Array.from(model.elements.values()).map((element, index) => ({\r\n element,\r\n depth: this.getElementDepth(model, element),\r\n order: index,\r\n }));\r\n elements\r\n .sort((a, b) => a.depth - b.depth || a.order - b.order)\r\n .forEach(({ element, depth }) => {\r\n const data = element.toData();\r\n let node = this.elementNodes.get(element.id);\r\n if (!node) {\r\n node = this.nodeFactory.createElementNode(data);\r\n this.elementNodes.set(element.id, node);\r\n this.layers.getLayer('elements')?.add?.(node);\r\n }\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: data });\r\n }\r\n const position = model.getElementWorldPosition(element.id) ?? element.position;\r\n const anchoredPosition = element.anchorCenter\r\n ? {\r\n x: position.x + element.size.width / 2,\r\n y: position.y + element.size.height / 2,\r\n }\r\n : position;\r\n this.updatePosition(node, anchoredPosition);\r\n this.updateSize(node, element.size, { anchorCenter: element.anchorCenter ?? false });\r\n if (node.setAttrs) {\r\n node.setAttrs({ __depth: depth });\r\n }\r\n });\r\n\r\n elements.forEach(({ element }) => {\r\n const node = this.elementNodes.get(element.id);\r\n node?.moveToTop?.();\r\n });\r\n\r\n Array.from(this.elementNodes.keys()).forEach((id) => {\r\n if (!model.elements.has(id)) {\r\n const node = this.elementNodes.get(id);\r\n node?.destroy?.();\r\n this.elementNodes.delete(id);\r\n this.layers.markDirty('elements');\r\n }\r\n });\r\n this.layers.markDirty('elements');\r\n }\r\n\r\n private getElementDepth(model: DiagramModel, element: ElementModel): number {\r\n let depth = 0;\r\n let current: ElementModel | undefined = element;\r\n while (current?.parentId) {\r\n const parent = model.getElement(current.parentId);\r\n if (!parent) break;\r\n depth += 1;\r\n current = parent;\r\n }\r\n return depth;\r\n }\r\n\r\n private syncPorts(model: DiagramModel): void {\n const ports = Array.from(model.ports.values());\n ports.forEach((port) => {\n const data = port.toData();\n let node = this.portNodes.get(port.id);\n if (!node) {\r\n node = this.nodeFactory.createPortNode(data);\r\n this.portNodes.set(port.id, node);\r\n this.layers.getLayer('ports')?.add?.(node);\r\n }\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: data });\r\n }\n const position = model.getPortWorldPosition(port.id) ?? port.position;\n this.updatePosition(node, position);\n this.applyPortOrientation(node, data, position, model);\n });\n\r\n Array.from(this.portNodes.keys()).forEach((id) => {\r\n if (!model.ports.has(id)) {\r\n const node = this.portNodes.get(id);\r\n node?.destroy?.();\r\n this.portNodes.delete(id);\r\n this.layers.markDirty('ports');\r\n }\r\n });\r\n this.layers.markDirty('ports');\r\n }\r\n\r\n private syncLinks(model: DiagramModel): void {\r\n const links = Array.from(model.links.values());\r\n links.forEach((link) => {\r\n let node = this.linkNodes.get(link.id);\r\n if (!node) {\r\n node = this.nodeFactory.createLinkNode(link.toData());\r\n this.linkNodes.set(link.id, node);\r\n this.layers.getLayer('links')?.add?.(node);\r\n }\r\n this.updateLine(node, link.toData());\r\n });\r\n\r\n Array.from(this.linkNodes.keys()).forEach((id) => {\r\n if (!model.links.has(id)) {\r\n const node = this.linkNodes.get(id);\r\n node?.destroy?.();\r\n this.linkNodes.delete(id);\r\n this.layers.markDirty('links');\r\n }\r\n });\r\n this.layers.markDirty('links');\r\n }\r\n\r\n private syncTexts(model: DiagramModel): void {\r\n const texts = Array.from(model.texts.values());\r\n texts.forEach((text) => {\r\n let node = this.textNodes.get(text.id);\r\n if (!node) {\n node = this.nodeFactory.createTextNode(text.toData());\n this.textNodes.set(text.id, node);\n this.layers.getLayer('texts')?.add?.(node);\n }\n const position = model.getTextWorldPosition(text.id) ?? text.position;\n const displayOffset = text.displayOffset ?? { x: 0, y: 0 };\n this.updatePosition(node, {\n x: position.x + displayOffset.x,\n y: position.y + displayOffset.y,\n });\n if (node.setAttrs) {\n const style = text.style as Record<string, unknown> | undefined;\n const defaults = resolveTextStyleDefaults(style);\n const baseFill =\n (style?.fill as string | undefined) ??\n this.getNodeAttr<string>(node, '__baseFill') ??\n this.getNodeAttr<string>(node, 'fill') ??\n 'black';\n const fill = this.selectedIds.has(text.id) ? '#ff7a00' : baseFill;\n const clip = text.displayClipSize;\n node.setAttrs({\n text: text.displayContent ?? text.content,\n fontSize: defaults.fontSize,\n fontFamily: defaults.fontFamily,\n lineHeight: defaults.lineHeight,\n ...(style ?? {}),\n width: clip?.width,\n height: clip?.height,\n wrap: clip ? 'none' : undefined,\n ellipsis: false,\n fill,\n __baseFill: baseFill,\n // Keep metadata for tests/debugging; Konva clip attrs do not apply on Text nodes.\n clipX: clip ? 0 : undefined,\n clipY: clip ? 0 : undefined,\n clipWidth: clip?.width,\n clipHeight: clip?.height,\n });\n }\n });\n\r\n Array.from(this.textNodes.keys()).forEach((id) => {\r\n if (!model.texts.has(id)) {\r\n const node = this.textNodes.get(id);\r\n node?.destroy?.();\r\n this.textNodes.delete(id);\r\n this.layers.markDirty('texts');\r\n }\r\n });\r\n this.layers.markDirty('texts');\r\n }\r\n\r\n private updatePosition(node: KonvaNodeLike, position: Point): void {\n if (node.position) {\r\n node.position({ x: position.x, y: position.y });\r\n return;\r\n }\r\n if (node.setAttrs) {\r\n node.setAttrs({ x: position.x, y: position.y });\r\n }\r\n }\n\n private applyPortOrientation(\n node: KonvaNodeLike,\n port: PortData,\n worldPosition: Point,\n model?: DiagramModel,\n hostElementOverride?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ): void {\n if (!node.setAttrs) return;\n const baseRotation =\n this.getNodeAttr<number>(node, '__baseRotation') ??\n this.getNodeAttr<number>(node, 'rotation') ??\n 0;\n if (this.getNodeAttr<number>(node, '__baseRotation') === undefined) {\n node.setAttrs({ __baseRotation: baseRotation });\n }\n\n const orientedRotation = this.resolvePortBorderRotation(port, worldPosition, model, hostElementOverride);\n node.setAttrs({ rotation: baseRotation + (orientedRotation ?? 0) });\n }\n\n private resolvePortBorderRotation(\n port: PortData,\n worldPosition: Point,\n model?: DiagramModel,\n hostElementOverride?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ): number | null {\n if (port.moveMode !== 'border' || port.orientToHostBorder === false) {\n return null;\n }\n const host = hostElementOverride ?? this.resolveHostElement(port.elementId, model);\n if (!host) return null;\n\n const hostRect = {\n x: host.position.x,\n y: host.position.y,\n width: host.size.width,\n height: host.size.height,\n };\n const shape = this.shapeRegistry.get(host.shapeId);\n const side = shape?.resolveBorderSide\n ? shape.resolveBorderSide(worldPosition, hostRect)\n : resolveBoundarySide(worldPosition, hostRect, 'rect');\n return borderSideToInwardRotation(side);\n }\n\n private resolveHostElement(\n elementId: string,\n model?: DiagramModel,\n ): { id: string; position: Point; size: { width: number; height: number }; shapeId: string } | null {\n if (!model) return null;\n const element = model.getElement(elementId);\n if (!element) return null;\n return {\n id: element.id,\n position: model.getElementWorldPosition(elementId) ?? element.position,\n size: element.size,\n shapeId: element.shapeId,\n };\n }\n\r\n private getNodeAttr<T>(node: KonvaNodeLike, key: string): T | undefined {\r\n if (node.getAttr) return node.getAttr(key) as T;\r\n if (node.attrs && Object.prototype.hasOwnProperty.call(node.attrs, key)) {\r\n return node.attrs[key] as T;\r\n }\r\n return undefined;\r\n }\r\n\r\n private updateSize(\n node: KonvaNodeLike,\n size: { width: number; height: number },\n options?: { anchorCenter?: boolean },\n ): void {\n if (!node.setAttrs) return;\n const attrs: Record<string, unknown> = { width: size.width, height: size.height };\n const anchorCenter = options?.anchorCenter ?? false;\n const autoOffsetX = this.getNodeAttr<boolean>(node, '__autoOffsetX');\n const autoOffsetY = this.getNodeAttr<boolean>(node, '__autoOffsetY');\n const updateOffsetX = autoOffsetX !== false;\n const updateOffsetY = autoOffsetY !== false;\n\n const sizeUpdater = this.getNodeAttr<ShapeNodeSizeUpdater>(node, '__sizeUpdater');\n if (sizeUpdater) {\n Object.assign(\n attrs,\n sizeUpdater({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr: <T = unknown>(key: string) => this.getNodeAttr<T>(node, key),\n }),\n );\n }\n\n node.setAttrs(attrs);\n }\n\r\n private updateLine(node: KonvaNodeLike, link: LinkData): void {\r\n if (!node.setAttrs) return;\r\n const flatPoints: number[] = [];\r\n link.points.forEach((point) => {\r\n flatPoints.push(point.x, point.y);\r\n });\r\n node.setAttrs({ points: flatPoints });\r\n }\r\n}\r\n","import { Point } from '../../api/types';\r\n\r\nexport type HitResult = {\n id: string;\n type: 'element' | 'port' | 'link' | 'text' | 'resize-handle' | 'link-handle' | 'shape-hover-control' | 'none';\n depth?: number;\n};\n\r\nexport type HitTestResolver = (point: Point) => HitResult | null;\r\n\r\nexport default class KonvaHitTester {\r\n private resolver?: HitTestResolver;\r\n\r\n constructor(resolver?: HitTestResolver) {\r\n this.resolver = resolver;\r\n }\r\n\r\n hitTest(point: Point): HitResult | null {\r\n if (!this.resolver) return null;\r\n return this.resolver(point);\r\n }\r\n}\r\n","const fallbackId = (): string =>\r\n `id-${Math.random().toString(36).slice(2, 10)}-${Date.now().toString(36)}`;\r\n\r\nexport const createId = (): string => {\r\n const cryptoApi = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\r\n if (cryptoApi?.randomUUID) {\r\n return cryptoApi.randomUUID();\r\n }\r\n return fallbackId();\r\n};\r\n","import {\n EllipseMidPoint,\n ElementShapeHoverControlActivationEvent,\n ElementShapeHoverControlInteractionEvent,\n ElementShapeHoverControls,\n ElementShapeControlDragEvent,\n EnginePointerInfo,\n LinkData,\n Point,\n PortData,\n ShapeControlDefinition,\n ShapeControlTargetKind,\n ShapeControlVisibilityTrigger,\n ShapeEdgeTarget,\n ShapeEllipseMidPointTarget,\n ShapeHoverGeometry,\n ShapeVertexTarget,\n} from '../../api/types';\nimport DiagramEngine from '../../engine/DiagramEngine';\nimport KonvaHitTester, { HitResult } from './KonvaHitTester';\nimport { KonvaStageLike, ShapeHoverControlRenderConfig } from './KonvaRenderer';\nimport { createId } from '../../utils/ids';\nimport { ShapeRegistry } from '../RenderTypes';\nimport {\n getRotatedRectCorners,\n pointInRotatedRect,\n polygonIntersectsRect,\n rectContainsPoint,\n rectsIntersect,\n resolveRectRotationPivot,\n rotatePoint,\n} from '../../utils/geometry';\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\n\r\nexport type InteractionConfig = {\n stage?: KonvaStageLike;\n hitTester?: KonvaHitTester;\n panKey?: PanKey;\n shapeRegistry?: ShapeRegistry;\n shapeHoverControls?: ElementShapeHoverControls;\n onShapeHoverControlInteracted?: (event: ElementShapeHoverControlInteractionEvent) => void;\n onShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n renderer?: {\n renderResizeHandles: (\n elementId: string,\n position: Point,\n size: { width: number; height: number },\n options?: { rotation?: number; anchorCenter?: boolean },\n ) => void;\n clearResizeHandles: () => void;\r\n renderLinkHandles: (linkId: string, points: Point[]) => void;\n clearLinkHandles: () => void;\n renderTempLink: (points: Point[]) => void;\n clearTempLink: () => void;\n renderPortPlaceholder?: (\n port: PortData,\n hostElement?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ) => void;\n clearPortPlaceholder?: () => void;\n renderMarquee: (rect: { x: number; y: number; width: number; height: number }) => void;\n clearMarquee: () => void;\n renderShapeHoverControl?: (config: ShapeHoverControlRenderConfig) => void;\n clearShapeHoverControl?: () => void;\n };\n};\n\r\nexport type PanKey = 'Control' | 'Shift' | 'Alt' | 'Meta';\n\ntype NormalizedShapeControlDefinition = ShapeControlDefinition & {\n visibilityTriggers: ShapeControlVisibilityTrigger[];\n targetIndices?: number[];\n ellipseMidPoints?: EllipseMidPoint[];\n tolerance: number;\n};\ntype NormalizedShapeHoverControls = {\n controls: NormalizedShapeControlDefinition[];\n};\n\ntype ResolvedShapeHoverControl = {\n control: NormalizedShapeControlDefinition;\n controlId: string;\n elementId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget;\n};\n\ntype ShapeControlDragState = {\n mode: 'shape-control-drag';\n control: ResolvedShapeHoverControl;\n sessionId: string;\n start: Point;\n startPointer: EnginePointerInfo;\n hasMoved: boolean;\n};\n\ntype DragState =\n | {\n mode: 'move';\r\n type: 'element';\r\n id: string;\r\n offset: Point;\r\n start: Point;\r\n anchor: 'top-left' | 'center';\r\n startParentId: string | null;\r\n selectionIds: string[];\r\n isMulti: boolean;\r\n hasMoved: boolean;\r\n }\r\n | { mode: 'move'; type: 'port' | 'text'; id: string; offset: Point }\r\n | {\r\n mode: 'link-drag';\r\n sourcePortId: string;\r\n sourceElementId: string;\r\n start: Point;\r\n current: Point;\r\n isMulti: boolean;\r\n hasMoved: boolean;\r\n }\r\n | { mode: 'link-handle'; linkId: string; pointIndex: number }\r\n | { mode: 'link-segment'; linkId: string; start: Point; hasMoved: boolean; pointIndex?: number }\r\n | {\r\n mode: 'resize';\r\n elementId: string;\r\n handle: 'nw' | 'ne' | 'sw' | 'se';\r\n origin: {\n position: Point;\n worldPosition: Point;\n size: { width: number; height: number };\n parentId: string | null;\n anchorCenter: boolean;\n rotation: number;\n };\n }\n | { mode: 'marquee'; start: Point; isMulti: boolean; hasMoved: boolean }\n | { mode: 'pan'; start: Point; origin: Point }\n | ShapeControlDragState;\n\nconst ellipseMidPointOrder: EllipseMidPoint[] = [\n EllipseMidPoint.top,\n EllipseMidPoint.right,\n EllipseMidPoint.bottom,\n EllipseMidPoint.left,\n];\n\nconst isEllipseMidPoint = (value: unknown): value is EllipseMidPoint =>\n value === EllipseMidPoint.top ||\n value === EllipseMidPoint.right ||\n value === EllipseMidPoint.bottom ||\n value === EllipseMidPoint.left;\n\nconst ellipseMidPointToIndex = (value: EllipseMidPoint): number =>\n ellipseMidPointOrder.indexOf(value);\n\r\nexport default class KonvaInteraction {\r\n private engine: DiagramEngine;\r\n private stage?: KonvaStageLike;\n private hitTester: KonvaHitTester;\n private renderer?: InteractionConfig['renderer'];\n private shapeRegistry?: ShapeRegistry;\n private shapeHoverControls?: NormalizedShapeHoverControls;\n private onShapeHoverControlInteracted?: (event: ElementShapeHoverControlInteractionEvent) => void;\n private onShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n private linkDragContext: { sourcePortId: string; sourceElementId: string } | null = null;\n private bound = false;\n private handlers: Array<[string, (...args: unknown[]) => void]> = [];\r\n private windowHandlers: Array<[keyof WindowEventMap, (event: Event) => void]> = [];\r\n private previousWindowKeyDown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => unknown) | null = null;\r\n private dragState: DragState | null = null;\r\n private selectionUnsub: (() => void) | null = null;\r\n private changeUnsub: (() => void) | null = null;\n private activeShapeHoverControl: ResolvedShapeHoverControl | null = null;\n private lastPointerPosition: Point | null = null;\n private zoom = 1;\n private pan: Point = { x: 0, y: 0 };\r\n private textEditor: HTMLTextAreaElement | null = null;\r\n private readonly dragThreshold = 4;\r\n private readonly panSpeed = 0.5;\r\n private panKey: PanKey;\r\n\r\n constructor(engine: DiagramEngine, config: InteractionConfig = {}) {\n this.engine = engine;\r\n this.stage = config.stage;\n this.hitTester = config.hitTester ?? new KonvaHitTester();\n this.renderer = config.renderer;\n this.panKey = config.panKey ?? 'Control';\n this.shapeRegistry = config.shapeRegistry;\n this.shapeHoverControls = this.normalizeShapeHoverControls(config.shapeHoverControls);\n this.onShapeHoverControlInteracted = config.onShapeHoverControlInteracted;\n this.onShapeHoverControlActivated = config.onShapeHoverControlActivated;\n }\n\n setShapeHoverControls(controls?: ElementShapeHoverControls): void {\n this.shapeHoverControls = this.normalizeShapeHoverControls(controls);\n if (!this.shapeHoverControls) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (this.lastPointerPosition && !this.dragState) {\n this.updateShapeHoverControl(this.lastPointerPosition);\n }\n }\n\r\n private buildPointerInfo(world: Point, nativeEvent?: MouseEvent | PointerEvent | null): EnginePointerInfo {\r\n const evt = nativeEvent ?? undefined;\r\n const client = evt ? { x: evt.clientX, y: evt.clientY } : { x: world.x, y: world.y };\r\n const pointerType =\r\n evt && 'pointerType' in evt ? (evt as PointerEvent).pointerType : undefined;\r\n return {\r\n client,\r\n world: { ...world },\r\n button: evt?.button,\r\n buttons: (evt as MouseEvent | PointerEvent | undefined)?.buttons,\r\n altKey: evt?.altKey,\r\n ctrlKey: evt?.ctrlKey,\r\n metaKey: evt?.metaKey,\r\n shiftKey: evt?.shiftKey,\r\n pointerType,\r\n };\r\n }\r\n\r\n bind(stage?: KonvaStageLike): void {\r\n this.stage = stage ?? this.stage;\r\n if (!this.stage || !this.stage.on || this.bound) return;\r\n\r\n const pointerDown = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const point = this.getPointerPosition();\n if (!point) return;\n this.lastPointerPosition = { ...point };\n if (this.textEditor) return;\n const hit = this.resolveHit(point);\n const nativeEvent = event?.evt;\n const isMulti = Boolean(nativeEvent && (nativeEvent.ctrlKey || nativeEvent.metaKey || nativeEvent.shiftKey));\n const isPanGesture = Boolean(nativeEvent && this.isPanKeyPressed(nativeEvent) && nativeEvent.button === 0);\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\n\n if (hit?.type === 'shape-hover-control') {\n const resolvedControl = this.resolveShapeHoverControlFromHit(hit.id, point);\n if (!resolvedControl) return;\n this.dragState = {\n mode: 'shape-control-drag',\n control: resolvedControl,\n sessionId: createId(),\n start: { ...point },\n startPointer: pointerInfo,\n hasMoved: false,\n };\n this.setCursor('grabbing');\n return;\n }\n\n this.clearActiveShapeHoverControl();\n\n if (isPanGesture) {\n this.dragState = { mode: 'pan', start: point, origin: { ...this.pan } };\n this.setCursor('grabbing');\n return;\n }\r\n\r\n if (hit?.type === 'resize-handle') {\r\n const parsed = this.parseResizeHandle(hit.id);\r\n if (parsed) {\r\n const element = this.getElementById(parsed.elementId);\r\n if (element) {\n if (!this.engine.getSelection().includes(parsed.elementId)) {\n this.engine.setSelection([parsed.elementId]);\n }\n const worldPosition = this.engine.getElementWorldPosition(parsed.elementId) ?? element.position;\n this.dragState = {\n mode: 'resize',\n elementId: parsed.elementId,\n handle: parsed.handle,\n origin: {\n position: { ...element.position },\n worldPosition,\n size: { ...element.size },\n parentId: element.parentId ?? null,\n anchorCenter: element.anchorCenter ?? false,\n rotation: this.engine.getElementRotation(parsed.elementId),\n },\n };\n this.setCursor(this.getResizeCursor(parsed.handle));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (hit?.type === 'link-handle') {\r\n const parsed = this.parseLinkHandle(hit.id);\r\n if (parsed) {\r\n this.dragState = { mode: 'link-handle', linkId: parsed.linkId, pointIndex: parsed.pointIndex };\r\n this.setCursor('move');\r\n }\r\n return;\r\n }\r\n\r\n if (!hit || hit.type === 'none') {\r\n this.dragState = { mode: 'marquee', start: point, isMulti, hasMoved: false };\r\n this.renderer?.renderMarquee({ x: point.x, y: point.y, width: 0, height: 0 });\r\n return;\r\n }\r\n\r\n if (hit.type === 'port') {\r\n const elementId = this.engine.getPortElementId(hit.id);\r\n if (!elementId) return;\r\n this.engine.emitPortMouseDown({ portId: hit.id, elementId, pointer: pointerInfo });\r\n const isSelected = this.engine.getSelection().includes(hit.id);\r\n if (isSelected) {\r\n const base = this.engine.getPortWorldPosition(hit.id);\r\n if (base) {\r\n this.dragState = {\r\n mode: 'move',\r\n type: 'port',\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n } else {\r\n this.dragState = {\r\n mode: 'link-drag',\r\n sourcePortId: hit.id,\r\n sourceElementId: elementId,\r\n start: point,\r\n current: point,\r\n isMulti,\r\n hasMoved: false,\r\n };\r\n this.linkDragContext = { sourcePortId: hit.id, sourceElementId: elementId };\r\n this.engine.emitElementLinkStarted({ sourcePortId: hit.id, sourceElementId: elementId, startWorld: { ...point } });\r\n this.setCursor('crosshair');\r\n }\r\n return;\r\n }\r\n\r\n this.handleSelection(hit, isMulti);\r\n if (hit.type === 'link' && !isMulti) {\r\n this.dragState = { mode: 'link-segment', linkId: hit.id, start: point, hasMoved: false };\r\n this.setCursor('move');\r\n return;\r\n }\r\n if (hit.type === 'text') {\r\n const base = this.engine.getTextWorldPosition(hit.id);\r\n if (base) {\r\n this.dragState = {\r\n mode: 'move',\r\n type: 'text',\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n return;\r\n }\r\n if (hit.type === 'element') {\r\n const baseTopLeft = this.engine.getElementWorldPosition(hit.id);\r\n if (baseTopLeft) {\r\n const element = this.getElementById(hit.id);\r\n if (!element) return;\r\n const anchor = element.anchorCenter ? 'center' : 'top-left';\r\n const base = element.anchorCenter\r\n ? {\r\n x: baseTopLeft.x + element.size.width / 2,\r\n y: baseTopLeft.y + element.size.height / 2,\r\n }\r\n : baseTopLeft;\r\n this.dragState = {\r\n mode: 'move',\r\n type: hit.type,\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n start: { ...base },\r\n anchor,\r\n startParentId: element.parentId ?? null,\r\n selectionIds: this.engine.getSelection(),\r\n isMulti,\r\n hasMoved: false,\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n }\r\n };\r\n\r\n const pointerMove = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const nativeEvent = event?.evt;\n const point = this.getPointerPosition();\n if (!point) return;\n this.lastPointerPosition = { ...point };\n if (!this.dragState) {\n this.updateShapeHoverControl(point);\n this.updateHoverCursor(point);\n return;\n }\n this.clearActiveShapeHoverControl();\n if (this.dragState.mode === 'shape-control-drag') {\n const delta = { x: point.x - this.dragState.start.x, y: point.y - this.dragState.start.y };\n const moved = Math.hypot(delta.x, delta.y) >= this.dragThreshold;\n if (!this.dragState.hasMoved && moved) {\n this.dragState.hasMoved = true;\n this.emitShapeHoverControlInteraction('drag-start', this.dragState.control, point, nativeEvent, {\n sessionId: this.dragState.sessionId,\n startPointer: this.dragState.startPointer,\n delta,\n });\n }\n if (this.dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-move', this.dragState.control, point, nativeEvent, {\n sessionId: this.dragState.sessionId,\n startPointer: this.dragState.startPointer,\n delta,\n });\n }\n } else if (this.dragState.mode === 'move') {\n const target = {\n x: point.x - this.dragState.offset.x,\n y: point.y - this.dragState.offset.y,\n };\n if (this.dragState.type === 'element') {\r\n const dx = target.x - this.dragState.start.x;\r\n const dy = target.y - this.dragState.start.y;\r\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\r\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\r\n this.engine.moveElementTo(this.dragState.id, target.x, target.y);\n if (this.renderer && this.engine.getSelection().includes(this.dragState.id)) {\n const element = this.getElementById(this.dragState.id);\n if (element) {\n const position = this.engine.getElementWorldPosition(this.dragState.id) ?? element.position;\n this.renderElementResizeHandles(this.dragState.id, position, element);\n }\n }\n } else if (this.dragState.type === 'port') {\r\n const constrained = this.applyPortConstraints(this.dragState.id, target);\r\n this.engine.movePortTo(this.dragState.id, constrained.x, constrained.y);\r\n } else {\r\n this.engine.moveTextTo(this.dragState.id, target.x, target.y);\r\n }\r\n } else if (this.dragState.mode === 'link-drag') {\n const linkDrag = this.dragState;\n const dx = point.x - this.dragState.start.x;\n const dy = point.y - this.dragState.start.y;\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\n this.dragState.current = point;\n if (this.dragState.hasMoved) {\n const source = this.engine.getPortWorldPosition(this.dragState.sourcePortId);\n if (source) {\n this.renderer?.renderTempLink([source, point]);\n }\n const hit = this.resolveHit(point);\n if (hit?.type === 'port' && hit.id !== linkDrag.sourcePortId) {\n const completion = this.tryCreateLinkToPort(linkDrag.sourcePortId, linkDrag.sourceElementId, hit.id);\n if (completion.createdLinkId) {\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\n this.engine.emitPortMouseUp({\n portId: linkDrag.sourcePortId,\n elementId: linkDrag.sourceElementId,\n pointer: pointerInfo,\n });\n this.engine.emitElementLinkEnded({\n sourcePortId: linkDrag.sourcePortId,\n sourceElementId: linkDrag.sourceElementId,\n linkId: completion.createdLinkId,\n targetPortId: completion.targetPortId,\n targetElementId: completion.targetElementId ?? undefined,\n cancelled: false,\n });\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.dragState = null;\n this.linkDragContext = null;\n this.setCursor('default');\n return;\n }\n } else if (hit?.type === 'element') {\n const placeholder = this.createPlaceholderPort(hit.id, point, this.dragState.sourcePortId);\n if (placeholder) {\n const hostElement = this.getElementById(hit.id);\n if (hostElement) {\n const hostWorld = this.engine.getElementWorldPosition(hit.id) ?? hostElement.position;\n this.renderer?.renderPortPlaceholder?.(\n placeholder,\n { id: hostElement.id, position: hostWorld, size: hostElement.size, shapeId: hostElement.shapeId },\n );\n } else {\n this.renderer?.renderPortPlaceholder?.(placeholder);\n }\n }\n } else {\n this.renderer?.clearPortPlaceholder?.();\n }\n } else {\r\n this.renderer?.clearPortPlaceholder?.();\r\n }\r\n } else if (this.dragState.mode === 'link-handle') {\r\n const linkState = this.dragState;\r\n const link = this.getLinkById(linkState.linkId);\r\n if (!link) return;\r\n const points = link.points.map((p, index) => (index === linkState.pointIndex ? point : p));\r\n this.engine.updateLinkPoints(link.id, points);\r\n this.renderer?.renderLinkHandles(link.id, points);\r\n } else if (this.dragState.mode === 'link-segment') {\r\n const linkState = this.dragState;\r\n const link = this.getLinkById(linkState.linkId);\r\n if (!link) return;\r\n const dx = point.x - linkState.start.x;\r\n const dy = point.y - linkState.start.y;\r\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\r\n linkState.hasMoved = linkState.hasMoved || moved;\r\n if (!linkState.hasMoved) return;\r\n\r\n let points = link.points.map((p) => ({ ...p }));\r\n if (linkState.pointIndex === undefined) {\r\n const nearest = this.findNearestSegmentPoint(points, point);\r\n if (!nearest) return;\r\n points = [\r\n ...points.slice(0, nearest.index + 1),\r\n { ...nearest.point },\r\n ...points.slice(nearest.index + 1),\r\n ];\r\n linkState.pointIndex = nearest.index + 1;\r\n }\r\n points = points.map((p, index) => (index === linkState.pointIndex ? point : p));\r\n this.engine.updateLinkPoints(link.id, points);\r\n this.renderer?.renderLinkHandles(link.id, points);\r\n } else if (this.dragState.mode === 'resize') {\r\n this.handleResizeDrag(this.dragState, point);\r\n } else if (this.dragState.mode === 'marquee') {\r\n const rect = this.normalizeRect(this.dragState.start, point);\r\n const moved = rect.width >= this.dragThreshold || rect.height >= this.dragThreshold;\r\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\r\n this.renderer?.renderMarquee(rect);\r\n } else if (this.dragState.mode === 'pan') {\r\n const dx = point.x - this.dragState.start.x;\r\n const dy = point.y - this.dragState.start.y;\r\n this.pan = {\r\n x: this.dragState.origin.x - dx * this.panSpeed,\r\n y: this.dragState.origin.y - dy * this.panSpeed,\r\n };\r\n this.applyStageTransform();\r\n this.engine.setViewport(this.pan, this.zoom);\r\n }\r\n };\r\n\r\n const pointerUp = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const nativeEvent = event?.evt;\n const pointerPoint = this.getPointerPosition();\n\n if (this.dragState?.mode === 'shape-control-drag') {\n const dragState = this.dragState;\n const point = pointerPoint ?? dragState.start;\n const delta = { x: point.x - dragState.start.x, y: point.y - dragState.start.y };\n const dragContext: ElementShapeControlDragEvent = {\n sessionId: dragState.sessionId,\n startPointer: dragState.startPointer,\n delta,\n };\n if (dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-end', dragState.control, point, nativeEvent, dragContext);\n } else {\n this.emitShapeHoverControlInteraction('click', dragState.control, point, nativeEvent);\n this.emitLegacyShapeHoverControlActivation(dragState.control, point, nativeEvent);\n }\n this.dragState = null;\n if (pointerPoint) {\n this.lastPointerPosition = { ...pointerPoint };\n this.updateShapeHoverControl(pointerPoint);\n this.updateHoverCursor(pointerPoint);\n } else {\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n return;\n }\n\n if (this.dragState?.mode === 'link-drag') {\n const point = pointerPoint;\n const pointerInfo = this.buildPointerInfo(point ?? this.dragState.start, nativeEvent);\n const sourcePortPayload = {\r\n portId: this.dragState.sourcePortId,\r\n elementId: this.dragState.sourceElementId,\r\n pointer: pointerInfo,\r\n };\r\n this.engine.emitPortMouseUp(sourcePortPayload);\r\n\r\n let createdLinkId: string | null = null;\r\n let targetPortId: string | null = null;\r\n let targetElementId: string | null = null;\r\n\r\n if (!this.dragState.hasMoved) {\n this.handleSelection({ id: this.dragState.sourcePortId, type: 'port' }, this.dragState.isMulti);\n } else {\n const hit = point ? this.resolveHit(point) : null;\n if (hit && hit.type === 'port' && hit.id !== this.dragState.sourcePortId) {\n const completion = this.tryCreateLinkToPort(this.dragState.sourcePortId, this.dragState.sourceElementId, hit.id);\n createdLinkId = completion.createdLinkId;\n targetPortId = completion.targetPortId;\n targetElementId = completion.targetElementId;\n } else if (hit && hit.type === 'element' && point) {\n targetElementId = hit.id;\n const createdPortId = this.createPortForLink(hit.id, point, this.dragState.sourcePortId);\n if (createdPortId) {\r\n targetPortId = createdPortId;\r\n createdLinkId = createId();\r\n this.engine.addLink({\r\n id: createdLinkId,\r\n sourcePortId: this.dragState.sourcePortId,\r\n targetPortId: createdPortId,\r\n points: [],\r\n });\r\n }\r\n }\r\n }\r\n\r\n this.engine.emitElementLinkEnded({\r\n sourcePortId: this.dragState.sourcePortId,\r\n sourceElementId: this.dragState.sourceElementId,\r\n linkId: createdLinkId ?? undefined,\r\n targetPortId: targetPortId ?? undefined,\r\n targetElementId: targetElementId ?? undefined,\r\n cancelled: createdLinkId === null,\r\n });\r\n\r\n this.renderer?.clearTempLink();\r\n this.renderer?.clearPortPlaceholder?.();\r\n }\r\n\r\n if (this.dragState?.mode === 'marquee') {\r\n const point = pointerPoint ?? this.dragState.start;\r\n const rect = this.normalizeRect(this.dragState.start, point);\r\n this.applyMarqueeSelection(rect, this.dragState.isMulti);\r\n this.renderer?.clearMarquee();\r\n if (!this.dragState.hasMoved) {\r\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\r\n this.engine.emitPaperClick(pointerInfo);\r\n }\r\n }\r\n\r\n if (this.dragState?.mode === 'move' && this.dragState.type === 'element') {\r\n const element = this.getElementById(this.dragState.id);\r\n if (element) {\r\n const endTopLeft = this.engine.getElementWorldPosition(this.dragState.id) ?? element.position;\r\n const endWorld =\r\n this.dragState.anchor === 'center'\r\n ? {\r\n x: endTopLeft.x + element.size.width / 2,\r\n y: endTopLeft.y + element.size.height / 2,\r\n }\r\n : endTopLeft;\r\n const delta = {\r\n x: endWorld.x - this.dragState.start.x,\r\n y: endWorld.y - this.dragState.start.y,\r\n };\r\n const moved = this.dragState.hasMoved || Math.hypot(delta.x, delta.y) > 0;\r\n if (moved) {\r\n this.engine.emitElementDrop({\r\n elementId: this.dragState.id,\r\n startWorld: { ...this.dragState.start },\r\n endWorld,\r\n delta,\r\n startParentId: this.dragState.startParentId,\r\n selectionIds: [...this.dragState.selectionIds],\r\n anchor: this.dragState.anchor,\r\n });\r\n } else {\r\n const pointerInfo = this.buildPointerInfo(pointerPoint ?? this.dragState.start, nativeEvent);\r\n this.engine.emitElementClick(this.dragState.id, pointerInfo, this.dragState.isMulti);\r\n }\r\n }\r\n }\r\n\r\n if (this.dragState?.mode === 'move' && this.dragState.type === 'port') {\r\n const elementId = this.engine.getPortElementId(this.dragState.id);\r\n if (elementId) {\r\n const pointerInfo = this.buildPointerInfo(pointerPoint ?? this.engine.getPortWorldPosition(this.dragState.id) ?? { x: 0, y: 0 }, nativeEvent);\r\n this.engine.emitPortMouseUp({ portId: this.dragState.id, elementId, pointer: pointerInfo });\r\n }\r\n }\r\n\r\n this.dragState = null;\n this.linkDragContext = null;\n if (pointerPoint) {\n this.lastPointerPosition = { ...pointerPoint };\n this.updateShapeHoverControl(pointerPoint);\n this.updateHoverCursor(pointerPoint);\n } else {\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n };\n\r\n const downEvents = 'mousedown touchstart pointerdown';\r\n const moveEvents = 'mousemove touchmove pointermove';\r\n const upEvents = 'mouseup touchend pointerup';\r\n\r\n this.stage.on(downEvents, pointerDown);\r\n this.handlers.push([downEvents, pointerDown]);\r\n this.stage.on(moveEvents, pointerMove);\r\n this.handlers.push([moveEvents, pointerMove]);\r\n this.stage.on(upEvents, pointerUp);\r\n this.handlers.push([upEvents, pointerUp]);\r\n\r\n const doubleClick = () => {\r\n const point = this.getPointerPosition();\r\n if (!point) return;\r\n const hit = this.resolveHit(point);\r\n if (!hit || hit.type !== 'text') return;\r\n this.startTextEdit(hit.id);\r\n };\r\n\r\n this.stage.on('dblclick dbltap', doubleClick);\r\n this.handlers.push(['dblclick dbltap', doubleClick]);\r\n\r\n const keyDown = (event: Event) => {\r\n const keyEvent = event as KeyboardEvent;\r\n if (this.isEditableTarget(keyEvent.target)) return;\r\n if (keyEvent.key === 'Escape') {\r\n this.cancelLinkDrag();\r\n return;\r\n }\r\n if (keyEvent.key === 'Delete' || keyEvent.key === 'Backspace') {\r\n this.engine.deleteSelection();\r\n }\r\n };\r\n\r\n const wheel = (...args: unknown[]) => {\r\n const event = args[0] as { evt?: WheelEvent } | undefined;\r\n const nativeEvent = event?.evt;\r\n if (!nativeEvent) return;\r\n nativeEvent.preventDefault?.();\r\n const delta = nativeEvent.deltaY;\r\n const direction = delta > 0 ? -1 : 1;\r\n const factor = 1 + direction * 0.05;\r\n this.zoom = Math.max(0.2, Math.min(3, this.zoom * factor));\r\n this.applyStageTransform();\r\n this.engine.setViewport(this.pan, this.zoom);\r\n };\r\n\r\n window.addEventListener('keydown', keyDown);\r\n this.windowHandlers.push(['keydown', keyDown]);\r\n this.previousWindowKeyDown = window.onkeydown;\r\n window.onkeydown = (event: KeyboardEvent) => {\r\n keyDown(event);\r\n this.previousWindowKeyDown?.call(window, event);\r\n };\r\n this.stage.on('wheel', wheel);\r\n this.handlers.push(['wheel', wheel]);\r\n this.selectionUnsub = this.engine.on('selection', () => this.updateSelectionOverlays());\n this.changeUnsub = this.engine.on('change', (event) => {\n this.updateSelectionOverlays();\n this.applyViewportPatch(event.patches);\n if (!this.dragState && this.lastPointerPosition) {\n this.updateShapeHoverControl(this.lastPointerPosition);\n }\n });\n this.bound = true;\n }\n\r\n dispose(): void {\r\n if (this.stage && this.stage.off) {\r\n this.handlers.forEach(([event, handler]) => this.stage?.off?.(event, handler));\r\n }\r\n this.handlers = [];\r\n this.windowHandlers.forEach(([event, handler]) => window.removeEventListener(event, handler));\r\n this.windowHandlers = [];\r\n if (this.previousWindowKeyDown !== null) {\r\n window.onkeydown = this.previousWindowKeyDown;\r\n this.previousWindowKeyDown = null;\r\n }\r\n this.selectionUnsub?.();\r\n this.selectionUnsub = null;\r\n this.changeUnsub?.();\n this.changeUnsub = null;\n this.clearActiveShapeHoverControl();\n this.disposeTextEditor();\n this.bound = false;\n }\n\r\n private handleSelection(hit: HitResult | null, isMulti: boolean): void {\r\n if (!hit || hit.type === 'none') {\r\n this.engine.setSelection([]);\r\n return;\r\n }\r\n if (hit.type === 'resize-handle' || hit.type === 'link-handle' || hit.type === 'shape-hover-control') {\n return;\n }\n if (isMulti) {\r\n this.engine.toggleSelection(hit.id);\r\n return;\r\n }\r\n this.engine.setSelection([hit.id]);\r\n }\r\n\r\n private getPointerPosition(): Point | null {\n const stageAny = this.stage as unknown as {\n getPointerPosition?: () => { x: number; y: number } | null;\n getAbsoluteTransform?: () =>\n | {\n copy?: () => { invert?: () => void; point?: (pos: Point) => Point };\n invert?: () => void;\n point?: (pos: Point) => Point;\n }\n | undefined;\n };\n const pos = stageAny?.getPointerPosition?.();\n if (!pos) return null;\n const transformSource = stageAny.getAbsoluteTransform?.();\n const transform = transformSource?.copy?.() ?? transformSource;\n if (transform && typeof transform.invert === 'function' && typeof transform.point === 'function') {\n transform.invert();\n const point = transform.point(pos);\n return { x: point.x, y: point.y };\n }\n return { x: pos.x, y: pos.y };\n }\r\n\r\n private getStageContainer(): HTMLDivElement | null {\r\n const stageAny = this.stage as unknown as {\r\n container?: HTMLDivElement | (() => HTMLDivElement);\r\n };\r\n const container =\r\n typeof stageAny?.container === 'function' ? stageAny.container() : stageAny?.container;\r\n return container ?? null;\r\n }\r\n\r\n private normalizeHit(hit: HitResult | null): HitResult | null {\r\n if (!hit || hit.type === 'none') return null;\r\n if (\r\n hit.type === 'port' ||\r\n hit.type === 'link' ||\r\n hit.type === 'text' ||\n hit.type === 'resize-handle' ||\n hit.type === 'link-handle' ||\n hit.type === 'shape-hover-control'\n ) {\n return hit;\n }\n return { ...hit, type: 'element' };\r\n }\r\n\r\n private resolveHit(point: Point): HitResult | null {\n const primary = this.withElementDepth(this.normalizeHit(this.hitTester.hitTest(point)));\n const hits: HitResult[] = primary ? [primary] : [];\n const seen = new Set(hits.map((hit) => `${hit.type}:${hit.id}`));\n\n const addHit = (hit: HitResult | null) => {\n const enriched = this.withElementDepth(hit);\n if (!enriched) return;\n const key = `${enriched.type}:${enriched.id}`;\n if (seen.has(key)) return;\n seen.add(key);\n hits.push(enriched);\n };\n\n addHit(this.findLinkHit(point));\n addHit(this.findElementHit(point));\n\n if (hits.length === 0) return null;\n\n const priority: HitResult['type'][] = ['resize-handle', 'link-handle', 'shape-hover-control', 'port', 'link', 'text', 'element'];\n for (let i = 0; i < priority.length; i += 1) {\n const candidates = hits.filter((hit) => hit.type === priority[i]);\n if (candidates.length === 0) continue;\n if (priority[i] === 'element') {\n return candidates.reduce((deepest, current) => {\n const deepestDepth = deepest.depth ?? -1;\n const currentDepth = current.depth ?? -1;\n if (currentDepth > deepestDepth) return current;\n if (currentDepth < deepestDepth) return deepest;\n return deepest; // preserve primary hit when depths are equal\n }, candidates[0]);\n }\n return candidates[0];\n }\n\n return hits[0];\n }\n\n private withElementDepth(hit: HitResult | null): HitResult | null {\n if (!hit || hit.type !== 'element' || hit.depth !== undefined) return hit;\n const byId = new Map(\n this.engine\n .getState()\n .elements.map((element) => [element.id, { parentId: element.parentId }] as const),\n );\n if (!byId.has(hit.id)) return hit;\n return {\n ...hit,\n depth: this.computeElementDepth(hit.id, byId),\n };\n }\n\r\n private findElementHit(point: Point): HitResult | null {\r\n const state = this.engine.getState();\r\n if (!state.elements.length) return null;\r\n const byId = new Map(state.elements.map((element) => [element.id, element]));\r\n let best: HitResult | null = null;\r\n\r\n state.elements.forEach((element) => {\n const world = this.engine.getElementWorldPosition(element.id) ?? element.position;\n const rotation = this.engine.getElementRotation(element.id);\n if (!pointInRotatedRect(point, world, element.size, rotation, element.anchorCenter ?? false)) return;\n const depth = this.computeElementDepth(element.id, byId);\n if (!best || depth > (best.depth ?? -1)) {\n best = { id: element.id, type: 'element', depth };\n }\n });\n\r\n return best;\r\n }\r\n\r\n private computeElementDepth(id: string, byId: Map<string, { parentId?: string | null }>): number {\r\n let depth = 0;\r\n let current = byId.get(id);\r\n while (current?.parentId) {\r\n depth += 1;\r\n current = byId.get(current.parentId);\r\n }\r\n return depth;\r\n }\r\n\r\n private findLinkHit(point: Point): HitResult | null {\r\n const links = this.engine.getState().links;\r\n if (!links.length) return null;\r\n\r\n let bestId: string | null = null;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n\r\n links.forEach((link) => {\r\n if (link.points.length < 2) return;\r\n const tolerance = ((link.style as { hitStrokeWidth?: number } | undefined)?.hitStrokeWidth ?? 15) / 2;\r\n for (let i = 1; i < link.points.length; i += 1) {\r\n const projected = this.projectPointOnSegment(point, link.points[i - 1], link.points[i]);\r\n if (projected.distance > tolerance) continue;\r\n if (projected.distance < bestDistance) {\r\n bestDistance = projected.distance;\r\n bestId = link.id;\r\n }\r\n }\r\n });\r\n\r\n return bestId ? { id: bestId, type: 'link' as const } : null;\r\n }\r\n\r\n private setCursor(cursor: string): void {\r\n const stageAny = this.stage as unknown as {\r\n container?: HTMLDivElement | (() => HTMLDivElement);\r\n };\r\n const container =\r\n typeof stageAny?.container === 'function' ? stageAny.container() : stageAny?.container;\r\n if (container && container.style) {\r\n container.style.cursor = cursor;\r\n }\r\n }\r\n\r\n private updateHoverCursor(point: Point): void {\n const hit = this.resolveHit(point);\r\n if (!hit || hit.type === 'none') {\r\n this.setCursor('default');\r\n return;\r\n }\r\n if (hit.type === 'resize-handle') {\r\n const parsed = this.parseResizeHandle(hit.id);\r\n this.setCursor(parsed ? this.getResizeCursor(parsed.handle) : 'nwse-resize');\r\n return;\r\n }\r\n if (hit.type === 'link-handle') {\n this.setCursor('move');\n return;\n }\n if (hit.type === 'shape-hover-control') {\n this.setCursor('pointer');\n return;\n }\n if (hit.type === 'port') {\n const isSelected = this.engine.getSelection().includes(hit.id);\n this.setCursor(isSelected ? 'grab' : 'crosshair');\n return;\r\n }\r\n if (hit.type === 'link') {\r\n this.setCursor('pointer');\r\n return;\r\n }\n this.setCursor('grab');\n }\n\n private normalizeShapeHoverControls(\n controls?: ElementShapeHoverControls,\n ): NormalizedShapeHoverControls | undefined {\n if (!controls) return undefined;\n const normalizedControls: NormalizedShapeControlDefinition[] = [];\n const usedControlIds = new Set<string>();\n\n (controls.controls ?? []).forEach((control) => {\n const normalized = this.normalizeShapeHoverControlDefinition(control);\n if (!normalized || usedControlIds.has(normalized.id)) return;\n usedControlIds.add(normalized.id);\n normalizedControls.push(normalized);\n });\n\n const legacyEdge = controls.edge?.icon.svgPath?.trim()\n ? this.normalizeShapeHoverControlDefinition({\n id: 'legacy-edge-control',\n targetKind: 'edge',\n icon: {\n svgPath: controls.edge.icon.svgPath,\n size: controls.edge.icon.size,\n style: controls.edge.icon.style,\n },\n allowAllTargets: true,\n visibilityTriggers: ['target-hover'],\n tolerance: controls.edge.tolerance,\n lineStyle: controls.edge.lineStyle,\n })\n : null;\n const legacyVertex = controls.vertex?.icon.svgPath?.trim()\n ? this.normalizeShapeHoverControlDefinition({\n id: 'legacy-vertex-control',\n targetKind: 'vertex',\n icon: {\n svgPath: controls.vertex.icon.svgPath,\n size: controls.vertex.icon.size,\n style: controls.vertex.icon.style,\n },\n allowAllTargets: true,\n visibilityTriggers: ['target-hover'],\n tolerance: controls.vertex.tolerance,\n })\n : null;\n const legacyOrder =\n controls.priority === 'vertex-first'\n ? [legacyVertex, legacyEdge]\n : [legacyEdge, legacyVertex];\n legacyOrder.forEach((legacyControl) => {\n if (!legacyControl || usedControlIds.has(legacyControl.id)) return;\n usedControlIds.add(legacyControl.id);\n normalizedControls.push(legacyControl);\n });\n\n if (normalizedControls.length === 0) return undefined;\n return { controls: normalizedControls };\n }\n\n private normalizeShapeHoverControlDefinition(\n control: ShapeControlDefinition | undefined,\n ): NormalizedShapeControlDefinition | null {\n if (!control) return null;\n const id = control.id?.trim();\n const svgPath = control.icon?.svgPath?.trim();\n if (!id || !svgPath) return null;\n if (\n control.targetKind !== 'edge' &&\n control.targetKind !== 'vertex' &&\n control.targetKind !== 'midpoint' &&\n control.targetKind !== 'ellipse-midpoint'\n ) {\n return null;\n }\n const visibilityTriggers = this.normalizeVisibilityTriggers(control.visibilityTriggers);\n const targetIndices =\n control.targetKind === 'ellipse-midpoint'\n ? undefined\n : this.normalizeTargetIndices(control.targetIndices);\n const ellipseMidPoints =\n control.targetKind === 'ellipse-midpoint'\n ? this.normalizeEllipseMidPoints(control.ellipseMidPoints)\n : undefined;\n return {\n ...control,\n id,\n icon: {\n ...control.icon,\n svgPath,\n },\n visibilityTriggers,\n targetIndices,\n ellipseMidPoints,\n tolerance:\n typeof control.tolerance === 'number'\n ? control.tolerance\n : this.getDefaultShapeHoverControlTolerance(control.targetKind),\n };\n }\n\n private normalizeVisibilityTriggers(\n triggers: ShapeControlVisibilityTrigger[] | undefined,\n ): ShapeControlVisibilityTrigger[] {\n const source = triggers?.length ? triggers : ['target-hover'];\n const normalized: ShapeControlVisibilityTrigger[] = [];\n source.forEach((trigger) => {\n if (trigger !== 'target-hover' && trigger !== 'element-hover') return;\n if (normalized.includes(trigger)) return;\n normalized.push(trigger);\n });\n if (normalized.length === 0) {\n normalized.push('target-hover');\n }\n return normalized;\n }\n\n private normalizeTargetIndices(indices: number[] | undefined): number[] | undefined {\n if (!indices?.length) return undefined;\n const normalized: number[] = [];\n indices.forEach((index) => {\n if (!Number.isInteger(index) || index < 0) return;\n if (normalized.includes(index)) return;\n normalized.push(index);\n });\n return normalized.length ? normalized : undefined;\n }\n\n private normalizeEllipseMidPoints(\n value: EllipseMidPoint | EllipseMidPoint[] | undefined,\n ): EllipseMidPoint[] | undefined {\n if (value === undefined) return undefined;\n const source = Array.isArray(value) ? value : [value];\n const normalized: EllipseMidPoint[] = [];\n source.forEach((entry) => {\n if (!isEllipseMidPoint(entry)) return;\n if (normalized.includes(entry)) return;\n normalized.push(entry);\n });\n return normalized.length ? normalized : undefined;\n }\n\n private getDefaultShapeHoverControlTolerance(targetKind: ShapeControlTargetKind): number {\n if (targetKind === 'vertex') return 12;\n return 10;\n }\n\n private resolveShapeHoverControlFromHit(hitId: string, point: Point): ResolvedShapeHoverControl | null {\n const parsed = this.parseShapeHoverControlHitId(hitId);\n if (!parsed) return this.activeShapeHoverControl;\n if (\n this.activeShapeHoverControl &&\n this.activeShapeHoverControl.elementId === parsed.elementId &&\n this.activeShapeHoverControl.controlId === parsed.controlId &&\n this.activeShapeHoverControl.targetKind === parsed.targetKind &&\n this.activeShapeHoverControl.targetIndex === parsed.targetIndex\n ) {\n return this.activeShapeHoverControl;\n }\n const resolved = this.resolveShapeHoverControl(parsed.elementId, point);\n if (!resolved) return null;\n if (\n resolved.controlId !== parsed.controlId ||\n resolved.targetKind !== parsed.targetKind ||\n resolved.targetIndex !== parsed.targetIndex ||\n (parsed.ellipseMidPoint !== undefined &&\n (!('ellipseMidPoint' in resolved.target) || resolved.target.ellipseMidPoint !== parsed.ellipseMidPoint))\n ) {\n return null;\n }\n return resolved;\n }\n\n private parseShapeHoverControlHitId(hitId: string): {\n elementId: string;\n controlId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n ellipseMidPoint?: EllipseMidPoint;\n } | null {\n const parts = hitId.split(':');\n if (parts.length < 5 || parts[0] !== 'shape-hover-control') return null;\n const targetRef = parts[parts.length - 1];\n const targetKind = parts[parts.length - 2];\n if (\n targetKind !== 'edge' &&\n targetKind !== 'vertex' &&\n targetKind !== 'midpoint' &&\n targetKind !== 'ellipse-midpoint'\n ) {\n return null;\n }\n const elementId = parts[1];\n const controlId = parts.slice(2, parts.length - 2).join(':');\n if (!elementId || !controlId) return null;\n if (targetKind === 'ellipse-midpoint') {\n if (!isEllipseMidPoint(targetRef)) return null;\n const targetIndex = ellipseMidPointToIndex(targetRef);\n if (targetIndex < 0) return null;\n return {\n elementId,\n controlId,\n targetKind,\n targetIndex,\n ellipseMidPoint: targetRef,\n };\n }\n const targetIndex = Number(targetRef);\n if (!Number.isInteger(targetIndex) || targetIndex < 0) return null;\n return {\n elementId,\n controlId,\n targetKind,\n targetIndex,\n };\n }\n\n private emitShapeHoverControlInteraction(\n eventType: 'click' | 'drag-start' | 'drag-move' | 'drag-end',\n control: ResolvedShapeHoverControl,\n point: Point,\n nativeEvent?: MouseEvent | PointerEvent,\n drag?: ElementShapeControlDragEvent,\n ): void {\n if (!this.onShapeHoverControlInteracted) return;\n const pointer = this.buildPointerInfo(point, nativeEvent);\n this.onShapeHoverControlInteracted({\n eventType,\n controlId: control.controlId,\n elementId: control.elementId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n pointer,\n edge:\n 'midpoint' in control.target\n ? {\n id: control.target.id,\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n }\n : undefined,\n ellipseMidPoint:\n 'ellipseMidPoint' in control.target\n ? control.target.ellipseMidPoint\n : undefined,\n vertex:\n 'position' in control.target && !('ellipseMidPoint' in control.target)\n ? {\n id: control.target.id,\n position: { ...control.target.position },\n }\n : undefined,\n drag: drag\n ? {\n sessionId: drag.sessionId,\n startPointer: {\n ...drag.startPointer,\n client: { ...drag.startPointer.client },\n world: { ...drag.startPointer.world },\n },\n delta: { ...drag.delta },\n }\n : undefined,\n });\n }\n\n private emitLegacyShapeHoverControlActivation(\n control: ResolvedShapeHoverControl,\n point: Point,\n nativeEvent?: MouseEvent | PointerEvent,\n ): void {\n if (!this.onShapeHoverControlActivated) return;\n if ('ellipseMidPoint' in control.target) return;\n const pointer = this.buildPointerInfo(point, nativeEvent);\n if ('position' in control.target) {\n this.onShapeHoverControlActivated({\n controlKind: 'vertex',\n elementId: control.elementId,\n targetId: control.target.id,\n pointer,\n vertex: {\n id: control.target.id,\n position: { ...control.target.position },\n },\n });\n return;\n }\n this.onShapeHoverControlActivated({\n controlKind: 'edge',\n elementId: control.elementId,\n targetId: control.target.id,\n pointer,\n edge: {\n id: control.target.id,\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n },\n });\n }\n\n private updateShapeHoverControl(point: Point): void {\n if (this.dragState) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (!this.shapeHoverControls) {\n this.clearActiveShapeHoverControl();\n return;\n }\n const hit = this.resolveHit(point);\n if (hit?.type === 'shape-hover-control' && this.activeShapeHoverControl) {\n return;\n }\n if (!hit || hit.type !== 'element') {\n this.clearActiveShapeHoverControl();\n return;\n }\n const resolved = this.resolveShapeHoverControl(hit.id, point);\n if (!resolved) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (\n this.activeShapeHoverControl &&\n this.activeShapeHoverControl.controlId === resolved.controlId &&\n this.activeShapeHoverControl.elementId === resolved.elementId &&\n this.activeShapeHoverControl.targetKind === resolved.targetKind &&\n this.activeShapeHoverControl.targetIndex === resolved.targetIndex &&\n this.isSameShapeHoverTarget(this.activeShapeHoverControl.target, resolved.target)\n ) {\n return;\n }\n this.activeShapeHoverControl = resolved;\n this.renderer?.renderShapeHoverControl?.(this.toShapeHoverRenderConfig(resolved));\n }\n\n private resolveShapeHoverControl(elementId: string, point: Point): ResolvedShapeHoverControl | null {\n const controls = this.shapeHoverControls?.controls;\n if (!controls?.length) return null;\n const element = this.getElementById(elementId);\n if (!element) return null;\n const shape = this.shapeRegistry?.get(element.shapeId);\n if (!shape) return null;\n const world = this.engine.getElementWorldPosition(elementId) ?? element.position;\n const rect = {\n x: world.x,\n y: world.y,\n width: element.size.width,\n height: element.size.height,\n };\n const geometry = shape.resolveHoverGeometry?.(rect);\n const transformed = geometry\n ? this.resolveRotatedHoverGeometry(\n geometry,\n elementId,\n world,\n element.size,\n element.anchorCenter ?? false,\n )\n : undefined;\n const ellipseMidPoints = this.resolveRotatedEllipseMidPoints(\n shape.resolveEllipseMidPoints?.(rect),\n elementId,\n world,\n element.size,\n element.anchorCenter ?? false,\n );\n for (let index = 0; index < controls.length; index += 1) {\n const control = controls[index];\n const targetHoverCandidate = control.visibilityTriggers.includes('target-hover')\n ? this.resolveTargetHoverCandidate(point, transformed, ellipseMidPoints, control)\n : null;\n const elementHoverCandidate = control.visibilityTriggers.includes('element-hover')\n ? this.resolveElementHoverCandidate(point, transformed, ellipseMidPoints, control)\n : null;\n const candidate = targetHoverCandidate ?? elementHoverCandidate;\n if (!candidate) continue;\n return {\n control,\n controlId: control.id,\n elementId,\n targetKind: control.targetKind,\n targetIndex: candidate.targetIndex,\n target: candidate.target,\n };\n }\n return null;\n }\n\n private resolveTargetHoverCandidate(\n point: Point,\n geometry: ShapeHoverGeometry | undefined,\n ellipseMidPoints: ShapeEllipseMidPointTarget[],\n control: NormalizedShapeControlDefinition,\n ): { targetIndex: number; target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget } | null {\n if (control.targetKind === 'ellipse-midpoint') {\n const targets = this.resolveEligibleEllipseMidPoints(control, ellipseMidPoints);\n if (!targets.length || control.tolerance <= 0) return null;\n let best: { target: ShapeEllipseMidPointTarget; distance: number } | null = null;\n for (const target of targets) {\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { target, distance };\n }\n if (!best) return null;\n return { targetIndex: ellipseMidPointToIndex(best.target.ellipseMidPoint), target: best.target };\n }\n if (!geometry) return null;\n const indices = this.resolveEligibleTargetIndices(control, geometry);\n if (!indices.length || control.tolerance <= 0) return null;\n if (control.targetKind === 'vertex') {\n let best: { targetIndex: number; target: ShapeVertexTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.vertices[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n if (control.targetKind === 'edge') {\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const projected = this.projectPointOnSegment(point, target.start, target.end);\n if (projected.distance > control.tolerance) continue;\n if (best && projected.distance >= best.distance) continue;\n best = { targetIndex, target, distance: projected.distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.midpoint.x, point.y - target.midpoint.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n\n private resolveElementHoverCandidate(\n point: Point,\n geometry: ShapeHoverGeometry | undefined,\n ellipseMidPoints: ShapeEllipseMidPointTarget[],\n control: NormalizedShapeControlDefinition,\n ): { targetIndex: number; target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget } | null {\n if (control.targetKind === 'ellipse-midpoint') {\n const targets = this.resolveEligibleEllipseMidPoints(control, ellipseMidPoints);\n if (!targets.length) return null;\n let best: { target: ShapeEllipseMidPointTarget; distance: number } | null = null;\n for (const target of targets) {\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (best && distance >= best.distance) continue;\n best = { target, distance };\n }\n if (!best) return null;\n return { targetIndex: ellipseMidPointToIndex(best.target.ellipseMidPoint), target: best.target };\n }\n if (!geometry) return null;\n const indices = this.resolveEligibleTargetIndices(control, geometry);\n if (!indices.length) return null;\n if (control.targetKind === 'vertex') {\n let best: { targetIndex: number; target: ShapeVertexTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.vertices[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n if (control.targetKind === 'edge') {\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const projected = this.projectPointOnSegment(point, target.start, target.end);\n if (best && projected.distance >= best.distance) continue;\n best = { targetIndex, target, distance: projected.distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.midpoint.x, point.y - target.midpoint.y);\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n\n private resolveEligibleTargetIndices(\n control: NormalizedShapeControlDefinition,\n geometry: ShapeHoverGeometry,\n ): number[] {\n const source = control.targetKind === 'vertex' ? geometry.vertices : geometry.edges;\n if (!source.length) return [];\n if (control.allowAllTargets === true) {\n return Array.from({ length: source.length }, (_, index) => index);\n }\n if (!control.targetIndices?.length) return [];\n return control.targetIndices.filter((targetIndex) => targetIndex >= 0 && targetIndex < source.length);\n }\n\n private resolveEligibleEllipseMidPoints(\n control: NormalizedShapeControlDefinition,\n targets: ShapeEllipseMidPointTarget[],\n ): ShapeEllipseMidPointTarget[] {\n if (!targets.length) return [];\n if (control.allowAllTargets === true) {\n return [...targets];\n }\n if (!control.ellipseMidPoints?.length) return [];\n return control.ellipseMidPoints\n .map((midPoint) => targets.find((target) => target.ellipseMidPoint === midPoint))\n .filter((target): target is ShapeEllipseMidPointTarget => Boolean(target));\n }\n\n private resolveRotatedHoverGeometry(\n geometry: ShapeHoverGeometry,\n elementId: string,\n worldPosition: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n ): ShapeHoverGeometry {\n const rotation = this.engine.getElementRotation(elementId);\n if (Math.abs(rotation) <= 1e-6) {\n return geometry;\n }\n const pivot = resolveRectRotationPivot(worldPosition, size, anchorCenter);\n const rotate = (input: Point) => rotatePoint(input, pivot, rotation);\n const vertices = geometry.vertices.map((vertex) => ({\n id: vertex.id,\n position: rotate(vertex.position),\n }));\n const edges = geometry.edges.map((edge) => {\n const start = rotate(edge.start);\n const end = rotate(edge.end);\n return {\n id: edge.id,\n start,\n end,\n midpoint: {\n x: (start.x + end.x) / 2,\n y: (start.y + end.y) / 2,\n },\n };\n });\n return { vertices, edges };\n }\n\n private resolveRotatedEllipseMidPoints(\n targets: ShapeEllipseMidPointTarget[] | undefined,\n elementId: string,\n worldPosition: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n ): ShapeEllipseMidPointTarget[] {\n if (!targets?.length) return [];\n const rotation = this.engine.getElementRotation(elementId);\n if (Math.abs(rotation) <= 1e-6) {\n return targets.map((target) => ({\n id: target.id,\n ellipseMidPoint: target.ellipseMidPoint,\n position: { ...target.position },\n }));\n }\n const pivot = resolveRectRotationPivot(worldPosition, size, anchorCenter);\n return targets.map((target) => ({\n id: target.id,\n ellipseMidPoint: target.ellipseMidPoint,\n position: rotatePoint(target.position, pivot, rotation),\n }));\n }\n\n private isSameShapeHoverTarget(\n previous: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget,\n next: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget,\n ): boolean {\n if ('midpoint' in previous && 'midpoint' in next) {\n return (\n this.isSamePoint(previous.start, next.start) &&\n this.isSamePoint(previous.end, next.end) &&\n this.isSamePoint(previous.midpoint, next.midpoint)\n );\n }\n if ('ellipseMidPoint' in previous && 'ellipseMidPoint' in next) {\n return (\n previous.ellipseMidPoint === next.ellipseMidPoint &&\n this.isSamePoint(previous.position, next.position)\n );\n }\n if ('position' in previous && 'position' in next) {\n return this.isSamePoint(previous.position, next.position);\n }\n return false;\n }\n\n private isSamePoint(a: Point, b: Point): boolean {\n return Math.abs(a.x - b.x) <= 1e-6 && Math.abs(a.y - b.y) <= 1e-6;\n }\n\n private toShapeHoverRenderConfig(control: ResolvedShapeHoverControl): ShapeHoverControlRenderConfig {\n if ('ellipseMidPoint' in control.target) {\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n targetRef: control.target.ellipseMidPoint,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n ellipseMidPoint: {\n id: control.target.id,\n position: { ...control.target.position },\n },\n };\n }\n if ('midpoint' in control.target) {\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n edge: {\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n lineStyle: control.targetKind === 'edge' ? control.control.lineStyle : undefined,\n },\n };\n }\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n vertex: {\n position: { ...control.target.position },\n },\n };\n }\n\n private clearActiveShapeHoverControl(): void {\n this.activeShapeHoverControl = null;\n this.renderer?.clearShapeHoverControl?.();\n }\n\n private startTextEdit(textId: string): void {\n if (typeof document === 'undefined') return;\r\n const text = this.getTextById(textId);\r\n if (!text) return;\r\n const container = this.getStageContainer();\r\n if (!container) return;\r\n this.disposeTextEditor();\r\n\r\n const editor = document.createElement('textarea');\n const defaults = resolveTextStyleDefaults(text.style);\n const fontSize = defaults.fontSize;\n const fontFamily = defaults.fontFamily;\n const baseWidth = text.size?.width ?? Math.max(text.content.length, 1) * fontSize * 0.6;\r\n const baseHeight = text.size?.height ?? fontSize * 1.2;\r\n const position = this.resolveTextScreenPosition(textId, text.position);\r\n\r\n if (container.style.position === '' || container.style.position === 'static') {\r\n container.style.position = 'relative';\r\n }\r\n\r\n editor.value = text.content;\r\n editor.style.position = 'absolute';\r\n editor.style.left = `${position.x}px`;\r\n editor.style.top = `${position.y}px`;\r\n editor.style.width = `${Math.max(baseWidth, 40)}px`;\r\n editor.style.height = `${Math.max(baseHeight, 20)}px`;\r\n editor.style.fontSize = `${fontSize}px`;\r\n editor.style.fontFamily = fontFamily;\r\n editor.style.padding = '2px 4px';\r\n editor.style.margin = '0';\r\n editor.style.border = '1px solid #1f4d99';\r\n editor.style.borderRadius = '4px';\r\n editor.style.background = '#ffffff';\r\n editor.style.resize = 'none';\r\n editor.style.outline = 'none';\r\n editor.style.zIndex = '10';\r\n\r\n let finalized = false;\r\n const finalize = (apply: boolean) => {\r\n if (finalized) return;\r\n finalized = true;\r\n const value = editor.value;\r\n editor.remove();\r\n this.textEditor = null;\r\n if (apply && value !== text.content) {\r\n this.engine.updateText(textId, value);\r\n }\r\n };\r\n\r\n editor.addEventListener('keydown', (event) => {\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n event.preventDefault();\r\n finalize(true);\r\n } else if (event.key === 'Escape') {\r\n event.preventDefault();\r\n finalize(false);\r\n }\r\n });\r\n editor.addEventListener('blur', () => finalize(true));\r\n\r\n container.appendChild(editor);\r\n editor.focus();\r\n editor.select();\r\n this.textEditor = editor;\r\n }\r\n\r\n private disposeTextEditor(): void {\r\n if (!this.textEditor) return;\r\n this.textEditor.remove();\r\n this.textEditor = null;\r\n }\r\n\r\n private updateSelectionOverlays(): void {\n if (!this.renderer) return;\r\n const selection = this.engine.getSelection();\r\n if (selection.length !== 1) {\r\n this.renderer.clearResizeHandles();\r\n this.renderer.clearLinkHandles();\r\n return;\r\n }\r\n const id = selection[0];\r\n const element = this.getElementById(id);\n if (element) {\n const position = this.engine.getElementWorldPosition(id) ?? element.position;\n this.renderElementResizeHandles(id, position, element);\n this.renderer.clearLinkHandles();\n return;\n }\n const link = this.getLinkById(id);\r\n if (link) {\r\n this.renderer.renderLinkHandles(id, link.points);\r\n this.renderer.clearResizeHandles();\r\n return;\r\n }\r\n this.renderer.clearResizeHandles();\n this.renderer.clearLinkHandles();\n }\n\n private renderElementResizeHandles(\n elementId: string,\n position: Point,\n element: { size: { width: number; height: number }; anchorCenter?: boolean },\n ): void {\n if (!this.renderer) return;\n const rotation = this.engine.getElementRotation(elementId);\n const anchorCenter = element.anchorCenter ?? false;\n if (Math.abs(rotation) > 1e-6 || anchorCenter) {\n this.renderer.renderResizeHandles(elementId, position, element.size, { rotation, anchorCenter });\n return;\n }\n this.renderer.renderResizeHandles(elementId, position, element.size);\n }\n\r\n private handleResizeDrag(state: Extract<DragState, { mode: 'resize' }>, point: Point): void {\n const minSize = 20;\n const origin = state.origin;\n const originX = origin.worldPosition.x;\n const originY = origin.worldPosition.y;\n const originWidth = origin.size.width;\n const originHeight = origin.size.height;\n const originRight = originX + originWidth;\n const originBottom = originY + originHeight;\n\n let localPoint = point;\n if (Math.abs(origin.rotation) > 1e-6) {\n const pivot = resolveRectRotationPivot(origin.worldPosition, origin.size, origin.anchorCenter);\n localPoint = rotatePoint(point, pivot, -origin.rotation);\n }\n\n let x = originX;\n let y = originY;\n let width = originWidth;\n let height = originHeight;\n\n switch (state.handle) {\n case 'se':\n width = Math.max(minSize, localPoint.x - originX);\n height = Math.max(minSize, localPoint.y - originY);\n break;\n case 'sw':\n width = Math.max(minSize, originRight - localPoint.x);\n x = originRight - width;\n height = Math.max(minSize, localPoint.y - originY);\n break;\n case 'ne':\n height = Math.max(minSize, originBottom - localPoint.y);\n y = originBottom - height;\n width = Math.max(minSize, localPoint.x - originX);\n break;\n case 'nw':\n width = Math.max(minSize, originRight - localPoint.x);\n height = Math.max(minSize, originBottom - localPoint.y);\n x = originRight - width;\n y = originBottom - height;\n break;\n default:\n break;\n }\n\n const normalized = this.engine.normalizeElementResize(state.elementId, { x, y, width, height }, state.handle, minSize);\n const moveTarget = origin.anchorCenter\n ? {\n x: normalized.x + normalized.width / 2,\n y: normalized.y + normalized.height / 2,\n }\n : { x: normalized.x, y: normalized.y };\n this.engine.moveElementTo(state.elementId, moveTarget.x, moveTarget.y);\n this.engine.resizeElement(state.elementId, normalized.width, normalized.height);\n this.updateSelectionOverlays();\n }\n\r\n private parseResizeHandle(id: string): { elementId: string; handle: 'nw' | 'ne' | 'sw' | 'se' } | null {\r\n const parts = id.split(':');\r\n if (parts.length !== 3 || parts[0] !== 'resize') return null;\r\n const handle = parts[2] as 'nw' | 'ne' | 'sw' | 'se';\r\n if (!['nw', 'ne', 'sw', 'se'].includes(handle)) return null;\r\n return { elementId: parts[1], handle };\r\n }\r\n\r\n private parseLinkHandle(id: string): { linkId: string; pointIndex: number } | null {\r\n const parts = id.split(':');\r\n if (parts.length !== 3 || parts[0] !== 'link-handle') return null;\r\n const index = Number(parts[2]);\r\n if (Number.isNaN(index)) return null;\r\n return { linkId: parts[1], pointIndex: index };\r\n }\r\n\r\n private getResizeCursor(handle: 'nw' | 'ne' | 'sw' | 'se'): string {\r\n if (handle === 'nw' || handle === 'se') return 'nwse-resize';\r\n return 'nesw-resize';\r\n }\r\n\r\n private normalizeRect(a: Point, b: Point): { x: number; y: number; width: number; height: number } {\r\n const x = Math.min(a.x, b.x);\r\n const y = Math.min(a.y, b.y);\r\n const width = Math.abs(a.x - b.x);\r\n const height = Math.abs(a.y - b.y);\r\n return { x, y, width, height };\r\n }\r\n\r\n private findNearestSegmentPoint(points: Point[], target: Point): { index: number; point: Point } | null {\r\n if (points.length < 2) return null;\r\n let bestIndex = 0;\r\n let bestPoint = points[0];\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n\r\n for (let i = 0; i < points.length - 1; i += 1) {\r\n const projected = this.projectPointOnSegment(target, points[i], points[i + 1]);\r\n if (projected.distance < bestDistance) {\r\n bestDistance = projected.distance;\r\n bestIndex = i;\r\n bestPoint = projected.point;\r\n }\r\n }\r\n\r\n return { index: bestIndex, point: bestPoint };\r\n }\r\n\r\n private projectPointOnSegment(point: Point, a: Point, b: Point): { point: Point; distance: number } {\r\n const dx = b.x - a.x;\r\n const dy = b.y - a.y;\r\n const len2 = dx * dx + dy * dy;\r\n if (len2 === 0) {\r\n const distance = Math.hypot(point.x - a.x, point.y - a.y);\r\n return { point: { ...a }, distance };\r\n }\r\n const t = ((point.x - a.x) * dx + (point.y - a.y) * dy) / len2;\r\n const clamped = Math.max(0, Math.min(1, t));\r\n const projected = { x: a.x + clamped * dx, y: a.y + clamped * dy };\r\n const distance = Math.hypot(point.x - projected.x, point.y - projected.y);\r\n return { point: projected, distance };\r\n }\r\n\r\n private applyMarqueeSelection(\r\n rect: { x: number; y: number; width: number; height: number },\r\n isMulti: boolean,\r\n ): void {\r\n const state = this.engine.getState();\r\n const selected = new Set<string>(isMulti ? this.engine.getSelection() : []);\r\n const containsPoint = (point: Point) =>\r\n point.x >= rect.x &&\r\n point.x <= rect.x + rect.width &&\r\n point.y >= rect.y &&\r\n point.y <= rect.y + rect.height;\r\n state.elements.forEach((element) => {\n const position = this.engine.getElementWorldPosition(element.id) ?? element.position;\n const rotation = this.engine.getElementRotation(element.id);\n const anchorCenter = element.anchorCenter ?? false;\n if (Math.abs(rotation) < 1e-6 && !anchorCenter) {\n const elementRect = { x: position.x, y: position.y, width: element.size.width, height: element.size.height };\n if (rectsIntersect(rect, elementRect)) {\n selected.add(element.id);\n }\n return;\n }\n const corners = getRotatedRectCorners(position, element.size, rotation, anchorCenter);\n if (polygonIntersectsRect([corners.nw, corners.ne, corners.se, corners.sw], rect)) {\n selected.add(element.id);\n }\n });\n state.ports.forEach((port) => {\r\n const position = this.engine.getPortWorldPosition(port.id) ?? port.position;\r\n if (containsPoint(position)) {\r\n selected.add(port.id);\r\n }\r\n });\r\n state.texts.forEach((text) => {\r\n const position = this.engine.getTextWorldPosition(text.id) ?? text.position;\r\n const width = text.size?.width ?? 0;\r\n const height = text.size?.height ?? 0;\r\n const textRect = { x: position.x, y: position.y, width, height };\r\n if (rectsIntersect(rect, textRect) || containsPoint(position)) {\r\n selected.add(text.id);\r\n }\r\n });\r\n state.links.forEach((link) => {\r\n if (link.points.length === 0) return;\r\n const xs = link.points.map((point) => point.x);\r\n const ys = link.points.map((point) => point.y);\r\n const linkRect = {\r\n x: Math.min(...xs),\r\n y: Math.min(...ys),\r\n width: Math.max(...xs) - Math.min(...xs),\r\n height: Math.max(...ys) - Math.min(...ys),\r\n };\r\n if (rectsIntersect(rect, linkRect)) {\r\n selected.add(link.id);\r\n }\r\n });\r\n this.engine.setSelection(Array.from(selected));\r\n }\r\n\r\n private applyPortConstraints(portId: string, worldTarget: Point): Point {\n const port = this.getPortById(portId);\r\n if (!port) return worldTarget;\r\n const elementPos = this.engine.getElementWorldPosition(port.elementId);\r\n if (!elementPos) return worldTarget;\r\n const relative = { x: worldTarget.x - elementPos.x, y: worldTarget.y - elementPos.y };\r\n const style = port.style as { moveBounds?: { x: number; y: number; width: number; height: number }; moveAxis?: 'horizontal' | 'vertical' } | undefined;\r\n\r\n let constrained = { ...relative };\r\n if (style?.moveAxis === 'horizontal') {\r\n constrained.y = port.position.y;\r\n } else if (style?.moveAxis === 'vertical') {\r\n constrained.x = port.position.x;\r\n }\r\n if (style?.moveBounds) {\r\n const bounds = style.moveBounds;\r\n constrained.x = Math.min(bounds.x + bounds.width, Math.max(bounds.x, constrained.x));\r\n constrained.y = Math.min(bounds.y + bounds.height, Math.max(bounds.y, constrained.y));\r\n }\r\n return { x: elementPos.x + constrained.x, y: elementPos.y + constrained.y };\n }\n\n private tryCreateLinkToPort(\n sourcePortId: string,\n sourceElementId: string,\n targetPortId: string,\n ): { createdLinkId: string | null; targetPortId: string; targetElementId: string | null } {\n const targetElementId = this.engine.getPortElementId(targetPortId);\n const cancelledByHost =\n targetElementId !== null &&\n this.engine.emitElementLinkConnecting({\n sourcePortId,\n sourceElementId,\n targetPortId,\n targetElementId,\n cancel: () => {},\n cancelled: false,\n });\n if (cancelledByHost || !targetElementId) {\n return { createdLinkId: null, targetPortId, targetElementId };\n }\n const createdLinkId = createId();\n this.engine.addLink({\n id: createdLinkId,\n sourcePortId,\n targetPortId,\n points: [],\n });\n return { createdLinkId, targetPortId, targetElementId };\n }\n\n private createPortForLink(elementId: string, worldPoint: Point, sourcePortId: string): string | null {\n const element = this.getElementById(elementId);\n if (!element) return null;\n const elementPosition = this.engine.getElementWorldPosition(elementId) ?? element.position;\n const relative = {\r\n x: worldPoint.x - elementPosition.x,\r\n y: worldPoint.y - elementPosition.y,\r\n };\n const sourcePort = this.getPortById(sourcePortId);\n const destinationMoveMode =\n element.portMovement?.moveMode && element.portMovement.moveMode !== 'anchors'\n ? element.portMovement.moveMode\n : undefined;\n const portId = createId();\n this.engine.addPortToElement(elementId, {\n id: portId,\n elementId,\n position: relative,\n shapeId: sourcePort?.shapeId,\n size: sourcePort?.size ? { ...sourcePort.size } : undefined,\n style: sourcePort?.style ? { ...sourcePort.style } : undefined,\n moveMode: destinationMoveMode ?? sourcePort?.moveMode,\n anchorCenter: sourcePort?.anchorCenter ?? true,\n orientToHostBorder: sourcePort?.orientToHostBorder ?? true,\n });\n this.engine.movePortTo(portId, worldPoint.x, worldPoint.y);\n return portId;\n }\n\n private createPlaceholderPort(elementId: string, worldPoint: Point, sourcePortId: string) {\n const element = this.getElementById(elementId);\n const sourcePort = this.getPortById(sourcePortId);\n const destinationMoveMode =\n element?.portMovement?.moveMode && element.portMovement.moveMode !== 'anchors'\n ? element.portMovement.moveMode\n : undefined;\n return {\n id: `port-placeholder:${sourcePortId}`,\n elementId,\n position: { x: worldPoint.x, y: worldPoint.y },\n shapeId: sourcePort?.shapeId,\n size: sourcePort?.size ? { ...sourcePort.size } : undefined,\n style: sourcePort?.style ? { ...sourcePort.style } : undefined,\n moveMode: destinationMoveMode ?? sourcePort?.moveMode,\n anchorCenter: sourcePort?.anchorCenter ?? true,\n orientToHostBorder: sourcePort?.orientToHostBorder ?? true,\n };\n }\n\r\n private getElementById(id: string) {\r\n return this.engine.getState().elements.find((element) => element.id === id);\r\n }\r\n\r\n private getPortById(id: string) {\r\n return this.engine.getState().ports.find((port) => port.id === id);\r\n }\r\n\r\n private getTextById(id: string) {\r\n return this.engine.getState().texts.find((text) => text.id === id);\r\n }\r\n\r\n private getLinkById(id: string): LinkData | undefined {\r\n return this.engine.getState().links.find((link) => link.id === id);\r\n }\r\n\r\n private resolveTextScreenPosition(textId: string, fallbackPosition: Point): Point {\r\n const world = this.engine.getTextWorldPosition(textId) ?? fallbackPosition;\r\n return {\r\n x: world.x * this.zoom + this.pan.x,\r\n y: world.y * this.zoom + this.pan.y,\r\n };\r\n }\r\n\r\n private applyViewportPatch(patches: { entity: string; payload?: Record<string, unknown> }[]): void {\r\n const viewportPatch = patches.find((patch) => patch.entity === 'viewport');\r\n if (!viewportPatch?.payload) return;\r\n const pan = viewportPatch.payload.pan as Point | undefined;\r\n const zoom = viewportPatch.payload.zoom as number | undefined;\r\n if (!pan || typeof zoom !== 'number') return;\r\n if (pan.x === this.pan.x && pan.y === this.pan.y && zoom === this.zoom) return;\r\n this.pan = { ...pan };\r\n this.zoom = zoom;\r\n this.applyStageTransform();\r\n }\r\n\r\n private applyStageTransform(): void {\r\n const stageAny = this.stage as unknown as {\r\n scale?: (value: { x: number; y: number }) => void;\r\n position?: (value: Point) => void;\r\n };\r\n stageAny?.scale?.({ x: this.zoom, y: this.zoom });\r\n stageAny?.position?.(this.pan);\r\n }\r\n\r\n private cancelLinkDrag(): void {\n if (this.dragState?.mode === 'shape-control-drag') {\n const point = this.lastPointerPosition ?? this.dragState.start;\n if (this.dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-end', this.dragState.control, point, undefined, {\n sessionId: this.dragState.sessionId,\n startPointer: this.dragState.startPointer,\n delta: {\n x: point.x - this.dragState.start.x,\n y: point.y - this.dragState.start.y,\n },\n });\n }\n this.dragState = null;\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n return;\n }\n if (!this.dragState || this.dragState.mode !== 'link-drag') {\n if (this.linkDragContext) {\n this.engine.emitElementLinkEnded({\n ...this.linkDragContext,\r\n cancelled: true,\r\n });\r\n this.linkDragContext = null;\r\n }\r\n return;\r\n }\r\n const point = this.dragState.current ?? this.dragState.start;\r\n const pointerInfo = this.buildPointerInfo(point, null);\r\n this.engine.emitPortMouseUp({\r\n portId: this.dragState.sourcePortId,\r\n elementId: this.dragState.sourceElementId,\r\n pointer: pointerInfo,\r\n });\r\n this.engine.emitElementLinkEnded({\r\n sourcePortId: this.dragState.sourcePortId,\r\n sourceElementId: this.dragState.sourceElementId,\r\n cancelled: true,\r\n });\r\n this.linkDragContext = null;\r\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.dragState = null;\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n\r\n private isEditableTarget(target: EventTarget | null): boolean {\r\n if (!target || !(target instanceof HTMLElement)) return false;\r\n if (target.isContentEditable) return true;\r\n const tag = target.tagName.toLowerCase();\r\n return tag === 'input' || tag === 'textarea' || tag === 'select';\r\n }\r\n\r\n private isPanKeyPressed(event: MouseEvent | PointerEvent): boolean {\r\n switch (this.panKey) {\r\n case 'Shift':\r\n return event.shiftKey;\r\n case 'Alt':\r\n return event.altKey;\r\n case 'Meta':\r\n return event.metaKey;\r\n case 'Control':\r\n default:\r\n return event.ctrlKey;\r\n }\r\n }\r\n}\r\n","import {\n EllipseMidPoint,\n Point,\n PortAnchor,\n Rect,\n ResolvePortAnchorsOptions,\n ShapeEdgeTarget,\n ShapeEllipseMidPointTarget,\n ShapeHoverGeometry,\n ShapeVertexTarget,\n} from '../api/types';\nimport { ShapeNodeSizeUpdater, ShapeResizeNormalizeContext } from '../renderer/RenderTypes';\nimport { BorderSide, projectPointToBoundary, resolveBoundarySide } from '../utils/borderGeometry';\n\nexport type BuiltInShapeKind =\n | 'rect'\n | 'circle'\n | 'ellipse'\n | 'diamond'\n | 'triangle'\n | 'pentagon'\n | 'hexagon';\n\nexport type ShapeNodeModel = {\n id: string;\n position: { x: number; y: number };\n size?: { width?: number; height?: number };\n style?: Record<string, unknown>;\n anchorCenter?: boolean;\n};\n\nexport type KonvaShapeLibraryLike = {\n Rect: new (config: Record<string, unknown>) => unknown;\n Circle: new (config: Record<string, unknown>) => unknown;\n Ellipse: new (config: Record<string, unknown>) => unknown;\n Line: new (config: Record<string, unknown>) => unknown;\n};\n\nexport type ShapeCreateContext = {\n Konva: KonvaShapeLibraryLike;\n model: ShapeNodeModel;\n isPort: boolean;\n anchorCenter: boolean;\n};\n\ntype ShapeLibraryConfig = {\n id: string;\n kind: BuiltInShapeKind;\n style?: Record<string, unknown>;\n};\n\nconst resolveModelSize = (\n model: ShapeNodeModel,\n defaults: { width: number; height: number },\n): { width: number; height: number } => ({\n width: model.size?.width ?? defaults.width,\n height: model.size?.height ?? defaults.height,\n});\n\nconst resolveShapeName = (style: Record<string, unknown> | undefined, isPort: boolean): string =>\n (style?.name as string | undefined) ?? (isPort ? 'port' : 'element');\n\nconst splitStyleRotation = (\n style: Record<string, unknown> | undefined,\n): { style: Record<string, unknown> | undefined; rotation: number } => {\n if (!style) return { style: undefined, rotation: 0 };\n const { rotation, ...rest } = style;\n return {\n style: rest,\n rotation: typeof rotation === 'number' ? rotation : 0,\n };\n};\n\nconst createRectSizeUpdater = (): ShapeNodeSizeUpdater => ({ size, anchorCenter, updateOffsetX, updateOffsetY }) => {\n const attrs: Record<string, unknown> = {};\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? size.width / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? size.height / 2 : 0;\n }\n return attrs;\n};\n\nconst createCircleSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const autoRadius = getNodeAttr<boolean>('__autoRadius');\n const computedRadius = Math.min(size.width, size.height) / 2;\n const resolvedRadius =\n autoRadius === false ? (getNodeAttr<number>('radius') ?? computedRadius) : computedRadius;\n if (autoRadius !== false) {\n attrs.radius = computedRadius;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? 0 : -resolvedRadius;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? 0 : -resolvedRadius;\n }\n return attrs;\n};\n\nconst createEllipseSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const radiusX = Math.max(0, size.width / 2);\n const radiusY = Math.max(0, size.height / 2);\n const autoRadiusX = getNodeAttr<boolean>('__autoRadiusX');\n const autoRadiusY = getNodeAttr<boolean>('__autoRadiusY');\n const resolvedRadiusX = autoRadiusX === false ? (getNodeAttr<number>('radiusX') ?? radiusX) : radiusX;\n const resolvedRadiusY = autoRadiusY === false ? (getNodeAttr<number>('radiusY') ?? radiusY) : radiusY;\n if (autoRadiusX !== false) {\n attrs.radiusX = radiusX;\n }\n if (autoRadiusY !== false) {\n attrs.radiusY = radiusY;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? 0 : -resolvedRadiusX;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? 0 : -resolvedRadiusY;\n }\n return attrs;\n};\n\nconst createPolygonSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const autoPoints = getNodeAttr<boolean>('__autoPoints');\n const edgeCount = Math.max(3, getNodeAttr<number>('__edgeCount') ?? 3);\n if (autoPoints !== false) {\n attrs.points = resolveRegularPolygonPoints(size, edgeCount);\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? size.width / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? size.height / 2 : 0;\n }\n return attrs;\n};\n\nconst resolveRegularPolygonPoints = (\n size: { width: number; height: number },\n sides: number,\n baseRotation = 0,\n): number[] => {\n const cx = size.width / 2;\n const cy = size.height / 2;\n const rx = size.width / 2;\n const ry = size.height / 2;\n const baseRadians = (baseRotation * Math.PI) / 180;\n const points: number[] = [];\n for (let i = 0; i < sides; i += 1) {\n const angle = -Math.PI / 2 + baseRadians + (i * Math.PI * 2) / sides;\n points.push(cx + rx * Math.cos(angle), cy + ry * Math.sin(angle));\n }\n return points;\n};\n\nconst projectPointToSegment = (\n point: { x: number; y: number },\n start: { x: number; y: number },\n end: { x: number; y: number },\n): { x: number; y: number } => {\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const lengthSquared = dx * dx + dy * dy;\n if (lengthSquared <= 1e-6) return { x: start.x, y: start.y };\n const t = ((point.x - start.x) * dx + (point.y - start.y) * dy) / lengthSquared;\n const clamped = Math.max(0, Math.min(1, t));\n return { x: start.x + dx * clamped, y: start.y + dy * clamped };\n};\n\nconst resolveDirectionalRectSide = (point: Point, rect: Rect): BorderSide => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) return 'top';\n const nx = (point.x - cx) / rx;\n const ny = (point.y - cy) / ry;\n if (Math.abs(nx) < 1e-6 && Math.abs(ny) < 1e-6) return 'top';\n if (Math.abs(nx) >= Math.abs(ny)) return nx < 0 ? 'left' : 'right';\n return ny < 0 ? 'top' : 'bottom';\n};\n\nconst projectPointToCircleBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const radius = Math.min(rect.width, rect.height) / 2;\n if (radius <= 0) return { x: cx, y: cy };\n const dx = point.x - cx;\n const dy = point.y - cy;\n if (Math.abs(dx) < 1e-6 && Math.abs(dy) < 1e-6) {\n return { x: cx, y: cy - radius };\n }\n const scale = radius / Math.sqrt(dx * dx + dy * dy);\n return { x: cx + dx * scale, y: cy + dy * scale };\n};\n\nconst projectPointToPolygonBorder = (\n point: Point,\n rect: Rect,\n resolvePoints: (size: { width: number; height: number }) => number[],\n): Point => {\n const localPoints = resolvePoints({ width: Math.max(0, rect.width), height: Math.max(0, rect.height) });\n if (localPoints.length < 6) {\n return { x: rect.x, y: rect.y };\n }\n\n const vertices: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < localPoints.length; i += 2) {\n vertices.push({ x: rect.x + localPoints[i], y: rect.y + localPoints[i + 1] });\n }\n\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const dx = point.x - cx;\n const dy = point.y - cy;\n\n let bestRayT = Number.POSITIVE_INFINITY;\n let bestRayPoint: Point | null = null;\n for (let i = 0; i < vertices.length; i += 1) {\n const start = vertices[i];\n const end = vertices[(i + 1) % vertices.length];\n const edgeDx = end.x - start.x;\n const edgeDy = end.y - start.y;\n const denom = dx * edgeDy - dy * edgeDx;\n if (Math.abs(denom) < 1e-6) continue;\n const fromCenterX = start.x - cx;\n const fromCenterY = start.y - cy;\n const rayT = (fromCenterX * edgeDy - fromCenterY * edgeDx) / denom;\n const edgeT = (fromCenterX * dy - fromCenterY * dx) / denom;\n if (rayT >= 0 && edgeT >= 0 && edgeT <= 1 && rayT < bestRayT) {\n bestRayT = rayT;\n bestRayPoint = { x: cx + dx * rayT, y: cy + dy * rayT };\n }\n }\n if (bestRayPoint) return bestRayPoint;\n\n let nearest = vertices[0];\n let nearestDistanceSquared = Number.POSITIVE_INFINITY;\n for (let i = 0; i < vertices.length; i += 1) {\n const start = vertices[i];\n const end = vertices[(i + 1) % vertices.length];\n const projected = projectPointToSegment(point, start, end);\n const diffX = projected.x - point.x;\n const diffY = projected.y - point.y;\n const distanceSquared = diffX * diffX + diffY * diffY;\n if (distanceSquared < nearestDistanceSquared) {\n nearestDistanceSquared = distanceSquared;\n nearest = projected;\n }\n }\n return nearest;\n};\n\nconst normalizeVector = (vector: Point): Point => {\n const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);\n if (length <= 1e-6) return { x: 0, y: -1 };\n return { x: vector.x / length, y: vector.y / length };\n};\n\nconst resolveCardinalAnchors = (rect: Rect): PortAnchor[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n { id: 'top', position: { x: cx, y: rect.y }, side: 'top', normal: { x: 0, y: -1 } },\n { id: 'right', position: { x: rect.x + rect.width, y: cy }, side: 'right', normal: { x: 1, y: 0 } },\n { id: 'bottom', position: { x: cx, y: rect.y + rect.height }, side: 'bottom', normal: { x: 0, y: 1 } },\n { id: 'left', position: { x: rect.x, y: cy }, side: 'left', normal: { x: -1, y: 0 } },\n ];\n};\n\nconst createEllipseMidPointTarget = (\n ellipseMidPoint: EllipseMidPoint,\n position: Point,\n): ShapeEllipseMidPointTarget => ({\n id: ellipseMidPoint,\n ellipseMidPoint,\n position,\n});\n\nconst resolveEllipseMidPoints = (rect: Rect): ShapeEllipseMidPointTarget[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n createEllipseMidPointTarget(EllipseMidPoint.top, { x: cx, y: rect.y }),\n createEllipseMidPointTarget(EllipseMidPoint.right, { x: rect.x + rect.width, y: cy }),\n createEllipseMidPointTarget(EllipseMidPoint.bottom, { x: cx, y: rect.y + rect.height }),\n createEllipseMidPointTarget(EllipseMidPoint.left, { x: rect.x, y: cy }),\n ];\n};\n\nconst resolveCircleMidPoints = (rect: Rect): ShapeEllipseMidPointTarget[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const radius = Math.max(0, Math.min(rect.width, rect.height) / 2);\n return [\n createEllipseMidPointTarget(EllipseMidPoint.top, { x: cx, y: cy - radius }),\n createEllipseMidPointTarget(EllipseMidPoint.right, { x: cx + radius, y: cy }),\n createEllipseMidPointTarget(EllipseMidPoint.bottom, { x: cx, y: cy + radius }),\n createEllipseMidPointTarget(EllipseMidPoint.left, { x: cx - radius, y: cy }),\n ];\n};\n\nconst resolveRegularPolygonVertices = (\n rect: Rect,\n edgeCount: number,\n): Point[] => {\n const points = resolveRegularPolygonPoints(\n { width: Math.max(0, rect.width), height: Math.max(0, rect.height) },\n edgeCount,\n );\n const vertices: Point[] = [];\n for (let i = 0; i < points.length; i += 2) {\n vertices.push({ x: rect.x + points[i], y: rect.y + points[i + 1] });\n }\n return vertices;\n};\n\nconst createHoverGeometryFromVertices = (vertices: Point[]): ShapeHoverGeometry => {\n const shapeVertices: ShapeVertexTarget[] = vertices.map((position, index) => ({\n id: `v${index}`,\n position,\n }));\n const edges: ShapeEdgeTarget[] = shapeVertices.map((vertex, index) => {\n const next = shapeVertices[(index + 1) % shapeVertices.length];\n const midpoint = {\n x: (vertex.position.x + next.position.x) / 2,\n y: (vertex.position.y + next.position.y) / 2,\n };\n return {\n id: `e${index}`,\n start: vertex.position,\n end: next.position,\n midpoint,\n };\n });\n return { vertices: shapeVertices, edges };\n};\n\nexport abstract class BuiltInShape {\n readonly id: string;\n readonly style?: Record<string, unknown>;\n readonly renderStyle?: Record<string, unknown>;\n readonly baseRotation: number;\n abstract readonly sizeUpdater: ShapeNodeSizeUpdater;\n normalizeResize?: (context: ShapeResizeNormalizeContext) => { width: number; height: number };\n\n constructor(id: string, style?: Record<string, unknown>, presetBaseRotation = 0) {\n this.id = id;\n this.style = style;\n const split = splitStyleRotation(style);\n this.renderStyle = split.style;\n this.baseRotation = presetBaseRotation + split.rotation;\n }\n\n abstract createNode(context: ShapeCreateContext): unknown;\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToBoundary(point, rect, 'rect');\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n return resolveBoundarySide(point, rect, 'rect');\n }\n\n resolvePortAnchors(_rect: Rect, _options: ResolvePortAnchorsOptions): PortAnchor[] {\n return [];\n }\n\n resolveHoverGeometry(_rect: Rect): ShapeHoverGeometry | undefined {\n return undefined;\n }\n\n resolveEllipseMidPoints(_rect: Rect): ShapeEllipseMidPointTarget[] | undefined {\n return undefined;\n }\n\n protected resolveShapeName(isPort: boolean): string {\n return resolveShapeName(this.style, isPort);\n }\n}\n\nexport class RectangleShape extends BuiltInShape {\n readonly sizeUpdater = createRectSizeUpdater();\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, { width: 160, height: 100 });\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? size.width / 2 : 0);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? size.height / 2 : 0);\n return new Konva.Rect({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n width: size.width,\n height: size.height,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'vertices') return [];\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n { id: 'top-left', position: { x: rect.x, y: rect.y } },\n { id: 'top-right', position: { x: rect.x + rect.width, y: rect.y } },\n { id: 'bottom-right', position: { x: rect.x + rect.width, y: rect.y + rect.height } },\n { id: 'bottom-left', position: { x: rect.x, y: rect.y + rect.height } },\n ].map((anchor) => ({\n ...anchor,\n side: resolveDirectionalRectSide(anchor.position, rect),\n normal: normalizeVector({ x: anchor.position.x - cx, y: anchor.position.y - cy }),\n }));\n }\n\n resolveHoverGeometry(rect: Rect): ShapeHoverGeometry {\n const vertices = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n return createHoverGeometryFromVertices(vertices);\n }\n}\n\nexport class EllipseShape extends BuiltInShape {\n readonly sizeUpdater = createEllipseSizeUpdater();\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, { width: 160, height: 100 });\n const radiusX = size.width / 2;\n const radiusY = size.height / 2;\n const hasRadiusX = typeof this.style?.radiusX === 'number';\n const hasRadiusY = typeof this.style?.radiusY === 'number';\n const resolvedRadiusX = (this.style?.radiusX as number | undefined) ?? radiusX;\n const resolvedRadiusY = (this.style?.radiusY as number | undefined) ?? radiusY;\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? 0 : -resolvedRadiusX);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? 0 : -resolvedRadiusY);\n return new Konva.Ellipse({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n radiusX: resolvedRadiusX,\n radiusY: resolvedRadiusY,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoRadiusX: !hasRadiusX,\n __autoRadiusY: !hasRadiusY,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToBoundary(point, rect, 'ellipse');\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n return resolveBoundarySide(point, rect, 'ellipse');\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'cardinal') return [];\n return resolveCardinalAnchors(rect);\n }\n\n resolveEllipseMidPoints(rect: Rect): ShapeEllipseMidPointTarget[] {\n return resolveEllipseMidPoints(rect);\n }\n}\n\nexport class CircleShape extends BuiltInShape {\n readonly sizeUpdater = createCircleSizeUpdater();\n normalizeResize = ({ proposal, minSize }: ShapeResizeNormalizeContext): { width: number; height: number } => {\n const side = Math.max(minSize, proposal.width, proposal.height);\n return { width: side, height: side };\n };\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = model.size;\n const hasSize = Boolean(size?.width && size?.height);\n const hasRadius = typeof this.style?.radius === 'number';\n const radius =\n (this.style?.radius as number | undefined) ??\n (hasSize ? Math.min(size?.width ?? 8, size?.height ?? 8) / 2 : 4);\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? 0 : -radius);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? 0 : -radius);\n return new Konva.Circle({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n radius,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoRadius: !hasRadius,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToCircleBorder(point, rect);\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n const projected = projectPointToCircleBorder(point, rect);\n return resolveDirectionalRectSide(projected, rect);\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'cardinal') return [];\n return resolveCardinalAnchors(rect);\n }\n\n resolveEllipseMidPoints(rect: Rect): ShapeEllipseMidPointTarget[] {\n return resolveCircleMidPoints(rect);\n }\n}\n\nexport class PolygonShape extends BuiltInShape {\n readonly sizeUpdater = createPolygonSizeUpdater();\n readonly edgeCount: number;\n private readonly defaults: { width: number; height: number };\n\n constructor(\n id: string,\n style: Record<string, unknown> | undefined,\n edgeCount: number,\n defaults: { width: number; height: number },\n presetBaseRotation = 0,\n ) {\n super(id, style, presetBaseRotation);\n this.edgeCount = Math.max(3, edgeCount);\n this.defaults = defaults;\n }\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, this.defaults);\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? size.width / 2 : 0);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? size.height / 2 : 0);\n return new Konva.Line({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n points: resolveRegularPolygonPoints(size, this.edgeCount),\n closed: true,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoPoints: true,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n __edgeCount: this.edgeCount,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToPolygonBorder(point, rect, (size) =>\n resolveRegularPolygonPoints(size, this.edgeCount),\n );\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n const projected = this.projectToBorder(point, rect);\n return resolveDirectionalRectSide(projected, rect);\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'vertices') return [];\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return resolveRegularPolygonVertices(rect, this.edgeCount).map((position, index) => ({\n id: `v${index}`,\n position,\n side: resolveDirectionalRectSide(position, rect),\n normal: normalizeVector({ x: position.x - cx, y: position.y - cy }),\n }));\n }\n\n resolveHoverGeometry(rect: Rect): ShapeHoverGeometry {\n return createHoverGeometryFromVertices(resolveRegularPolygonVertices(rect, this.edgeCount));\n }\n}\n\nexport class DiamondShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 4, { width: 120, height: 80 });\n }\n}\n\nexport class TriangleShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 3, { width: 120, height: 80 });\n }\n}\n\nexport class PentagonShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 5, { width: 150, height: 130 });\n }\n}\n\nexport class HexagonShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 6, { width: 170, height: 120 });\n }\n}\n\nexport const createBuiltInShape = (config: ShapeLibraryConfig): BuiltInShape => {\n if (config.kind === 'circle') return new CircleShape(config.id, config.style);\n if (config.kind === 'ellipse') return new EllipseShape(config.id, config.style);\n if (config.kind === 'diamond') return new DiamondShape(config.id, config.style);\n if (config.kind === 'triangle') return new TriangleShape(config.id, config.style);\n if (config.kind === 'pentagon') return new PentagonShape(config.id, config.style);\n if (config.kind === 'hexagon') return new HexagonShape(config.id, config.style);\n return new RectangleShape(config.id, config.style);\n};\n","import {\n DiagramEngineHandle,\n DiagramState,\n ElementShapeHoverControlActivationEvent,\n ElementShapeHoverControlInteractionEvent,\n ElementShapeHoverControls,\n EngineChangeEvent,\n EngineSelectionEvent,\n LinkRoutingMode,\n} from './types';\nimport DiagramEngine from '../engine/DiagramEngine';\r\nimport KonvaRenderer from '../renderer/konva/KonvaRenderer';\r\nimport KonvaInteraction from '../renderer/konva/KonvaInteraction';\nimport KonvaHitTester from '../renderer/konva/KonvaHitTester';\nimport type { HitResult } from '../renderer/konva/KonvaHitTester';\nimport { ShapeDefinition, ShapeRegistry } from '../renderer/RenderTypes';\nimport { RouterStrategy } from '../strategies/RouterStrategy';\nimport { SnapStrategy } from '../strategies/SnapStrategy';\nimport { createBuiltInShape, type BuiltInShapeKind, type ShapeNodeModel } from '../shapes';\n\r\ntype KonvaEditorLike = {\n Stage: new (config: { container: HTMLDivElement | string; width: number; height: number }) => {\n width: (value?: number) => number;\r\n height: (value?: number) => number;\r\n add: (layer: unknown) => void;\r\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n getPointerPosition?: () => { x: number; y: number } | null;\r\n getIntersection: (pos: { x: number; y: number }) => unknown;\r\n getAllIntersections?: (pos: { x: number; y: number }) => unknown[];\r\n container?: HTMLDivElement | (() => HTMLDivElement);\r\n getAbsoluteTransform?: () => { copy?: () => { invert?: () => void; point: (pos: { x: number; y: number }) => { x: number; y: number } }; point?: (pos: { x: number; y: number }) => { x: number; y: number } };\r\n destroy: () => void;\r\n };\r\n Rect: new (config: Record<string, unknown>) => unknown;\n Circle: new (config: Record<string, unknown>) => unknown;\n Ellipse: new (config: Record<string, unknown>) => unknown;\n Line: new (config: Record<string, unknown>) => unknown;\n};\n\r\nconst getKonva = (): KonvaEditorLike => {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const module = require('konva') as { default?: KonvaEditorLike } | KonvaEditorLike;\r\n return (module as { default?: KonvaEditorLike }).default ?? (module as KonvaEditorLike);\r\n};\r\n\r\nexport type SimpleShape = {\n id: string;\n kind: BuiltInShapeKind;\n style?: Record<string, unknown>;\n};\n\r\nexport type DiagramEditorConfig = {\n container: HTMLDivElement | string;\n width?: number;\n height?: number;\n initialState?: DiagramState;\r\n elementShapes?: SimpleShape[];\r\n portShapes?: SimpleShape[];\r\n panKey?: 'Control' | 'Shift' | 'Alt' | 'Meta';\n elementShapeHoverControls?: ElementShapeHoverControls;\n onElementShapeHoverControlInteraction?: (event: ElementShapeHoverControlInteractionEvent) => void;\n onElementShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n onChange?: (event: EngineChangeEvent) => void;\n onSelection?: (event: EngineSelectionEvent) => void;\n};\n\nexport type DiagramEditorHandle = DiagramEngineHandle & {\n resize: (width: number, height: number) => void;\n setElementShapeHoverControls: (controls?: ElementShapeHoverControls) => void;\n destroy: () => void;\n};\n\r\ntype KonvaHitNode = {\n id?: () => string;\n name?: () => string;\n getAttr?: (key: string) => unknown;\n};\n\ntype KonvaNodeAttrLike = {\n setAttrs?: (attrs: Record<string, unknown>) => void;\n getAttr?: (key: string) => unknown;\n attrs?: Record<string, unknown>;\n};\n\nconst getNodeAttr = <T = unknown>(node: KonvaNodeAttrLike, key: string): T | undefined => {\n if (node.getAttr) {\n return node.getAttr(key) as T | undefined;\n }\n return node.attrs ? (node.attrs[key] as T | undefined) : undefined;\n};\n\nconst applyInstanceStyle = (node: unknown, style: Record<string, unknown> | undefined): void => {\n if (!style) return;\n const target = node as KonvaNodeAttrLike;\n if (!target.setAttrs) return;\n const attrs = { ...style };\n if (typeof style.rotation === 'number') {\n const baseRotation = getNodeAttr<number>(target, 'rotation') ?? 0;\n attrs.rotation = baseRotation + style.rotation;\n }\n target.setAttrs(attrs);\n};\n\nconst registerSimpleShapes = (\n registry: ShapeRegistry,\n shapes: SimpleShape[] | undefined,\n isPort: boolean,\n): void => {\n if (!shapes) return;\n shapes.forEach((shape) => {\n const behavior = createBuiltInShape({\n id: shape.id,\n kind: shape.kind,\n style: shape.style,\n });\n const definition: ShapeDefinition = {\n id: shape.id,\n baseRotation: behavior.baseRotation,\n sizeUpdater: behavior.sizeUpdater,\n normalizeResize: behavior.normalizeResize\n ? (context) => (behavior.normalizeResize as NonNullable<typeof behavior.normalizeResize>)(context)\n : undefined,\n projectToBorder: (point, rect) => behavior.projectToBorder(point, rect),\n resolveBorderSide: (point, rect) => behavior.resolveBorderSide(point, rect),\n resolvePortAnchors: (rect, options) => behavior.resolvePortAnchors(rect, options),\n resolveHoverGeometry: (rect) => behavior.resolveHoverGeometry(rect),\n resolveEllipseMidPoints: (rect) => behavior.resolveEllipseMidPoints(rect),\n createNode: (model) => {\n const Konva = getKonva();\n const anchorCenter = isPort\n ? (model as { anchorCenter?: boolean }).anchorCenter ?? true\n : false;\n const node = behavior.createNode({\n Konva,\n model: model as ShapeNodeModel,\n isPort,\n anchorCenter,\n });\n applyInstanceStyle(node, (model as { style?: Record<string, unknown> }).style);\n return node;\n },\n };\n registry.register(definition);\n });\n};\n\r\nexport const createDiagramEditor = (config: DiagramEditorConfig): DiagramEditorHandle => {\r\n const Konva = getKonva();\r\n const stage = new Konva.Stage({\r\n container: config.container,\r\n width: config.width ?? 900,\r\n height: config.height ?? 560,\r\n });\r\n const stageContainer =\r\n typeof stage.container === 'function' ? stage.container() : (stage.container as HTMLDivElement | undefined);\r\n if (stageContainer && stageContainer.tabIndex < 0) {\r\n stageContainer.tabIndex = 0;\r\n }\r\n\r\n const shapeRegistry = new ShapeRegistry();\r\n registerSimpleShapes(shapeRegistry, config.elementShapes, false);\r\n registerSimpleShapes(shapeRegistry, config.portShapes, true);\r\n\r\n const renderer = new KonvaRenderer({ stage, konva: Konva as unknown as any, shapeRegistry });\r\n const engine = new DiagramEngine({ renderer, shapeRegistry });\r\n\r\n if (config.onChange) {\r\n engine.on('change', config.onChange);\r\n }\r\n if (config.onSelection) {\r\n engine.on('selection', config.onSelection);\r\n }\r\n\r\n const resolveHit = (node: KonvaHitNode | null): HitResult | null => {\r\n if (!node) return null;\r\n const id = node.id ? node.id() : (node.getAttr?.('id') as string) ?? '';\r\n const rawName = node.name ? node.name() : (node.getAttr?.('name') as string) ?? 'element';\r\n const depth = typeof node.getAttr === 'function' ? (node.getAttr('__depth') as number | undefined) : undefined;\r\n if (rawName === 'resize-handle') return { id, type: 'resize-handle', depth };\n if (rawName === 'link-handle') return { id, type: 'link-handle', depth };\n if (rawName === 'shape-hover-control') return { id, type: 'shape-hover-control', depth };\n if (rawName === 'port') return { id, type: 'port', depth };\n if (rawName === 'link') return { id, type: 'link', depth };\r\n if (rawName === 'text') return { id, type: 'text', depth };\r\n if (rawName === 'none') return { id, type: 'none', depth };\r\n return { id, type: 'element', depth };\r\n };\r\n\r\n const prioritizeHits = (nodes: Array<KonvaHitNode | null>): HitResult => {\r\n const hits = nodes\r\n .map((node) => resolveHit(node))\r\n .filter((hit): hit is HitResult => Boolean(hit));\r\n if (hits.length === 0) return { id: '', type: 'none' };\r\n\r\n const priority: HitResult['type'][] = ['resize-handle', 'link-handle', 'shape-hover-control', 'port', 'link', 'text', 'element'];\n for (let i = 0; i < priority.length; i += 1) {\r\n const candidates = hits.filter((hit) => hit.type === priority[i]);\r\n if (candidates.length === 0) continue;\r\n if (priority[i] === 'element') {\r\n return candidates.reduce((deepest, current) => {\r\n const deepestDepth = deepest.depth ?? -1;\r\n const currentDepth = current.depth ?? -1;\r\n return currentDepth > deepestDepth ? current : deepest;\r\n }, candidates[0]);\r\n }\r\n return candidates[0];\r\n }\r\n return hits[0];\r\n };\r\n\r\n const hitTester = new KonvaHitTester((point) => {\n const toStagePoint = (world: { x: number; y: number }) => {\n const transform = stage.getAbsoluteTransform?.();\n if (!transform) return world;\n const directPoint = (transform as { point?: (pos: { x: number; y: number }) => { x: number; y: number } }).point;\n if (directPoint) {\n return directPoint.call(transform, world);\n }\n const copied = (transform as { copy?: () => unknown }).copy?.();\n const copiedPoint = (copied as { point?: (pos: { x: number; y: number }) => { x: number; y: number } } | undefined)\n ?.point;\n if (!copiedPoint) return world;\n return copiedPoint.call(copied, world);\n };\n const stagePoint = toStagePoint(point);\r\n const all = typeof stage.getAllIntersections === 'function' ? stage.getAllIntersections(stagePoint) : null;\r\n if (all && all.length > 0) {\r\n return prioritizeHits(all as KonvaHitNode[]);\r\n }\r\n const single = stage.getIntersection(stagePoint) as KonvaHitNode | null;\r\n return prioritizeHits(single ? [single] : []);\r\n });\r\n\r\n const interaction = new KonvaInteraction(engine, {\n stage,\n hitTester,\n renderer,\n panKey: config.panKey,\n shapeRegistry,\n shapeHoverControls: config.elementShapeHoverControls,\n onShapeHoverControlInteracted: config.onElementShapeHoverControlInteraction,\n onShapeHoverControlActivated: config.onElementShapeHoverControlActivated,\n });\n interaction.bind();\n\r\n if (config.initialState) {\r\n engine.load(config.initialState);\r\n }\r\n\r\n return {\r\n load: (state) => engine.load(state),\r\n getState: () => engine.getState(),\r\n getViewport: () => engine.getViewport(),\r\n clientToWorld: (clientPoint, container) => engine.clientToWorld(clientPoint, container),\r\n createOverlayShape: (config) => engine.createOverlayShape(config),\r\n on: (event, handler) => engine.on(event, handler),\r\n addElement: (element) => engine.addElement(element),\r\n moveElementTo: (id, x, y) => engine.moveElementTo(id, x, y),\r\n resizeElement: (id, width, height) => engine.resizeElement(id, width, height),\r\n setElementLayout: (id, layout) => engine.setElementLayout(id, layout),\r\n removeElement: (id) => engine.removeElement(id),\r\n addPortToElement: (elementId, port) => engine.addPortToElement(elementId, port),\r\n movePortTo: (id, x, y) => engine.movePortTo(id, x, y),\r\n removePort: (id) => engine.removePort(id),\r\n addLink: (link) => engine.addLink(link),\r\n updateLinkPoints: (id, points) => engine.updateLinkPoints(id, points),\r\n setLinkRoutingMode: (id, mode) => engine.setLinkRoutingMode(id, mode as LinkRoutingMode),\r\n rerouteAllLinks: () => engine.rerouteAllLinks(),\r\n rerouteLinks: (linkIds, options) => engine.rerouteLinks(linkIds, options),\r\n removeLink: (id) => engine.removeLink(id),\r\n addText: (text) => engine.addText(text),\r\n updateText: (id, content) => engine.updateText(id, content),\r\n moveTextTo: (id, x, y) => engine.moveTextTo(id, x, y),\r\n removeText: (id) => engine.removeText(id),\r\n setSelection: (ids) => engine.setSelection(ids),\r\n setViewport: (pan, zoom) => engine.setViewport(pan, zoom),\r\n setRouting: (router) => engine.setRouting(router as RouterStrategy),\r\n setSnapping: (snapper) => engine.setSnapping(snapper as SnapStrategy),\r\n registerShape: (shape) => engine.registerShape(shape as ShapeDefinition),\n render: () => engine.render(),\n resize: (width, height) => {\n stage.width(width);\n stage.height(height);\n engine.render();\n },\n setElementShapeHoverControls: (controls) => {\n interaction.setShapeHoverControls(controls);\n },\n destroy: () => {\n interaction.dispose();\n renderer.destroy?.();\n stage.destroy();\r\n },\r\n };\r\n};\r\n"],"names":["POSITION_EPSILON","cachedKonva","getKonva"],"mappings":"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","x_google_ignoreList":[1]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/api/types.ts","../../node_modules/tslib/tslib.es6.js","../../src/models/ElementModel.ts","../../src/models/LinkModel.ts","../../src/models/OwnershipIndex.ts","../../src/models/PortModel.ts","../../src/models/TextModel.ts","../../src/utils/geometry.ts","../../src/models/DiagramModel.ts","../../src/engine/CommandQueue.ts","../../src/engine/EventBus.ts","../../src/engine/SelectionState.ts","../../src/engine/ViewportState.ts","../../src/utils/patches.ts","../../src/engine/EngineCommands.ts","../../src/renderer/RenderScheduler.ts","../../src/strategies/ObstacleRouter.ts","../../src/strategies/DefaultSnapper.ts","../../src/renderer/RenderTypes.ts","../../src/measure/textStyleDefaults.ts","../../src/measure/CanvasTextMeasurer.ts","../../src/utils/borderGeometry.ts","../../src/engine/TextLayoutService.ts","../../src/engine/AutoLayoutService.ts","../../src/utils/portGeometry.ts","../../src/engine/LinkRoutingService.ts","../../src/engine/MutationPipeline.ts","../../src/engine/DiagramEngine.ts","../../src/renderer/konva/KonvaLayers.ts","../../src/renderer/konva/KonvaNodeFactory.ts","../../src/renderer/konva/KonvaRenderer.ts","../../src/renderer/konva/KonvaHitTester.ts","../../src/utils/ids.ts","../../src/renderer/konva/KonvaInteraction.ts","../../src/shapes/BuiltInShapes.ts","../../src/api/createDiagramEditor.ts"],"sourcesContent":["export type Point = { x: number; y: number };\r\nexport type Size = { width: number; height: number };\r\nexport type Rect = { x: number; y: number; width: number; height: number };\r\nexport type ClientRectLike = { left: number; top: number };\r\nexport type DiagramContainer = { getBoundingClientRect: () => ClientRectLike };\nexport type MoveConstraint = 'free' | 'inside' | 'border';\nexport type BorderSide = 'left' | 'right' | 'top' | 'bottom';\nexport type HostAnchorPreset = 'vertices' | 'cardinal';\nexport type PortLinkAttachMode = 'external' | 'internal';\nexport type PortAnchor = {\n id: string;\n position: Point;\n side?: BorderSide;\n normal?: Point;\n meta?: Record<string, unknown>;\n};\nexport type PortBorderTransformContext = {\n side: BorderSide;\n normal: Point;\n hostRect: Rect;\n attachMode: PortLinkAttachMode;\n effectiveLinkAttachPoint: Point;\n placementPoint: Point;\n rotationPivot: Point;\n portSize?: Size;\n};\nexport type PortBorderTransformResult = {\n rotation?: number;\n offset?: Point;\n};\nexport type PortAnchorConstraint = {\n preset: HostAnchorPreset;\n fallback?: 'nearest';\n};\nexport type PositionAxisLimit = {\n min?: number;\n max?: number;\n};\nexport type PortPositionLimits = {\n x?: PositionAxisLimit;\n y?: PositionAxisLimit;\n};\nexport type ResolvePortAnchorsOptions = {\n preset: HostAnchorPreset;\n};\nexport type ShapeVertexTarget = {\n id: string;\n position: Point;\n};\nexport type ShapeEdgeTarget = {\n id: string;\n start: Point;\n end: Point;\n midpoint: Point;\n};\nexport enum EllipseMidPoint {\n top = 'top',\n right = 'right',\n bottom = 'bottom',\n left = 'left',\n}\nexport type ShapeEllipseMidPointTarget = {\n id: EllipseMidPoint;\n ellipseMidPoint: EllipseMidPoint;\n position: Point;\n};\nexport type ShapeHoverGeometry = {\n vertices: ShapeVertexTarget[];\n edges: ShapeEdgeTarget[];\n};\nexport type HoverControlIcon = {\n svgPath: string;\n size?: Size;\n style?: Record<string, unknown>;\n};\nexport type ShapeControlTargetKind = 'vertex' | 'edge' | 'midpoint' | 'ellipse-midpoint';\nexport type ShapeControlVisibilityTrigger = 'element-hover' | 'target-hover';\nexport type ShapeControlDefinition = {\n id: string;\n targetKind: ShapeControlTargetKind;\n icon: HoverControlIcon;\n targetIndices?: number[];\n ellipseMidPoints?: EllipseMidPoint | EllipseMidPoint[];\n allowAllTargets?: boolean;\n visibilityTriggers?: ShapeControlVisibilityTrigger[];\n lineStyle?: Record<string, unknown>;\n tolerance?: number;\n};\n/**\n * @deprecated Use ShapeControlDefinition with targetKind='edge'.\n */\nexport type EdgeHoverControl = {\n kind: 'edge';\n icon: HoverControlIcon;\n lineStyle?: Record<string, unknown>;\n tolerance?: number;\n};\n/**\n * @deprecated Use ShapeControlDefinition with targetKind='vertex'.\n */\nexport type VertexHoverControl = {\n kind: 'vertex';\n icon: HoverControlIcon;\n tolerance?: number;\n};\nexport type ElementShapeHoverControls = {\n controls?: ShapeControlDefinition[];\n /**\n * @deprecated Legacy singleton edge control. Use controls[] instead.\n */\n edge?: EdgeHoverControl;\n /**\n * @deprecated Legacy singleton vertex control. Use controls[] instead.\n */\n vertex?: VertexHoverControl;\n /**\n * @deprecated Legacy resolution preference for singleton edge/vertex controls.\n */\n priority?: 'vertex-first';\n};\nexport type ElementShapeControlEventType = 'click' | 'drag-start' | 'drag-move' | 'drag-end';\nexport type ElementShapeControlDragEvent = {\n sessionId: string;\n startPointer: EnginePointerInfo;\n delta: Point;\n};\nexport type ElementShapeHoverControlInteractionEvent = {\n eventType: ElementShapeControlEventType;\n controlId: string;\n elementId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n pointer: EnginePointerInfo;\n edge?: ShapeEdgeTarget;\n vertex?: ShapeVertexTarget;\n ellipseMidPoint?: EllipseMidPoint;\n drag?: ElementShapeControlDragEvent;\n};\n/**\n * @deprecated Use ElementShapeHoverControlInteractionEvent with eventType='click'.\n */\nexport type ElementShapeHoverControlActivationEvent = {\n controlKind: 'edge' | 'vertex';\n elementId: string;\n targetId: string;\n pointer: EnginePointerInfo;\n edge?: ShapeEdgeTarget;\n vertex?: ShapeVertexTarget;\n};\nexport type ElementPortMovementPolicy = {\n moveMode: MoveConstraint | 'anchors';\n anchorConstraint?: PortAnchorConstraint;\n positionLimits?: PortPositionLimits;\n};\nexport type LinkRoutingMode = 'auto' | 'manual';\nexport type AnchorReference = 'top-left' | 'center';\nexport type RerouteLinksOptions = { includeManual?: boolean };\nexport type ElementLayoutMode = 'manual' | 'horizontal' | 'vertical';\nexport type ElementLayoutAlign = 'start' | 'center' | 'end';\nexport type ElementLayoutChildFitMainAxis = 'none' | 'distribute';\nexport type ElementLayoutChildFitCrossAxis = 'none' | 'stretch';\nexport type ElementLayoutLabelReservedSpaceMode = 'none' | 'fixed' | 'flexible';\nexport type ElementLayoutLabelReservedSpacePlacement = 'top';\nexport type ElementLayoutLabelReservedSpace = {\n mode?: ElementLayoutLabelReservedSpaceMode;\n placement?: ElementLayoutLabelReservedSpacePlacement;\n size?: number;\n minSize?: number;\n maxSize?: number;\n};\nexport type TextLayoutBoundsMode = 'owner-width' | 'owner-box' | 'fixed';\nexport type TextLayoutWrapMode = 'none' | 'word' | 'char';\nexport type TextLayoutOverflowMode = 'clip' | 'ellipsis-end' | 'ellipsis-middle' | 'ellipsis-start';\nexport type ElementLayout = {\n mode: ElementLayoutMode;\n padding?: number | { x: number; y: number };\n gap?: number;\n align?: ElementLayoutAlign;\n childFitMainAxis?: ElementLayoutChildFitMainAxis;\n childFitCrossAxis?: ElementLayoutChildFitCrossAxis;\n childFitMinSize?: Partial<Size>;\n childFitMaxSize?: Partial<Size>;\n labelReservedSpace?: ElementLayoutLabelReservedSpace;\n};\n\nexport type TextLayout = {\n boundsMode?: TextLayoutBoundsMode;\n wrap?: TextLayoutWrapMode;\n overflow?: TextLayoutOverflowMode;\n padding?: number;\n maxLines?: number;\n fixedSize?: Size;\n};\n\r\nexport type ElementDropEvent = {\r\n elementId: string;\r\n startWorld: Point;\r\n endWorld: Point;\r\n delta: Point;\r\n startParentId?: string | null;\r\n selectionIds: string[];\r\n anchor: AnchorReference;\r\n};\r\n\r\nexport type OverlayShapeConfig = {\r\n shapeId: string;\r\n position: Point;\r\n size: Size;\r\n style?: Record<string, unknown>;\r\n anchorCenter?: boolean;\r\n};\r\n\r\nexport type OverlayShapeHandle = {\r\n update: (config: OverlayShapeConfig) => void;\r\n destroy: () => void;\r\n};\r\n\r\nexport type ElementData = {\r\n id: string;\r\n position: Point;\r\n size: Size;\r\n shapeId: string;\r\n style?: Record<string, unknown>;\r\n portIds?: string[];\r\n textIds?: string[];\r\n parentId?: string | null;\r\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n layout?: ElementLayout;\n portMovement?: ElementPortMovementPolicy;\n};\n\r\nexport type PortData = {\n id: string;\n elementId: string;\n position: Point;\n shapeId?: string;\n size?: Size;\n style?: Record<string, unknown>;\n textIds?: string[];\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n orientToHostBorder?: boolean;\n placementPoint?: Point;\n linkAttachPoint?: Point;\n externalLinkAttachPoint?: Point;\n internalLinkAttachPoint?: Point;\n rotationPivot?: Point;\n currentAnchorId?: string;\n};\n\r\nexport type ShapeDrawContext = {\r\n ctx: CanvasRenderingContext2D;\r\n model: ElementData | PortData;\r\n};\r\n\r\nexport type LinkData = {\r\n id: string;\r\n sourcePortId: string;\r\n targetPortId: string;\r\n points: Point[];\r\n routing?: LinkRoutingMode;\r\n style?: Record<string, unknown>;\r\n textIds?: string[];\r\n};\r\n\r\nexport type TextData = {\n id: string;\n content: string;\n position: Point;\n size?: Size;\n style?: Record<string, unknown>;\n ownerId?: string | null;\n layout?: TextLayout;\n displayContent?: string;\n displayOffset?: Point;\n displayClipSize?: Size;\n};\n\r\nexport type DiagramState = {\r\n elements: ElementData[];\r\n ports: PortData[];\r\n links: LinkData[];\r\n texts: TextData[];\r\n};\r\n\r\nexport type DiagramPatch = {\r\n type: string;\r\n entity: 'element' | 'port' | 'link' | 'text' | 'selection' | 'viewport' | 'config';\r\n id?: string;\r\n payload?: Record<string, unknown>;\r\n};\r\n\r\nexport type EngineChangeEvent = {\r\n patches: DiagramPatch[];\r\n state: DiagramState;\r\n};\r\n\r\nexport type EngineSelectionEvent = {\r\n selectedIds: string[];\r\n};\r\n\r\nexport type EngineConfigEvent = {\r\n type: 'routing' | 'snapping' | 'rendering';\r\n};\r\n\r\nexport type EnginePointerInfo = {\r\n client: Point;\r\n world: Point;\r\n button?: number;\r\n buttons?: number;\r\n altKey?: boolean;\r\n ctrlKey?: boolean;\r\n metaKey?: boolean;\r\n shiftKey?: boolean;\r\n pointerType?: string;\r\n};\r\n\r\nexport type PaperClickEvent = {\r\n pointer: EnginePointerInfo;\r\n};\r\n\r\nexport type PortMouseEvent = {\r\n portId: string;\r\n elementId: string;\r\n pointer: EnginePointerInfo;\r\n};\r\n\r\nexport type PortMovedEvent = {\r\n portId: string;\r\n elementId: string;\r\n oldWorld: Point;\r\n newWorld: Point;\r\n delta: Point;\r\n};\r\n\r\nexport type PortSelectedEvent = {\r\n portId: string;\r\n elementId: string;\r\n};\r\n\r\nexport type ElementPointerEvent = {\r\n elementId: string;\r\n pointer: EnginePointerInfo;\r\n isMulti: boolean;\r\n};\r\n\r\nexport type ElementMovedEvent = {\r\n elementId: string;\r\n oldWorld: Point;\r\n newWorld: Point;\r\n delta: Point;\r\n};\r\n\r\nexport type ElementResizedEvent = {\r\n elementId: string;\r\n oldSize: Size;\r\n newSize: Size;\r\n};\r\n\r\nexport type ElementDeletedEvent = {\n elementId: string;\n};\n\nexport type PortDeletedEvent = {\n portId: string;\n elementId: string;\n};\n\nexport type LinkDeletedEvent = {\n linkId: string;\n sourcePortId: string;\n targetPortId: string;\n};\n\nexport type TextDeletedEvent = {\n textId: string;\n ownerId?: string | null;\n};\n\nexport type TextUpdatedEvent = {\n textId: string;\n ownerId?: string | null;\n content: string;\n displayContent: string;\n reason: 'content' | 'layout';\n};\n\nexport type ElementLinkStartedEvent = {\n sourcePortId: string;\n sourceElementId: string;\n startWorld: Point;\n};\n\r\nexport type ElementLinkConnectingEvent = {\r\n sourcePortId: string;\r\n sourceElementId: string;\r\n targetPortId: string;\r\n targetElementId: string;\r\n cancel: () => void;\r\n cancelled: boolean;\r\n};\r\n\r\nexport type ElementLinkEndedEvent = {\r\n sourcePortId: string;\r\n sourceElementId: string;\r\n linkId?: string;\r\n targetPortId?: string;\r\n targetElementId?: string;\r\n cancelled: boolean;\r\n};\r\n\r\n\r\nexport type ElementSelectedEvent = {\r\n elementId: string;\r\n};\r\n\r\nexport type TextSelectedEvent = {\r\n textId: string;\r\n};\r\n\r\nexport type EngineEventMap = {\r\n change: EngineChangeEvent;\r\n selection: EngineSelectionEvent;\r\n config: EngineConfigEvent;\r\n /**\r\n * Deprecated (legacy kebab-case). Prefer `elementDrop`.\r\n */\r\n 'element-drop': ElementDropEvent;\r\n elementDrop: ElementDropEvent;\r\n\r\n // Legacy event surface (camelCase)\r\n paperClick: PaperClickEvent;\r\n\r\n portMouseDown: PortMouseEvent;\r\n portMouseUp: PortMouseEvent;\r\n portMoved: PortMovedEvent;\r\n portSelected: PortSelectedEvent;\r\n\r\n elementClick: ElementPointerEvent;\r\n elementDragged: ElementDropEvent;\r\n elementMoved: ElementMovedEvent;\n elementResized: ElementResizedEvent;\n elementDeleted: ElementDeletedEvent;\n portDeleted: PortDeletedEvent;\n linkDeleted: LinkDeletedEvent;\n textDeleted: TextDeletedEvent;\n textUpdated: TextUpdatedEvent;\n elementSelected: ElementSelectedEvent;\n\r\n elementLinkStarted: ElementLinkStartedEvent;\r\n elementLinkConnecting: ElementLinkConnectingEvent;\r\n elementLinkEnded: ElementLinkEndedEvent;\r\n\r\n textSelected: TextSelectedEvent;\r\n};\r\n\r\nexport type DiagramEngineHandle = {\r\n load: (state: DiagramState) => void;\r\n getState: () => DiagramState;\r\n getViewport: () => { pan: Point; zoom: number };\r\n /**\r\n * Convert client/screen coordinates into diagram world coordinates.\r\n * Formula: world = (client - containerRect - pan) / zoom.\r\n */\r\n clientToWorld: (clientPoint: Point, container: DiagramContainer) => Point;\r\n createOverlayShape: (config: OverlayShapeConfig) => OverlayShapeHandle;\r\n on: <T extends keyof EngineEventMap>(\r\n event: T,\r\n handler: (payload: EngineEventMap[T]) => void\r\n ) => () => void;\r\n addElement: (element: ElementData) => void;\r\n moveElementTo: (id: string, x: number, y: number) => void;\r\n resizeElement: (id: string, width: number, height: number) => void;\r\n setElementLayout: (id: string, layout: ElementLayout | undefined) => void;\r\n removeElement: (id: string) => void;\r\n addPortToElement: (elementId: string, port: PortData) => void;\r\n movePortTo: (id: string, x: number, y: number) => void;\r\n removePort: (id: string) => void;\r\n addLink: (link: LinkData) => void;\r\n updateLinkPoints: (id: string, points: Point[]) => void;\r\n setLinkRoutingMode: (id: string, mode: LinkRoutingMode) => void;\r\n rerouteAllLinks: () => void;\r\n rerouteLinks: (linkIds: string[], options?: RerouteLinksOptions) => void;\r\n removeLink: (id: string) => void;\r\n addText: (text: TextData) => void;\r\n updateText: (id: string, content: string) => void;\r\n moveTextTo: (id: string, x: number, y: number) => void;\r\n removeText: (id: string) => void;\r\n setSelection: (ids: string[]) => void;\r\n setViewport: (pan: Point, zoom: number) => void;\r\n setRouting: (router: unknown) => void;\r\n setSnapping: (snapper: unknown) => void;\r\n registerShape: (shape: {\n id: string;\n baseRotation?: number;\n draw?: (context: ShapeDrawContext) => void;\n createNode?: (model: ElementData | PortData) => unknown;\n svgPath?: string;\n svgSize?: Size;\n projectToBorder?: (point: Point, rect: Rect) => Point;\n resolveBorderSide?: (point: Point, rect: Rect) => BorderSide;\n resolveBorderNormal?: (point: Point, rect: Rect) => Point;\n resolvePortAnchors?: (rect: Rect, options: ResolvePortAnchorsOptions) => PortAnchor[];\n resolvePortBorderTransform?: (\n context: PortBorderTransformContext,\n ) => PortBorderTransformResult | undefined;\n resolveHoverGeometry?: (rect: Rect) => ShapeHoverGeometry | undefined;\n resolveEllipseMidPoints?: (rect: Rect) => ShapeEllipseMidPointTarget[] | undefined;\n }) => void;\n render: () => void;\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import { ElementData, MoveConstraint, Point, Size } from '../api/types';\r\n\r\nexport default class ElementModel {\r\n id: string;\r\n position: Point;\r\n size: Size;\r\n shapeId: string;\r\n style?: Record<string, unknown>;\r\n portIds: string[];\r\n textIds: string[];\r\n parentId: string | null;\r\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n layout?: ElementData['layout'];\n portMovement?: ElementData['portMovement'];\n\r\n constructor(data: ElementData) {\r\n this.id = data.id;\r\n this.position = { ...data.position };\r\n this.size = { ...data.size };\r\n this.shapeId = data.shapeId;\r\n this.style = data.style;\r\n this.portIds = data.portIds ? [...data.portIds] : [];\r\n this.textIds = data.textIds ? [...data.textIds] : [];\r\n this.parentId = data.parentId ?? null;\r\n this.moveMode = data.moveMode;\n this.anchorCenter = data.anchorCenter;\n this.layout = data.layout;\n this.portMovement = data.portMovement;\n }\r\n\r\n setPosition(position: Point): void {\r\n this.position = { ...position };\r\n }\r\n\r\n setSize(size: Size): void {\r\n this.size = { ...size };\r\n }\r\n\r\n addPort(portId: string): void {\r\n if (!this.portIds.includes(portId)) {\r\n this.portIds.push(portId);\r\n }\r\n }\r\n\r\n removePort(portId: string): void {\r\n this.portIds = this.portIds.filter((id) => id !== portId);\r\n }\r\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): ElementData {\r\n return {\r\n id: this.id,\r\n position: { ...this.position },\r\n size: { ...this.size },\r\n shapeId: this.shapeId,\r\n style: this.style,\r\n portIds: [...this.portIds],\r\n textIds: [...this.textIds],\r\n parentId: this.parentId,\r\n moveMode: this.moveMode,\n anchorCenter: this.anchorCenter,\n layout: this.layout,\n portMovement: this.portMovement,\n };\n }\n}\n","import { LinkData, LinkRoutingMode, Point } from '../api/types';\r\n\r\nexport default class LinkModel {\r\n id: string;\r\n sourcePortId: string;\r\n targetPortId: string;\r\n points: Point[];\r\n routing: LinkRoutingMode;\r\n style?: Record<string, unknown>;\r\n textIds: string[];\r\n\r\n constructor(data: LinkData) {\r\n this.id = data.id;\r\n this.sourcePortId = data.sourcePortId;\r\n this.targetPortId = data.targetPortId;\r\n this.points = data.points.map((point) => ({ ...point }));\r\n this.routing = data.routing ?? 'auto';\r\n this.style = data.style;\r\n this.textIds = data.textIds ? [...data.textIds] : [];\r\n }\r\n\r\n setPoints(points: Point[]): void {\r\n this.points = points.map((point) => ({ ...point }));\r\n }\r\n\r\n setRouting(mode: LinkRoutingMode): void {\r\n this.routing = mode;\r\n }\r\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): LinkData {\r\n return {\r\n id: this.id,\r\n sourcePortId: this.sourcePortId,\r\n targetPortId: this.targetPortId,\r\n points: this.points.map((point) => ({ ...point })),\r\n routing: this.routing,\r\n style: this.style,\r\n textIds: [...this.textIds],\r\n };\r\n }\r\n}\r\n","export default class OwnershipIndex {\r\n private ownerToTexts = new Map<string, Set<string>>();\r\n\r\n add(ownerId: string, textId: string): void {\r\n const set = this.ownerToTexts.get(ownerId) ?? new Set<string>();\r\n set.add(textId);\r\n this.ownerToTexts.set(ownerId, set);\r\n }\r\n\r\n remove(ownerId: string, textId: string): void {\r\n const set = this.ownerToTexts.get(ownerId);\r\n if (!set) return;\r\n set.delete(textId);\r\n if (set.size === 0) {\r\n this.ownerToTexts.delete(ownerId);\r\n }\r\n }\r\n\r\n getTexts(ownerId: string): string[] {\r\n const set = this.ownerToTexts.get(ownerId);\r\n if (!set) return [];\r\n return Array.from(set.values());\r\n }\r\n\r\n clearOwner(ownerId: string): void {\r\n this.ownerToTexts.delete(ownerId);\r\n }\r\n}\r\n","import { MoveConstraint, Point, PortData, Size } from '../api/types';\r\n\r\nexport default class PortModel {\r\n id: string;\r\n elementId: string;\r\n position: Point;\r\n shapeId?: string;\r\n size?: Size;\r\n style?: Record<string, unknown>;\r\n textIds: string[];\n moveMode?: MoveConstraint;\n anchorCenter?: boolean;\n orientToHostBorder: boolean;\n placementPoint?: Point;\n linkAttachPoint?: Point;\n externalLinkAttachPoint?: Point;\n internalLinkAttachPoint?: Point;\n rotationPivot?: Point;\n currentAnchorId?: string;\n\r\n constructor(data: PortData) {\r\n this.id = data.id;\r\n this.elementId = data.elementId;\r\n this.position = { ...data.position };\r\n this.shapeId = data.shapeId;\r\n this.size = data.size ? { ...data.size } : undefined;\r\n this.style = data.style;\r\n this.textIds = data.textIds ? [...data.textIds] : [];\n this.moveMode = data.moveMode;\n this.anchorCenter = data.anchorCenter ?? true;\n this.orientToHostBorder = data.orientToHostBorder ?? true;\n this.placementPoint = data.placementPoint ? { ...data.placementPoint } : undefined;\n this.linkAttachPoint = data.linkAttachPoint ? { ...data.linkAttachPoint } : undefined;\n this.externalLinkAttachPoint = data.externalLinkAttachPoint ? { ...data.externalLinkAttachPoint } : undefined;\n this.internalLinkAttachPoint = data.internalLinkAttachPoint ? { ...data.internalLinkAttachPoint } : undefined;\n this.rotationPivot = data.rotationPivot ? { ...data.rotationPivot } : undefined;\n this.currentAnchorId = data.currentAnchorId;\n }\n\r\n setPosition(position: Point): void {\n this.position = { ...position };\n }\n\n setCurrentAnchorId(currentAnchorId?: string): void {\n this.currentAnchorId = currentAnchorId;\n }\n\r\n addText(textId: string): void {\r\n if (!this.textIds.includes(textId)) {\r\n this.textIds.push(textId);\r\n }\r\n }\r\n\r\n removeText(textId: string): void {\r\n this.textIds = this.textIds.filter((id) => id !== textId);\r\n }\r\n\r\n toData(): PortData {\r\n return {\r\n id: this.id,\r\n elementId: this.elementId,\r\n position: { ...this.position },\r\n shapeId: this.shapeId,\r\n size: this.size ? { ...this.size } : undefined,\r\n style: this.style,\r\n textIds: [...this.textIds],\n moveMode: this.moveMode,\n anchorCenter: this.anchorCenter,\n orientToHostBorder: this.orientToHostBorder,\n placementPoint: this.placementPoint ? { ...this.placementPoint } : undefined,\n linkAttachPoint: this.linkAttachPoint ? { ...this.linkAttachPoint } : undefined,\n externalLinkAttachPoint: this.externalLinkAttachPoint ? { ...this.externalLinkAttachPoint } : undefined,\n internalLinkAttachPoint: this.internalLinkAttachPoint ? { ...this.internalLinkAttachPoint } : undefined,\n rotationPivot: this.rotationPivot ? { ...this.rotationPivot } : undefined,\n currentAnchorId: this.currentAnchorId,\n };\n }\n}\n","import { Point, TextData, Size } from '../api/types';\n\r\nexport default class TextModel {\r\n id: string;\r\n content: string;\r\n position: Point;\r\n size?: Size;\n style?: Record<string, unknown>;\n ownerId?: string | null;\n layout?: TextData['layout'];\n displayContent?: string;\n displayOffset?: Point;\n displayClipSize?: Size;\n\r\n constructor(data: TextData) {\r\n this.id = data.id;\r\n this.content = data.content;\r\n this.position = { ...data.position };\r\n this.size = data.size ? { ...data.size } : undefined;\n this.style = data.style;\n this.ownerId = data.ownerId ?? null;\n this.layout = data.layout ? { ...data.layout } : undefined;\n this.displayContent = data.displayContent ?? data.content;\n this.displayOffset = data.displayOffset ? { ...data.displayOffset } : undefined;\n this.displayClipSize = data.displayClipSize ? { ...data.displayClipSize } : undefined;\n }\n\r\n setContent(content: string): void {\n this.content = content;\n this.displayContent = content;\n }\n\r\n setSize(size: Size): void {\n this.size = { ...size };\n }\n\n setDisplayContent(content: string): void {\n this.displayContent = content;\n }\n\n setDisplayOffset(offset: Point | undefined): void {\n this.displayOffset = offset ? { ...offset } : undefined;\n }\n\n setDisplayClipSize(size: Size | undefined): void {\n this.displayClipSize = size ? { ...size } : undefined;\n }\n\n setLayout(layout: TextData['layout']): void {\n this.layout = layout ? { ...layout } : undefined;\n }\n\r\n setPosition(position: Point): void {\r\n this.position = { ...position };\r\n }\r\n\r\n toData(): TextData {\r\n return {\r\n id: this.id,\r\n content: this.content,\r\n position: { ...this.position },\r\n size: this.size ? { ...this.size } : undefined,\n style: this.style,\n ownerId: this.ownerId,\n layout: this.layout ? { ...this.layout } : undefined,\n displayContent: this.displayContent ?? this.content,\n displayOffset: this.displayOffset ? { ...this.displayOffset } : undefined,\n displayClipSize: this.displayClipSize ? { ...this.displayClipSize } : undefined,\n };\n }\n}\n","import { Point, Rect } from '../api/types';\r\n\r\nexport const addPoints = (a: Point, b: Point): Point => ({ x: a.x + b.x, y: a.y + b.y });\r\nexport const subtractPoints = (a: Point, b: Point): Point => ({ x: a.x - b.x, y: a.y - b.y });\r\nexport const scalePoint = (point: Point, factor: number): Point => ({\r\n x: point.x * factor,\r\n y: point.y * factor,\r\n});\r\n\r\nexport const distance = (a: Point, b: Point): number => {\r\n const dx = a.x - b.x;\r\n const dy = a.y - b.y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n};\r\n\r\nexport const clamp = (value: number, min: number, max: number): number => {\r\n if (value < min) return min;\r\n if (value > max) return max;\r\n return value;\r\n};\r\n\r\nexport const rectContainsPoint = (rect: Rect, point: Point): boolean => {\r\n return (\r\n point.x >= rect.x &&\r\n point.x <= rect.x + rect.width &&\r\n point.y >= rect.y &&\r\n point.y <= rect.y + rect.height\r\n );\r\n};\r\n\r\nexport const rectsIntersect = (a: Rect, b: Rect): boolean => {\n return !(\n a.x + a.width < b.x ||\n b.x + b.width < a.x ||\n a.y + a.height < b.y ||\n b.y + b.height < a.y\n );\n};\n\nexport const degreesToRadians = (degrees: number): number => (degrees * Math.PI) / 180;\n\nexport const rotatePoint = (point: Point, center: Point, degrees: number): Point => {\n if (Math.abs(degrees) < 1e-9) return { ...point };\n const radians = degreesToRadians(degrees);\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const dx = point.x - center.x;\n const dy = point.y - center.y;\n return {\n x: center.x + dx * cos - dy * sin,\n y: center.y + dx * sin + dy * cos,\n };\n};\n\nexport const resolveRectRotationPivot = (\n topLeft: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n): Point => {\n if (anchorCenter) {\n return { x: topLeft.x + size.width / 2, y: topLeft.y + size.height / 2 };\n }\n return { x: topLeft.x, y: topLeft.y };\n};\n\nexport const getRotatedRectCorners = (\n topLeft: Point,\n size: { width: number; height: number },\n rotation: number,\n anchorCenter = false,\n): { nw: Point; ne: Point; sw: Point; se: Point } => {\n const nw = { ...topLeft };\n const ne = { x: topLeft.x + size.width, y: topLeft.y };\n const sw = { x: topLeft.x, y: topLeft.y + size.height };\n const se = { x: topLeft.x + size.width, y: topLeft.y + size.height };\n if (Math.abs(rotation) < 1e-9) return { nw, ne, sw, se };\n const pivot = resolveRectRotationPivot(topLeft, size, anchorCenter);\n return {\n nw: rotatePoint(nw, pivot, rotation),\n ne: rotatePoint(ne, pivot, rotation),\n sw: rotatePoint(sw, pivot, rotation),\n se: rotatePoint(se, pivot, rotation),\n };\n};\n\nexport const pointInPolygon = (point: Point, polygon: Point[]): boolean => {\n if (polygon.length < 3) return false;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i, i += 1) {\n const xi = polygon[i].x;\n const yi = polygon[i].y;\n const xj = polygon[j].x;\n const yj = polygon[j].y;\n const intersects =\n yi > point.y !== yj > point.y &&\n point.x < ((xj - xi) * (point.y - yi)) / ((yj - yi) || 1e-12) + xi;\n if (intersects) inside = !inside;\n }\n return inside;\n};\n\nconst orientation = (a: Point, b: Point, c: Point): number =>\n (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);\n\nconst onSegment = (a: Point, b: Point, c: Point): boolean =>\n Math.min(a.x, c.x) <= b.x &&\n b.x <= Math.max(a.x, c.x) &&\n Math.min(a.y, c.y) <= b.y &&\n b.y <= Math.max(a.y, c.y);\n\nexport const segmentsIntersect = (a1: Point, a2: Point, b1: Point, b2: Point): boolean => {\n const o1 = orientation(a1, a2, b1);\n const o2 = orientation(a1, a2, b2);\n const o3 = orientation(b1, b2, a1);\n const o4 = orientation(b1, b2, a2);\n\n if (o1 * o2 < 0 && o3 * o4 < 0) return true;\n if (Math.abs(o1) < 1e-9 && onSegment(a1, b1, a2)) return true;\n if (Math.abs(o2) < 1e-9 && onSegment(a1, b2, a2)) return true;\n if (Math.abs(o3) < 1e-9 && onSegment(b1, a1, b2)) return true;\n if (Math.abs(o4) < 1e-9 && onSegment(b1, a2, b2)) return true;\n return false;\n};\n\nexport const pointInRotatedRect = (\n point: Point,\n topLeft: Point,\n size: { width: number; height: number },\n rotation: number,\n anchorCenter = false,\n): boolean => {\n if (Math.abs(rotation) < 1e-9) {\n return rectContainsPoint({ x: topLeft.x, y: topLeft.y, width: size.width, height: size.height }, point);\n }\n const pivot = resolveRectRotationPivot(topLeft, size, anchorCenter);\n const unrotatedPoint = rotatePoint(point, pivot, -rotation);\n return rectContainsPoint({ x: topLeft.x, y: topLeft.y, width: size.width, height: size.height }, unrotatedPoint);\n};\n\nexport const polygonIntersectsRect = (polygon: Point[], rect: Rect): boolean => {\n if (polygon.length < 2) return false;\n if (polygon.some((point) => rectContainsPoint(rect, point))) return true;\n\n const rectCorners = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n\n if (rectCorners.some((corner) => pointInPolygon(corner, polygon))) return true;\n\n const polygonEdges = polygon.map((point, index) => [point, polygon[(index + 1) % polygon.length]] as const);\n const rectEdges = [\n [rectCorners[0], rectCorners[1]],\n [rectCorners[1], rectCorners[2]],\n [rectCorners[2], rectCorners[3]],\n [rectCorners[3], rectCorners[0]],\n ] as const;\n\n for (let i = 0; i < polygonEdges.length; i += 1) {\n const [a1, a2] = polygonEdges[i];\n for (let j = 0; j < rectEdges.length; j += 1) {\n const [b1, b2] = rectEdges[j];\n if (segmentsIntersect(a1, a2, b1, b2)) return true;\n }\n }\n\n return false;\n};\n\nexport const snapToGrid = (point: Point, gridSize: number): Point => {\n if (gridSize <= 0) return { ...point };\n return {\n x: Math.round(point.x / gridSize) * gridSize,\r\n y: Math.round(point.y / gridSize) * gridSize,\r\n };\r\n};\r\n","import { DiagramState, ElementData, LinkData, LinkRoutingMode, Point, PortData, TextData } from '../api/types';\r\nimport ElementModel from './ElementModel';\r\nimport LinkModel from './LinkModel';\r\nimport OwnershipIndex from './OwnershipIndex';\r\nimport PortModel from './PortModel';\r\nimport TextModel from './TextModel';\r\nimport { distance } from '../utils/geometry';\r\n\r\nexport default class DiagramModel {\r\n elements = new Map<string, ElementModel>();\r\n ports = new Map<string, PortModel>();\r\n links = new Map<string, LinkModel>();\r\n texts = new Map<string, TextModel>();\r\n ownership = new OwnershipIndex();\r\n\r\n load(state: DiagramState): void {\r\n this.elements.clear();\r\n this.ports.clear();\r\n this.links.clear();\r\n this.texts.clear();\r\n this.ownership = new OwnershipIndex();\r\n\r\n state.elements.forEach((data) => this.elements.set(data.id, new ElementModel(data)));\r\n state.ports.forEach((data) => this.ports.set(data.id, new PortModel(data)));\r\n state.links.forEach((data) => this.links.set(data.id, new LinkModel(data)));\r\n state.texts.forEach((data) => {\r\n const text = new TextModel(data);\r\n this.texts.set(data.id, text);\r\n });\r\n\r\n this.ports.forEach((port) => {\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.addPort(port.id);\r\n }\r\n });\r\n\r\n this.texts.forEach((text) => {\r\n if (!text.ownerId) return;\r\n this.ownership.add(text.ownerId, text.id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.addText(text.id);\r\n return;\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.addText(text.id);\r\n return;\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.addText(text.id);\r\n }\r\n });\r\n }\r\n\r\n toState(): DiagramState {\r\n return {\r\n elements: Array.from(this.elements.values()).map((element) => element.toData()),\r\n ports: Array.from(this.ports.values()).map((port) => port.toData()),\r\n links: Array.from(this.links.values()).map((link) => link.toData()),\r\n texts: Array.from(this.texts.values()).map((text) => text.toData()),\r\n };\r\n }\r\n\r\n getElement(id: string): ElementModel | undefined {\r\n return this.elements.get(id);\r\n }\r\n\r\n setElementLayout(id: string, layout: ElementData['layout']): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.layout = layout;\r\n }\r\n\r\n getChildren(parentId: string): ElementModel[] {\r\n return Array.from(this.elements.values()).filter((child) => child.parentId === parentId);\r\n }\r\n\r\n getElementWorldPosition(id: string): Point | null {\r\n const element = this.elements.get(id);\r\n if (!element) return null;\r\n return this.resolveElementWorldPosition(element);\r\n }\r\n\r\n getPort(id: string): PortModel | undefined {\r\n return this.ports.get(id);\r\n }\r\n\r\n getPortWorldPosition(id: string): Point | null {\r\n const port = this.ports.get(id);\r\n if (!port) return null;\r\n const elementPosition = this.getElementWorldPosition(port.elementId);\r\n if (!elementPosition) return { ...port.position };\r\n return {\r\n x: elementPosition.x + port.position.x,\r\n y: elementPosition.y + port.position.y,\r\n };\r\n }\r\n\r\n getLink(id: string): LinkModel | undefined {\r\n return this.links.get(id);\r\n }\r\n\r\n getLinkMidpoint(id: string): Point | null {\r\n const link = this.links.get(id);\r\n if (!link) return null;\r\n return this.resolveLinkMidpoint(link);\r\n }\r\n\r\n getText(id: string): TextModel | undefined {\r\n return this.texts.get(id);\r\n }\r\n\r\n getTextWorldPosition(id: string): Point | null {\r\n const text = this.texts.get(id);\r\n if (!text) return null;\r\n if (!text.ownerId) return { ...text.position };\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n const elementPosition = this.resolveElementWorldPosition(element);\r\n return {\r\n x: elementPosition.x + text.position.x,\r\n y: elementPosition.y + text.position.y,\r\n };\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n const portPosition = this.getPortWorldPosition(port.id);\r\n if (!portPosition) return { ...text.position };\r\n return {\r\n x: portPosition.x + text.position.x,\r\n y: portPosition.y + text.position.y,\r\n };\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n const midpoint = this.resolveLinkMidpoint(link);\r\n return {\r\n x: midpoint.x + text.position.x,\r\n y: midpoint.y + text.position.y,\r\n };\r\n }\r\n\r\n return { ...text.position };\r\n }\r\n\r\n addElement(data: ElementData): ElementModel {\r\n const element = new ElementModel(data);\r\n this.elements.set(element.id, element);\r\n return element;\r\n }\r\n\r\n moveElement(id: string, position: Point): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.setPosition(position);\r\n }\r\n\r\n resizeElement(id: string, size: { width: number; height: number }): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n element.setSize(size);\r\n }\r\n\r\n removeElement(id: string): void {\r\n const element = this.elements.get(id);\r\n if (!element) return;\r\n\r\n const portIds = [...element.portIds];\r\n const textIds = [...element.textIds];\r\n\r\n portIds.forEach((portId) => this.removePort(portId));\r\n textIds.forEach((textId) => this.removeText(textId));\r\n\r\n this.elements.delete(id);\r\n }\r\n\r\n addPort(data: PortData): PortModel {\r\n const port = new PortModel(data);\r\n this.ports.set(port.id, port);\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.addPort(port.id);\r\n }\r\n return port;\r\n }\r\n\r\n movePort(id: string, position: Point): void {\n const port = this.ports.get(id);\n if (!port) return;\n port.setPosition(position);\n }\n\n setPortCurrentAnchorId(id: string, currentAnchorId?: string): void {\n const port = this.ports.get(id);\n if (!port) return;\n port.setCurrentAnchorId(currentAnchorId);\n }\n\r\n removePort(id: string): void {\r\n const port = this.ports.get(id);\r\n if (!port) return;\r\n\r\n const element = this.elements.get(port.elementId);\r\n if (element) {\r\n element.removePort(id);\r\n }\r\n\r\n const portTextIds = [...port.textIds];\r\n portTextIds.forEach((textId) => this.removeText(textId));\r\n\r\n const linksToRemove = Array.from(this.links.values())\r\n .filter((link) => link.sourcePortId === id || link.targetPortId === id)\r\n .map((link) => link.id);\r\n\r\n linksToRemove.forEach((linkId) => this.removeLink(linkId));\r\n\r\n this.ports.delete(id);\r\n }\r\n\r\n addLink(data: LinkData): LinkModel {\r\n const link = new LinkModel(data);\r\n this.links.set(link.id, link);\r\n return link;\r\n }\r\n\r\n updateLinkPoints(id: string, points: Point[]): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n link.setPoints(points);\r\n }\r\n\r\n setLinkRoutingMode(id: string, mode: LinkRoutingMode): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n link.setRouting(mode);\r\n }\r\n\r\n removeLink(id: string): void {\r\n const link = this.links.get(id);\r\n if (!link) return;\r\n\r\n const textIds = [...link.textIds];\r\n textIds.forEach((textId) => this.removeText(textId));\r\n\r\n this.links.delete(id);\r\n }\r\n\r\n addText(data: TextData): TextModel {\r\n const text = new TextModel(data);\r\n this.texts.set(text.id, text);\r\n\r\n if (text.ownerId) {\r\n this.ownership.add(text.ownerId, text.id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.addText(text.id);\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.addText(text.id);\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.addText(text.id);\r\n }\r\n }\r\n\r\n return text;\r\n }\r\n\r\n updateText(id: string, content: string): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n text.setContent(content);\r\n }\r\n\r\n moveText(id: string, position: Point): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n text.setPosition(position);\r\n }\r\n\r\n removeText(id: string): void {\r\n const text = this.texts.get(id);\r\n if (!text) return;\r\n\r\n if (text.ownerId) {\r\n this.ownership.remove(text.ownerId, id);\r\n\r\n const element = this.elements.get(text.ownerId);\r\n if (element) {\r\n element.removeText(id);\r\n }\r\n\r\n const port = this.ports.get(text.ownerId);\r\n if (port) {\r\n port.removeText(id);\r\n }\r\n\r\n const link = this.links.get(text.ownerId);\r\n if (link) {\r\n link.removeText(id);\r\n }\r\n }\r\n\r\n this.texts.delete(id);\r\n }\r\n\r\n private resolveElementWorldPosition(element: ElementModel): Point {\r\n let x = element.position.x;\r\n let y = element.position.y;\r\n if (element.anchorCenter) {\r\n x -= element.size.width / 2;\r\n y -= element.size.height / 2;\r\n }\r\n let current: ElementModel | undefined = element;\r\n while (current?.parentId) {\r\n const parent = this.elements.get(current.parentId);\r\n if (!parent) break;\r\n let parentX = parent.position.x;\r\n let parentY = parent.position.y;\r\n if (parent.anchorCenter) {\r\n parentX -= parent.size.width / 2;\r\n parentY -= parent.size.height / 2;\r\n }\r\n x += parentX;\r\n y += parentY;\r\n current = parent;\r\n }\r\n return { x, y };\r\n }\r\n\r\n private resolveLinkMidpoint(link: LinkModel): Point {\r\n const points = link.points;\r\n if (points.length === 0) return { x: 0, y: 0 };\r\n if (points.length === 1) return { ...points[0] };\r\n\r\n let total = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n total += distance(points[i - 1], points[i]);\r\n }\r\n\r\n const halfway = total / 2;\r\n let traveled = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n const segment = distance(points[i - 1], points[i]);\r\n if (traveled + segment >= halfway) {\r\n const ratio = segment === 0 ? 0 : (halfway - traveled) / segment;\r\n return {\r\n x: points[i - 1].x + (points[i].x - points[i - 1].x) * ratio,\r\n y: points[i - 1].y + (points[i].y - points[i - 1].y) * ratio,\r\n };\r\n }\r\n traveled += segment;\r\n }\r\n\r\n return { ...points[points.length - 1] };\r\n }\r\n}\r\n","import { DiagramPatch } from '../api/types';\r\nimport DiagramModel from '../models/DiagramModel';\r\nimport { EngineCommand } from './EngineCommands';\r\n\r\nexport default class CommandQueue {\r\n private queue: EngineCommand[] = [];\r\n\r\n enqueue(command: EngineCommand): void {\r\n this.queue.push(command);\r\n }\r\n\r\n flush(model: DiagramModel): DiagramPatch[] {\r\n const patches: DiagramPatch[] = [];\r\n while (this.queue.length > 0) {\r\n const command = this.queue.shift();\r\n if (!command) continue;\r\n const next = command.apply(model);\r\n patches.push(...next);\r\n }\r\n return patches;\r\n }\r\n\r\n run(command: EngineCommand, model: DiagramModel): DiagramPatch[] {\r\n this.enqueue(command);\r\n return this.flush(model);\r\n }\r\n}\r\n","export type Unsubscribe = () => void;\r\n\r\nexport default class EventBus<TEvents extends Record<string, unknown>> {\r\n private handlers = new Map<keyof TEvents, Set<(payload: TEvents[keyof TEvents]) => void>>();\r\n\r\n subscribe<TEvent extends keyof TEvents>(\r\n event: TEvent,\r\n handler: (payload: TEvents[TEvent]) => void\r\n ): Unsubscribe {\r\n const set = this.handlers.get(event) ?? new Set();\r\n set.add(handler as (payload: TEvents[keyof TEvents]) => void);\r\n this.handlers.set(event, set);\r\n\r\n return () => {\r\n const existing = this.handlers.get(event);\r\n if (!existing) return;\r\n existing.delete(handler as (payload: TEvents[keyof TEvents]) => void);\r\n if (existing.size === 0) {\r\n this.handlers.delete(event);\r\n }\r\n };\r\n }\r\n\r\n emit<TEvent extends keyof TEvents>(event: TEvent, payload: TEvents[TEvent]): void {\r\n const set = this.handlers.get(event);\r\n if (!set) return;\r\n Array.from(set.values()).forEach((handler) => {\r\n handler(payload as TEvents[keyof TEvents]);\r\n });\r\n }\r\n}\r\n","export default class SelectionState {\r\n private selectedIds = new Set<string>();\r\n\r\n set(ids: string[]): void {\r\n this.selectedIds = new Set(ids);\r\n }\r\n\r\n toggle(id: string): void {\r\n if (this.selectedIds.has(id)) {\r\n this.selectedIds.delete(id);\r\n } else {\r\n this.selectedIds.add(id);\r\n }\r\n }\r\n\r\n get(): string[] {\r\n return Array.from(this.selectedIds.values());\r\n }\r\n\r\n clear(): void {\r\n this.selectedIds.clear();\r\n }\r\n}\r\n","import { Point } from '../api/types';\r\n\r\nexport default class ViewportState {\r\n pan: Point = { x: 0, y: 0 };\r\n zoom = 1;\r\n\r\n setPan(point: Point): void {\r\n this.pan = { ...point };\r\n }\r\n\r\n setZoom(value: number): void {\r\n this.zoom = value;\r\n }\r\n}\r\n","import { DiagramPatch } from '../api/types';\r\n\r\nexport const patchAdd = (entity: DiagramPatch['entity'], id: string, payload?: Record<string, unknown>): DiagramPatch => ({\r\n type: 'add',\r\n entity,\r\n id,\r\n payload,\r\n});\r\n\r\nexport const patchUpdate = (entity: DiagramPatch['entity'], id: string, payload?: Record<string, unknown>): DiagramPatch => ({\r\n type: 'update',\r\n entity,\r\n id,\r\n payload,\r\n});\r\n\r\nexport const patchRemove = (entity: DiagramPatch['entity'], id: string): DiagramPatch => ({\r\n type: 'remove',\r\n entity,\r\n id,\r\n});\r\n","import { DiagramPatch, DiagramState, ElementData, LinkData, LinkRoutingMode, Point, PortData, TextData } from '../api/types';\r\nimport DiagramModel from '../models/DiagramModel';\r\nimport { patchAdd, patchRemove, patchUpdate } from '../utils/patches';\r\n\r\nexport type EngineCommand = {\r\n type: string;\r\n apply: (model: DiagramModel) => DiagramPatch[];\r\n};\r\n\r\nexport const createLoadCommand = (state: DiagramState): EngineCommand => ({\r\n type: 'load',\r\n apply: (model) => {\r\n model.load(state);\r\n return [{ type: 'load', entity: 'config', payload: {} }];\r\n },\r\n});\r\n\r\nexport const createAddElementCommand = (element: ElementData): EngineCommand => ({\r\n type: 'addElement',\r\n apply: (model) => {\r\n model.addElement(element);\r\n return [patchAdd('element', element.id, element)];\r\n },\r\n});\r\n\r\nexport const createMoveElementCommand = (id: string, position: Point): EngineCommand => ({\r\n type: 'moveElement',\r\n apply: (model) => {\r\n model.moveElement(id, position);\r\n return [patchUpdate('element', id, { position })];\r\n },\r\n});\r\n\r\nexport const createResizeElementCommand = (\n id: string,\n size: { width: number; height: number }\n): EngineCommand => ({\n type: 'resizeElement',\n apply: (model) => {\n const current = model.getElement(id);\n const previousSize = current ? { ...current.size } : undefined;\n model.resizeElement(id, size);\n return [patchUpdate('element', id, { size, previousSize })];\n },\n});\n\r\nexport const createRemoveElementCommand = (id: string): EngineCommand => ({\r\n type: 'removeElement',\r\n apply: (model) => {\r\n model.removeElement(id);\r\n return [patchRemove('element', id)];\r\n },\r\n});\r\n\r\nexport const createSetElementLayoutCommand = (\r\n id: string,\r\n layout: ElementData['layout'],\r\n): EngineCommand => ({\r\n type: 'setElementLayout',\r\n apply: (model) => {\r\n model.setElementLayout(id, layout);\r\n return [patchUpdate('element', id, { layout })];\r\n },\r\n});\r\n\r\nexport const createAddPortCommand = (port: PortData): EngineCommand => ({\r\n type: 'addPort',\r\n apply: (model) => {\r\n model.addPort(port);\r\n return [patchAdd('port', port.id, port)];\r\n },\r\n});\r\n\r\nexport const createMovePortCommand = (\n id: string,\n update: { position: Point; currentAnchorId?: string | null },\n): EngineCommand => ({\n type: 'movePort',\n apply: (model) => {\n const hasCurrentAnchorId = Object.prototype.hasOwnProperty.call(update, 'currentAnchorId');\n model.movePort(id, update.position);\n if (hasCurrentAnchorId) {\n model.setPortCurrentAnchorId(id, update.currentAnchorId ?? undefined);\n }\n const payload: Record<string, unknown> = { position: update.position };\n if (hasCurrentAnchorId) {\n payload.currentAnchorId = update.currentAnchorId ?? null;\n }\n return [patchUpdate('port', id, payload)];\n },\n});\n\r\nexport const createRemovePortCommand = (id: string): EngineCommand => ({\r\n type: 'removePort',\r\n apply: (model) => {\r\n model.removePort(id);\r\n return [patchRemove('port', id)];\r\n },\r\n});\r\n\r\nexport const createAddLinkCommand = (link: LinkData): EngineCommand => ({\r\n type: 'addLink',\r\n apply: (model) => {\r\n model.addLink(link);\r\n return [patchAdd('link', link.id, link)];\r\n },\r\n});\r\n\r\nexport const createUpdateLinkCommand = (\r\n id: string,\r\n update: { points?: Point[]; routing?: LinkRoutingMode }\r\n): EngineCommand => ({\r\n type: 'updateLink',\r\n apply: (model) => {\r\n if (update.points !== undefined) {\r\n model.updateLinkPoints(id, update.points);\r\n }\r\n if (update.routing !== undefined) {\r\n model.setLinkRoutingMode(id, update.routing);\r\n }\r\n const payload: Record<string, unknown> = {};\r\n if (update.points !== undefined) payload.points = update.points;\r\n if (update.routing !== undefined) payload.routing = update.routing;\r\n return [patchUpdate('link', id, payload)];\r\n },\r\n});\r\n\r\nexport const createRemoveLinkCommand = (id: string): EngineCommand => ({\r\n type: 'removeLink',\r\n apply: (model) => {\r\n model.removeLink(id);\r\n return [patchRemove('link', id)];\r\n },\r\n});\r\n\r\nexport const createAddTextCommand = (text: TextData): EngineCommand => ({\r\n type: 'addText',\r\n apply: (model) => {\r\n model.addText(text);\r\n return [patchAdd('text', text.id, text)];\r\n },\r\n});\r\n\r\nexport const createUpdateTextCommand = (id: string, content: string): EngineCommand => ({\r\n type: 'updateText',\r\n apply: (model) => {\r\n model.updateText(id, content);\r\n return [patchUpdate('text', id, { content })];\r\n },\r\n});\r\n\r\nexport const createMoveTextCommand = (id: string, position: Point): EngineCommand => ({\r\n type: 'moveText',\r\n apply: (model) => {\r\n model.moveText(id, position);\r\n return [patchUpdate('text', id, { position })];\r\n },\r\n});\r\n\r\nexport const createRemoveTextCommand = (id: string): EngineCommand => ({\r\n type: 'removeText',\r\n apply: (model) => {\r\n model.removeText(id);\r\n return [patchRemove('text', id)];\r\n },\r\n});\r\n","export default class RenderScheduler {\r\n private pending = false;\r\n private lastCallback: (() => void) | null = null;\r\n\r\n requestRender(callback: () => void): void {\r\n this.lastCallback = callback;\r\n if (this.pending) return;\r\n this.pending = true;\r\n\r\n const schedule = typeof requestAnimationFrame !== 'undefined'\r\n ? requestAnimationFrame\r\n : (cb: FrameRequestCallback) => setTimeout(() => cb(Date.now()), 16);\r\n\r\n schedule(() => {\r\n this.pending = false;\r\n const next = this.lastCallback;\r\n this.lastCallback = null;\r\n if (next) {\r\n next();\r\n }\r\n });\r\n }\r\n}\r\n","import { Point, Rect } from '../api/types';\r\nimport type { RouteContext, RouteObstacle, RouterStrategy } from './RouterStrategy';\r\n\r\ntype ObstacleRouterOptions = {\r\n padding?: number;\r\n tolerance?: number;\r\n stubLength?: number;\r\n};\r\n\r\nconst DEFAULT_PADDING = 12;\r\nconst DEFAULT_TOLERANCE = 0.5;\r\nconst DEFAULT_STUB_LENGTH = 12;\r\n\r\nconst shrinkRect = (rect: Rect, amount: number): Rect | null => {\r\n const width = rect.width - amount * 2;\r\n const height = rect.height - amount * 2;\r\n if (width <= 0 || height <= 0) return null;\r\n return {\r\n x: rect.x + amount,\r\n y: rect.y + amount,\r\n width,\r\n height,\r\n };\r\n};\r\n\r\nconst segmentIntersectsRect = (start: Point, end: Point, rect: Rect): boolean => {\r\n const dx = end.x - start.x;\r\n const dy = end.y - start.y;\r\n const p = [-dx, dx, -dy, dy];\r\n const q = [\r\n start.x - rect.x,\r\n rect.x + rect.width - start.x,\r\n start.y - rect.y,\r\n rect.y + rect.height - start.y,\r\n ];\r\n\r\n let t0 = 0;\r\n let t1 = 1;\r\n\r\n for (let i = 0; i < 4; i += 1) {\r\n const pi = p[i];\r\n const qi = q[i];\r\n if (pi === 0) {\r\n if (qi < 0) return false;\r\n } else {\r\n const r = qi / pi;\r\n if (pi < 0) {\r\n if (r > t1) return false;\r\n if (r > t0) t0 = r;\r\n } else {\r\n if (r < t0) return false;\r\n if (r < t1) t1 = r;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst segmentIntersectsRectInterior = (start: Point, end: Point, rect: Rect, tolerance: number): boolean => {\r\n const inner = shrinkRect(rect, tolerance);\r\n if (!inner) return false;\r\n return segmentIntersectsRect(start, end, inner);\r\n};\r\n\r\nconst pointWithinRect = (point: Point, rect: Rect, tolerance: number): boolean => {\r\n return (\r\n point.x >= rect.x - tolerance &&\r\n point.x <= rect.x + rect.width + tolerance &&\r\n point.y >= rect.y - tolerance &&\r\n point.y <= rect.y + rect.height + tolerance\r\n );\r\n};\r\n\r\nconst compactPath = (points: Point[]): Point[] => {\r\n const deduped: Point[] = [];\r\n points.forEach((point) => {\r\n const last = deduped[deduped.length - 1];\r\n if (!last || last.x !== point.x || last.y !== point.y) {\r\n deduped.push(point);\r\n }\r\n });\r\n\r\n if (deduped.length < 3) return deduped;\r\n\r\n const compacted: Point[] = [deduped[0]];\r\n for (let i = 1; i < deduped.length; i += 1) {\r\n const prev = compacted[compacted.length - 1];\r\n const next = deduped[i];\r\n const beforePrev = compacted[compacted.length - 2];\r\n if (\r\n beforePrev &&\r\n ((beforePrev.x === prev.x && prev.x === next.x) || (beforePrev.y === prev.y && prev.y === next.y))\r\n ) {\r\n compacted[compacted.length - 1] = next;\r\n } else {\r\n compacted.push(next);\r\n }\r\n }\r\n return compacted;\r\n};\r\n\r\nconst pathLength = (points: Point[]): number => {\r\n let total = 0;\r\n for (let i = 1; i < points.length; i += 1) {\r\n const dx = points[i].x - points[i - 1].x;\r\n const dy = points[i].y - points[i - 1].y;\r\n total += Math.sqrt(dx * dx + dy * dy);\r\n }\r\n return total;\r\n};\r\n\r\nexport default class ObstacleRouter implements RouterStrategy {\r\n private padding: number;\r\n private tolerance: number;\r\n private stubLength: number;\r\n\r\n constructor(options?: ObstacleRouterOptions) {\r\n this.padding = options?.padding ?? DEFAULT_PADDING;\r\n this.tolerance = options?.tolerance ?? DEFAULT_TOLERANCE;\r\n this.stubLength = options?.stubLength ?? DEFAULT_STUB_LENGTH;\r\n }\r\n\r\n route(source: Point, target: Point, context?: RouteContext): Point[] {\r\n const obstacles = context?.obstacles ?? [];\r\n const bounds = context?.bounds;\r\n\r\n const sourceStub = this.computeStubEndpoint(source, context?.sourceEndpoint, bounds, obstacles);\r\n const targetStub = this.computeStubEndpoint(target, context?.targetEndpoint, bounds, obstacles);\r\n\r\n const innerSource = sourceStub ?? source;\r\n const innerTarget = targetStub ?? target;\r\n\r\n const core = this.routeBetween(innerSource, innerTarget, obstacles, bounds);\r\n const normalizedCore = this.ensureEndpoints(core, innerSource, innerTarget);\r\n\r\n const middle = normalizedCore.slice(1, -1).map((p) => ({ ...p }));\r\n const result: Point[] = [{ ...source }];\r\n const hasSourceStub = Boolean(sourceStub);\r\n const hasTargetStub = Boolean(targetStub);\r\n if (hasSourceStub && sourceStub) {\r\n result.push({ ...sourceStub });\r\n }\r\n result.push(...middle);\r\n if (hasTargetStub && targetStub) {\r\n result.push({ ...targetStub });\r\n }\r\n result.push({ ...target });\r\n\r\n return this.compactPreservingStubs(result, hasSourceStub, hasTargetStub);\r\n }\r\n\r\n private buildCandidates(source: Point, target: Point, obstacles: RouteObstacle[]): Point[][] {\r\n const midXValues = new Set<number>();\r\n const midYValues = new Set<number>();\r\n\r\n midXValues.add(Math.round((source.x + target.x) / 2));\r\n midXValues.add(source.x);\r\n midXValues.add(target.x);\r\n\r\n midYValues.add(Math.round((source.y + target.y) / 2));\r\n midYValues.add(source.y);\r\n midYValues.add(target.y);\r\n\r\n obstacles.forEach((obstacle) => {\r\n midXValues.add(obstacle.rect.x - this.padding);\r\n midXValues.add(obstacle.rect.x + obstacle.rect.width + this.padding);\r\n midYValues.add(obstacle.rect.y - this.padding);\r\n midYValues.add(obstacle.rect.y + obstacle.rect.height + this.padding);\r\n });\r\n\r\n const candidates: Point[][] = [];\r\n\r\n midXValues.forEach((midX) => {\r\n const path = compactPath([\r\n { ...source },\r\n { x: midX, y: source.y },\r\n { x: midX, y: target.y },\r\n { ...target },\r\n ]);\r\n candidates.push(path);\r\n });\r\n\r\n midYValues.forEach((midY) => {\r\n const path = compactPath([\r\n { ...source },\r\n { x: source.x, y: midY },\r\n { x: target.x, y: midY },\r\n { ...target },\r\n ]);\r\n candidates.push(path);\r\n });\r\n\r\n return candidates;\r\n }\r\n\r\n private routeBetween(source: Point, target: Point, obstacles: RouteObstacle[], bounds?: Rect): Point[] {\r\n const direct = compactPath([{ ...source }, { ...target }]);\r\n\r\n if (obstacles.length === 0 && (!bounds || this.pointsWithinBounds(direct, bounds))) {\r\n return direct;\r\n }\r\n\r\n if (this.isPathClear(direct, obstacles, bounds)) {\r\n return direct;\r\n }\r\n\r\n const candidates = this.buildCandidates(source, target, obstacles);\r\n let best: Point[] | null = null;\r\n let bestLength = Number.POSITIVE_INFINITY;\r\n\r\n candidates.forEach((candidate) => {\r\n if (!this.isPathClear(candidate, obstacles, bounds)) return;\r\n const length = pathLength(candidate);\r\n if (length < bestLength) {\r\n best = candidate;\r\n bestLength = length;\r\n }\r\n });\r\n\r\n return best ?? direct;\r\n }\r\n\r\n private pointsWithinBounds(points: Point[], bounds: Rect): boolean {\r\n return points.every((point) => pointWithinRect(point, bounds, this.tolerance));\r\n }\r\n\r\n private isPathClear(points: Point[], obstacles: RouteObstacle[], bounds?: Rect): boolean {\r\n if (points.length < 2) return true;\r\n if (bounds && !this.pointsWithinBounds(points, bounds)) return false;\r\n\r\n for (let i = 1; i < points.length; i += 1) {\r\n const start = points[i - 1];\r\n const end = points[i];\r\n if (start.x === end.x && start.y === end.y) continue;\r\n for (let j = 0; j < obstacles.length; j += 1) {\r\n if (segmentIntersectsRectInterior(start, end, obstacles[j].rect, this.tolerance)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private computeStubEndpoint(\n point: Point,\n endpoint: RouteContext['sourceEndpoint'],\n bounds: Rect | undefined,\n obstacles: RouteObstacle[],\n ): Point | null {\n if (!endpoint?.onEdgeSide || !endpoint.rect) return null;\n const outwardNormal = this.getNormal(endpoint.onEdgeSide);\n let selectedNormal = outwardNormal;\n let maxLength = this.computeAvailableStubLength(point, outwardNormal, bounds, obstacles, endpoint.elementId);\n\n // If the outward normal is fully blocked by route bounds on the endpoint host, fall back inward\n // to preserve a visible perpendicular stub for bounded parent-child routes.\n if (maxLength <= this.tolerance && bounds && this.rectsEqual(bounds, endpoint.rect)) {\n const inwardNormal = { x: -outwardNormal.x, y: -outwardNormal.y };\n const inwardLength = this.computeAvailableStubLength(point, inwardNormal, bounds, obstacles, endpoint.elementId);\n if (inwardLength > maxLength) {\n selectedNormal = inwardNormal;\n maxLength = inwardLength;\n }\n }\n\n if (maxLength <= 0) return null;\n\n return {\n x: point.x + selectedNormal.x * maxLength,\n y: point.y + selectedNormal.y * maxLength,\n };\n }\n\n private computeAvailableStubLength(\n point: Point,\n normal: Point,\n bounds: Rect | undefined,\n obstacles: RouteObstacle[],\n ignoreId?: string,\n ): number {\n let maxLength = this.stubLength;\n if (bounds) {\n maxLength = Math.min(maxLength, this.distanceToBounds(point, normal, bounds));\n }\n const obstacleLimit = this.distanceToObstacles(point, normal, obstacles, ignoreId);\n if (obstacleLimit !== null) {\n maxLength = Math.min(maxLength, obstacleLimit);\n }\n return maxLength;\n }\n\n private rectsEqual(a: Rect, b: Rect): boolean {\n return (\n Math.abs(a.x - b.x) <= this.tolerance &&\n Math.abs(a.y - b.y) <= this.tolerance &&\n Math.abs(a.width - b.width) <= this.tolerance &&\n Math.abs(a.height - b.height) <= this.tolerance\n );\n }\n\r\n private getNormal(side: 'left' | 'right' | 'top' | 'bottom'): Point {\r\n switch (side) {\r\n case 'left':\r\n return { x: -1, y: 0 };\r\n case 'right':\r\n return { x: 1, y: 0 };\r\n case 'top':\r\n return { x: 0, y: -1 };\r\n case 'bottom':\r\n default:\r\n return { x: 0, y: 1 };\r\n }\r\n }\r\n\r\n private distanceToBounds(point: Point, normal: Point, bounds: Rect): number {\r\n if (normal.x < 0) {\r\n return Math.max(0, point.x - bounds.x);\r\n }\r\n if (normal.x > 0) {\r\n return Math.max(0, bounds.x + bounds.width - point.x);\r\n }\r\n if (normal.y < 0) {\r\n return Math.max(0, point.y - bounds.y);\r\n }\r\n return Math.max(0, bounds.y + bounds.height - point.y);\r\n }\r\n\r\n private distanceToObstacles(\r\n point: Point,\r\n normal: Point,\r\n obstacles: RouteObstacle[],\r\n ignoreId?: string,\r\n ): number | null {\r\n let limit = Number.POSITIVE_INFINITY;\r\n const overlapsHorizontally = (rect: Rect) =>\r\n point.y >= rect.y - this.tolerance && point.y <= rect.y + rect.height + this.tolerance;\r\n const overlapsVertically = (rect: Rect) =>\r\n point.x >= rect.x - this.tolerance && point.x <= rect.x + rect.width + this.tolerance;\r\n\r\n obstacles.forEach((obstacle) => {\r\n if (ignoreId && obstacle.id === ignoreId) return;\r\n const rect = obstacle.rect;\r\n if (normal.x < 0 && overlapsHorizontally(rect) && rect.x + rect.width <= point.x) {\r\n const available = point.x - (rect.x + rect.width + this.tolerance);\r\n if (available < limit) limit = available;\r\n } else if (normal.x > 0 && overlapsHorizontally(rect) && rect.x >= point.x) {\r\n const available = rect.x - this.tolerance - point.x;\r\n if (available < limit) limit = available;\r\n } else if (normal.y < 0 && overlapsVertically(rect) && rect.y + rect.height <= point.y) {\r\n const available = point.y - (rect.y + rect.height + this.tolerance);\r\n if (available < limit) limit = available;\r\n } else if (normal.y > 0 && overlapsVertically(rect) && rect.y >= point.y) {\r\n const available = rect.y - this.tolerance - point.y;\r\n if (available < limit) limit = available;\r\n }\r\n });\r\n\r\n if (!Number.isFinite(limit)) return null;\r\n return Math.max(0, limit);\r\n }\r\n\r\n private ensureEndpoints(points: Point[], source: Point, target: Point): Point[] {\r\n if (points.length === 0) return [{ ...source }, { ...target }];\r\n const result = [...points];\r\n if (result.length === 1) {\r\n result.unshift({ ...source });\r\n result.push({ ...target });\r\n return result;\r\n }\r\n if (result[0].x !== source.x || result[0].y !== source.y) {\r\n result.unshift({ ...source });\r\n }\r\n const last = result[result.length - 1];\r\n if (last.x !== target.x || last.y !== target.y) {\r\n result.push({ ...target });\r\n }\r\n return result;\r\n }\r\n\r\n private compactPreservingStubs(points: Point[], hasSourceStub: boolean, hasTargetStub: boolean): Point[] {\r\n if (points.length <= 2) return points.map((p) => ({ ...p }));\r\n const deduped: Point[] = [];\r\n points.forEach((point) => {\r\n const last = deduped[deduped.length - 1];\r\n if (!last || last.x !== point.x || last.y !== point.y) {\r\n deduped.push(point);\r\n }\r\n });\r\n if (deduped.length < 3) return deduped.map((p) => ({ ...p }));\r\n\r\n const result: Point[] = [deduped[0]];\r\n for (let i = 1; i < deduped.length - 1; i += 1) {\r\n const prev = result[result.length - 1];\r\n const current = deduped[i];\r\n const next = deduped[i + 1];\r\n const isFirstTurn = hasSourceStub && result.length === 1;\r\n const isLastTurn = hasTargetStub && i === deduped.length - 2;\r\n const collinear =\r\n (prev.x === current.x && current.x === next.x) || (prev.y === current.y && current.y === next.y);\r\n if (collinear && !isFirstTurn && !isLastTurn) {\r\n continue;\r\n }\r\n result.push(current);\r\n }\r\n result.push(deduped[deduped.length - 1]);\r\n return result.map((p) => ({ ...p }));\r\n }\r\n}\r\n","import { Point } from '../api/types';\r\nimport { snapToGrid } from '../utils/geometry';\r\nimport { SnapStrategy } from './SnapStrategy';\r\n\r\nexport default class DefaultSnapper implements SnapStrategy {\r\n private gridSize: number;\r\n\r\n constructor(gridSize = 0) {\r\n this.gridSize = gridSize;\r\n }\r\n\r\n setGridSize(size: number): void {\r\n this.gridSize = size;\r\n }\r\n\r\n snap(point: Point): Point {\r\n return snapToGrid(point, this.gridSize);\r\n }\r\n}\r\n","import {\n ElementData,\n Point,\n PortBorderTransformContext,\n PortBorderTransformResult,\n PortAnchor,\n PortData,\n Rect,\n ResolvePortAnchorsOptions,\n ShapeEllipseMidPointTarget,\n ShapeDrawContext,\n ShapeHoverGeometry,\n} from '../api/types';\nimport { BorderSide } from '../utils/borderGeometry';\n\nexport type ShapeNodeSizeUpdateContext = {\n size: { width: number; height: number };\n anchorCenter: boolean;\n updateOffsetX: boolean;\n updateOffsetY: boolean;\n getNodeAttr: <T = unknown>(key: string) => T | undefined;\n};\n\nexport type ShapeNodeSizeUpdater = (context: ShapeNodeSizeUpdateContext) => Record<string, unknown>;\n\nexport type ShapeResizeHandle = 'nw' | 'ne' | 'sw' | 'se';\n\nexport type ShapeResizeNormalizeContext = {\n element: ElementData;\n handle: ShapeResizeHandle;\n minSize: number;\n proposal: { width: number; height: number };\n};\n\nexport type ShapeDefinition = {\n id: string;\n baseRotation?: number;\n draw?: (context: ShapeDrawContext) => void;\n createNode?: (model: ElementData | PortData) => unknown;\n svgPath?: string;\n svgSize?: { width: number; height: number };\n sizeUpdater?: ShapeNodeSizeUpdater;\n normalizeResize?: (context: ShapeResizeNormalizeContext) => { width: number; height: number };\n projectToBorder?: (point: Point, rect: Rect) => Point;\n resolveBorderSide?: (point: Point, rect: Rect) => BorderSide;\n resolveBorderNormal?: (point: Point, rect: Rect) => Point;\n resolvePortAnchors?: (rect: Rect, options: ResolvePortAnchorsOptions) => PortAnchor[];\n resolvePortBorderTransform?: (\n context: PortBorderTransformContext,\n ) => PortBorderTransformResult | undefined;\n resolveHoverGeometry?: (rect: Rect) => ShapeHoverGeometry | undefined;\n resolveEllipseMidPoints?: (rect: Rect) => ShapeEllipseMidPointTarget[] | undefined;\n};\n\nexport class ShapeRegistry {\n private shapes = new Map<string, ShapeDefinition>();\n\n register(shape: ShapeDefinition): void {\n this.shapes.set(shape.id, shape);\n }\n\r\n get(id: string): ShapeDefinition | undefined {\r\n return this.shapes.get(id);\r\n }\r\n\r\n has(id: string): boolean {\r\n return this.shapes.has(id);\r\n }\r\n}\r\n","export const DEFAULT_TEXT_FONT_SIZE = 12;\nexport const DEFAULT_TEXT_FONT_FAMILY = 'Arial';\nexport const DEFAULT_TEXT_LINE_HEIGHT = 1.2;\n\nexport type ResolvedTextStyle = {\n fontSize: number;\n fontFamily: string;\n lineHeight: number;\n};\n\nexport const resolveTextStyleDefaults = (\n style?: Record<string, unknown>,\n): ResolvedTextStyle => {\n const fontSize = (style?.fontSize as number | undefined) ?? DEFAULT_TEXT_FONT_SIZE;\n const fontFamily = (style?.fontFamily as string | undefined) ?? DEFAULT_TEXT_FONT_FAMILY;\n const lineHeight = (style?.lineHeight as number | undefined) ?? DEFAULT_TEXT_LINE_HEIGHT;\n return { fontSize, fontFamily, lineHeight };\n};\n","import { Size, TextData } from '../api/types';\nimport { TextMeasurer } from './TextMeasurer';\nimport { resolveTextStyleDefaults } from './textStyleDefaults';\n\r\nexport default class CanvasTextMeasurer implements TextMeasurer {\r\n private context: CanvasRenderingContext2D | null = null;\r\n\r\n private getContext(): CanvasRenderingContext2D | null {\r\n if (this.context) return this.context;\r\n if (typeof document === 'undefined') return null;\r\n const canvas = document.createElement('canvas');\r\n try {\r\n this.context = canvas.getContext('2d');\r\n } catch {\r\n this.context = null;\r\n }\r\n return this.context;\r\n }\n\n measure(text: TextData): Size {\n const { fontSize, fontFamily, lineHeight } = resolveTextStyleDefaults(text.style);\n const ctx = this.getContext();\n if (!ctx) {\n return {\n width: Math.max(text.content.length, 1) * fontSize * 0.6,\n height: fontSize * lineHeight,\n };\n }\n ctx.font = `${fontSize}px ${fontFamily}`;\n const metrics = ctx.measureText(text.content || '');\n const width = metrics.width;\n const height = fontSize * lineHeight;\n return { width, height };\n }\n}\n","import { Point, Rect } from '../api/types';\n\nexport type BorderSide = 'left' | 'right' | 'top' | 'bottom';\nexport type BoundaryKind = 'rect' | 'ellipse' | 'diamond';\n\nconst resolveNearestRectSide = (point: Point, rect: Rect): BorderSide => {\n const clampedX = Math.min(rect.x + rect.width, Math.max(rect.x, point.x));\n const clampedY = Math.min(rect.y + rect.height, Math.max(rect.y, point.y));\n const left = Math.abs(clampedX - rect.x);\n const right = Math.abs(clampedX - (rect.x + rect.width));\n const top = Math.abs(clampedY - rect.y);\n const bottom = Math.abs(clampedY - (rect.y + rect.height));\n const min = Math.min(left, right, top, bottom);\n\n if (min === left) return 'left';\n if (min === right) return 'right';\n if (min === top) return 'top';\n return 'bottom';\n};\n\nconst projectPointToRectBorder = (point: Point, rect: Rect): Point => {\n const clampedX = Math.min(rect.x + rect.width, Math.max(rect.x, point.x));\n const clampedY = Math.min(rect.y + rect.height, Math.max(rect.y, point.y));\n const side = resolveNearestRectSide(point, rect);\n if (side === 'left') return { x: rect.x, y: clampedY };\n if (side === 'right') return { x: rect.x + rect.width, y: clampedY };\n if (side === 'top') return { x: clampedX, y: rect.y };\n return { x: clampedX, y: rect.y + rect.height };\n};\n\nconst resolveDirectionalSide = (point: Point, rect: Rect): BorderSide => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return resolveNearestRectSide(point, rect);\n }\n\n const nx = (point.x - cx) / rx;\n const ny = (point.y - cy) / ry;\n if (Math.abs(nx) < 1e-6 && Math.abs(ny) < 1e-6) {\n return 'top';\n }\n if (Math.abs(nx) >= Math.abs(ny)) {\n return nx < 0 ? 'left' : 'right';\n }\n return ny < 0 ? 'top' : 'bottom';\n};\n\nconst projectPointToEllipseBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return projectPointToRectBorder(point, rect);\n }\n\n const dx = point.x - cx;\n const dy = point.y - cy;\n if (Math.abs(dx) < 1e-6 && Math.abs(dy) < 1e-6) {\n return { x: cx, y: cy - ry };\n }\n\n const scale = 1 / Math.sqrt((dx * dx) / (rx * rx) + (dy * dy) / (ry * ry));\n return { x: cx + dx * scale, y: cy + dy * scale };\n};\n\nconst projectPointToDiamondBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) {\n return projectPointToRectBorder(point, rect);\n }\n\n const dx = point.x - cx;\n const dy = point.y - cy;\n const scale = Math.abs(dx) / rx + Math.abs(dy) / ry;\n if (scale < 1e-6) {\n return { x: cx, y: rect.y };\n }\n return {\n x: cx + dx / scale,\n y: cy + dy / scale,\n };\n};\n\nexport const projectPointToBoundary = (point: Point, rect: Rect, boundary: BoundaryKind): Point => {\n if (boundary === 'ellipse') {\n return projectPointToEllipseBorder(point, rect);\n }\n if (boundary === 'diamond') {\n return projectPointToDiamondBorder(point, rect);\n }\n return projectPointToRectBorder(point, rect);\n};\n\nexport const resolveBoundarySide = (point: Point, rect: Rect, boundary: BoundaryKind): BorderSide => {\n if (boundary === 'ellipse' || boundary === 'diamond') {\n return resolveDirectionalSide(point, rect);\n }\n return resolveNearestRectSide(point, rect);\n};\n\nexport const borderSideToInwardRotation = (side: BorderSide): number => {\n if (side === 'top') return 180;\n if (side === 'right') return -90;\n if (side === 'left') return 90;\n return 0;\n};\n","import {\n DiagramPatch,\n EngineEventMap,\n Point,\n TextData,\n TextLayoutOverflowMode,\n TextLayoutWrapMode,\n} from '../api/types';\nimport { TextMeasurer } from '../measure/TextMeasurer';\nimport DiagramModel from '../models/DiagramModel';\nimport { patchUpdate } from '../utils/patches';\n\nconst POSITION_EPSILON = 1e-6;\nconst MIN_TRUNCATION_WIDTH_SAFETY_EPSILON = 0.5;\nconst FONT_SIZE_TRUNCATION_SAFETY_RATIO = 1.4;\nconst FONT_SIZE_TRUNCATION_SAFETY_BASE = 2;\n\nexport type ResolvedTextPresentation = {\n size: { width: number; height: number };\n displayContent: string;\n displayOffset?: Point;\n displayClipSize?: { width: number; height: number };\n};\n\nexport type TextLayoutServiceConfig = {\n model: DiagramModel;\n textMeasurer: TextMeasurer;\n};\n\nexport default class TextLayoutService {\n private model: DiagramModel;\n private textMeasurer: TextMeasurer;\n\n constructor(config: TextLayoutServiceConfig) {\n this.model = config.model;\n this.textMeasurer = config.textMeasurer;\n }\n\n resolveTextPresentation(text: TextData): ResolvedTextPresentation {\n const layout = text.layout;\n if (!layout) {\n const measured = this.textMeasurer.measure(text);\n return { size: measured, displayContent: text.content, displayOffset: undefined, displayClipSize: undefined };\n }\n\n const wrap = layout.wrap ?? 'none';\n const overflow = layout.overflow ?? 'clip';\n const padding = Math.max(0, layout.padding ?? 0);\n const bounds = this.resolveTextLayoutBounds(text, padding);\n const maxWidth = bounds.width;\n const maxHeight = bounds.height;\n const textRenderPadding = this.resolveTextRenderPadding(text.style);\n const horizontalRenderInset = textRenderPadding * 2;\n const verticalRenderInset = textRenderPadding * 2;\n const zeroPaddingInset = padding <= POSITION_EPSILON && this.shouldTrackOwnerBoundLayout(text) ? 0.5 : 0;\n const drawableWidth =\n maxWidth !== undefined ? Math.max(0, maxWidth - zeroPaddingInset * 2 - horizontalRenderInset) : undefined;\n const drawableHeight =\n maxHeight !== undefined ? Math.max(0, maxHeight - zeroPaddingInset * 2 - verticalRenderInset) : undefined;\n const lineHeight = this.textMeasurer.measure({ ...text, content: 'M' }).height;\n const content = text.content ?? '';\n\n const lines =\n wrap === 'none'\n ? [this.truncateToWidth(content, drawableWidth, overflow, text)]\n : this.wrapText(content, drawableWidth, wrap, text);\n\n let resolvedLines = lines.length > 0 ? lines : [''];\n const maxLinesFromHeight =\n drawableHeight !== undefined && lineHeight > 0\n ? Math.max(1, Math.floor(drawableHeight / lineHeight))\n : undefined;\n const configuredMaxLines =\n typeof layout.maxLines === 'number' && Number.isFinite(layout.maxLines)\n ? Math.max(1, Math.floor(layout.maxLines))\n : undefined;\n const effectiveMaxLines =\n configuredMaxLines !== undefined && maxLinesFromHeight !== undefined\n ? Math.min(configuredMaxLines, maxLinesFromHeight)\n : configuredMaxLines ?? maxLinesFromHeight;\n\n if (effectiveMaxLines !== undefined && resolvedLines.length > effectiveMaxLines) {\n resolvedLines = resolvedLines.slice(0, effectiveMaxLines);\n if (overflow !== 'clip' && resolvedLines.length > 0) {\n const lastIndex = resolvedLines.length - 1;\n resolvedLines[lastIndex] = this.truncateToWidth(\n resolvedLines[lastIndex],\n drawableWidth,\n 'ellipsis-end',\n text,\n );\n }\n }\n\n const lineWidths = resolvedLines.map((line) => this.measureTextWidth(text, line));\n const contentWidth = lineWidths.length > 0 ? Math.max(...lineWidths) : 0;\n const contentHeight = Math.max(lineHeight, lineHeight * resolvedLines.length);\n const contentBoxWidth = contentWidth + horizontalRenderInset;\n const contentBoxHeight = contentHeight + verticalRenderInset;\n const frameWidth = Math.max(0, maxWidth !== undefined ? maxWidth : contentBoxWidth);\n const frameHeight = Math.max(0, maxHeight !== undefined ? Math.min(contentBoxHeight, maxHeight) : contentBoxHeight);\n const clipWidth = Math.max(0, frameWidth - zeroPaddingInset * 2);\n const clipHeight = Math.max(0, frameHeight - zeroPaddingInset * 2);\n const width = frameWidth + padding * 2;\n const height = frameHeight + padding * 2;\n\n return {\n size: { width: Math.max(0, width), height: Math.max(0, height) },\n displayContent: resolvedLines.join('\\n'),\n displayOffset: { x: padding + zeroPaddingInset, y: padding + zeroPaddingInset },\n displayClipSize: { width: clipWidth, height: clipHeight },\n };\n }\n\n appendTextLayoutPatches(\n patches: DiagramPatch[],\n options?: {\n emitTextUpdated?: boolean;\n onTextUpdated?: (payload: EngineEventMap['textUpdated']) => void;\n },\n ): DiagramPatch[] {\n const resizedOwnerIds = this.collectResizedElementIds(patches);\n if (resizedOwnerIds.size === 0) return patches;\n\n const textPatches: DiagramPatch[] = [];\n this.model.texts.forEach((text) => {\n if (!text.ownerId || !resizedOwnerIds.has(text.ownerId)) return;\n const current = text.toData();\n if (!this.shouldTrackOwnerBoundLayout(current)) return;\n const resolved = this.resolveTextPresentation(current);\n const currentDisplay = current.displayContent ?? current.content;\n const sizeChanged =\n !current.size ||\n current.size.width !== resolved.size.width ||\n current.size.height !== resolved.size.height;\n const displayChanged = currentDisplay !== resolved.displayContent;\n const offsetChanged =\n (current.displayOffset?.x ?? 0) !== (resolved.displayOffset?.x ?? 0) ||\n (current.displayOffset?.y ?? 0) !== (resolved.displayOffset?.y ?? 0);\n const clipChanged =\n (current.displayClipSize?.width ?? 0) !== (resolved.displayClipSize?.width ?? 0) ||\n (current.displayClipSize?.height ?? 0) !== (resolved.displayClipSize?.height ?? 0);\n if (!sizeChanged && !displayChanged && !offsetChanged && !clipChanged) return;\n\n text.setSize(resolved.size);\n text.setDisplayContent(resolved.displayContent);\n text.setDisplayOffset(resolved.displayOffset);\n text.setDisplayClipSize(resolved.displayClipSize);\n textPatches.push(\n patchUpdate('text', text.id, {\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n );\n\n if (options?.emitTextUpdated ?? true) {\n options?.onTextUpdated?.({\n textId: text.id,\n ownerId: text.ownerId,\n content: text.content,\n displayContent: resolved.displayContent,\n reason: 'layout',\n });\n }\n });\n\n return textPatches.length > 0 ? [...patches, ...textPatches] : patches;\n }\n\n private collectResizedElementIds(patches: DiagramPatch[]): Set<string> {\n const ids = new Set<string>();\n patches.forEach((patch) => {\n if (patch.entity !== 'element' || patch.type !== 'update' || !patch.id) return;\n if (patch.payload?.size) ids.add(patch.id);\n });\n return ids;\n }\n\n private shouldTrackOwnerBoundLayout(text: TextData): boolean {\n if (!text.layout) return false;\n const boundsMode = text.layout.boundsMode ?? (text.ownerId ? 'owner-width' : undefined);\n return boundsMode === 'owner-width' || boundsMode === 'owner-box';\n }\n\n private resolveTextLayoutBounds(text: TextData, padding: number): { width?: number; height?: number } {\n const layout = text.layout;\n if (!layout) return {};\n\n const boundsMode = layout.boundsMode ?? (text.ownerId ? 'owner-width' : undefined);\n if (boundsMode === 'fixed') {\n const width = layout.fixedSize?.width;\n const height = layout.fixedSize?.height;\n return {\n width: typeof width === 'number' ? Math.max(0, width - padding * 2) : undefined,\n height: typeof height === 'number' ? Math.max(0, height - padding * 2) : undefined,\n };\n }\n\n if ((boundsMode === 'owner-width' || boundsMode === 'owner-box') && text.ownerId) {\n const owner = this.model.getElement(text.ownerId);\n if (!owner) return {};\n const width = Math.max(0, owner.size.width - padding * 2);\n if (boundsMode === 'owner-width') return { width };\n return {\n width,\n height: Math.max(0, owner.size.height - padding * 2),\n };\n }\n\n return {};\n }\n\n private wrapText(content: string, maxWidth: number | undefined, mode: TextLayoutWrapMode, text: TextData): string[] {\n if (maxWidth === undefined || !Number.isFinite(maxWidth)) {\n return content.replace(/\\r\\n/g, '\\n').split('\\n');\n }\n\n const width = Math.max(0, maxWidth);\n const lines = content.replace(/\\r\\n/g, '\\n').split('\\n');\n const wrapped: string[] = [];\n lines.forEach((line) => {\n if (line.length === 0) {\n wrapped.push('');\n return;\n }\n const chunks = mode === 'word' ? this.wrapByWord(line, width, text) : this.wrapByChar(line, width, text);\n wrapped.push(...chunks);\n });\n return wrapped;\n }\n\n private wrapByWord(line: string, maxWidth: number, text: TextData): string[] {\n const words = line.trim().split(/\\s+/).filter((item) => item.length > 0);\n if (words.length === 0) return [''];\n\n const lines: string[] = [];\n let current = '';\n words.forEach((word) => {\n const candidate = current.length > 0 ? `${current} ${word}` : word;\n if (this.measureTextWidth(text, candidate) <= maxWidth) {\n current = candidate;\n return;\n }\n if (current.length > 0) {\n lines.push(current);\n }\n if (this.measureTextWidth(text, word) <= maxWidth) {\n current = word;\n return;\n }\n const charLines = this.wrapByChar(word, maxWidth, text);\n if (charLines.length === 0) {\n current = '';\n return;\n }\n lines.push(...charLines.slice(0, -1));\n current = charLines[charLines.length - 1];\n });\n\n if (current.length > 0) lines.push(current);\n return lines.length > 0 ? lines : [''];\n }\n\n private wrapByChar(line: string, maxWidth: number, text: TextData): string[] {\n if (maxWidth <= 0) return [''];\n const lines: string[] = [];\n let current = '';\n Array.from(line).forEach((char) => {\n const candidate = current + char;\n if (current.length === 0 || this.measureTextWidth(text, candidate) <= maxWidth) {\n current = candidate;\n return;\n }\n lines.push(current);\n current = char;\n });\n if (current.length > 0) lines.push(current);\n return lines.length > 0 ? lines : [''];\n }\n\n private truncateToWidth(\n content: string,\n maxWidth: number | undefined,\n overflow: TextLayoutOverflowMode,\n text: TextData,\n ): string {\n if (maxWidth === undefined || !Number.isFinite(maxWidth)) return content;\n if (maxWidth <= 0) return '';\n const truncationSafety = this.resolveTruncationWidthSafety(text);\n const safeWidth = Math.max(0, maxWidth - truncationSafety);\n if (this.measureTextWidth(text, content) <= safeWidth) return content;\n if (overflow === 'clip') return this.clipToWidth(content, safeWidth, text);\n\n const ellipsis = '...';\n if (this.measureTextWidth(text, ellipsis) > safeWidth) {\n return this.clipToWidth(content, safeWidth, text);\n }\n\n if (overflow === 'ellipsis-start') {\n for (let i = 0; i < content.length; i += 1) {\n const candidate = `${ellipsis}${content.slice(i)}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n return ellipsis;\n }\n\n if (overflow === 'ellipsis-middle') {\n for (let left = content.length; left >= 0; left -= 1) {\n for (let rightStart = left; rightStart <= content.length; rightStart += 1) {\n const candidate = `${content.slice(0, left)}${ellipsis}${content.slice(rightStart)}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n }\n return ellipsis;\n }\n\n for (let i = content.length; i >= 0; i -= 1) {\n const candidate = `${content.slice(0, i)}${ellipsis}`;\n if (this.measureTextWidth(text, candidate) <= safeWidth) return candidate;\n }\n return ellipsis;\n }\n\n private clipToWidth(content: string, maxWidth: number, text: TextData): string {\n let clipped = '';\n Array.from(content).forEach((char) => {\n const candidate = clipped + char;\n if (this.measureTextWidth(text, candidate) <= maxWidth) {\n clipped = candidate;\n }\n });\n return clipped;\n }\n\n private measureTextWidth(text: TextData, content: string): number {\n return this.textMeasurer.measure({ ...text, content }).width;\n }\n\n private resolveTruncationWidthSafety(text: TextData): number {\n const rawFontSize = text.style?.fontSize;\n let fontSize = 12;\n if (typeof rawFontSize === 'number' && Number.isFinite(rawFontSize)) {\n fontSize = rawFontSize;\n } else if (typeof rawFontSize === 'string') {\n const parsed = Number.parseFloat(rawFontSize);\n if (Number.isFinite(parsed)) {\n fontSize = parsed;\n }\n }\n const derivedSafety = FONT_SIZE_TRUNCATION_SAFETY_BASE + Math.max(0, fontSize) * FONT_SIZE_TRUNCATION_SAFETY_RATIO;\n return Math.max(MIN_TRUNCATION_WIDTH_SAFETY_EPSILON, derivedSafety);\n }\n\n private resolveTextRenderPadding(style?: Record<string, unknown>): number {\n const rawPadding = style?.padding;\n if (typeof rawPadding === 'number' && Number.isFinite(rawPadding)) {\n return Math.max(0, rawPadding);\n }\n if (typeof rawPadding === 'string') {\n const parsed = Number.parseFloat(rawPadding);\n if (Number.isFinite(parsed)) return Math.max(0, parsed);\n }\n return 0;\n }\n}\n","import { DiagramPatch, ElementData, Point } from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport {\n createMoveElementCommand,\n createResizeElementCommand,\n} from './EngineCommands';\nimport CommandQueue from './CommandQueue';\n\nexport type AutoLayoutResult = { patches: DiagramPatch[]; movedPortIds: string[] };\n\nexport type AutoLayoutServiceConfig = {\n model: DiagramModel;\n commandQueue: CommandQueue;\n collectElementPortIds: (elementId: string) => string[];\n};\n\nexport default class AutoLayoutService {\n private model: DiagramModel;\n private commandQueue: CommandQueue;\n private collectElementPortIds: (elementId: string) => string[];\n\n constructor(config: AutoLayoutServiceConfig) {\n this.model = config.model;\n this.commandQueue = config.commandQueue;\n this.collectElementPortIds = config.collectElementPortIds;\n }\n\n applyLayoutForParent(parentId: string): AutoLayoutResult {\n const parent = this.model.getElement(parentId);\n if (!parent) return { patches: [], movedPortIds: [] };\n const layout = parent.layout;\n if (!layout || layout.mode === 'manual') return { patches: [], movedPortIds: [] };\n\n const children = this.model.getChildren(parentId);\n if (children.length === 0) return { patches: [], movedPortIds: [] };\n\n const axis = layout.mode;\n const padding = this.resolveLayoutPadding(layout);\n const gap = layout.gap ?? 12;\n const align = layout.align ?? 'center';\n const childFitMainAxis = layout.childFitMainAxis ?? 'none';\n const childFitCrossAxis = layout.childFitCrossAxis ?? 'none';\n const childFitMinSize = layout.childFitMinSize;\n const childFitMaxSize = layout.childFitMaxSize;\n const labelReservedTopLane = this.resolveLabelReservedTopLane(parentId, layout);\n\n const sorted = [...children].sort((a, b) => {\n const aPos = axis === 'horizontal' ? a.position.x : a.position.y;\n const bPos = axis === 'horizontal' ? b.position.x : b.position.y;\n if (aPos === bPos) return a.id.localeCompare(b.id);\n return aPos - bPos;\n });\n\n const gapCount = Math.max(0, sorted.length - 1);\n const calculateFittedSizes = (parentWidth: number, parentHeight: number) => {\n const availableWidth = Math.max(0, parentWidth - padding.x * 2);\n const availableHeight = Math.max(0, parentHeight - padding.y * 2 - labelReservedTopLane);\n const availableMain =\n axis === 'horizontal'\n ? Math.max(0, availableWidth - gap * gapCount)\n : Math.max(0, availableHeight - gap * gapCount);\n\n const distributedMainSizes =\n childFitMainAxis === 'distribute'\n ? this.distributeLayoutSizes(\n availableMain,\n sorted.length,\n sorted.map(() =>\n axis === 'horizontal' ? childFitMinSize?.width ?? 0 : childFitMinSize?.height ?? 0,\n ),\n sorted.map(() =>\n axis === 'horizontal'\n ? childFitMaxSize?.width ?? Number.POSITIVE_INFINITY\n : childFitMaxSize?.height ?? Number.POSITIVE_INFINITY,\n ),\n )\n : null;\n\n return sorted.map((child, index) => {\n let width = child.size.width;\n let height = child.size.height;\n\n if (distributedMainSizes) {\n if (axis === 'horizontal') {\n width = distributedMainSizes[index];\n } else {\n height = distributedMainSizes[index];\n }\n }\n\n if (childFitCrossAxis === 'stretch') {\n if (axis === 'horizontal') {\n height = availableHeight;\n } else {\n width = availableWidth;\n }\n }\n\n return {\n width: this.clampLayoutSize(width, childFitMinSize?.width, childFitMaxSize?.width),\n height: this.clampLayoutSize(height, childFitMinSize?.height, childFitMaxSize?.height),\n };\n });\n };\n\n const resolveParentSize = (fittedSizes: Array<{ width: number; height: number }>) => {\n const maxWidth = Math.max(...fittedSizes.map((size) => size.width));\n const maxHeight = Math.max(...fittedSizes.map((size) => size.height));\n const totalWidth = fittedSizes.reduce((sum, size) => sum + size.width, 0);\n const totalHeight = fittedSizes.reduce((sum, size) => sum + size.height, 0);\n\n if (axis === 'horizontal') {\n return {\n width: Math.max(parent.size.width, padding.x * 2 + totalWidth + gap * gapCount),\n height: Math.max(parent.size.height, padding.y * 2 + labelReservedTopLane + maxHeight),\n };\n }\n return {\n width: Math.max(parent.size.width, padding.x * 2 + maxWidth),\n height: Math.max(parent.size.height, padding.y * 2 + labelReservedTopLane + totalHeight + gap * gapCount),\n };\n };\n\n let fittedSizes = calculateFittedSizes(parent.size.width, parent.size.height);\n let { width: newParentWidth, height: newParentHeight } = resolveParentSize(fittedSizes);\n fittedSizes = calculateFittedSizes(newParentWidth, newParentHeight);\n ({ width: newParentWidth, height: newParentHeight } = resolveParentSize(fittedSizes));\n\n const availableWidth = Math.max(0, newParentWidth - padding.x * 2);\n const availableHeight = Math.max(0, newParentHeight - padding.y * 2 - labelReservedTopLane);\n\n let cursorX = padding.x;\n let cursorY = padding.y + labelReservedTopLane;\n const desiredPositions = new Map<string, Point>();\n const desiredSizes = new Map<string, { width: number; height: number }>();\n\n sorted.forEach((child, index) => {\n const fittedSize = fittedSizes[index];\n desiredSizes.set(child.id, fittedSize);\n if (axis === 'horizontal') {\n const y =\n align === 'start'\n ? padding.y + labelReservedTopLane\n : align === 'end'\n ? newParentHeight - padding.y - fittedSize.height\n : padding.y + labelReservedTopLane + Math.max(0, (availableHeight - fittedSize.height) / 2);\n desiredPositions.set(child.id, { x: cursorX, y });\n cursorX += fittedSize.width + (index < sorted.length - 1 ? gap : 0);\n } else {\n const x =\n align === 'start'\n ? padding.x\n : align === 'end'\n ? newParentWidth - padding.x - fittedSize.width\n : padding.x + Math.max(0, (availableWidth - fittedSize.width) / 2);\n desiredPositions.set(child.id, { x, y: cursorY });\n cursorY += fittedSize.height + (index < sorted.length - 1 ? gap : 0);\n }\n });\n\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n\n desiredPositions.forEach((position, childId) => {\n const child = this.model.getElement(childId);\n if (!child) return;\n if (child.position.x !== position.x || child.position.y !== position.y) {\n const movePatches = this.commandQueue.run(createMoveElementCommand(childId, position), this.model);\n patches.push(...movePatches);\n movedPortIds.push(...this.collectElementPortIds(childId));\n }\n const fittedSize = desiredSizes.get(childId);\n if (fittedSize && (child.size.width !== fittedSize.width || child.size.height !== fittedSize.height)) {\n const resizePatches = this.commandQueue.run(createResizeElementCommand(childId, fittedSize), this.model);\n patches.push(...resizePatches);\n movedPortIds.push(...this.collectElementPortIds(childId));\n const nested = this.applyLayoutForParent(childId);\n patches.push(...nested.patches);\n movedPortIds.push(...nested.movedPortIds);\n }\n });\n\n if (newParentWidth !== parent.size.width || newParentHeight !== parent.size.height) {\n const resizePatches = this.commandQueue.run(\n createResizeElementCommand(parentId, { width: newParentWidth, height: newParentHeight }),\n this.model,\n );\n patches.push(...resizePatches);\n movedPortIds.push(...parent.portIds);\n }\n\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n applyLayoutCascade(startParentId: string | null): AutoLayoutResult {\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n const visited = new Set<string>();\n let current = startParentId;\n while (current) {\n if (visited.has(current)) break;\n visited.add(current);\n const result = this.applyLayoutForParent(current);\n patches.push(...result.patches);\n movedPortIds.push(...result.movedPortIds);\n const parent = this.model.getElement(current);\n current = parent?.parentId ?? null;\n }\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n applyAllLayouts(): AutoLayoutResult {\n const layoutParents = Array.from(this.model.elements.values()).filter(\n (element) => element.layout && element.layout.mode !== 'manual',\n );\n const patches: DiagramPatch[] = [];\n const movedPortIds: string[] = [];\n const depth = (elementId: string): number => {\n let level = 0;\n let current = this.model.getElement(elementId);\n while (current?.parentId) {\n level += 1;\n current = this.model.getElement(current.parentId);\n }\n return level;\n };\n layoutParents\n .sort((a, b) => depth(b.id) - depth(a.id))\n .forEach((element) => {\n const result = this.applyLayoutForParent(element.id);\n patches.push(...result.patches);\n movedPortIds.push(...result.movedPortIds);\n });\n return { patches, movedPortIds: Array.from(new Set(movedPortIds)) };\n }\n\n private resolveLayoutPadding(layout: ElementData['layout']): { x: number; y: number } {\n const padding = layout?.padding ?? 12;\n if (typeof padding === 'number') return { x: padding, y: padding };\n return {\n x: padding.x ?? 12,\n y: padding.y ?? 12,\n };\n }\n\n private resolveLabelReservedTopLane(parentId: string, layout: ElementData['layout']): number {\n const policy = layout?.labelReservedSpace;\n if (!policy) return 0;\n const mode = policy.mode ?? 'none';\n if (mode === 'none') return 0;\n if ((policy.placement ?? 'top') !== 'top') return 0;\n\n const minSize = Math.max(0, policy.minSize ?? 0);\n const maxSize =\n typeof policy.maxSize === 'number' && Number.isFinite(policy.maxSize)\n ? Math.max(minSize, policy.maxSize)\n : Number.POSITIVE_INFINITY;\n\n let resolved = 0;\n if (mode === 'fixed') {\n resolved = Math.max(0, policy.size ?? 0);\n } else {\n resolved = this.resolveFlexibleLabelLaneFromText(parentId);\n }\n return this.clampLayoutSize(resolved, minSize, maxSize);\n }\n\n private resolveFlexibleLabelLaneFromText(parentId: string): number {\n let lane = 0;\n this.model.texts.forEach((text) => {\n if (text.ownerId !== parentId) return;\n const offset = text.displayOffset ?? { x: 0, y: 0 };\n const size = text.displayClipSize ?? text.size;\n const height = size?.height ?? 0;\n const bottom = text.position.y + offset.y + height;\n if (bottom > lane) {\n lane = bottom;\n }\n });\n return Math.max(0, lane);\n }\n\n private clampLayoutSize(value: number, min?: number, max?: number): number {\n const minValue = min ?? 0;\n const maxValue = max ?? Number.POSITIVE_INFINITY;\n return Math.max(minValue, Math.min(maxValue, value));\n }\n\n private distributeLayoutSizes(\n total: number,\n count: number,\n minValues: number[],\n maxValues: number[],\n ): number[] {\n if (count <= 0) return [];\n const safeTotal = Math.max(0, total);\n const mins = Array.from({ length: count }, (_, index) => Math.max(0, minValues[index] ?? 0));\n const maxs = Array.from({ length: count }, (_, index) => {\n const max = maxValues[index];\n if (!Number.isFinite(max)) return Number.POSITIVE_INFINITY;\n return Math.max(mins[index], max);\n });\n const values = [...mins];\n let remaining = safeTotal - values.reduce((sum, value) => sum + value, 0);\n if (remaining <= 0) {\n return values.map((value) => Math.round(value));\n }\n\n let active = values\n .map((_, index) => index)\n .filter((index) => maxs[index] - values[index] > 1e-6);\n\n while (remaining > 1e-6 && active.length > 0) {\n const share = remaining / active.length;\n let progressed = false;\n const nextActive: number[] = [];\n\n active.forEach((index) => {\n const capacity = maxs[index] - values[index];\n if (capacity <= 1e-6) return;\n const add = Math.min(capacity, share);\n if (add > 0) {\n values[index] += add;\n remaining -= add;\n progressed = true;\n }\n if (maxs[index] - values[index] > 1e-6) {\n nextActive.push(index);\n }\n });\n\n if (!progressed) break;\n active = nextActive;\n }\n\n const floored = values.map((value) => Math.floor(value));\n let remainder = Math.round(\n values.reduce((sum, value) => sum + value, 0) - floored.reduce((sum, value) => sum + value, 0),\n );\n const fractions = values\n .map((value, index) => ({ index, fraction: value - floored[index] }))\n .sort((a, b) => b.fraction - a.fraction || a.index - b.index);\n let cursor = 0;\n while (remainder > 0 && fractions.length > 0) {\n const index = fractions[cursor % fractions.length].index;\n floored[index] += 1;\n remainder -= 1;\n cursor += 1;\n }\n return floored.map((value) => Math.max(0, value));\n }\n}\n","import {\n BorderSide,\n Point,\n PortBorderTransformContext,\n PortData,\n PortLinkAttachMode,\n Rect,\n} from '../api/types';\nimport { ShapeRegistry } from '../renderer/RenderTypes';\nimport { borderSideToInwardRotation, resolveBoundarySide } from './borderGeometry';\nimport { rotatePoint } from './geometry';\n\ntype HostElementLike = {\n id: string;\n position: Point;\n size: { width: number; height: number };\n shapeId: string;\n};\n\nexport type PortGeometryPoints = {\n placementPoint: Point;\n sharedLinkAttachPoint: Point;\n effectiveLinkAttachPoint: Point;\n rotationPivot: Point;\n};\n\nexport type PortOrientationContext = {\n localRotation: number;\n rotation: number;\n offset: Point;\n nodeAnchorPoint: Point;\n side?: BorderSide;\n normal?: Point;\n};\n\nconst ZERO_POINT: Point = { x: 0, y: 0 };\n\nconst clonePoint = (point: Point): Point => ({ x: point.x, y: point.y });\n\nexport const borderSideToNormal = (side: BorderSide): Point => {\n if (side === 'left') return { x: -1, y: 0 };\n if (side === 'right') return { x: 1, y: 0 };\n if (side === 'top') return { x: 0, y: -1 };\n return { x: 0, y: 1 };\n};\n\nexport const resolvePortGeometryPoints = (\n port: Pick<\n PortData,\n 'placementPoint' | 'linkAttachPoint' | 'externalLinkAttachPoint' | 'internalLinkAttachPoint' | 'rotationPivot'\n >,\n attachMode: PortLinkAttachMode,\n): PortGeometryPoints => {\n const placementPoint = clonePoint(port.placementPoint ?? ZERO_POINT);\n const sharedLinkAttachPoint = clonePoint(port.linkAttachPoint ?? placementPoint);\n const effectiveLinkAttachPoint = clonePoint(\n attachMode === 'internal'\n ? port.internalLinkAttachPoint ?? sharedLinkAttachPoint\n : port.externalLinkAttachPoint ?? sharedLinkAttachPoint,\n );\n const rotationPivot = clonePoint(port.rotationPivot ?? placementPoint);\n return {\n placementPoint,\n sharedLinkAttachPoint,\n effectiveLinkAttachPoint,\n rotationPivot,\n };\n};\n\nexport const resolvePortOrientationContext = (options: {\n port: Pick<\n PortData,\n | 'shapeId'\n | 'style'\n | 'moveMode'\n | 'orientToHostBorder'\n | 'anchorCenter'\n | 'placementPoint'\n | 'linkAttachPoint'\n | 'externalLinkAttachPoint'\n | 'internalLinkAttachPoint'\n | 'rotationPivot'\n | 'size'\n >;\n worldPlacement: Point;\n host: HostElementLike | null;\n shapeRegistry: ShapeRegistry;\n attachMode: PortLinkAttachMode;\n}): PortOrientationContext => {\n const { port, worldPlacement, host, shapeRegistry, attachMode } = options;\n const portShape = port.shapeId ? shapeRegistry.get(port.shapeId) : undefined;\n const localRotation =\n (portShape?.baseRotation ?? 0) +\n (typeof port.style?.rotation === 'number' ? (port.style.rotation as number) : 0);\n const nodeAnchorPoint =\n port.anchorCenter && portShape?.svgPath\n ? {\n x: (portShape.svgSize?.width ?? port.size?.width ?? 0) / 2,\n y: (portShape.svgSize?.height ?? port.size?.height ?? 0) / 2,\n }\n : { ...ZERO_POINT };\n if (port.moveMode !== 'border' || port.orientToHostBorder === false || !host) {\n return { localRotation, rotation: 0, offset: { ...ZERO_POINT }, nodeAnchorPoint };\n }\n const hostRect: Rect = {\n x: host.position.x,\n y: host.position.y,\n width: host.size.width,\n height: host.size.height,\n };\n const shape = shapeRegistry.get(host.shapeId);\n const side = shape?.resolveBorderSide\n ? shape.resolveBorderSide(worldPlacement, hostRect)\n : resolveBoundarySide(worldPlacement, hostRect, 'rect');\n const normal = shape?.resolveBorderNormal\n ? shape.resolveBorderNormal(worldPlacement, hostRect)\n : borderSideToNormal(side);\n const geometry = resolvePortGeometryPoints(port, attachMode);\n const hookContext: PortBorderTransformContext = {\n side,\n normal,\n hostRect,\n attachMode,\n effectiveLinkAttachPoint: geometry.effectiveLinkAttachPoint,\n placementPoint: geometry.placementPoint,\n rotationPivot: geometry.rotationPivot,\n portSize: port.size,\n };\n const hookResult = shape?.resolvePortBorderTransform?.(hookContext);\n return {\n localRotation,\n nodeAnchorPoint,\n side,\n normal,\n rotation: borderSideToInwardRotation(side) + (hookResult?.rotation ?? 0),\n offset: hookResult?.offset ? clonePoint(hookResult.offset) : { ...ZERO_POINT },\n };\n};\n\nexport const resolvePortWorldTransform = (options: {\n port: Pick<\n PortData,\n 'placementPoint' | 'linkAttachPoint' | 'externalLinkAttachPoint' | 'internalLinkAttachPoint' | 'rotationPivot'\n >;\n worldPlacement: Point;\n attachMode: PortLinkAttachMode;\n orientation: Pick<PortOrientationContext, 'localRotation' | 'rotation' | 'offset' | 'nodeAnchorPoint'>;\n}): { nodePosition: Point; linkAttachWorld: Point } => {\n const { port, worldPlacement, attachMode, orientation } = options;\n const geometry = resolvePortGeometryPoints(port, attachMode);\n const totalRotation = orientation.localRotation + orientation.rotation;\n const rotatedPlacement = rotatePoint(\n {\n x: geometry.placementPoint.x - orientation.nodeAnchorPoint.x,\n y: geometry.placementPoint.y - orientation.nodeAnchorPoint.y,\n },\n ZERO_POINT,\n totalRotation,\n );\n const rotatedAttach = rotatePoint(\n {\n x: geometry.effectiveLinkAttachPoint.x - orientation.nodeAnchorPoint.x,\n y: geometry.effectiveLinkAttachPoint.y - orientation.nodeAnchorPoint.y,\n },\n ZERO_POINT,\n totalRotation,\n );\n const nodePosition = {\n x: worldPlacement.x - rotatedPlacement.x + orientation.offset.x,\n y: worldPlacement.y - rotatedPlacement.y + orientation.offset.y,\n };\n const linkAttachWorld = {\n x: nodePosition.x + rotatedAttach.x,\n y: nodePosition.y + rotatedAttach.y,\n };\n return { nodePosition, linkAttachWorld };\n};\n","import { DiagramPatch, LinkData, Point, PortLinkAttachMode, Rect } from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport { ShapeRegistry } from '../renderer/RenderTypes';\nimport { RouteContext, RouterStrategy } from '../strategies/RouterStrategy';\nimport CommandQueue from './CommandQueue';\nimport { createUpdateLinkCommand } from './EngineCommands';\nimport { resolvePortOrientationContext, resolvePortWorldTransform } from '../utils/portGeometry';\n\nconst EDGE_TOLERANCE = 0.5;\nconst POSITION_EPSILON = 1e-6;\n\nexport type LinkRoutingServiceConfig = {\n model: DiagramModel;\n commandQueue: CommandQueue;\n router: RouterStrategy;\n shapeRegistry: ShapeRegistry;\n};\n\nexport default class LinkRoutingService {\n private model: DiagramModel;\n private commandQueue: CommandQueue;\n private router: RouterStrategy;\n private shapeRegistry: ShapeRegistry;\n\n constructor(config: LinkRoutingServiceConfig) {\n this.model = config.model;\n this.commandQueue = config.commandQueue;\n this.router = config.router;\n this.shapeRegistry = config.shapeRegistry;\n }\n\n setRouter(router: RouterStrategy): void {\n this.router = router;\n }\n\n updateLinksForPorts(portIds: string[]): DiagramPatch[] {\n if (portIds.length === 0) return [];\n const portIdSet = new Set(portIds);\n const patches: DiagramPatch[] = [];\n const updatedLinks = new Set<string>();\n\n this.model.links.forEach((link) => {\n if (!portIdSet.has(link.sourcePortId) && !portIdSet.has(link.targetPortId)) {\n return;\n }\n if (updatedLinks.has(link.id)) return;\n const endpoints = this.resolveLinkEndpoints(link);\n const source = endpoints.source;\n const target = endpoints.target;\n if (!source || !target) return;\n const points = this.resolveLinkPointsForUpdate(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n updatedLinks.add(link.id);\n });\n\n return patches;\n }\n\n routeLinksWithEmptyPoints(): DiagramPatch[] {\n const patches: DiagramPatch[] = [];\n this.model.links.forEach((link) => {\n if (link.points.length > 0) return;\n const endpoints = this.resolveLinkEndpoints(link);\n const source = endpoints.source;\n const target = endpoints.target;\n if (!source || !target) return;\n const points =\n (link.routing ?? 'auto') === 'manual'\n ? [{ ...source }, { ...target }]\n : this.computeAutoRoute(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n });\n return patches;\n }\n\n getPortLinkWorldPosition(\n portId: string,\n options?: { oppositePortId?: string; attachMode?: PortLinkAttachMode },\n ): Point | null {\n const port = this.model.getPort(portId);\n if (!port) return null;\n const worldPlacement = this.model.getPortWorldPosition(portId);\n if (!worldPlacement) return null;\n const host = this.resolveHostForPort(portId);\n const attachMode = options?.attachMode ?? this.resolveAttachModeForPorts(portId, options?.oppositePortId);\n const orientation = resolvePortOrientationContext({\n port: port.toData(),\n worldPlacement,\n host,\n shapeRegistry: this.shapeRegistry,\n attachMode,\n });\n const transformed = resolvePortWorldTransform({\n port: port.toData(),\n worldPlacement,\n attachMode,\n orientation,\n });\n return transformed.linkAttachWorld;\n }\n\n computeAutoRoute(link: LinkData, source: Point, target: Point): Point[] {\n const routed = this.router.route(source, target, this.buildRouteContext(link));\n if (!routed || routed.length < 2) {\n return [{ ...source }, { ...target }];\n }\n const normalized = routed.map((point) => ({ ...point }));\n normalized[0] = { ...source };\n normalized[normalized.length - 1] = { ...target };\n return normalized;\n }\n\n private resolveLinkPointsForUpdate(link: LinkData, source: Point, target: Point): Point[] {\n const routing = link.routing ?? 'auto';\n if (routing === 'manual') {\n return this.updateManualRoute(link.points, source, target);\n }\n return this.computeAutoRoute(link, source, target);\n }\n\n private resolveLinkEndpoints(link: Pick<LinkData, 'sourcePortId' | 'targetPortId'>): {\n source: Point | null;\n target: Point | null;\n } {\n return {\n source: this.getPortLinkWorldPosition(link.sourcePortId, { oppositePortId: link.targetPortId }),\n target: this.getPortLinkWorldPosition(link.targetPortId, { oppositePortId: link.sourcePortId }),\n };\n }\n\n private updateManualRoute(points: Point[], source: Point, target: Point): Point[] {\n if (points.length < 2) {\n return [{ ...source }, { ...target }];\n }\n const sourceDelta = {\n x: source.x - points[0].x,\n y: source.y - points[0].y,\n };\n const targetDelta = {\n x: target.x - points[points.length - 1].x,\n y: target.y - points[points.length - 1].y,\n };\n const shouldTranslateAllPoints =\n Math.abs(sourceDelta.x - targetDelta.x) <= POSITION_EPSILON &&\n Math.abs(sourceDelta.y - targetDelta.y) <= POSITION_EPSILON;\n\n return points.map((point, index) => {\n if (index === 0) return { ...source };\n if (index === points.length - 1) return { ...target };\n if (shouldTranslateAllPoints) {\n return {\n x: point.x + sourceDelta.x,\n y: point.y + sourceDelta.y,\n };\n }\n return { ...point };\n });\n }\n\n private buildRouteContext(link: LinkData): RouteContext {\n const sourcePort = this.model.getPort(link.sourcePortId);\n const targetPort = this.model.getPort(link.targetPortId);\n const sourceElementId = sourcePort?.elementId;\n const targetElementId = targetPort?.elementId;\n\n const endpoints = this.resolveLinkEndpoints(link);\n const sourcePosition = endpoints.source;\n const targetPosition = endpoints.target;\n const sourceRect = sourceElementId ? this.getElementRect(sourceElementId) : null;\n const targetRect = targetElementId ? this.getElementRect(targetElementId) : null;\n const sourceEndpointGeometry =\n sourcePosition && sourceRect\n ? this.resolveEndpointGeometry(sourcePosition, sourceRect, sourceElementId, targetPosition ?? undefined)\n : undefined;\n const targetEndpointGeometry =\n targetPosition && targetRect\n ? this.resolveEndpointGeometry(targetPosition, targetRect, targetElementId, sourcePosition ?? undefined)\n : undefined;\n const sourceOnEdge = sourceEndpointGeometry?.onEdge ?? false;\n const targetOnEdge = targetEndpointGeometry?.onEdge ?? false;\n\n const ancestorExclusions = this.getAncestorExclusions(sourceElementId, targetElementId);\n const { bounds, boundsElementId } = this.resolveRouteBounds(sourceElementId, targetElementId);\n\n const forcedObstacles = new Set<string>();\n if (sourceElementId && sourceOnEdge) forcedObstacles.add(sourceElementId);\n if (targetElementId && targetOnEdge) forcedObstacles.add(targetElementId);\n if (boundsElementId) {\n forcedObstacles.delete(boundsElementId);\n }\n\n const excluded = new Set<string>();\n ancestorExclusions.forEach((id) => excluded.add(id));\n if (sourceElementId && !sourceOnEdge) excluded.add(sourceElementId);\n if (targetElementId && !targetOnEdge) excluded.add(targetElementId);\n if (boundsElementId) excluded.add(boundsElementId);\n\n const obstacles = Array.from(this.model.elements.values())\n .filter((element) => {\n if (forcedObstacles.has(element.id)) return true;\n if (excluded.has(element.id)) return false;\n return true;\n })\n .map((element) => {\n const position = this.model.getElementWorldPosition(element.id) ?? element.position;\n return {\n id: element.id,\n rect: {\n x: position.x,\n y: position.y,\n width: element.size.width,\n height: element.size.height,\n },\n };\n });\n\n return {\n linkId: link.id,\n sourcePortId: link.sourcePortId,\n targetPortId: link.targetPortId,\n obstacles,\n bounds,\n sourceEndpoint:\n sourcePosition && sourceRect\n ? {\n elementId: sourceElementId ?? undefined,\n rect: sourceRect,\n onEdgeSide: sourceEndpointGeometry?.onEdgeSide,\n }\n : undefined,\n targetEndpoint:\n targetPosition && targetRect\n ? {\n elementId: targetElementId ?? undefined,\n rect: targetRect,\n onEdgeSide: targetEndpointGeometry?.onEdgeSide,\n }\n : undefined,\n };\n }\n\n private resolveEndpointGeometry(\n point: Point,\n rect: Rect,\n elementId?: string,\n oppositePoint?: Point,\n ): { onEdge: boolean; onEdgeSide?: 'left' | 'right' | 'top' | 'bottom' } {\n const shape = this.resolveElementShape(elementId);\n const onEdge = shape?.projectToBorder\n ? this.isPointOnProjectedBorder(point, rect, shape.projectToBorder, EDGE_TOLERANCE)\n : this.isPointOnRectEdge(point, rect, EDGE_TOLERANCE);\n let onEdgeSide = onEdge ? shape?.resolveBorderSide?.(point, rect) ?? this.resolveEdgeSide(point, rect) : undefined;\n if (onEdgeSide && oppositePoint) {\n onEdgeSide = this.resolveCornerTieBreakSide(point, rect, oppositePoint, onEdgeSide);\n }\n return { onEdge, onEdgeSide };\n }\n\n private resolveCornerTieBreakSide(\n point: Point,\n rect: Rect,\n oppositePoint: Point,\n currentSide: 'left' | 'right' | 'top' | 'bottom',\n ): 'left' | 'right' | 'top' | 'bottom' {\n const onLeft = Math.abs(point.x - rect.x) <= EDGE_TOLERANCE;\n const onRight = Math.abs(point.x - (rect.x + rect.width)) <= EDGE_TOLERANCE;\n const onTop = Math.abs(point.y - rect.y) <= EDGE_TOLERANCE;\n const onBottom = Math.abs(point.y - (rect.y + rect.height)) <= EDGE_TOLERANCE;\n const horizontalSide = onLeft ? 'left' : onRight ? 'right' : null;\n const verticalSide = onTop ? 'top' : onBottom ? 'bottom' : null;\n if (!horizontalSide || !verticalSide) {\n return currentSide;\n }\n const direction = {\n x: oppositePoint.x - point.x,\n y: oppositePoint.y - point.y,\n };\n const horizontalScore = horizontalSide === 'left' ? -direction.x : direction.x;\n const verticalScore = verticalSide === 'top' ? -direction.y : direction.y;\n if (Math.abs(horizontalScore - verticalScore) <= 1e-6) {\n return currentSide;\n }\n return verticalScore > horizontalScore ? verticalSide : horizontalSide;\n }\n\n private resolveElementShape(elementId?: string) {\n if (!elementId) return undefined;\n const element = this.model.getElement(elementId);\n if (!element) return undefined;\n return this.shapeRegistry.get(element.shapeId);\n }\n\n private isPointOnProjectedBorder(\n point: Point,\n rect: Rect,\n projectToBorder: (point: Point, rect: Rect) => Point,\n tolerance: number,\n ): boolean {\n const projected = projectToBorder(point, rect);\n return Math.abs(projected.x - point.x) <= tolerance && Math.abs(projected.y - point.y) <= tolerance;\n }\n\n private getElementRect(elementId: string): Rect | null {\n const element = this.model.getElement(elementId);\n if (!element) return null;\n const position = this.model.getElementWorldPosition(elementId) ?? element.position;\n return {\n x: position.x,\n y: position.y,\n width: element.size.width,\n height: element.size.height,\n };\n }\n\n private resolveHostForPort(portId: string): { id: string; position: Point; size: { width: number; height: number }; shapeId: string } | null {\n const port = this.model.getPort(portId);\n if (!port) return null;\n const element = this.model.getElement(port.elementId);\n if (!element) return null;\n return {\n id: element.id,\n position: this.model.getElementWorldPosition(element.id) ?? element.position,\n size: element.size,\n shapeId: element.shapeId,\n };\n }\n\n private resolveAttachModeForPorts(portId: string, oppositePortId?: string): PortLinkAttachMode {\n if (!oppositePortId) return 'external';\n const elementId = this.model.getPort(portId)?.elementId;\n const oppositeElementId = this.model.getPort(oppositePortId)?.elementId;\n if (!elementId || !oppositeElementId) return 'external';\n return this.isAncestorOf(elementId, oppositeElementId) ? 'internal' : 'external';\n }\n\n private isAncestorOf(candidateAncestorId: string, candidateDescendantId: string): boolean {\n if (candidateAncestorId === candidateDescendantId) return false;\n const descendantChain = this.getAncestorChain(candidateDescendantId);\n return descendantChain.includes(candidateAncestorId);\n }\n\n private getAncestorChain(elementId: string): string[] {\n const chain: string[] = [];\n let currentId: string | null = elementId;\n while (currentId) {\n const element = this.model.getElement(currentId);\n if (!element) break;\n chain.push(element.id);\n currentId = element.parentId ?? null;\n }\n return chain;\n }\n\n private getAncestorExclusions(sourceElementId?: string, targetElementId?: string): Set<string> {\n const exclusions = new Set<string>();\n if (sourceElementId) {\n this.getAncestorChain(sourceElementId).forEach((id) => exclusions.add(id));\n }\n if (targetElementId) {\n this.getAncestorChain(targetElementId).forEach((id) => exclusions.add(id));\n }\n return exclusions;\n }\n\n private resolveRouteBounds(\n sourceElementId?: string,\n targetElementId?: string,\n ): { bounds?: Rect; boundsElementId?: string } {\n if (!sourceElementId || !targetElementId) return {};\n if (sourceElementId === targetElementId) return {};\n\n const sourceChain = this.getAncestorChain(sourceElementId);\n if (sourceChain.includes(targetElementId)) {\n const rect = this.getElementRect(targetElementId);\n if (rect) {\n return { bounds: rect, boundsElementId: targetElementId };\n }\n }\n\n const targetChain = this.getAncestorChain(targetElementId);\n if (targetChain.includes(sourceElementId)) {\n const rect = this.getElementRect(sourceElementId);\n if (rect) {\n return { bounds: rect, boundsElementId: sourceElementId };\n }\n }\n\n return {};\n }\n\n private isPointOnRectEdge(point: Point, rect: Rect, tolerance: number): boolean {\n const withinX = point.x >= rect.x - tolerance && point.x <= rect.x + rect.width + tolerance;\n const withinY = point.y >= rect.y - tolerance && point.y <= rect.y + rect.height + tolerance;\n if (!withinX || !withinY) return false;\n const onLeft = Math.abs(point.x - rect.x) <= tolerance;\n const onRight = Math.abs(point.x - (rect.x + rect.width)) <= tolerance;\n const onTop = Math.abs(point.y - rect.y) <= tolerance;\n const onBottom = Math.abs(point.y - (rect.y + rect.height)) <= tolerance;\n return onLeft || onRight || onTop || onBottom;\n }\n\n private resolveEdgeSide(point: Point, rect: Rect): 'left' | 'right' | 'top' | 'bottom' | undefined {\n const distances: Array<{ side: 'left' | 'right' | 'top' | 'bottom'; value: number }> = [\n { side: 'left', value: Math.abs(point.x - rect.x) },\n { side: 'right', value: Math.abs(point.x - (rect.x + rect.width)) },\n { side: 'top', value: Math.abs(point.y - rect.y) },\n { side: 'bottom', value: Math.abs(point.y - (rect.y + rect.height)) },\n ];\n const nearest = distances.reduce((best, current) => (current.value < best.value ? current : best), distances[0]);\n return nearest.value <= EDGE_TOLERANCE ? nearest.side : undefined;\n }\n}\n","import { DiagramPatch } from '../api/types';\nimport { AutoLayoutResult } from './AutoLayoutService';\n\nexport type MutationPipelineConfig = {\n routeLinksWithEmptyPoints: () => DiagramPatch[];\n reprojectBorderPortsForResizedElements: (\n patches: DiagramPatch[],\n ) => { patches: DiagramPatch[]; movedPortIds: string[] };\n updateLinksForPorts: (portIds: string[]) => DiagramPatch[];\n};\n\nexport type MutationPipelineRunOptions = {\n basePatches: DiagramPatch[];\n layoutSteps?: Array<() => AutoLayoutResult>;\n movedPortIds?: string[];\n includeEmptyLinkRouting?: boolean;\n};\n\nexport default class MutationPipeline {\n private routeLinksWithEmptyPoints: () => DiagramPatch[];\n private reprojectBorderPortsForResizedElements: (\n patches: DiagramPatch[],\n ) => { patches: DiagramPatch[]; movedPortIds: string[] };\n private updateLinksForPorts: (portIds: string[]) => DiagramPatch[];\n\n constructor(config: MutationPipelineConfig) {\n this.routeLinksWithEmptyPoints = config.routeLinksWithEmptyPoints;\n this.reprojectBorderPortsForResizedElements = config.reprojectBorderPortsForResizedElements;\n this.updateLinksForPorts = config.updateLinksForPorts;\n }\n\n run(options: MutationPipelineRunOptions): DiagramPatch[] {\n const allPatches: DiagramPatch[] = [...options.basePatches];\n const movedPortIds = new Set(options.movedPortIds ?? []);\n\n (options.layoutSteps ?? []).forEach((step) => {\n const result = step();\n allPatches.push(...result.patches);\n result.movedPortIds.forEach((id) => movedPortIds.add(id));\n });\n\n if (options.includeEmptyLinkRouting) {\n allPatches.push(...this.routeLinksWithEmptyPoints());\n }\n\n const normalizedBorderPorts = this.reprojectBorderPortsForResizedElements(allPatches);\n allPatches.push(...normalizedBorderPorts.patches);\n normalizedBorderPorts.movedPortIds.forEach((id) => movedPortIds.add(id));\n\n const reroutePortIds = Array.from(movedPortIds);\n if (reroutePortIds.length > 0) {\n allPatches.push(...this.updateLinksForPorts(reroutePortIds));\n }\n\n return allPatches;\n }\n}\n","import {\n DiagramEngineHandle,\n DiagramPatch,\n DiagramState,\n ElementData,\n EngineEventMap,\n ElementDropEvent,\n EnginePointerInfo,\n LinkData,\n ElementLinkConnectingEvent,\n LinkRoutingMode,\n MoveConstraint,\n OverlayShapeConfig,\n OverlayShapeHandle,\n Point,\n PortData,\n PortAnchor,\n Rect,\n RerouteLinksOptions,\n TextData,\n ElementPortMovementPolicy,\n HostAnchorPreset,\n PortMouseEvent,\n} from '../api/types';\nimport DiagramModel from '../models/DiagramModel';\nimport CommandQueue from './CommandQueue';\nimport EventBus from './EventBus';\nimport SelectionState from './SelectionState';\nimport ViewportState from './ViewportState';\nimport {\n createAddElementCommand,\n createAddLinkCommand,\n createAddPortCommand,\n createAddTextCommand,\n createLoadCommand,\n createMoveElementCommand,\n createMovePortCommand,\n createRemoveElementCommand,\n createRemoveLinkCommand,\n createRemovePortCommand,\n createRemoveTextCommand,\n createResizeElementCommand,\n createMoveTextCommand,\n createUpdateLinkCommand,\n createUpdateTextCommand,\n createSetElementLayoutCommand,\n} from './EngineCommands';\nimport { Renderer } from '../renderer/Renderer';\nimport RenderScheduler from '../renderer/RenderScheduler';\nimport ObstacleRouter from '../strategies/ObstacleRouter';\nimport DefaultSnapper from '../strategies/DefaultSnapper';\nimport { RouterStrategy } from '../strategies/RouterStrategy';\nimport { SnapStrategy } from '../strategies/SnapStrategy';\nimport { ShapeDefinition, ShapeRegistry, ShapeResizeHandle } from '../renderer/RenderTypes';\nimport CanvasTextMeasurer from '../measure/CanvasTextMeasurer';\nimport { TextMeasurer } from '../measure/TextMeasurer';\nimport { clamp } from '../utils/geometry';\nimport { patchRemove, patchUpdate } from '../utils/patches';\nimport { projectPointToBoundary } from '../utils/borderGeometry';\nimport TextLayoutService from './TextLayoutService';\nimport AutoLayoutService from './AutoLayoutService';\nimport LinkRoutingService from './LinkRoutingService';\nimport MutationPipeline from './MutationPipeline';\n\nconst clampToRect = (point: Point, rect: Rect): Point => ({\n x: clamp(point.x, rect.x, rect.x + rect.width),\n y: clamp(point.y, rect.y, rect.y + rect.height),\n});\n\nconst snapToRectBorder = (point: Point, rect: Rect): Point => {\n const clamped = clampToRect(point, rect);\n const left = Math.abs(clamped.x - rect.x);\n const right = Math.abs(clamped.x - (rect.x + rect.width));\n const top = Math.abs(clamped.y - rect.y);\n const bottom = Math.abs(clamped.y - (rect.y + rect.height));\n const min = Math.min(left, right, top, bottom);\n\n if (min === left) return { x: rect.x, y: clamped.y };\n if (min === right) return { x: rect.x + rect.width, y: clamped.y };\n if (min === top) return { x: clamped.x, y: rect.y };\n return { x: clamped.x, y: rect.y + rect.height };\n};\n\nconst POSITION_EPSILON = 1e-6;\nconst ANCHOR_PRESET_FALLBACK_ORDER: HostAnchorPreset[] = ['vertices', 'cardinal'];\n\nexport type DiagramEngineConfig = {\n renderer: Renderer;\n scheduler?: RenderScheduler;\n router?: RouterStrategy;\n snapper?: SnapStrategy;\n shapeRegistry?: ShapeRegistry;\n textMeasurer?: TextMeasurer;\n};\n\nexport default class DiagramEngine {\n private model = new DiagramModel();\n private events = new EventBus<EngineEventMap>();\n private commandQueue = new CommandQueue();\n private selection = new SelectionState();\n private viewport = new ViewportState();\n private renderer: Renderer;\n private scheduler: RenderScheduler;\n private snapper: SnapStrategy;\n private shapeRegistry: ShapeRegistry;\n private textLayoutService: TextLayoutService;\n private autoLayoutService: AutoLayoutService;\n private linkRoutingService: LinkRoutingService;\n private mutationPipeline: MutationPipeline;\n\n constructor(config: DiagramEngineConfig) {\n this.renderer = config.renderer;\n this.scheduler = config.scheduler ?? new RenderScheduler();\n const router = config.router ?? new ObstacleRouter();\n this.snapper = config.snapper ?? new DefaultSnapper();\n this.shapeRegistry = config.shapeRegistry ?? new ShapeRegistry();\n const textMeasurer = config.textMeasurer ?? new CanvasTextMeasurer();\n this.textLayoutService = new TextLayoutService({ model: this.model, textMeasurer });\n this.autoLayoutService = new AutoLayoutService({\n model: this.model,\n commandQueue: this.commandQueue,\n collectElementPortIds: (elementId) => this.collectElementPortIds(elementId),\n });\n this.linkRoutingService = new LinkRoutingService({\n model: this.model,\n commandQueue: this.commandQueue,\n router,\n shapeRegistry: this.shapeRegistry,\n });\n this.mutationPipeline = new MutationPipeline({\n routeLinksWithEmptyPoints: () => this.routeLinksWithEmptyPoints(),\n reprojectBorderPortsForResizedElements: (patches) => this.reprojectBorderPortsForResizedElements(patches),\n updateLinksForPorts: (portIds) => this.updateLinksForPorts(portIds),\n });\n }\n\n static create(config: DiagramEngineConfig): DiagramEngine {\n return new DiagramEngine(config);\n }\n\n load(state: DiagramState): void {\n const patches = this.commandQueue.run(createLoadCommand(state), this.model);\n const mutationPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyAllLayouts()],\n includeEmptyLinkRouting: true,\n });\n const normalizedPorts = this.normalizePortsForHostPolicies();\n const normalizedLinkPatches = normalizedPorts.movedPortIds.length > 0\n ? this.updateLinksForPorts(normalizedPorts.movedPortIds)\n : [];\n const textPresentationPatches = this.resolveAllTextPresentationPatches(false);\n const allPatches = [...mutationPatches, ...normalizedPorts.patches, ...normalizedLinkPatches, ...textPresentationPatches];\n this.emitChange(allPatches);\n }\n\n getState(): DiagramState {\n return this.model.toState();\n }\n\n getViewport(): { pan: Point; zoom: number } {\n return { pan: { ...this.viewport.pan }, zoom: this.viewport.zoom };\n }\n\n clientToWorld(clientPoint: Point, container: { getBoundingClientRect: () => { left: number; top: number } }): Point {\n const rect = container.getBoundingClientRect();\n const { pan, zoom } = this.getViewport();\n const safeZoom = zoom === 0 ? 1 : zoom;\n return {\n x: (clientPoint.x - rect.left - pan.x) / safeZoom,\n y: (clientPoint.y - rect.top - pan.y) / safeZoom,\n };\n }\n\n createOverlayShape(config: OverlayShapeConfig): OverlayShapeHandle {\n return this.renderer.createOverlayShape(config);\n }\n\n on<TEvent extends keyof EngineEventMap>(event: TEvent, handler: (payload: EngineEventMap[TEvent]) => void): () => void {\n return this.events.subscribe(event, handler);\n }\n\n addElement(element: ElementData): void {\n const patches = this.commandQueue.run(createAddElementCommand(element), this.model);\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutCascade(element.parentId ?? null)],\n });\n this.emitChange(allPatches);\n }\n\n moveElementTo(id: string, x: number, y: number): void {\n const oldWorld = this.model.getElementWorldPosition(id);\n const snapped = this.snapper.snap({ x, y });\n const element = this.model.getElement(id);\n let position = snapped;\n if (element?.parentId) {\n const parentPosition = this.model.getElementWorldPosition(element.parentId);\n if (parentPosition) {\n position = {\n x: snapped.x - parentPosition.x,\n y: snapped.y - parentPosition.y,\n };\n const parent = this.model.getElement(element.parentId);\n if (parent && element.moveMode && element.moveMode !== 'free') {\n const widthLimit = Math.max(0, parent.size.width - element.size.width);\n const heightLimit = Math.max(0, parent.size.height - element.size.height);\n let bounds: Rect = {\n x: 0,\n y: 0,\n width: widthLimit,\n height: heightLimit,\n };\n if (element.anchorCenter) {\n bounds = element.moveMode === 'inside'\n ? {\n x: element.size.width / 2,\n y: element.size.height / 2,\n width: widthLimit,\n height: heightLimit,\n }\n : {\n x: 0,\n y: 0,\n width: parent.size.width,\n height: parent.size.height,\n };\n }\n position = element.moveMode === 'inside' ? clampToRect(position, bounds) : snapToRectBorder(position, bounds);\n }\n }\n }\n const patches = this.commandQueue.run(createMoveElementCommand(id, position), this.model);\n const movedPortIds: string[] = [];\n if (element) {\n movedPortIds.push(...this.collectElementPortIds(element.id));\n }\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutCascade(element?.parentId ?? null)],\n movedPortIds,\n });\n this.emitChange(allPatches);\n\n const newWorld = this.model.getElementWorldPosition(id);\n if (oldWorld && newWorld) {\n const delta = { x: newWorld.x - oldWorld.x, y: newWorld.y - oldWorld.y };\n if (delta.x !== 0 || delta.y !== 0) {\n this.events.emit('elementMoved', {\n elementId: id,\n oldWorld: { ...oldWorld },\n newWorld: { ...newWorld },\n delta,\n });\n }\n }\n }\n\n resizeElement(id: string, width: number, height: number): void {\n const element = this.model.getElement(id);\n const oldSize = element?.size;\n const patches = this.commandQueue.run(createResizeElementCommand(id, { width, height }), this.model);\n const movedPortIds = element ? this.collectElementPortIds(element.id) : [];\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [() => this.applyLayoutForParent(id), () => this.applyLayoutCascade(element?.parentId ?? null)],\n movedPortIds,\n });\n this.emitChange(allPatches);\n const newSize = this.model.getElement(id)?.size;\n if (oldSize && newSize && (oldSize.width !== newSize.width || oldSize.height !== newSize.height)) {\n this.events.emit('elementResized', { elementId: id, oldSize: { ...oldSize }, newSize: { ...newSize } });\n }\n }\n\n setElementLayout(id: string, layout: ElementData['layout']): void {\n const patches = this.commandQueue.run(createSetElementLayoutCommand(id, layout), this.model);\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [\n () => this.applyLayoutForParent(id),\n () => this.applyLayoutCascade(this.model.getElement(id)?.parentId ?? null),\n ],\n });\n this.emitChange(allPatches);\n }\n\n removeElement(id: string): void {\n const existing = this.model.getElement(id);\n const parentId = existing?.parentId ?? null;\n const before = this.model.toState();\n this.commandQueue.run(createRemoveElementCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n const allPatches = this.mutationPipeline.run({\n basePatches: removal.patches,\n layoutSteps: [() => this.applyLayoutCascade(parentId)],\n });\n this.emitChange(allPatches);\n if (existing) {\n this.events.emit('elementDeleted', { elementId: id });\n }\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addPortToElement(elementId: string, port: PortData): void {\n const element = this.model.getElement(elementId);\n const nextPort: PortData = { ...port, elementId };\n if (element) {\n const constrained = this.resolveConstrainedPortRelativePosition(nextPort, element, nextPort.position);\n nextPort.position = constrained.position;\n nextPort.currentAnchorId = constrained.currentAnchorId ?? undefined;\n }\n const patches = this.commandQueue.run(createAddPortCommand(nextPort), this.model);\n this.emitChange(patches);\n }\n\n movePortTo(id: string, x: number, y: number): void {\n const snapped = this.snapper.snap({ x, y });\n const port = this.model.getPort(id);\n const oldWorld = this.model.getPortWorldPosition(id);\n let position = snapped;\n let currentAnchorId: string | null | undefined;\n if (port) {\n const elementPosition = this.model.getElementWorldPosition(port.elementId);\n if (elementPosition) {\n const requestedRelative = {\n x: snapped.x - elementPosition.x,\n y: snapped.y - elementPosition.y,\n };\n const element = this.model.getElement(port.elementId);\n if (element) {\n const constrained = this.resolveConstrainedPortRelativePosition(port, element, requestedRelative);\n position = constrained.position;\n currentAnchorId = constrained.currentAnchorId;\n } else {\n position = requestedRelative;\n }\n }\n }\n const moveUpdate: { position: Point; currentAnchorId?: string | null } = { position };\n if (currentAnchorId !== undefined) {\n moveUpdate.currentAnchorId = currentAnchorId;\n }\n const patches = this.commandQueue.run(createMovePortCommand(id, moveUpdate), this.model);\n if (port) {\n patches.push(...this.updateLinksForPorts([port.id]));\n }\n this.emitChange(patches);\n\n const newWorld = this.model.getPortWorldPosition(id);\n if (port && oldWorld && newWorld) {\n const delta = { x: newWorld.x - oldWorld.x, y: newWorld.y - oldWorld.y };\n if (delta.x !== 0 || delta.y !== 0) {\n this.events.emit('portMoved', {\n portId: id,\n elementId: port.elementId,\n oldWorld: { ...oldWorld },\n newWorld: { ...newWorld },\n delta,\n });\n }\n }\n }\n\n removePort(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemovePortCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addLink(link: LinkData): void {\n const source = this.linkRoutingService.getPortLinkWorldPosition(link.sourcePortId, {\n oppositePortId: link.targetPortId,\n });\n const target = this.linkRoutingService.getPortLinkWorldPosition(link.targetPortId, {\n oppositePortId: link.sourcePortId,\n });\n const routing = link.routing ?? 'auto';\n let points = link.points;\n if (source && target) {\n if (routing === 'auto') {\n points = this.computeAutoRoute(link, source, target);\n } else if (points.length < 2) {\n points = [{ ...source }, { ...target }];\n }\n }\n const patches = this.commandQueue.run(\n createAddLinkCommand({ ...link, points, routing }),\n this.model\n );\n this.emitChange(patches);\n }\n\n updateLinkPoints(id: string, points: Point[]): void {\n const patches = this.commandQueue.run(\n createUpdateLinkCommand(id, { points, routing: 'manual' }),\n this.model\n );\n this.emitChange(patches);\n }\n\n setLinkRoutingMode(id: string, mode: LinkRoutingMode): void {\n const link = this.model.getLink(id);\n if (!link) return;\n const update: { points?: Point[]; routing: LinkRoutingMode } = { routing: mode };\n if (mode === 'auto') {\n const source = this.linkRoutingService.getPortLinkWorldPosition(link.sourcePortId, {\n oppositePortId: link.targetPortId,\n });\n const target = this.linkRoutingService.getPortLinkWorldPosition(link.targetPortId, {\n oppositePortId: link.sourcePortId,\n });\n if (source && target) {\n update.points = this.computeAutoRoute(link, source, target);\n }\n }\n const patches = this.commandQueue.run(createUpdateLinkCommand(id, update), this.model);\n this.emitChange(patches);\n }\n\n rerouteAllLinks(): void {\n const linkIds: string[] = [];\n this.model.links.forEach((link) => {\n if ((link.routing ?? 'auto') === 'auto') {\n linkIds.push(link.id);\n }\n });\n this.rerouteLinks(linkIds);\n }\n\n rerouteLinks(linkIds: string[], options?: RerouteLinksOptions): void {\n const includeManual = Boolean(options?.includeManual);\n const patches: DiagramPatch[] = [];\n const visited = new Set<string>();\n\n linkIds.forEach((id) => {\n if (visited.has(id)) return;\n visited.add(id);\n const link = this.model.getLink(id);\n if (!link) return;\n const routing = link.routing ?? 'auto';\n if (routing === 'manual' && !includeManual) return;\n const source = this.linkRoutingService.getPortLinkWorldPosition(link.sourcePortId, {\n oppositePortId: link.targetPortId,\n });\n const target = this.linkRoutingService.getPortLinkWorldPosition(link.targetPortId, {\n oppositePortId: link.sourcePortId,\n });\n if (!source || !target) return;\n const points = this.computeAutoRoute(link, source, target);\n const linkPatches = this.commandQueue.run(createUpdateLinkCommand(link.id, { points }), this.model);\n patches.push(...linkPatches);\n });\n\n if (patches.length > 0) {\n this.emitChange(patches);\n }\n }\n\n removeLink(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemoveLinkCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n addText(text: TextData): void {\n const resolved = this.resolveTextPresentation(text);\n const patches = this.commandQueue.run(\n createAddTextCommand({\n ...text,\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n this.model,\n );\n this.emitChange(patches);\n }\n\n updateText(id: string, content: string): void {\n const patches = this.commandQueue.run(createUpdateTextCommand(id, content), this.model);\n const text = this.model.getText(id);\n const layoutOwnerId =\n text?.ownerId && this.hasFlexibleLabelReservedSpace(text.ownerId) ? text.ownerId : null;\n if (text) {\n const resolved = this.resolveTextPresentation(text.toData());\n text.setSize(resolved.size);\n text.setDisplayContent(resolved.displayContent);\n text.setDisplayOffset(resolved.displayOffset);\n text.setDisplayClipSize(resolved.displayClipSize);\n patches.push(\n patchUpdate('text', id, {\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n );\n this.events.emit('textUpdated', {\n textId: text.id,\n ownerId: text.ownerId,\n content: text.content,\n displayContent: resolved.displayContent,\n reason: 'content',\n });\n }\n if (!layoutOwnerId) {\n this.emitChange(patches);\n return;\n }\n const allPatches = this.mutationPipeline.run({\n basePatches: patches,\n layoutSteps: [\n () => this.applyLayoutForParent(layoutOwnerId),\n () => this.applyLayoutCascade(this.model.getElement(layoutOwnerId)?.parentId ?? null),\n ],\n });\n this.emitChange(allPatches);\n }\n\n moveTextTo(id: string, x: number, y: number): void {\n const text = this.model.getText(id);\n if (!text) return;\n let position: Point = { x, y };\n if (text.ownerId) {\n const element = this.model.getElement(text.ownerId);\n if (element) {\n const elementPosition = this.model.getElementWorldPosition(text.ownerId);\n if (elementPosition) {\n position = { x: x - elementPosition.x, y: y - elementPosition.y };\n }\n } else {\n const port = this.model.getPort(text.ownerId);\n if (port) {\n const portPosition = this.model.getPortWorldPosition(text.ownerId);\n if (portPosition) {\n position = { x: x - portPosition.x, y: y - portPosition.y };\n }\n } else {\n const link = this.model.getLink(text.ownerId);\n if (link) {\n const midpoint = this.model.getLinkMidpoint(text.ownerId);\n if (midpoint) {\n position = { x: x - midpoint.x, y: y - midpoint.y };\n }\n }\n }\n }\n }\n const patches = this.commandQueue.run(createMoveTextCommand(id, position), this.model);\n this.emitChange(patches);\n }\n\n removeText(id: string): void {\n const before = this.model.toState();\n this.commandQueue.run(createRemoveTextCommand(id), this.model);\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n }\n\n setSelection(ids: string[]): void {\n this.selection.set(ids);\n this.emitSelection();\n }\n\n toggleSelection(id: string): void {\n this.selection.toggle(id);\n this.emitSelection();\n }\n\n getSelection(): string[] {\n return this.selection.get();\n }\n\n getElementWorldPosition(id: string): Point | null {\n return this.model.getElementWorldPosition(id);\n }\n\n getElementRotation(id: string): number {\n const element = this.model.getElement(id);\n if (!element) return 0;\n const shape = this.shapeRegistry.get(element.shapeId);\n const baseRotation = shape?.baseRotation ?? 0;\n const instanceRotation = (element.style?.rotation as number | undefined) ?? 0;\n return baseRotation + instanceRotation;\n }\n\n normalizeElementResize(\n id: string,\n proposal: { x: number; y: number; width: number; height: number },\n handle: ShapeResizeHandle,\n minSize = 20,\n ): { x: number; y: number; width: number; height: number } {\n const clamped = {\n x: proposal.x,\n y: proposal.y,\n width: Math.max(minSize, proposal.width),\n height: Math.max(minSize, proposal.height),\n };\n const element = this.model.getElement(id);\n if (!element) return clamped;\n\n const shape = this.shapeRegistry.get(element.shapeId);\n if (!shape?.normalizeResize) return clamped;\n\n const normalized = shape.normalizeResize({\n element: element.toData(),\n handle,\n minSize,\n proposal: { width: clamped.width, height: clamped.height },\n });\n const width = Math.max(minSize, normalized.width);\n const height = Math.max(minSize, normalized.height);\n\n let x = clamped.x;\n let y = clamped.y;\n if (handle === 'sw' || handle === 'nw') {\n x += clamped.width - width;\n }\n if (handle === 'ne' || handle === 'nw') {\n y += clamped.height - height;\n }\n\n return { x, y, width, height };\n }\n\n getPortWorldPosition(id: string): Point | null {\n return this.model.getPortWorldPosition(id);\n }\n\n getPortLinkWorldPosition(\n id: string,\n options?: { oppositePortId?: string; attachMode?: 'external' | 'internal' },\n ): Point | null {\n return this.linkRoutingService.getPortLinkWorldPosition(id, options);\n }\n\n getTextWorldPosition(id: string): Point | null {\n return this.model.getTextWorldPosition(id);\n }\n\n getPortElementId(portId: string): string | null {\n return this.model.getPort(portId)?.elementId ?? null;\n }\n\n deleteSelection(): void {\n const selected = this.selection.get();\n if (selected.length === 0) return;\n const before = this.model.toState();\n\n const elementIds: string[] = [];\n const portIds: string[] = [];\n const linkIds: string[] = [];\n const textIds: string[] = [];\n selected.forEach((id) => {\n if (this.model.getElement(id)) elementIds.push(id);\n else if (this.model.getPort(id)) portIds.push(id);\n else if (this.model.getLink(id)) linkIds.push(id);\n else if (this.model.getText(id)) textIds.push(id);\n });\n\n selected.forEach((id) => {\n if (this.model.getElement(id)) {\n this.commandQueue.run(createRemoveElementCommand(id), this.model);\n return;\n }\n if (this.model.getPort(id)) {\n this.commandQueue.run(createRemovePortCommand(id), this.model);\n return;\n }\n if (this.model.getLink(id)) {\n this.commandQueue.run(createRemoveLinkCommand(id), this.model);\n return;\n }\n if (this.model.getText(id)) {\n this.commandQueue.run(createRemoveTextCommand(id), this.model);\n }\n });\n\n const removal = this.computeRemovalDiff(before);\n this.emitChange(removal.patches);\n this.emitEntityDeletionEvents(removal.removed);\n elementIds.forEach((elementId) => this.events.emit('elementDeleted', { elementId }));\n this.selection.clear();\n this.emitSelection();\n }\n\n setViewport(pan: Point, zoom: number): void {\n const hasPanChange = this.viewport.pan.x !== pan.x || this.viewport.pan.y !== pan.y;\n const hasZoomChange = this.viewport.zoom !== zoom;\n if (!hasPanChange && !hasZoomChange) return;\n\n this.viewport.setPan(pan);\n this.viewport.setZoom(zoom);\n this.emitChange(\n [\n {\n type: 'viewport',\n entity: 'viewport',\n payload: { pan: { ...pan }, zoom },\n },\n ],\n { render: false },\n );\n }\n\n setRouting(router: RouterStrategy): void {\n this.linkRoutingService.setRouter(router);\n this.events.emit('config', { type: 'routing' });\n }\n\n setSnapping(snapper: SnapStrategy): void {\n this.snapper = snapper;\n this.events.emit('config', { type: 'snapping' });\n }\n\n registerShape(shape: ShapeDefinition): void {\n this.shapeRegistry.register(shape);\n this.events.emit('config', { type: 'rendering' });\n }\n\n render(): void {\n this.renderer.render(this.model);\n }\n\n emitElementDrop(event: ElementDropEvent): void {\n this.events.emit('element-drop', event);\n this.events.emit('elementDrop', event);\n this.events.emit('elementDragged', event);\n }\n\n emitPaperClick(pointer: EnginePointerInfo): void {\n this.events.emit('paperClick', { pointer });\n }\n\n emitPortMouseDown(event: PortMouseEvent): void {\n this.events.emit('portMouseDown', event);\n }\n\n emitPortMouseUp(event: PortMouseEvent): void {\n this.events.emit('portMouseUp', event);\n }\n\n emitElementClick(elementId: string, pointer: EnginePointerInfo, isMulti: boolean): void {\n this.events.emit('elementClick', { elementId, pointer, isMulti });\n }\n\n emitElementLinkStarted(event: { sourcePortId: string; sourceElementId: string; startWorld: Point }): void {\n this.events.emit('elementLinkStarted', event);\n }\n\n emitElementLinkConnecting(event: ElementLinkConnectingEvent): boolean {\n let cancelled = false;\n const payload: ElementLinkConnectingEvent = {\n ...event,\n cancelled: false,\n cancel: () => {\n cancelled = true;\n payload.cancelled = true;\n },\n };\n this.events.emit('elementLinkConnecting', payload);\n return cancelled || payload.cancelled;\n }\n\n emitElementLinkEnded(event: {\n sourcePortId: string;\n sourceElementId: string;\n linkId?: string;\n targetPortId?: string;\n targetElementId?: string;\n cancelled: boolean;\n }): void {\n this.events.emit('elementLinkEnded', event);\n }\n\n private emitChange(patches: DiagramPatch[], options?: { render?: boolean; emitTextUpdated?: boolean }): void {\n const allPatches = this.appendTextLayoutPatches(patches, options?.emitTextUpdated ?? true);\n const state = this.model.toState();\n this.events.emit('change', { patches: allPatches, state });\n if (options?.render === false) return;\n this.scheduler.requestRender(() => this.renderer.render(this.model));\n }\n\n private appendTextLayoutPatches(patches: DiagramPatch[], emitTextUpdated: boolean): DiagramPatch[] {\n return this.textLayoutService.appendTextLayoutPatches(patches, {\n emitTextUpdated,\n onTextUpdated: (payload) => this.events.emit('textUpdated', payload),\n });\n }\n\n private reprojectBorderPortsForResizedElements(\n patches: DiagramPatch[],\n ): { patches: DiagramPatch[]; movedPortIds: string[] } {\n const resizedElements = this.collectResizedElementSizes(patches);\n if (resizedElements.size === 0) return { patches: [], movedPortIds: [] };\n\n const reprojectionPatches: DiagramPatch[] = [];\n const movedPortIds = new Set<string>();\n\n resizedElements.forEach((sizeInfo, elementId) => {\n const host = this.model.getElement(elementId);\n if (!host) return;\n host.portIds.forEach((portId) => {\n const port = this.model.getPort(portId);\n if (!port) return;\n const effectiveMoveMode = this.resolveEffectivePortMoveMode(port, host);\n if (!effectiveMoveMode || effectiveMoveMode === 'free' || effectiveMoveMode === 'inside') return;\n if (effectiveMoveMode === 'anchors') {\n const anchored = this.resolveAnchoredPortResizeProjection(port, host, sizeInfo, host.size);\n const unchanged =\n Math.abs(anchored.position.x - port.position.x) <= POSITION_EPSILON &&\n Math.abs(anchored.position.y - port.position.y) <= POSITION_EPSILON &&\n anchored.currentAnchorId === (port.currentAnchorId ?? null);\n if (unchanged) return;\n const patchesForPort = this.commandQueue.run(\n createMovePortCommand(port.id, {\n position: anchored.position,\n currentAnchorId: anchored.currentAnchorId,\n }),\n this.model,\n );\n reprojectionPatches.push(...patchesForPort);\n movedPortIds.add(port.id);\n return;\n }\n const projected = this.resolveBorderPortResizeProjection(port.position, host.shapeId, sizeInfo, host.size);\n const constrained = this.resolveConstrainedPortRelativePosition(port, host, projected);\n const unchanged =\n Math.abs(constrained.position.x - port.position.x) <= POSITION_EPSILON &&\n Math.abs(constrained.position.y - port.position.y) <= POSITION_EPSILON &&\n (constrained.currentAnchorId ?? null) === (port.currentAnchorId ?? null);\n if (unchanged) return;\n const patchesForPort = this.commandQueue.run(\n createMovePortCommand(port.id, {\n position: constrained.position,\n currentAnchorId: constrained.currentAnchorId,\n }),\n this.model,\n );\n reprojectionPatches.push(...patchesForPort);\n movedPortIds.add(port.id);\n });\n });\n\n return { patches: reprojectionPatches, movedPortIds: Array.from(movedPortIds) };\n }\n\n private collectResizedElementSizes(\n patches: DiagramPatch[],\n ): Map<string, { previousSize?: { width: number; height: number }; size: { width: number; height: number } }> {\n const resized = new Map<string, { previousSize?: { width: number; height: number }; size: { width: number; height: number } }>();\n patches.forEach((patch) => {\n if (patch.entity !== 'element' || patch.type !== 'update' || !patch.id || !patch.payload?.size) return;\n const payload = patch.payload as {\n size?: { width?: number; height?: number };\n previousSize?: { width?: number; height?: number };\n };\n if (typeof payload.size?.width !== 'number' || typeof payload.size?.height !== 'number') return;\n const existing = resized.get(patch.id);\n const previousSize =\n existing?.previousSize ??\n (typeof payload.previousSize?.width === 'number' && typeof payload.previousSize?.height === 'number'\n ? { width: payload.previousSize.width, height: payload.previousSize.height }\n : undefined);\n resized.set(patch.id, {\n previousSize,\n size: { width: payload.size.width, height: payload.size.height },\n });\n });\n return resized;\n }\n\n private resolveBorderPortResizeProjection(\n position: Point,\n shapeId: string,\n resize: { previousSize?: { width: number; height: number }; size: { width: number; height: number } },\n currentSize: { width: number; height: number },\n ): Point {\n const nextSize = {\n width: Math.max(0, currentSize.width),\n height: Math.max(0, currentSize.height),\n };\n const previousSize = resize.previousSize\n ? {\n width: Math.max(0, resize.previousSize.width),\n height: Math.max(0, resize.previousSize.height),\n }\n : undefined;\n if (!previousSize || (previousSize.width <= POSITION_EPSILON && previousSize.height <= POSITION_EPSILON)) {\n return this.projectPointToHostBorder(position, shapeId, nextSize);\n }\n\n const previousCenter = { x: previousSize.width / 2, y: previousSize.height / 2 };\n const nextCenter = { x: nextSize.width / 2, y: nextSize.height / 2 };\n const previousProjected = this.projectPointToHostBorder(position, shapeId, previousSize);\n const previousHalfWidth = previousSize.width / 2;\n const previousHalfHeight = previousSize.height / 2;\n const nextHalfWidth = nextSize.width / 2;\n const nextHalfHeight = nextSize.height / 2;\n const normalizedX =\n previousHalfWidth > POSITION_EPSILON ? (previousProjected.x - previousCenter.x) / previousHalfWidth : 0;\n const normalizedY =\n previousHalfHeight > POSITION_EPSILON ? (previousProjected.y - previousCenter.y) / previousHalfHeight : 0;\n const projectedTarget = {\n x: nextCenter.x + normalizedX * nextHalfWidth,\n y: nextCenter.y + normalizedY * nextHalfHeight,\n };\n return this.projectPointToHostBorder(projectedTarget, shapeId, nextSize);\n }\n\n private resolveConstrainedPortRelativePosition(\n port: Pick<PortData, 'position' | 'size' | 'style' | 'moveMode' | 'anchorCenter' | 'currentAnchorId'>,\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n requestedPosition: Point,\n ): { position: Point; currentAnchorId: string | null } {\n let position = { ...requestedPosition };\n const effectiveMoveMode = this.resolveEffectivePortMoveMode(port, element);\n\n if (effectiveMoveMode === 'inside' || effectiveMoveMode === 'border') {\n const widthLimit = Math.max(0, element.size.width - (port.size?.width ?? 0));\n const heightLimit = Math.max(0, element.size.height - (port.size?.height ?? 0));\n let bounds: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n if (port.anchorCenter && port.size) {\n bounds = effectiveMoveMode === 'inside'\n ? {\n x: port.size.width / 2,\n y: port.size.height / 2,\n width: widthLimit,\n height: heightLimit,\n }\n : {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n }\n if (effectiveMoveMode === 'inside') {\n position = clampToRect(position, bounds);\n } else {\n position = this.constrainPortToHostBorder(position, element);\n }\n }\n\n const style = port.style as\n | { moveBounds?: { x: number; y: number; width: number; height: number }; moveAxis?: 'horizontal' | 'vertical' }\n | undefined;\n if (style?.moveAxis === 'horizontal') {\n position.y = port.position.y;\n } else if (style?.moveAxis === 'vertical') {\n position.x = port.position.x;\n }\n if (style?.moveBounds) {\n const bounds = style.moveBounds;\n position.x = clamp(position.x, bounds.x, bounds.x + bounds.width);\n position.y = clamp(position.y, bounds.y, bounds.y + bounds.height);\n }\n\n if (effectiveMoveMode === 'border') {\n const resolvedBorder = this.resolveBorderPositionWithLimits(position, element, element.portMovement?.positionLimits);\n position = resolvedBorder ?? this.constrainPortToHostBorder(position, element);\n } else {\n position = this.applyPortPositionLimits(position, element.portMovement?.positionLimits);\n }\n\n if (effectiveMoveMode === 'anchors') {\n const anchor = this.resolveNearestPortAnchor(element, position, port.currentAnchorId);\n if (anchor) {\n return {\n position: { ...anchor.position },\n currentAnchorId: anchor.id,\n };\n }\n return { position: { ...port.position }, currentAnchorId: port.currentAnchorId ?? null };\n }\n\n return { position, currentAnchorId: null };\n }\n\n private applyPortPositionLimits(\n position: Point,\n limits?: ElementPortMovementPolicy['positionLimits'],\n ): Point {\n if (!limits) return { ...position };\n let x = position.x;\n let y = position.y;\n if (limits.x) {\n if (typeof limits.x.min === 'number') {\n x = Math.max(x, limits.x.min);\n }\n if (typeof limits.x.max === 'number') {\n x = Math.min(x, limits.x.max);\n }\n }\n if (limits.y) {\n if (typeof limits.y.min === 'number') {\n y = Math.max(y, limits.y.min);\n }\n if (typeof limits.y.max === 'number') {\n y = Math.min(y, limits.y.max);\n }\n }\n return { x, y };\n }\n\n private resolveBorderPositionWithLimits(\n position: Point,\n element: Pick<ElementData, 'shapeId' | 'size'>,\n limits?: ElementPortMovementPolicy['positionLimits'],\n ): Point | null {\n const borderBase = this.constrainPortToHostBorder(position, element);\n if (!limits) return borderBase;\n if (this.isPointWithinPositionLimits(borderBase, limits)) return borderBase;\n\n const target = this.applyPortPositionLimits(borderBase, limits);\n const xValues = new Set<number>([borderBase.x, target.x, 0, Math.max(0, element.size.width)]);\n const yValues = new Set<number>([borderBase.y, target.y, 0, Math.max(0, element.size.height)]);\n if (typeof limits.x?.min === 'number') xValues.add(limits.x.min);\n if (typeof limits.x?.max === 'number') xValues.add(limits.x.max);\n if (typeof limits.y?.min === 'number') yValues.add(limits.y.min);\n if (typeof limits.y?.max === 'number') yValues.add(limits.y.max);\n\n const seeds: Point[] = [];\n xValues.forEach((x) => yValues.forEach((y) => seeds.push({ x, y })));\n seeds.push({ x: borderBase.x, y: target.y }, { x: target.x, y: borderBase.y });\n\n const candidates: Point[] = [];\n const seen = new Set<string>();\n seeds.forEach((seed) => {\n const candidate = this.constrainPortToHostBorder(seed, element);\n const key = `${candidate.x.toFixed(6)}:${candidate.y.toFixed(6)}`;\n if (seen.has(key)) return;\n seen.add(key);\n candidates.push(candidate);\n });\n\n const valid = candidates.filter((candidate) => this.isPointWithinPositionLimits(candidate, limits));\n if (valid.length === 0) return null;\n\n return valid.reduce((best, candidate) => {\n const bestDistance = (best.x - target.x) ** 2 + (best.y - target.y) ** 2;\n const candidateDistance = (candidate.x - target.x) ** 2 + (candidate.y - target.y) ** 2;\n if (candidateDistance < bestDistance) return candidate;\n if (candidateDistance > bestDistance) return best;\n if (candidate.x < best.x) return candidate;\n if (candidate.x > best.x) return best;\n return candidate.y < best.y ? candidate : best;\n }, valid[0]);\n }\n\n private isPointWithinPositionLimits(\n position: Point,\n limits?: ElementPortMovementPolicy['positionLimits'],\n ): boolean {\n if (!limits) return true;\n if (limits.x) {\n if (typeof limits.x.min === 'number' && position.x < limits.x.min) return false;\n if (typeof limits.x.max === 'number' && position.x > limits.x.max) return false;\n }\n if (limits.y) {\n if (typeof limits.y.min === 'number' && position.y < limits.y.min) return false;\n if (typeof limits.y.max === 'number' && position.y > limits.y.max) return false;\n }\n return true;\n }\n\n private filterAnchorsByPositionLimits(\n anchors: PortAnchor[],\n limits?: ElementPortMovementPolicy['positionLimits'],\n ): PortAnchor[] {\n if (!limits) return anchors;\n return anchors.filter((anchor) => {\n const { position } = anchor;\n if (limits.x) {\n if (typeof limits.x.min === 'number' && position.x < limits.x.min) return false;\n if (typeof limits.x.max === 'number' && position.x > limits.x.max) return false;\n }\n if (limits.y) {\n if (typeof limits.y.min === 'number' && position.y < limits.y.min) return false;\n if (typeof limits.y.max === 'number' && position.y > limits.y.max) return false;\n }\n return true;\n });\n }\n\n private resolveEffectivePortMoveMode(\n port: Pick<PortData, 'moveMode'>,\n element: Pick<ElementData, 'portMovement'>,\n ): MoveConstraint | 'anchors' | undefined {\n return element.portMovement?.moveMode ?? port.moveMode;\n }\n\n private resolvePortAnchorsForElement(\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n ): PortAnchor[] {\n const shape = this.shapeRegistry.get(element.shapeId);\n if (!shape?.resolvePortAnchors) return [];\n const rect: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, element.size.width),\n height: Math.max(0, element.size.height),\n };\n const explicitPreset = element.portMovement?.anchorConstraint?.preset;\n const presetOrder: HostAnchorPreset[] = [];\n if (explicitPreset) {\n presetOrder.push(explicitPreset);\n }\n ANCHOR_PRESET_FALLBACK_ORDER.forEach((preset) => {\n if (!presetOrder.includes(preset)) {\n presetOrder.push(preset);\n }\n });\n for (const preset of presetOrder) {\n const anchors = shape.resolvePortAnchors(rect, { preset });\n if (anchors.length > 0) return anchors;\n }\n return [];\n }\n\n private resolveNearestPortAnchor(\n element: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n target: Point,\n preferredAnchorId?: string,\n ): PortAnchor | null {\n const anchors = this.filterAnchorsByPositionLimits(\n this.resolvePortAnchorsForElement(element),\n element.portMovement?.positionLimits,\n );\n if (anchors.length === 0) return null;\n if (preferredAnchorId) {\n const preferred = anchors.find((anchor) => anchor.id === preferredAnchorId);\n if (preferred) return preferred;\n }\n return this.findNearestPortAnchor(target, anchors);\n }\n\n private findNearestPortAnchor(target: Point, anchors: PortAnchor[]): PortAnchor {\n return anchors.reduce((best, current) => {\n const bestDistance = (best.position.x - target.x) ** 2 + (best.position.y - target.y) ** 2;\n const currentDistance = (current.position.x - target.x) ** 2 + (current.position.y - target.y) ** 2;\n return currentDistance < bestDistance ? current : best;\n }, anchors[0]);\n }\n\n private resolveAnchoredPortResizeProjection(\n port: Pick<PortData, 'position' | 'currentAnchorId'>,\n host: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'>,\n resize: { previousSize?: { width: number; height: number }; size: { width: number; height: number } },\n currentSize: { width: number; height: number },\n ): { position: Point; currentAnchorId: string | null } {\n const nextSize = {\n width: Math.max(0, currentSize.width),\n height: Math.max(0, currentSize.height),\n };\n const nextHost: Pick<ElementData, 'shapeId' | 'size' | 'portMovement'> = {\n shapeId: host.shapeId,\n size: nextSize,\n portMovement: host.portMovement,\n };\n const preferred = this.resolveNearestPortAnchor(nextHost, port.position, port.currentAnchorId);\n if (preferred && preferred.id === port.currentAnchorId) {\n return { position: { ...preferred.position }, currentAnchorId: preferred.id };\n }\n\n const previousSize = resize.previousSize\n ? {\n width: Math.max(0, resize.previousSize.width),\n height: Math.max(0, resize.previousSize.height),\n }\n : undefined;\n let projectedTarget = { ...port.position };\n if (previousSize && (previousSize.width > POSITION_EPSILON || previousSize.height > POSITION_EPSILON)) {\n const previousCenter = { x: previousSize.width / 2, y: previousSize.height / 2 };\n const nextCenter = { x: nextSize.width / 2, y: nextSize.height / 2 };\n const previousHalfWidth = previousSize.width / 2;\n const previousHalfHeight = previousSize.height / 2;\n const nextHalfWidth = nextSize.width / 2;\n const nextHalfHeight = nextSize.height / 2;\n const normalizedX =\n previousHalfWidth > POSITION_EPSILON ? (port.position.x - previousCenter.x) / previousHalfWidth : 0;\n const normalizedY =\n previousHalfHeight > POSITION_EPSILON ? (port.position.y - previousCenter.y) / previousHalfHeight : 0;\n projectedTarget = {\n x: nextCenter.x + normalizedX * nextHalfWidth,\n y: nextCenter.y + normalizedY * nextHalfHeight,\n };\n }\n\n const fallback = this.resolveNearestPortAnchor(nextHost, projectedTarget);\n if (!fallback) {\n return { position: { ...port.position }, currentAnchorId: port.currentAnchorId ?? null };\n }\n return {\n position: { ...fallback.position },\n currentAnchorId: fallback.id,\n };\n }\n\n private resolveTextPresentation(text: TextData): {\n size: { width: number; height: number };\n displayContent: string;\n displayOffset?: Point;\n displayClipSize?: { width: number; height: number };\n } {\n return this.textLayoutService.resolveTextPresentation(text);\n }\n\n private resolveAllTextPresentationPatches(emitTextUpdated: boolean): DiagramPatch[] {\n const textPatches: DiagramPatch[] = [];\n this.model.texts.forEach((text) => {\n const current = text.toData();\n const resolved = this.resolveTextPresentation(current);\n const currentDisplay = current.displayContent ?? current.content;\n const sizeChanged =\n !current.size ||\n current.size.width !== resolved.size.width ||\n current.size.height !== resolved.size.height;\n const displayChanged = currentDisplay !== resolved.displayContent;\n const offsetChanged =\n (current.displayOffset?.x ?? 0) !== (resolved.displayOffset?.x ?? 0) ||\n (current.displayOffset?.y ?? 0) !== (resolved.displayOffset?.y ?? 0);\n const clipChanged =\n (current.displayClipSize?.width ?? 0) !== (resolved.displayClipSize?.width ?? 0) ||\n (current.displayClipSize?.height ?? 0) !== (resolved.displayClipSize?.height ?? 0);\n if (!sizeChanged && !displayChanged && !offsetChanged && !clipChanged) return;\n\n text.setSize(resolved.size);\n text.setDisplayContent(resolved.displayContent);\n text.setDisplayOffset(resolved.displayOffset);\n text.setDisplayClipSize(resolved.displayClipSize);\n textPatches.push(\n patchUpdate('text', text.id, {\n size: resolved.size,\n displayContent: resolved.displayContent,\n displayOffset: resolved.displayOffset,\n displayClipSize: resolved.displayClipSize,\n }),\n );\n if (emitTextUpdated) {\n this.events.emit('textUpdated', {\n textId: text.id,\n ownerId: text.ownerId,\n content: text.content,\n displayContent: resolved.displayContent,\n reason: 'layout',\n });\n }\n });\n return textPatches;\n }\n\n private emitSelection(): void {\n const selectedIds = this.selection.get();\n this.events.emit('selection', { selectedIds });\n selectedIds.forEach((id) => {\n const element = this.model.getElement(id);\n if (element) {\n this.events.emit('elementSelected', { elementId: id });\n return;\n }\n const port = this.model.getPort(id);\n if (port) {\n this.events.emit('portSelected', { portId: id, elementId: port.elementId });\n return;\n }\n const text = this.model.getText(id);\n if (text) {\n this.events.emit('textSelected', { textId: id });\n }\n });\n this.renderer.renderSelection(selectedIds);\n }\n\n private applyLayoutForParent(parentId: string): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyLayoutForParent(parentId);\n }\n\n private applyLayoutCascade(startParentId: string | null): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyLayoutCascade(startParentId);\n }\n\n private applyAllLayouts(): { patches: DiagramPatch[]; movedPortIds: string[] } {\n return this.autoLayoutService.applyAllLayouts();\n }\n\n private hasFlexibleLabelReservedSpace(elementId: string): boolean {\n const element = this.model.getElement(elementId);\n const mode = element?.layout?.labelReservedSpace?.mode ?? 'none';\n return mode === 'flexible';\n }\n\n private updateLinksForPorts(portIds: string[]): DiagramPatch[] {\n return this.linkRoutingService.updateLinksForPorts(portIds);\n }\n\n private collectElementPortIds(elementId: string): string[] {\n const childrenByParent = new Map<string, string[]>();\n this.model.elements.forEach((element) => {\n if (!element.parentId) return;\n const list = childrenByParent.get(element.parentId) ?? [];\n list.push(element.id);\n childrenByParent.set(element.parentId, list);\n });\n\n const portIds: string[] = [];\n const stack = [elementId];\n while (stack.length > 0) {\n const currentId = stack.pop();\n if (!currentId) continue;\n const element = this.model.getElement(currentId);\n if (element) {\n portIds.push(...element.portIds);\n }\n const children = childrenByParent.get(currentId);\n if (children) {\n children.forEach((childId) => stack.push(childId));\n }\n }\n return portIds;\n }\n\n private computeAutoRoute(link: LinkData, source: Point, target: Point): Point[] {\n return this.linkRoutingService.computeAutoRoute(link, source, target);\n }\n\n private constrainPortToHostBorder(\n position: Point,\n element: { shapeId: string; size: { width: number; height: number } },\n ): Point {\n return this.projectPointToHostBorder(position, element.shapeId, element.size);\n }\n\n private projectPointToHostBorder(\n position: Point,\n shapeId: string,\n size: { width: number; height: number },\n ): Point {\n const rect: Rect = {\n x: 0,\n y: 0,\n width: Math.max(0, size.width),\n height: Math.max(0, size.height),\n };\n const shape = this.shapeRegistry.get(shapeId);\n if (shape?.projectToBorder) {\n return shape.projectToBorder(position, rect);\n }\n return projectPointToBoundary(position, rect, 'rect');\n }\n\n private routeLinksWithEmptyPoints(): DiagramPatch[] {\n return this.linkRoutingService.routeLinksWithEmptyPoints();\n }\n\n private normalizePortsForHostPolicies(\n portIds?: string[],\n ): { patches: DiagramPatch[]; movedPortIds: string[] } {\n const ids = portIds ?? Array.from(this.model.ports.keys());\n const normalizedPatches: DiagramPatch[] = [];\n const movedPortIds = new Set<string>();\n\n ids.forEach((portId) => {\n const port = this.model.getPort(portId);\n if (!port) return;\n const element = this.model.getElement(port.elementId);\n if (!element) return;\n\n const constrained = this.resolveConstrainedPortRelativePosition(port, element, port.position);\n const previousAnchorId = port.currentAnchorId ?? null;\n const shouldPersistAnchorId = previousAnchorId !== null || constrained.currentAnchorId === null;\n const nextAnchorId = shouldPersistAnchorId ? (constrained.currentAnchorId ?? null) : previousAnchorId;\n const unchanged =\n Math.abs(constrained.position.x - port.position.x) <= POSITION_EPSILON &&\n Math.abs(constrained.position.y - port.position.y) <= POSITION_EPSILON &&\n previousAnchorId === nextAnchorId;\n if (unchanged) return;\n\n const update: { position: Point; currentAnchorId?: string | null } = {\n position: constrained.position,\n };\n if (shouldPersistAnchorId) {\n update.currentAnchorId = constrained.currentAnchorId;\n }\n const patches = this.commandQueue.run(\n createMovePortCommand(port.id, update),\n this.model,\n );\n normalizedPatches.push(...patches);\n movedPortIds.add(port.id);\n });\n\n return { patches: normalizedPatches, movedPortIds: Array.from(movedPortIds) };\n }\n\n private computeRemovalDiff(before: DiagramState): {\n patches: DiagramPatch[];\n removed: { ports: PortData[]; links: LinkData[]; texts: TextData[] };\n } {\n const after = this.model.toState();\n const removedPatches: DiagramPatch[] = [];\n const beforeElements = new Set(before.elements.map((element) => element.id));\n const beforePorts = new Set(before.ports.map((port) => port.id));\n const beforeLinks = new Set(before.links.map((link) => link.id));\n const beforeTexts = new Set(before.texts.map((text) => text.id));\n\n const afterElements = new Set(after.elements.map((element) => element.id));\n const afterPorts = new Set(after.ports.map((port) => port.id));\n const afterLinks = new Set(after.links.map((link) => link.id));\n const afterTexts = new Set(after.texts.map((text) => text.id));\n\n beforeElements.forEach((id) => {\n if (!afterElements.has(id)) removedPatches.push(patchRemove('element', id));\n });\n const removedPorts: PortData[] = [];\n beforePorts.forEach((id) => {\n if (!afterPorts.has(id)) {\n removedPatches.push(patchRemove('port', id));\n const removedPort = before.ports.find((port) => port.id === id);\n if (removedPort) removedPorts.push(removedPort);\n }\n });\n const removedLinks: LinkData[] = [];\n beforeLinks.forEach((id) => {\n if (!afterLinks.has(id)) {\n removedPatches.push(patchRemove('link', id));\n const removedLink = before.links.find((link) => link.id === id);\n if (removedLink) removedLinks.push(removedLink);\n }\n });\n const removedTexts: TextData[] = [];\n beforeTexts.forEach((id) => {\n if (!afterTexts.has(id)) {\n removedPatches.push(patchRemove('text', id));\n const removedText = before.texts.find((text) => text.id === id);\n if (removedText) removedTexts.push(removedText);\n }\n });\n\n return {\n patches: removedPatches,\n removed: { ports: removedPorts, links: removedLinks, texts: removedTexts },\n };\n }\n\n private emitEntityDeletionEvents(removed: { ports: PortData[]; links: LinkData[]; texts: TextData[] }): void {\n removed.ports.forEach((port) => {\n this.events.emit('portDeleted', { portId: port.id, elementId: port.elementId });\n });\n removed.links.forEach((link) => {\n this.events.emit('linkDeleted', {\n linkId: link.id,\n sourcePortId: link.sourcePortId,\n targetPortId: link.targetPortId,\n });\n });\n removed.texts.forEach((text) => {\n this.events.emit('textDeleted', { textId: text.id, ownerId: text.ownerId });\n });\n }\n}\n\nexport const createDiagramEngine = (config: DiagramEngineConfig): DiagramEngineHandle => {\n const engine = new DiagramEngine(config);\n return {\n load: (state) => engine.load(state),\n getState: () => engine.getState(),\n getViewport: () => engine.getViewport(),\n clientToWorld: (clientPoint, container) => engine.clientToWorld(clientPoint, container),\n createOverlayShape: (config) => engine.createOverlayShape(config),\n on: (event, handler) => engine.on(event, handler),\n addElement: (element) => engine.addElement(element),\n moveElementTo: (id, x, y) => engine.moveElementTo(id, x, y),\n resizeElement: (id, width, height) => engine.resizeElement(id, width, height),\n setElementLayout: (id, layout) => engine.setElementLayout(id, layout),\n removeElement: (id) => engine.removeElement(id),\n addPortToElement: (elementId, port) => engine.addPortToElement(elementId, port),\n movePortTo: (id, x, y) => engine.movePortTo(id, x, y),\n removePort: (id) => engine.removePort(id),\n addLink: (link) => engine.addLink(link),\n updateLinkPoints: (id, points) => engine.updateLinkPoints(id, points),\n setLinkRoutingMode: (id, mode) => engine.setLinkRoutingMode(id, mode as LinkRoutingMode),\n rerouteAllLinks: () => engine.rerouteAllLinks(),\n rerouteLinks: (linkIds, options) => engine.rerouteLinks(linkIds, options),\n removeLink: (id) => engine.removeLink(id),\n addText: (text) => engine.addText(text),\n updateText: (id, content) => engine.updateText(id, content),\n moveTextTo: (id, x, y) => engine.moveTextTo(id, x, y),\n removeText: (id) => engine.removeText(id),\n setSelection: (ids) => engine.setSelection(ids),\n setViewport: (pan, zoom) => engine.setViewport(pan, zoom),\n setRouting: (router) => engine.setRouting(router as RouterStrategy),\n setSnapping: (snapper) => engine.setSnapping(snapper as SnapStrategy),\n registerShape: (shape) => engine.registerShape(shape as ShapeDefinition),\n render: () => engine.render(),\n };\n};\n","export type KonvaLayerLike = {\r\n name?: string;\r\n draw: () => void;\r\n destroy?: () => void;\r\n add?: (node: unknown) => void;\r\n};\r\n\r\nexport default class KonvaLayers {\r\n private layers = new Map<string, KonvaLayerLike>();\r\n private dirty = new Set<string>();\r\n\r\n addLayer(name: string, layer: KonvaLayerLike): void {\r\n this.layers.set(name, layer);\r\n }\r\n\r\n getLayer(name: string): KonvaLayerLike | undefined {\r\n return this.layers.get(name);\r\n }\r\n\r\n markDirty(name: string): void {\r\n if (this.layers.has(name)) {\r\n this.dirty.add(name);\r\n }\r\n }\r\n\r\n markAllDirty(): void {\r\n Array.from(this.layers.keys()).forEach((name) => this.dirty.add(name));\r\n }\r\n\r\n drawDirty(): void {\r\n const names = Array.from(this.dirty.values());\r\n names.forEach((name) => {\r\n const layer = this.layers.get(name);\r\n if (layer) {\r\n layer.draw();\r\n }\r\n });\r\n this.dirty.clear();\r\n }\r\n\r\n destroy(): void {\r\n Array.from(this.layers.values()).forEach((layer) => layer.destroy?.());\r\n this.layers.clear();\r\n this.dirty.clear();\r\n }\r\n}\r\n","import { ElementData, LinkData, Point, PortData, TextData } from '../../api/types';\nimport { ShapeDefinition, ShapeNodeSizeUpdater, ShapeRegistry } from '../RenderTypes';\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\n\nexport type KonvaNodeLike = {\n id?: () => string;\n setAttrs?: (attrs: Record<string, unknown>) => void;\n destroy?: () => void;\n position?: (pos: { x: number; y: number }) => void;\n x?: (value?: number) => number;\n y?: (value?: number) => number;\n getAttr?: (key: string) => unknown;\n getClientRect?: (config?: Record<string, unknown>) => { width: number; height: number };\n attrs?: Record<string, unknown>;\n moveToTop?: () => void;\n zIndex?: (value?: number) => number;\n};\n\nexport type KonvaLike = {\n Group: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Rect: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Circle: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Line: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Path: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Text: new (config?: Record<string, unknown>) => KonvaNodeLike;\n Shape: new (config?: Record<string, unknown>) => KonvaNodeLike;\n};\n\nlet cachedKonva: KonvaLike | null = null;\n\nconst getKonva = (): KonvaLike => {\n if (cachedKonva) return cachedKonva;\n // Lazy-load Konva to avoid Jest ESM import issues in tests.\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const module = require('konva') as KonvaLike | { default?: KonvaLike };\n const resolved = (module as { default?: KonvaLike }).default ?? module;\n cachedKonva = resolved as KonvaLike;\n return cachedKonva;\n};\n\nexport default class KonvaNodeFactory {\n private registry: ShapeRegistry;\n private konva: KonvaLike;\n\n constructor(registry: ShapeRegistry, konva: KonvaLike = getKonva()) {\n this.registry = registry;\n this.konva = konva;\n }\n\n createElementNode(model: ElementData): KonvaNodeLike {\n const shape = this.registry.get(model.shapeId);\n if (shape?.createNode) {\n const node = shape.createNode(model) as KonvaNodeLike;\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.svgPath) {\n const node = this.createSvgPathNode(model, shape, { name: 'element', size: model.size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.draw) {\n const node = this.createDrawNode(model, shape, { name: 'element', size: model.size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n const node = new this.konva.Group({\n x: model.position.x,\n y: model.position.y,\n id: model.id,\n name: 'element',\n });\n return node;\n }\n\n createPortNode(model: PortData): KonvaNodeLike {\n if (model.shapeId) {\n const shape = this.registry.get(model.shapeId);\n if (shape?.createNode) {\n const node = shape.createNode(model) as KonvaNodeLike;\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.svgPath) {\n const size = model.size ?? { width: 8, height: 8 };\n const node = this.createSvgPathNode(model, shape, { name: 'port', size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n if (shape?.draw) {\n const size = model.size ?? { width: 8, height: 8 };\n const node = this.createDrawNode(model, shape, { name: 'port', size });\n this.applyShapeBehaviorAttrs(node, shape);\n return node;\n }\n }\n const node = new this.konva.Circle({\n x: model.position.x,\n y: model.position.y,\n id: model.id,\n radius: 4,\n name: 'port',\n });\n return node;\n }\n\n createLinkNode(model: LinkData): KonvaNodeLike {\n const flatPoints: number[] = [];\n model.points.forEach((point) => {\n flatPoints.push(point.x, point.y);\n });\n const style = model.style as Record<string, unknown> | undefined;\n const strokeWidth = (style?.strokeWidth as number | undefined) ?? 2;\n const hitStrokeWidth = (style?.hitStrokeWidth as number | undefined) ?? 15;\n const stroke = (style?.stroke as string | undefined) ?? 'black';\n const node = new this.konva.Line({\n points: flatPoints,\n id: model.id,\n stroke,\n strokeWidth,\n hitStrokeWidth,\n name: 'link',\n ...(style ?? {}),\n });\n if (node.setAttrs) {\n node.setAttrs({ __baseStroke: stroke, __baseStrokeWidth: strokeWidth });\n }\n return node;\n }\n\n createTextNode(model: TextData): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const defaults = resolveTextStyleDefaults(style);\n const baseFill = (style?.fill as string | undefined) ?? 'black';\n const displayOffset = model.displayOffset ?? { x: 0, y: 0 };\n const clip = model.displayClipSize;\n const node = new this.konva.Text({\n x: model.position.x + displayOffset.x,\n y: model.position.y + displayOffset.y,\n text: model.displayContent ?? model.content,\n id: model.id,\n name: 'text',\n fontSize: defaults.fontSize,\n fontFamily: defaults.fontFamily,\n lineHeight: defaults.lineHeight,\n ...(style ?? {}),\n width: clip?.width,\n height: clip?.height,\n wrap: clip ? 'none' : undefined,\n ellipsis: false,\n // Keep metadata for tests/debugging; Konva clip attrs do not apply on Text nodes.\n clipX: clip ? 0 : undefined,\n clipY: clip ? 0 : undefined,\n clipWidth: clip?.width,\n clipHeight: clip?.height,\n });\n if (node.setAttrs) {\n node.setAttrs({ __baseFill: baseFill });\n }\n return node;\n }\n\n createTextBackgroundNode(config: {\n id: string;\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n stroke?: string;\n strokeWidth?: number;\n cornerRadius?: number | [number, number, number, number];\n }): KonvaNodeLike {\n return new this.konva.Rect({\n id: config.id,\n x: config.x,\n y: config.y,\n width: config.width,\n height: config.height,\n fill: config.fill,\n stroke: config.stroke,\n strokeWidth: config.strokeWidth,\n cornerRadius: config.cornerRadius,\n name: 'text-background',\n listening: false,\n });\n }\n\n createHandleNode(config: { id: string; x: number; y: number; size: number; name: string }): KonvaNodeLike {\n return new this.konva.Rect({\n id: config.id,\n x: config.x,\n y: config.y,\n width: config.size,\n height: config.size,\n fill: '#ffffff',\n stroke: '#ff7a00',\n strokeWidth: 2,\n name: config.name,\n });\n }\n\n createHandleCircleNode(config: { id: string; x: number; y: number; radius: number; name: string }): KonvaNodeLike {\n return new this.konva.Circle({\n id: config.id,\n x: config.x,\n y: config.y,\n radius: config.radius,\n fill: '#ffffff',\n stroke: '#ff7a00',\n strokeWidth: 2,\n name: config.name,\n });\n }\n\n createTempLinkNode(config: { id: string; points: number[] }): KonvaNodeLike {\n return new this.konva.Line({\n id: config.id,\n points: config.points,\n stroke: '#999999',\n dash: [6, 4],\n strokeWidth: 2,\n name: 'temp-link',\n listening: false,\n });\n }\n\n createMarqueeNode(config: { id: string; x: number; y: number; width: number; height: number }): KonvaNodeLike {\n return new this.konva.Rect({\n id: config.id,\n x: config.x,\n y: config.y,\n width: config.width,\n height: config.height,\n fill: 'rgba(66, 133, 244, 0.12)',\n stroke: '#4285f4',\n strokeWidth: 1,\n dash: [4, 4],\n name: 'marquee',\n listening: false,\n });\n }\n\n createHoverControlEdgeLineNode(config: {\n id: string;\n start: Point;\n end: Point;\n style?: Record<string, unknown>;\n }): KonvaNodeLike {\n return new this.konva.Line({\n id: config.id,\n points: [config.start.x, config.start.y, config.end.x, config.end.y],\n stroke: '#ff7a00',\n strokeWidth: 3,\n name: 'shape-hover-edge',\n listening: false,\n ...(config.style ?? {}),\n });\n }\n\n createHoverControlIconNode(config: {\n id: string;\n position: Point;\n svgPath: string;\n size?: { width: number; height: number };\n style?: Record<string, unknown>;\n }): KonvaNodeLike {\n const targetSize = config.size ?? { width: 16, height: 16 };\n const node = new this.konva.Path({\n id: config.id,\n x: config.position.x,\n y: config.position.y,\n data: config.svgPath,\n name: 'shape-hover-control',\n fill: '#ffffff',\n stroke: '#ff7a00',\n strokeWidth: 2,\n ...(config.style ?? {}),\n });\n const rect = node.getClientRect ? node.getClientRect({ skipTransform: true }) : null;\n const baseWidth = rect?.width || targetSize.width || 1;\n const baseHeight = rect?.height || targetSize.height || 1;\n const scaleX = targetSize.width > 0 ? targetSize.width / baseWidth : 1;\n const scaleY = targetSize.height > 0 ? targetSize.height / baseHeight : 1;\n if (node.setAttrs) {\n node.setAttrs({\n offsetX: baseWidth / 2,\n offsetY: baseHeight / 2,\n scaleX,\n scaleY,\n __hoverIconBaseWidth: baseWidth,\n __hoverIconBaseHeight: baseHeight,\n });\n }\n return node;\n }\n\n private createDrawNode(\n model: ElementData | PortData,\n shape: ShapeDefinition,\n config: { name: string; size?: { width: number; height: number } },\n ): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const { style: resolvedStyle, rotation } = this.resolveShapeRotation(shape, style);\n const attrs: Record<string, unknown> = {\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n name: config.name,\n ...(resolvedStyle ?? {}),\n __shapeDraw: true,\n __model: model,\n rotation,\n sceneFunc: (ctx: CanvasRenderingContext2D, node: KonvaNodeLike) => {\n const resolvedModel =\n (node.getAttr ? node.getAttr('__model') : node.attrs?.__model) ?? model;\n shape.draw?.({ ctx, model: resolvedModel as ElementData | PortData });\n },\n };\n if (config.size?.width !== undefined) {\n attrs.width = config.size.width;\n }\n if (config.size?.height !== undefined) {\n attrs.height = config.size.height;\n }\n return new this.konva.Shape(attrs);\n }\n\n private createSvgPathNode(\n model: ElementData | PortData,\n shape: ShapeDefinition,\n config: { name: string; size?: { width: number; height: number } },\n ): KonvaNodeLike {\n const style = model.style as Record<string, unknown> | undefined;\n const { style: resolvedStyle, rotation } = this.resolveShapeRotation(shape, style);\n const sizeUpdater: ShapeNodeSizeUpdater = ({\n size: nextSize,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n }) => {\n const attrs: Record<string, unknown> = {};\n const baseWidth = getNodeAttr<number>('__pathBaseWidth') ?? nextSize.width;\n const baseHeight = getNodeAttr<number>('__pathBaseHeight') ?? nextSize.height;\n if (baseWidth) {\n attrs.scaleX = nextSize.width / baseWidth;\n }\n if (baseHeight) {\n attrs.scaleY = nextSize.height / baseHeight;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? baseWidth / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? baseHeight / 2 : 0;\n }\n return attrs;\n };\n\n const size = config.size ?? { width: 0, height: 0 };\n const node = new this.konva.Path({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n rotation,\n data: shape.svgPath,\n name: config.name,\n ...(resolvedStyle ?? {}),\n shapeKind: 'svg-path',\n __autoOffsetX: true,\n __autoOffsetY: true,\n });\n\n const rect = node.getClientRect ? node.getClientRect({ skipTransform: true }) : null;\n const baseWidth = shape.svgSize?.width ?? rect?.width ?? size.width;\n const baseHeight = shape.svgSize?.height ?? rect?.height ?? size.height;\n const scaleX = baseWidth === 0 ? 1 : size.width / baseWidth;\n const scaleY = baseHeight === 0 ? 1 : size.height / baseHeight;\n\n if (node.setAttrs) {\n node.setAttrs({\n scaleX,\n scaleY,\n __pathBaseWidth: baseWidth,\n __pathBaseHeight: baseHeight,\n __sizeUpdater: sizeUpdater,\n });\n }\n return node;\n }\n\n private resolveShapeRotation(\n shape: ShapeDefinition,\n style: Record<string, unknown> | undefined,\n ): { style: Record<string, unknown> | undefined; rotation: number } {\n if (!style) {\n return {\n style: undefined,\n rotation: shape.baseRotation ?? 0,\n };\n }\n const { rotation, ...rest } = style;\n return {\n style: rest,\n rotation: (shape.baseRotation ?? 0) + (typeof rotation === 'number' ? rotation : 0),\n };\n }\n\n private applyShapeBehaviorAttrs(node: KonvaNodeLike, shape: ShapeDefinition): void {\n if (!node.setAttrs || !shape.sizeUpdater) return;\n node.setAttrs({\n __sizeUpdater: shape.sizeUpdater,\n });\n }\n}\n","import { ElementData, EllipseMidPoint, LinkData, OverlayShapeConfig, OverlayShapeHandle, Point, PortData } from '../../api/types';\r\nimport DiagramModel from '../../models/DiagramModel';\r\nimport ElementModel from '../../models/ElementModel';\r\nimport { ShapeNodeSizeUpdater, ShapeRegistry } from '../RenderTypes';\r\nimport { Renderer } from '../Renderer';\r\nimport KonvaLayers, { KonvaLayerLike } from './KonvaLayers';\r\nimport KonvaNodeFactory, { KonvaLike, KonvaNodeLike } from './KonvaNodeFactory';\r\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\r\nimport { getRotatedRectCorners } from '../../utils/geometry';\r\nimport { resolvePortOrientationContext, resolvePortWorldTransform } from '../../utils/portGeometry';\r\n\r\nexport type KonvaStageLike = {\r\n add: (layer: KonvaLayerLike) => void;\r\n width?: (value?: number) => number;\r\n height?: (value?: number) => number;\r\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n};\r\n\r\nexport type KonvaRendererConfig = {\r\n stage?: KonvaStageLike;\r\n container?: HTMLDivElement | string;\r\n width?: number;\r\n height?: number;\r\n nodeFactory?: KonvaNodeFactory;\r\n konva?: KonvaLike & { Stage: new (config: Record<string, unknown>) => KonvaStageLike; Layer: new () => KonvaLayerLike };\r\n shapeRegistry?: ShapeRegistry;\r\n};\r\n\r\nexport type ShapeHoverControlRenderConfig = {\r\n controlId: string;\r\n targetKind: 'edge' | 'vertex' | 'midpoint' | 'ellipse-midpoint';\r\n targetIndex: number;\r\n targetRef?: string;\r\n elementId: string;\r\n targetId: string;\r\n icon: {\r\n svgPath: string;\r\n size?: { width: number; height: number };\r\n style?: Record<string, unknown>;\r\n };\r\n edge?: {\r\n start: Point;\r\n end: Point;\r\n midpoint: Point;\r\n lineStyle?: Record<string, unknown>;\r\n };\r\n vertex?: {\r\n position: Point;\r\n };\r\n ellipseMidPoint?: {\r\n id: EllipseMidPoint;\r\n position: Point;\r\n };\r\n};\r\n\r\nlet cachedKonva: KonvaRendererConfig['konva'] | null = null;\r\n\r\nconst getKonva = (): NonNullable<KonvaRendererConfig['konva']> => {\r\n if (cachedKonva) return cachedKonva as NonNullable<KonvaRendererConfig['konva']>;\r\n // Lazy-load Konva to avoid Jest ESM import issues in tests.\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const module = require('konva') as KonvaRendererConfig['konva'] | { default?: KonvaRendererConfig['konva'] };\r\n const resolved = (module as { default?: KonvaRendererConfig['konva'] }).default ?? module;\r\n cachedKonva = resolved as KonvaRendererConfig['konva'];\r\n return resolved as NonNullable<KonvaRendererConfig['konva']>;\r\n};\r\n\r\nexport default class KonvaRenderer implements Renderer {\r\n private stage: KonvaStageLike;\r\n private layers = new KonvaLayers();\r\n private nodeFactory: KonvaNodeFactory;\r\n private shapeRegistry: ShapeRegistry;\r\n private elementNodes = new Map<string, KonvaNodeLike>();\r\n private portNodes = new Map<string, KonvaNodeLike>();\n private linkNodes = new Map<string, KonvaNodeLike>();\n private textNodes = new Map<string, KonvaNodeLike>();\n private textBackgroundNodes = new Map<string, KonvaNodeLike>();\n private selectedIds = new Set<string>();\r\n private overlayLayer: KonvaLayerLike;\r\n private tempLinkNode: KonvaNodeLike | null = null;\r\n private tempPortNode: KonvaNodeLike | null = null;\r\n private tempPortShapeId: string | undefined;\r\n private marqueeNode: KonvaNodeLike | null = null;\r\n private resizeHandleNodes = new Map<string, KonvaNodeLike>();\r\n private linkHandleNodes = new Map<string, KonvaNodeLike>();\r\n private shapeHoverControlNodes: { edgeLine?: KonvaNodeLike; icon?: KonvaNodeLike } | null = null;\r\n private overlayShapes = new Map<string, { node: KonvaNodeLike; shapeId: string; config: OverlayShapeConfig }>();\r\n private overlayId = 0;\r\n\r\n constructor(config: KonvaRendererConfig = {}) {\r\n const konva = config.konva ?? getKonva();\r\n const registry = config.shapeRegistry ?? new ShapeRegistry();\r\n this.shapeRegistry = registry;\r\n this.nodeFactory = config.nodeFactory ?? new KonvaNodeFactory(registry, konva);\r\n\r\n if (config.stage) {\r\n this.stage = config.stage;\r\n } else {\r\n this.stage = new (konva as NonNullable<typeof konva>).Stage({\r\n container: config.container ?? undefined,\r\n width: config.width ?? 800,\r\n height: config.height ?? 600,\r\n });\r\n }\r\n\r\n const elementLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const linkLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const portLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const textLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n const overlayLayer = new (konva as NonNullable<typeof konva>).Layer();\r\n\r\n this.layers.addLayer('elements', elementLayer);\r\n this.layers.addLayer('links', linkLayer);\r\n this.layers.addLayer('ports', portLayer);\r\n this.layers.addLayer('texts', textLayer);\r\n this.layers.addLayer('overlays', overlayLayer);\r\n this.stage.add(elementLayer);\r\n this.stage.add(linkLayer);\r\n this.stage.add(portLayer);\r\n this.stage.add(textLayer);\r\n this.stage.add(overlayLayer);\r\n\r\n this.overlayLayer = overlayLayer;\r\n }\r\n\r\n render(model: DiagramModel): void {\r\n this.syncElements(model);\r\n this.syncPorts(model);\r\n this.syncLinks(model);\r\n this.syncTexts(model);\r\n this.layers.drawDirty();\r\n }\r\n\r\n renderSelection(ids: string[]): void {\r\n this.selectedIds = new Set(ids);\r\n this.elementNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : '#1f4d99',\r\n strokeWidth: isSelected ? 3 : 2,\r\n });\r\n });\r\n this.portNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : '#1f4d99',\r\n strokeWidth: isSelected ? 3 : 2,\r\n });\r\n });\r\n this.linkNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n const baseStroke =\r\n this.getNodeAttr<string>(node, '__baseStroke') ??\r\n this.getNodeAttr<string>(node, 'stroke') ??\r\n 'black';\r\n const baseStrokeWidth =\r\n this.getNodeAttr<number>(node, '__baseStrokeWidth') ??\r\n this.getNodeAttr<number>(node, 'strokeWidth') ??\r\n 2;\r\n node.setAttrs({\r\n stroke: isSelected ? '#ff7a00' : baseStroke,\r\n strokeWidth: isSelected ? baseStrokeWidth + 1 : baseStrokeWidth,\r\n });\r\n });\r\n this.textNodes.forEach((node, id) => {\r\n if (!node.setAttrs) return;\r\n const isSelected = this.selectedIds.has(id);\r\n const baseFill =\r\n this.getNodeAttr<string>(node, '__baseFill') ??\r\n this.getNodeAttr<string>(node, 'fill') ??\r\n 'black';\r\n node.setAttrs({\r\n fill: isSelected ? '#ff7a00' : baseFill,\r\n __baseFill: baseFill,\r\n });\r\n });\r\n this.layers.markDirty('elements');\r\n this.layers.markDirty('ports');\r\n this.layers.markDirty('links');\r\n this.layers.markDirty('texts');\r\n }\r\n\r\n renderResizeHandles(\r\n elementId: string,\r\n position: Point,\r\n size: { width: number; height: number },\r\n options?: { rotation?: number; anchorCenter?: boolean },\r\n ): void {\r\n this.clearResizeHandles();\r\n const handleSize = 8;\r\n const half = handleSize / 2;\r\n const rotated = getRotatedRectCorners(\r\n position,\r\n size,\r\n options?.rotation ?? 0,\r\n options?.anchorCenter ?? false,\r\n );\r\n const corners: Array<[string, number, number]> = [\r\n ['nw', rotated.nw.x, rotated.nw.y],\r\n ['ne', rotated.ne.x, rotated.ne.y],\r\n ['sw', rotated.sw.x, rotated.sw.y],\r\n ['se', rotated.se.x, rotated.se.y],\r\n ];\r\n\r\n corners.forEach(([handle, x, y]) => {\r\n const node = this.nodeFactory.createHandleNode({\r\n id: `resize:${elementId}:${handle}`,\r\n x: x - half,\r\n y: y - half,\r\n size: handleSize,\r\n name: 'resize-handle',\r\n });\r\n this.resizeHandleNodes.set(`${elementId}:${handle}`, node);\r\n this.overlayLayer.add?.(node);\r\n });\r\n this.drawOverlays();\r\n }\r\n\r\n clearResizeHandles(): void {\r\n this.resizeHandleNodes.forEach((node) => node.destroy?.());\r\n this.resizeHandleNodes.clear();\r\n this.drawOverlays();\r\n }\r\n\r\n renderLinkHandles(linkId: string, points: Point[]): void {\r\n this.clearLinkHandles();\r\n const radius = 5;\r\n points.forEach((point, index) => {\r\n const node = this.nodeFactory.createHandleCircleNode({\r\n id: `link-handle:${linkId}:${index}`,\r\n x: point.x,\r\n y: point.y,\r\n radius,\r\n name: 'link-handle',\r\n });\r\n this.linkHandleNodes.set(`${linkId}:${index}`, node);\r\n this.overlayLayer.add?.(node);\r\n });\r\n this.drawOverlays();\r\n }\r\n\r\n clearLinkHandles(): void {\r\n this.linkHandleNodes.forEach((node) => node.destroy?.());\r\n this.linkHandleNodes.clear();\r\n this.drawOverlays();\r\n }\r\n\r\n renderTempLink(points: Point[]): void {\r\n const flatPoints: number[] = [];\r\n points.forEach((point) => flatPoints.push(point.x, point.y));\r\n if (!this.tempLinkNode) {\r\n this.tempLinkNode = this.nodeFactory.createTempLinkNode({\r\n id: 'temp-link',\r\n points: flatPoints,\r\n });\r\n this.overlayLayer.add?.(this.tempLinkNode);\r\n } else if (this.tempLinkNode.setAttrs) {\r\n this.tempLinkNode.setAttrs({ points: flatPoints });\r\n }\r\n this.drawOverlays();\r\n }\r\n\r\n renderPortPlaceholder(\r\n port: PortData,\r\n hostElement?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\r\n ): void {\r\n const shapeId = port.shapeId;\r\n if (!this.tempPortNode || this.tempPortShapeId !== shapeId) {\r\n this.tempPortNode?.destroy?.();\r\n const node = this.nodeFactory.createPortNode(port);\r\n if (node.setAttrs) {\r\n node.setAttrs({ listening: false, opacity: 0.6, name: 'port-placeholder' });\r\n }\r\n this.tempPortNode = node;\r\n this.tempPortShapeId = shapeId;\r\n this.overlayLayer.add?.(node);\r\n } else {\r\n this.updatePosition(this.tempPortNode, port.position);\r\n if (this.tempPortNode.setAttrs) {\r\n this.tempPortNode.setAttrs({ opacity: 0.6 });\r\n }\r\n }\r\n if (this.tempPortNode) {\r\n this.updateSize(this.tempPortNode, port.size ?? { width: 8, height: 8 }, {\r\n anchorCenter: port.anchorCenter ?? true,\r\n });\r\n this.applyPortOrientation(this.tempPortNode, port, port.position, undefined, hostElement);\r\n }\r\n this.drawOverlays();\r\n }\r\n\r\n clearPortPlaceholder(): void {\r\n this.tempPortNode?.destroy?.();\r\n this.tempPortNode = null;\r\n this.tempPortShapeId = undefined;\r\n this.drawOverlays();\r\n }\r\n\r\n clearTempLink(): void {\r\n this.tempLinkNode?.destroy?.();\r\n this.tempLinkNode = null;\r\n this.drawOverlays();\r\n }\r\n\r\n renderMarquee(rect: { x: number; y: number; width: number; height: number }): void {\r\n if (!this.marqueeNode) {\r\n this.marqueeNode = this.nodeFactory.createMarqueeNode({\r\n id: 'marquee',\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n });\r\n this.overlayLayer.add?.(this.marqueeNode);\r\n } else if (this.marqueeNode.setAttrs) {\r\n this.marqueeNode.setAttrs(rect);\r\n }\r\n this.drawOverlays();\r\n }\r\n\r\n clearMarquee(): void {\r\n this.marqueeNode?.destroy?.();\r\n this.marqueeNode = null;\r\n this.drawOverlays();\r\n }\r\n\r\n renderShapeHoverControl(config: ShapeHoverControlRenderConfig): void {\r\n this.clearShapeHoverControl(false);\r\n let edgeLine: KonvaNodeLike | undefined;\r\n if (config.targetKind === 'edge' && config.edge) {\r\n edgeLine = this.nodeFactory.createHoverControlEdgeLineNode({\r\n id: `shape-hover-edge:${config.elementId}:${config.targetId}`,\r\n start: config.edge.start,\r\n end: config.edge.end,\r\n style: config.edge.lineStyle,\r\n });\r\n this.overlayLayer.add?.(edgeLine);\r\n }\r\n const iconPosition =\r\n config.targetKind === 'edge' || config.targetKind === 'midpoint'\r\n ? config.edge?.midpoint\r\n : config.targetKind === 'ellipse-midpoint'\r\n ? config.ellipseMidPoint?.position\r\n : config.vertex?.position;\r\n if (!iconPosition) {\r\n this.shapeHoverControlNodes = edgeLine ? { edgeLine } : null;\r\n this.drawOverlays();\r\n return;\r\n }\r\n const targetRef = config.targetRef ?? String(config.targetIndex);\r\n const icon = this.nodeFactory.createHoverControlIconNode({\r\n id: `shape-hover-control:${config.elementId}:${config.controlId}:${config.targetKind}:${targetRef}`,\r\n position: iconPosition,\r\n svgPath: config.icon.svgPath,\r\n size: config.icon.size,\r\n style: config.icon.style,\r\n });\r\n this.overlayLayer.add?.(icon);\r\n this.shapeHoverControlNodes = { edgeLine, icon };\r\n this.drawOverlays();\r\n }\r\n\r\n clearShapeHoverControl(draw = true): void {\r\n if (!this.shapeHoverControlNodes) return;\r\n this.shapeHoverControlNodes.edgeLine?.destroy?.();\r\n this.shapeHoverControlNodes.icon?.destroy?.();\r\n this.shapeHoverControlNodes = null;\r\n if (draw) {\r\n this.drawOverlays();\r\n }\r\n }\r\n\r\n createOverlayShape(config: OverlayShapeConfig): OverlayShapeHandle {\r\n const id = `overlay-${this.overlayId++}`;\r\n const record = this.createOverlayRecord(id, config);\r\n this.overlayShapes.set(id, record);\r\n this.drawOverlays();\r\n\r\n return {\r\n update: (next) => {\r\n this.updateOverlayRecord(id, next);\r\n },\r\n destroy: () => {\r\n this.destroyOverlayRecord(id);\r\n },\r\n };\r\n }\r\n\r\n destroy(): void {\r\n this.layers.destroy();\r\n this.elementNodes.clear();\r\n this.portNodes.clear();\n this.linkNodes.clear();\n this.textBackgroundNodes.forEach((node) => node.destroy?.());\n this.textBackgroundNodes.clear();\n this.textNodes.clear();\n this.resizeHandleNodes.clear();\r\n this.linkHandleNodes.clear();\r\n this.tempLinkNode = null;\r\n this.tempPortNode?.destroy?.();\r\n this.tempPortNode = null;\r\n this.tempPortShapeId = undefined;\r\n this.marqueeNode = null;\r\n this.clearShapeHoverControl(false);\r\n this.overlayShapes.forEach((record) => record.node.destroy?.());\r\n this.overlayShapes.clear();\r\n }\r\n\r\n private drawOverlays(): void {\r\n this.layers.markDirty('overlays');\r\n this.layers.drawDirty();\r\n }\r\n\r\n private createOverlayRecord(\r\n id: string,\r\n config: OverlayShapeConfig,\r\n ): { node: KonvaNodeLike; shapeId: string; config: OverlayShapeConfig } {\r\n const model: ElementData = {\r\n id,\r\n position: { ...config.position },\r\n size: { ...config.size },\r\n shapeId: config.shapeId,\r\n style: config.style,\r\n anchorCenter: config.anchorCenter,\r\n };\r\n const node = this.nodeFactory.createElementNode(model);\r\n this.overlayLayer.add?.(node);\r\n this.applyOverlayConfig(node, model, config);\r\n return { node, shapeId: config.shapeId, config: { ...config } };\r\n }\r\n\r\n private updateOverlayRecord(id: string, config: OverlayShapeConfig): void {\r\n const record = this.overlayShapes.get(id);\r\n if (!record) return;\r\n const shouldRecreate = record.shapeId !== config.shapeId;\r\n if (shouldRecreate) {\r\n record.node.destroy?.();\r\n const nextRecord = this.createOverlayRecord(id, config);\r\n this.overlayShapes.set(id, nextRecord);\r\n this.drawOverlays();\r\n return;\r\n }\r\n\r\n const model: ElementData = {\r\n id,\r\n position: { ...config.position },\r\n size: { ...config.size },\r\n shapeId: config.shapeId,\r\n style: config.style,\r\n anchorCenter: config.anchorCenter,\r\n };\r\n this.applyOverlayConfig(record.node, model, config);\r\n record.config = { ...config };\r\n this.drawOverlays();\r\n }\r\n\r\n private destroyOverlayRecord(id: string): void {\r\n const record = this.overlayShapes.get(id);\r\n if (!record) return;\r\n record.node.destroy?.();\r\n this.overlayShapes.delete(id);\r\n this.drawOverlays();\r\n }\r\n\r\n private applyOverlayConfig(node: KonvaNodeLike, model: ElementData, config: OverlayShapeConfig): void {\r\n const anchorCenter = config.anchorCenter ?? false;\r\n const anchoredPosition = anchorCenter\r\n ? {\r\n x: model.position.x + model.size.width / 2,\r\n y: model.position.y + model.size.height / 2,\r\n }\r\n : model.position;\r\n this.updatePosition(node, anchoredPosition);\r\n this.updateSize(node, model.size, { anchorCenter });\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: model });\r\n }\r\n if (node.setAttrs) {\r\n node.setAttrs({\r\n ...(config.style ?? {}),\r\n listening: false,\r\n name: 'overlay-shape',\r\n });\r\n }\r\n }\r\n\r\n private syncElements(model: DiagramModel): void {\r\n const elements = Array.from(model.elements.values()).map((element, index) => ({\r\n element,\r\n depth: this.getElementDepth(model, element),\r\n order: index,\r\n }));\r\n elements\r\n .sort((a, b) => a.depth - b.depth || a.order - b.order)\r\n .forEach(({ element, depth }) => {\r\n const data = element.toData();\r\n let node = this.elementNodes.get(element.id);\r\n if (!node) {\r\n node = this.nodeFactory.createElementNode(data);\r\n this.elementNodes.set(element.id, node);\r\n this.layers.getLayer('elements')?.add?.(node);\r\n }\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: data });\r\n }\r\n const position = model.getElementWorldPosition(element.id) ?? element.position;\r\n const anchoredPosition = element.anchorCenter\r\n ? {\r\n x: position.x + element.size.width / 2,\r\n y: position.y + element.size.height / 2,\r\n }\r\n : position;\r\n this.updatePosition(node, anchoredPosition);\r\n this.updateSize(node, element.size, { anchorCenter: element.anchorCenter ?? false });\r\n if (node.setAttrs) {\r\n node.setAttrs({ __depth: depth });\r\n }\r\n });\r\n\r\n elements.forEach(({ element }) => {\r\n const node = this.elementNodes.get(element.id);\r\n node?.moveToTop?.();\r\n });\r\n\r\n Array.from(this.elementNodes.keys()).forEach((id) => {\r\n if (!model.elements.has(id)) {\r\n const node = this.elementNodes.get(id);\r\n node?.destroy?.();\r\n this.elementNodes.delete(id);\r\n this.layers.markDirty('elements');\r\n }\r\n });\r\n this.layers.markDirty('elements');\r\n }\r\n\r\n private getElementDepth(model: DiagramModel, element: ElementModel): number {\r\n let depth = 0;\r\n let current: ElementModel | undefined = element;\r\n while (current?.parentId) {\r\n const parent = model.getElement(current.parentId);\r\n if (!parent) break;\r\n depth += 1;\r\n current = parent;\r\n }\r\n return depth;\r\n }\r\n\r\n private syncPorts(model: DiagramModel): void {\r\n const ports = Array.from(model.ports.values());\r\n ports.forEach((port) => {\r\n const data = port.toData();\r\n let node = this.portNodes.get(port.id);\r\n if (!node) {\r\n node = this.nodeFactory.createPortNode(data);\r\n this.portNodes.set(port.id, node);\r\n this.layers.getLayer('ports')?.add?.(node);\r\n }\r\n if (this.getNodeAttr<boolean>(node, '__shapeDraw') && node.setAttrs) {\r\n node.setAttrs({ __model: data });\r\n }\r\n const position = model.getPortWorldPosition(port.id) ?? port.position;\r\n this.updateSize(node, data.size ?? { width: 8, height: 8 }, { anchorCenter: data.anchorCenter ?? true });\r\n this.updatePosition(node, position);\r\n this.applyPortOrientation(node, data, position, model);\r\n });\r\n\r\n Array.from(this.portNodes.keys()).forEach((id) => {\r\n if (!model.ports.has(id)) {\r\n const node = this.portNodes.get(id);\r\n node?.destroy?.();\r\n this.portNodes.delete(id);\r\n this.layers.markDirty('ports');\r\n }\r\n });\r\n this.layers.markDirty('ports');\r\n }\r\n\r\n private syncLinks(model: DiagramModel): void {\r\n const links = Array.from(model.links.values());\r\n links.forEach((link) => {\r\n let node = this.linkNodes.get(link.id);\r\n if (!node) {\r\n node = this.nodeFactory.createLinkNode(link.toData());\r\n this.linkNodes.set(link.id, node);\r\n this.layers.getLayer('links')?.add?.(node);\r\n }\r\n this.updateLine(node, link.toData());\r\n });\r\n\r\n Array.from(this.linkNodes.keys()).forEach((id) => {\r\n if (!model.links.has(id)) {\r\n const node = this.linkNodes.get(id);\r\n node?.destroy?.();\r\n this.linkNodes.delete(id);\r\n this.layers.markDirty('links');\r\n }\r\n });\r\n this.layers.markDirty('links');\r\n }\r\n\r\n private syncTexts(model: DiagramModel): void {\n const texts = Array.from(model.texts.values());\n texts.forEach((text) => {\n let node = this.textNodes.get(text.id);\r\n if (!node) {\r\n node = this.nodeFactory.createTextNode(text.toData());\r\n this.textNodes.set(text.id, node);\r\n this.layers.getLayer('texts')?.add?.(node);\r\n }\r\n const position = model.getTextWorldPosition(text.id) ?? text.position;\n const displayOffset = text.displayOffset ?? { x: 0, y: 0 };\n const textPosition = {\n x: position.x + displayOffset.x,\n y: position.y + displayOffset.y,\n };\n this.updatePosition(node, {\n x: textPosition.x,\n y: textPosition.y,\n });\n if (node.setAttrs) {\n const style = text.style as Record<string, unknown> | undefined;\n const defaults = resolveTextStyleDefaults(style);\r\n const baseFill =\r\n (style?.fill as string | undefined) ??\r\n this.getNodeAttr<string>(node, '__baseFill') ??\r\n this.getNodeAttr<string>(node, 'fill') ??\r\n 'black';\r\n const fill = this.selectedIds.has(text.id) ? '#ff7a00' : baseFill;\r\n const clip = text.displayClipSize;\r\n node.setAttrs({\r\n text: text.displayContent ?? text.content,\r\n fontSize: defaults.fontSize,\r\n fontFamily: defaults.fontFamily,\r\n lineHeight: defaults.lineHeight,\r\n ...(style ?? {}),\r\n width: clip?.width,\r\n height: clip?.height,\r\n wrap: clip ? 'none' : undefined,\r\n ellipsis: false,\r\n fill,\r\n __baseFill: baseFill,\r\n // Keep metadata for tests/debugging; Konva clip attrs do not apply on Text nodes.\r\n clipX: clip ? 0 : undefined,\r\n clipY: clip ? 0 : undefined,\r\n clipWidth: clip?.width,\r\n clipHeight: clip?.height,\n });\n }\n\n const style = text.style as Record<string, unknown> | undefined;\n const backgroundFill = style?.backgroundFill;\n const clip = text.displayClipSize;\n const backgroundWidth = clip?.width ?? text.size?.width;\n const backgroundHeight = clip?.height ?? text.size?.height;\n const backgroundMeta = this.resolveTextBackgroundMeta(model, text.toData());\n const hasBackground =\n typeof backgroundFill === 'string' &&\n backgroundFill.length > 0 &&\n typeof backgroundWidth === 'number' &&\n typeof backgroundHeight === 'number' &&\n backgroundWidth > 0 &&\n backgroundHeight > 0;\n\n if (hasBackground) {\n const baseX = textPosition.x + backgroundMeta.inset;\n const baseY = textPosition.y + backgroundMeta.inset;\n const width = Math.max(0, backgroundWidth - backgroundMeta.inset * 2);\n const height = Math.max(0, backgroundHeight - backgroundMeta.inset);\n const backgroundStroke =\n typeof style?.backgroundStroke === 'string' && style.backgroundStroke.length > 0\n ? style.backgroundStroke\n : undefined;\n const backgroundStrokeWidth =\n typeof style?.backgroundStrokeWidth === 'number'\n ? Math.max(0, style.backgroundStrokeWidth)\n : undefined;\n let backgroundNode = this.textBackgroundNodes.get(text.id);\n if (!backgroundNode) {\n backgroundNode = this.nodeFactory.createTextBackgroundNode({\n id: `text-background:${text.id}`,\n x: baseX,\n y: baseY,\n width,\n height,\n fill: backgroundFill,\n stroke: backgroundStroke,\n strokeWidth: backgroundStrokeWidth,\n cornerRadius: backgroundMeta.cornerRadius,\n });\n this.textBackgroundNodes.set(text.id, backgroundNode);\n this.layers.getLayer('texts')?.add?.(backgroundNode);\n } else {\n this.updatePosition(backgroundNode, { x: baseX, y: baseY });\n backgroundNode.setAttrs?.({\n width,\n height,\n fill: backgroundFill,\n stroke: backgroundStroke,\n strokeWidth: backgroundStrokeWidth,\n cornerRadius: backgroundMeta.cornerRadius,\n listening: false,\n name: 'text-background',\n });\n }\n node.moveToTop?.();\n } else {\n const backgroundNode = this.textBackgroundNodes.get(text.id);\n backgroundNode?.destroy?.();\n this.textBackgroundNodes.delete(text.id);\n }\n });\n\n Array.from(this.textNodes.keys()).forEach((id) => {\n if (!model.texts.has(id)) {\n const backgroundNode = this.textBackgroundNodes.get(id);\n backgroundNode?.destroy?.();\n this.textBackgroundNodes.delete(id);\n const node = this.textNodes.get(id);\n node?.destroy?.();\n this.textNodes.delete(id);\n this.layers.markDirty('texts');\r\n }\r\n });\r\n this.layers.markDirty('texts');\n }\n\n private resolveTextBackgroundMeta(\n model: DiagramModel,\n text: { ownerId?: string | null; position: Point },\n ): { inset: number; cornerRadius?: number | [number, number, number, number] } {\n const ownerId = text.ownerId ?? null;\n if (!ownerId) return { inset: 0 };\n const owner = model.getElement(ownerId);\n if (!owner) return { inset: 0 };\n const ownerStyle = owner.style as Record<string, unknown> | undefined;\n const strokeWidth = typeof ownerStyle?.strokeWidth === 'number' ? Math.max(0, ownerStyle.strokeWidth) : 0;\n const inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n const rawCornerRadius = ownerStyle?.cornerRadius;\n const isTopLabel = text.position.y <= 1;\n if (!isTopLabel) return { inset };\n if (typeof rawCornerRadius === 'number' && rawCornerRadius > 0) {\n const topRadius = Math.max(0, rawCornerRadius - inset);\n return { inset, cornerRadius: [topRadius, topRadius, 0, 0] };\n }\n if (Array.isArray(rawCornerRadius) && rawCornerRadius.length === 4) {\n const tl = typeof rawCornerRadius[0] === 'number' ? Math.max(0, rawCornerRadius[0] - inset) : 0;\n const tr = typeof rawCornerRadius[1] === 'number' ? Math.max(0, rawCornerRadius[1] - inset) : 0;\n return { inset, cornerRadius: [tl, tr, 0, 0] };\n }\n return { inset };\n }\n\r\n private updatePosition(node: KonvaNodeLike, position: Point): void {\r\n if (node.position) {\r\n node.position({ x: position.x, y: position.y });\r\n return;\r\n }\r\n if (node.setAttrs) {\r\n node.setAttrs({ x: position.x, y: position.y });\r\n }\r\n }\r\n\r\n private applyPortOrientation(\r\n node: KonvaNodeLike,\r\n port: PortData,\r\n worldPosition: Point,\r\n model?: DiagramModel,\r\n hostElementOverride?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\r\n ): void {\r\n if (!node.setAttrs) return;\r\n const baseRotation =\r\n this.getNodeAttr<number>(node, '__baseRotation') ??\r\n this.getNodeAttr<number>(node, 'rotation') ??\r\n 0;\r\n if (this.getNodeAttr<number>(node, '__baseRotation') === undefined) {\r\n node.setAttrs({ __baseRotation: baseRotation });\r\n }\r\n const host = hostElementOverride ?? this.resolveHostElement(port.elementId, model);\r\n const orientation = resolvePortOrientationContext({\r\n port,\r\n worldPlacement: worldPosition,\r\n host,\r\n shapeRegistry: this.shapeRegistry,\r\n attachMode: 'external',\r\n });\r\n const transform = resolvePortWorldTransform({\r\n port,\r\n worldPlacement: worldPosition,\r\n attachMode: 'external',\r\n orientation,\r\n });\r\n this.updatePosition(node, transform.nodePosition);\r\n node.setAttrs({ rotation: baseRotation + orientation.rotation });\r\n }\r\n\r\n private resolveHostElement(\r\n elementId: string,\r\n model?: DiagramModel,\r\n ): { id: string; position: Point; size: { width: number; height: number }; shapeId: string } | null {\r\n if (!model) return null;\r\n const element = model.getElement(elementId);\r\n if (!element) return null;\r\n return {\r\n id: element.id,\r\n position: model.getElementWorldPosition(elementId) ?? element.position,\r\n size: element.size,\r\n shapeId: element.shapeId,\r\n };\r\n }\r\n\r\n private getNodeAttr<T>(node: KonvaNodeLike, key: string): T | undefined {\r\n if (node.getAttr) return node.getAttr(key) as T;\r\n if (node.attrs && Object.prototype.hasOwnProperty.call(node.attrs, key)) {\r\n return node.attrs[key] as T;\r\n }\r\n return undefined;\r\n }\r\n\r\n private updateSize(\r\n node: KonvaNodeLike,\r\n size: { width: number; height: number },\r\n options?: { anchorCenter?: boolean },\r\n ): void {\r\n if (!node.setAttrs) return;\r\n const attrs: Record<string, unknown> = { width: size.width, height: size.height };\r\n const anchorCenter = options?.anchorCenter ?? false;\r\n const autoOffsetX = this.getNodeAttr<boolean>(node, '__autoOffsetX');\r\n const autoOffsetY = this.getNodeAttr<boolean>(node, '__autoOffsetY');\r\n const updateOffsetX = autoOffsetX !== false;\r\n const updateOffsetY = autoOffsetY !== false;\r\n\r\n const sizeUpdater = this.getNodeAttr<ShapeNodeSizeUpdater>(node, '__sizeUpdater');\r\n if (sizeUpdater) {\r\n Object.assign(\r\n attrs,\r\n sizeUpdater({\r\n size,\r\n anchorCenter,\r\n updateOffsetX,\r\n updateOffsetY,\r\n getNodeAttr: <T = unknown>(key: string) => this.getNodeAttr<T>(node, key),\r\n }),\r\n );\r\n }\r\n\r\n node.setAttrs(attrs);\r\n }\r\n\r\n private updateLine(node: KonvaNodeLike, link: LinkData): void {\r\n if (!node.setAttrs) return;\r\n const flatPoints: number[] = [];\r\n link.points.forEach((point) => {\r\n flatPoints.push(point.x, point.y);\r\n });\r\n node.setAttrs({ points: flatPoints });\r\n }\r\n}\r\n","import { Point } from '../../api/types';\r\n\r\nexport type HitResult = {\n id: string;\n type: 'element' | 'port' | 'link' | 'text' | 'resize-handle' | 'link-handle' | 'shape-hover-control' | 'none';\n depth?: number;\n};\n\r\nexport type HitTestResolver = (point: Point) => HitResult | null;\r\n\r\nexport default class KonvaHitTester {\r\n private resolver?: HitTestResolver;\r\n\r\n constructor(resolver?: HitTestResolver) {\r\n this.resolver = resolver;\r\n }\r\n\r\n hitTest(point: Point): HitResult | null {\r\n if (!this.resolver) return null;\r\n return this.resolver(point);\r\n }\r\n}\r\n","const fallbackId = (): string =>\r\n `id-${Math.random().toString(36).slice(2, 10)}-${Date.now().toString(36)}`;\r\n\r\nexport const createId = (): string => {\r\n const cryptoApi = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\r\n if (cryptoApi?.randomUUID) {\r\n return cryptoApi.randomUUID();\r\n }\r\n return fallbackId();\r\n};\r\n","import {\n EllipseMidPoint,\n ElementShapeHoverControlActivationEvent,\n ElementShapeHoverControlInteractionEvent,\n ElementShapeHoverControls,\n ElementShapeControlDragEvent,\n EnginePointerInfo,\n LinkData,\n Point,\n PortData,\n ShapeControlDefinition,\n ShapeControlTargetKind,\n ShapeControlVisibilityTrigger,\n ShapeEdgeTarget,\n ShapeEllipseMidPointTarget,\n ShapeHoverGeometry,\n ShapeVertexTarget,\n} from '../../api/types';\nimport DiagramEngine from '../../engine/DiagramEngine';\nimport KonvaHitTester, { HitResult } from './KonvaHitTester';\nimport { KonvaStageLike, ShapeHoverControlRenderConfig } from './KonvaRenderer';\nimport { createId } from '../../utils/ids';\nimport { ShapeRegistry } from '../RenderTypes';\nimport {\n getRotatedRectCorners,\n pointInRotatedRect,\n polygonIntersectsRect,\n rectContainsPoint,\n rectsIntersect,\n resolveRectRotationPivot,\n rotatePoint,\n} from '../../utils/geometry';\nimport { resolveTextStyleDefaults } from '../../measure/textStyleDefaults';\n\r\nexport type InteractionConfig = {\n stage?: KonvaStageLike;\n hitTester?: KonvaHitTester;\n panKey?: PanKey;\n shapeRegistry?: ShapeRegistry;\n shapeHoverControls?: ElementShapeHoverControls;\n onShapeHoverControlInteracted?: (event: ElementShapeHoverControlInteractionEvent) => void;\n onShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n renderer?: {\n renderResizeHandles: (\n elementId: string,\n position: Point,\n size: { width: number; height: number },\n options?: { rotation?: number; anchorCenter?: boolean },\n ) => void;\n clearResizeHandles: () => void;\r\n renderLinkHandles: (linkId: string, points: Point[]) => void;\n clearLinkHandles: () => void;\n renderTempLink: (points: Point[]) => void;\n clearTempLink: () => void;\n renderPortPlaceholder?: (\n port: PortData,\n hostElement?: { id: string; position: Point; size: { width: number; height: number }; shapeId: string },\n ) => void;\n clearPortPlaceholder?: () => void;\n renderMarquee: (rect: { x: number; y: number; width: number; height: number }) => void;\n clearMarquee: () => void;\n renderShapeHoverControl?: (config: ShapeHoverControlRenderConfig) => void;\n clearShapeHoverControl?: () => void;\n };\n};\n\r\nexport type PanKey = 'Control' | 'Shift' | 'Alt' | 'Meta';\n\ntype NormalizedShapeControlDefinition = ShapeControlDefinition & {\n visibilityTriggers: ShapeControlVisibilityTrigger[];\n targetIndices?: number[];\n ellipseMidPoints?: EllipseMidPoint[];\n tolerance: number;\n};\ntype NormalizedShapeHoverControls = {\n controls: NormalizedShapeControlDefinition[];\n};\n\ntype ResolvedShapeHoverControl = {\n control: NormalizedShapeControlDefinition;\n controlId: string;\n elementId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget;\n};\n\ntype ShapeControlDragState = {\n mode: 'shape-control-drag';\n control: ResolvedShapeHoverControl;\n sessionId: string;\n start: Point;\n startPointer: EnginePointerInfo;\n hasMoved: boolean;\n};\n\ntype ProgrammaticLinkSession = {\n sourcePortId: string;\n sourceElementId: string;\n start: Point;\n current: Point;\n};\n\ntype DragState =\n | {\n mode: 'move';\r\n type: 'element';\r\n id: string;\r\n offset: Point;\r\n start: Point;\r\n anchor: 'top-left' | 'center';\r\n startParentId: string | null;\r\n selectionIds: string[];\r\n isMulti: boolean;\r\n hasMoved: boolean;\r\n }\r\n | { mode: 'move'; type: 'port' | 'text'; id: string; offset: Point }\r\n | {\n mode: 'link-drag';\n sourcePortId: string;\n sourceElementId: string;\n start: Point;\n current: Point;\n isMulti: boolean;\n hasMoved: boolean;\n completionBehavior: 'hover-or-release' | 'explicit';\n }\n | { mode: 'link-handle'; linkId: string; pointIndex: number }\r\n | { mode: 'link-segment'; linkId: string; start: Point; hasMoved: boolean; pointIndex?: number }\r\n | {\r\n mode: 'resize';\r\n elementId: string;\r\n handle: 'nw' | 'ne' | 'sw' | 'se';\r\n origin: {\n position: Point;\n worldPosition: Point;\n size: { width: number; height: number };\n parentId: string | null;\n anchorCenter: boolean;\n rotation: number;\n };\n }\n | { mode: 'marquee'; start: Point; isMulti: boolean; hasMoved: boolean }\n | { mode: 'pan'; start: Point; origin: Point }\n | ShapeControlDragState;\n\nconst ellipseMidPointOrder: EllipseMidPoint[] = [\n EllipseMidPoint.top,\n EllipseMidPoint.right,\n EllipseMidPoint.bottom,\n EllipseMidPoint.left,\n];\n\nconst isEllipseMidPoint = (value: unknown): value is EllipseMidPoint =>\n value === EllipseMidPoint.top ||\n value === EllipseMidPoint.right ||\n value === EllipseMidPoint.bottom ||\n value === EllipseMidPoint.left;\n\nconst ellipseMidPointToIndex = (value: EllipseMidPoint): number =>\n ellipseMidPointOrder.indexOf(value);\n\r\nexport default class KonvaInteraction {\r\n private engine: DiagramEngine;\r\n private stage?: KonvaStageLike;\n private hitTester: KonvaHitTester;\n private renderer?: InteractionConfig['renderer'];\n private shapeRegistry?: ShapeRegistry;\n private shapeHoverControls?: NormalizedShapeHoverControls;\n private onShapeHoverControlInteracted?: (event: ElementShapeHoverControlInteractionEvent) => void;\n private onShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n private linkDragContext: { sourcePortId: string; sourceElementId: string } | null = null;\n private programmaticLinkSession: ProgrammaticLinkSession | null = null;\n private bound = false;\n private handlers: Array<[string, (...args: unknown[]) => void]> = [];\r\n private windowHandlers: Array<[keyof WindowEventMap, (event: Event) => void]> = [];\r\n private previousWindowKeyDown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => unknown) | null = null;\r\n private dragState: DragState | null = null;\r\n private selectionUnsub: (() => void) | null = null;\r\n private changeUnsub: (() => void) | null = null;\n private activeShapeHoverControl: ResolvedShapeHoverControl | null = null;\n private lastPointerPosition: Point | null = null;\n private zoom = 1;\n private pan: Point = { x: 0, y: 0 };\r\n private textEditor: HTMLTextAreaElement | null = null;\n private readonly dragThreshold = 4;\n private readonly panSpeed = 0.5;\n private readonly occupiedVertexTolerance = 2;\n private emittingElementLinkEnded = false;\n private panKey: PanKey;\n\r\n constructor(engine: DiagramEngine, config: InteractionConfig = {}) {\n this.engine = engine;\r\n this.stage = config.stage;\n this.hitTester = config.hitTester ?? new KonvaHitTester();\n this.renderer = config.renderer;\n this.panKey = config.panKey ?? 'Control';\n this.shapeRegistry = config.shapeRegistry;\n this.shapeHoverControls = this.normalizeShapeHoverControls(config.shapeHoverControls);\n this.onShapeHoverControlInteracted = config.onShapeHoverControlInteracted;\n this.onShapeHoverControlActivated = config.onShapeHoverControlActivated;\n }\n\n setShapeHoverControls(controls?: ElementShapeHoverControls): void {\n this.shapeHoverControls = this.normalizeShapeHoverControls(controls);\n if (!this.shapeHoverControls) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (this.lastPointerPosition && !this.dragState) {\n this.updateShapeHoverControl(this.lastPointerPosition);\n }\n }\n\n startLinkFromPort(sourcePortId: string, pointer?: Point): void {\n const sourceElementId = this.engine.getPortElementId(sourcePortId);\n if (!sourceElementId) return;\n const sourcePoint =\n this.engine.getPortLinkWorldPosition(sourcePortId) ??\n this.engine.getPortWorldPosition(sourcePortId);\n if (!sourcePoint) return;\n if (this.dragState?.mode === 'link-drag' || this.programmaticLinkSession) {\n this.cancelLink();\n }\n if (\n this.dragState &&\n this.dragState.mode !== 'shape-control-drag' &&\n this.dragState.mode !== 'link-drag'\n ) {\n return;\n }\n\n const start = { ...sourcePoint };\n if (this.dragState?.mode === 'shape-control-drag') {\n this.programmaticLinkSession = {\n sourcePortId,\n sourceElementId,\n start,\n current: start,\n };\n } else {\n this.dragState = {\n mode: 'link-drag',\n sourcePortId,\n sourceElementId,\n start,\n current: start,\n isMulti: false,\n hasMoved: false,\n completionBehavior: 'explicit',\n };\n }\n this.linkDragContext = { sourcePortId, sourceElementId };\n this.engine.emitElementLinkStarted({ sourcePortId, sourceElementId, startWorld: { ...start } });\n this.setCursor('crosshair');\n if (pointer) {\n this.updateLinkPreview(pointer);\n }\n }\n\n updateLinkPreview(pointer: Point): void {\n if (this.programmaticLinkSession) {\n this.programmaticLinkSession.current = { ...pointer };\n } else if (this.dragState?.mode === 'link-drag') {\n this.dragState.current = { ...pointer };\n this.dragState.hasMoved = true;\n } else {\n return;\n }\n const sourcePortId =\n this.programmaticLinkSession?.sourcePortId ??\n (this.dragState?.mode === 'link-drag' ? this.dragState.sourcePortId : null);\n if (!sourcePortId) return;\n const source = this.resolveLinkPreviewSource(sourcePortId, pointer);\n if (source) {\n this.renderer?.renderTempLink([source, pointer]);\n }\n const hit = this.resolveHit(pointer);\n if (hit?.type === 'element') {\n const placeholder = this.createPlaceholderPort(hit.id, pointer, sourcePortId);\n if (placeholder) {\n const hostElement = this.getElementById(hit.id);\n if (hostElement) {\n const hostWorld = this.engine.getElementWorldPosition(hit.id) ?? hostElement.position;\n this.renderer?.renderPortPlaceholder?.(\n placeholder,\n { id: hostElement.id, position: hostWorld, size: hostElement.size, shapeId: hostElement.shapeId },\n );\n } else {\n this.renderer?.renderPortPlaceholder?.(placeholder);\n }\n }\n return;\n }\n this.renderer?.clearPortPlaceholder?.();\n }\n\n completeLinkToPort(targetPortId: string): void {\n const session = this.resolveActiveLinkSession();\n if (!session) return;\n const completion = this.tryCreateLinkToPort(\n session.sourcePortId,\n session.sourceElementId,\n targetPortId,\n );\n this.finishLinkDragSession({\n sourcePortId: session.sourcePortId,\n sourceElementId: session.sourceElementId,\n createdLinkId: completion.createdLinkId ?? undefined,\n targetPortId: completion.targetPortId,\n targetElementId: completion.targetElementId ?? undefined,\n cancelled: completion.createdLinkId === null,\n fromProgrammatic: session.fromProgrammatic,\n });\n }\n\n completeLinkToElement(targetElementId: string, pointer: Point): void {\n const session = this.resolveActiveLinkSession();\n if (!session) return;\n const completion = this.tryCreateLinkToElement(\n session.sourcePortId,\n session.sourceElementId,\n targetElementId,\n pointer,\n );\n this.finishLinkDragSession({\n sourcePortId: session.sourcePortId,\n sourceElementId: session.sourceElementId,\n createdLinkId: completion.createdLinkId ?? undefined,\n targetPortId: completion.targetPortId ?? undefined,\n targetElementId: completion.targetElementId ?? undefined,\n cancelled: completion.createdLinkId === null,\n fromProgrammatic: session.fromProgrammatic,\n });\n }\n\n cancelLink(): void {\n this.cancelLinkDrag();\n }\n\r\n private buildPointerInfo(world: Point, nativeEvent?: MouseEvent | PointerEvent | null): EnginePointerInfo {\r\n const evt = nativeEvent ?? undefined;\r\n const client = evt ? { x: evt.clientX, y: evt.clientY } : { x: world.x, y: world.y };\r\n const pointerType =\r\n evt && 'pointerType' in evt ? (evt as PointerEvent).pointerType : undefined;\r\n return {\r\n client,\r\n world: { ...world },\r\n button: evt?.button,\r\n buttons: (evt as MouseEvent | PointerEvent | undefined)?.buttons,\r\n altKey: evt?.altKey,\r\n ctrlKey: evt?.ctrlKey,\r\n metaKey: evt?.metaKey,\r\n shiftKey: evt?.shiftKey,\r\n pointerType,\r\n };\r\n }\r\n\r\n bind(stage?: KonvaStageLike): void {\r\n this.stage = stage ?? this.stage;\r\n if (!this.stage || !this.stage.on || this.bound) return;\r\n\r\n const pointerDown = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const point = this.getPointerPosition();\n if (!point) return;\n this.lastPointerPosition = { ...point };\n if (this.textEditor) return;\n const hit = this.resolveHit(point);\n const nativeEvent = event?.evt;\n const isMulti = Boolean(nativeEvent && (nativeEvent.ctrlKey || nativeEvent.metaKey || nativeEvent.shiftKey));\n const isPanGesture = Boolean(nativeEvent && this.isPanKeyPressed(nativeEvent) && nativeEvent.button === 0);\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\n\n if (hit?.type === 'shape-hover-control') {\n const resolvedControl = this.resolveShapeHoverControlFromHit(hit.id, point);\n if (!resolvedControl) return;\n this.dragState = {\n mode: 'shape-control-drag',\n control: resolvedControl,\n sessionId: createId(),\n start: { ...point },\n startPointer: pointerInfo,\n hasMoved: false,\n };\n this.setCursor('grabbing');\n return;\n }\n\n this.clearActiveShapeHoverControl();\n\n if (isPanGesture) {\n this.dragState = { mode: 'pan', start: point, origin: { ...this.pan } };\n this.setCursor('grabbing');\n return;\n }\r\n\r\n if (hit?.type === 'resize-handle') {\r\n const parsed = this.parseResizeHandle(hit.id);\r\n if (parsed) {\r\n const element = this.getElementById(parsed.elementId);\r\n if (element) {\n if (!this.engine.getSelection().includes(parsed.elementId)) {\n this.engine.setSelection([parsed.elementId]);\n }\n const worldPosition = this.engine.getElementWorldPosition(parsed.elementId) ?? element.position;\n this.dragState = {\n mode: 'resize',\n elementId: parsed.elementId,\n handle: parsed.handle,\n origin: {\n position: { ...element.position },\n worldPosition,\n size: { ...element.size },\n parentId: element.parentId ?? null,\n anchorCenter: element.anchorCenter ?? false,\n rotation: this.engine.getElementRotation(parsed.elementId),\n },\n };\n this.setCursor(this.getResizeCursor(parsed.handle));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (hit?.type === 'link-handle') {\r\n const parsed = this.parseLinkHandle(hit.id);\r\n if (parsed) {\r\n this.dragState = { mode: 'link-handle', linkId: parsed.linkId, pointIndex: parsed.pointIndex };\r\n this.setCursor('move');\r\n }\r\n return;\r\n }\r\n\r\n if (!hit || hit.type === 'none') {\r\n this.dragState = { mode: 'marquee', start: point, isMulti, hasMoved: false };\r\n this.renderer?.renderMarquee({ x: point.x, y: point.y, width: 0, height: 0 });\r\n return;\r\n }\r\n\r\n if (hit.type === 'port') {\r\n const elementId = this.engine.getPortElementId(hit.id);\r\n if (!elementId) return;\r\n this.engine.emitPortMouseDown({ portId: hit.id, elementId, pointer: pointerInfo });\r\n const isSelected = this.engine.getSelection().includes(hit.id);\r\n if (isSelected) {\r\n const base = this.engine.getPortWorldPosition(hit.id);\r\n if (base) {\r\n this.dragState = {\r\n mode: 'move',\r\n type: 'port',\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n } else {\r\n this.dragState = {\n mode: 'link-drag',\n sourcePortId: hit.id,\n sourceElementId: elementId,\n start: point,\n current: point,\n isMulti,\n hasMoved: false,\n completionBehavior: 'hover-or-release',\n };\n this.linkDragContext = { sourcePortId: hit.id, sourceElementId: elementId };\r\n this.engine.emitElementLinkStarted({ sourcePortId: hit.id, sourceElementId: elementId, startWorld: { ...point } });\r\n this.setCursor('crosshair');\r\n }\r\n return;\r\n }\r\n\r\n this.handleSelection(hit, isMulti);\r\n if (hit.type === 'link' && !isMulti) {\r\n this.dragState = { mode: 'link-segment', linkId: hit.id, start: point, hasMoved: false };\r\n this.setCursor('move');\r\n return;\r\n }\r\n if (hit.type === 'text') {\r\n const base = this.engine.getTextWorldPosition(hit.id);\r\n if (base) {\r\n this.dragState = {\r\n mode: 'move',\r\n type: 'text',\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n return;\r\n }\r\n if (hit.type === 'element') {\r\n const baseTopLeft = this.engine.getElementWorldPosition(hit.id);\r\n if (baseTopLeft) {\r\n const element = this.getElementById(hit.id);\r\n if (!element) return;\r\n const anchor = element.anchorCenter ? 'center' : 'top-left';\r\n const base = element.anchorCenter\r\n ? {\r\n x: baseTopLeft.x + element.size.width / 2,\r\n y: baseTopLeft.y + element.size.height / 2,\r\n }\r\n : baseTopLeft;\r\n this.dragState = {\r\n mode: 'move',\r\n type: hit.type,\r\n id: hit.id,\r\n offset: { x: point.x - base.x, y: point.y - base.y },\r\n start: { ...base },\r\n anchor,\r\n startParentId: element.parentId ?? null,\r\n selectionIds: this.engine.getSelection(),\r\n isMulti,\r\n hasMoved: false,\r\n };\r\n this.setCursor('grabbing');\r\n }\r\n }\r\n };\r\n\r\n const pointerMove = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const nativeEvent = event?.evt;\n const point = this.getPointerPosition();\n if (!point) return;\n this.lastPointerPosition = { ...point };\n if (!this.dragState) {\n this.updateShapeHoverControl(point);\n this.updateHoverCursor(point);\n return;\n }\n this.clearActiveShapeHoverControl();\n if (this.dragState.mode === 'shape-control-drag') {\n const dragState = this.dragState;\n const delta = { x: point.x - dragState.start.x, y: point.y - dragState.start.y };\n const moved = Math.hypot(delta.x, delta.y) >= this.dragThreshold;\n if (!dragState.hasMoved && moved) {\n dragState.hasMoved = true;\n this.emitShapeHoverControlInteraction('drag-start', dragState.control, point, nativeEvent, {\n sessionId: dragState.sessionId,\n startPointer: dragState.startPointer,\n delta,\n });\n if (this.dragState !== dragState) {\n return;\n }\n }\n if (dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-move', dragState.control, point, nativeEvent, {\n sessionId: dragState.sessionId,\n startPointer: dragState.startPointer,\n delta,\n });\n if (this.dragState !== dragState) {\n return;\n }\n }\n } else if (this.dragState.mode === 'move') {\n const target = {\n x: point.x - this.dragState.offset.x,\n y: point.y - this.dragState.offset.y,\n };\n if (this.dragState.type === 'element') {\r\n const dx = target.x - this.dragState.start.x;\r\n const dy = target.y - this.dragState.start.y;\r\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\r\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\r\n this.engine.moveElementTo(this.dragState.id, target.x, target.y);\n if (this.renderer && this.engine.getSelection().includes(this.dragState.id)) {\n const element = this.getElementById(this.dragState.id);\n if (element) {\n const position = this.engine.getElementWorldPosition(this.dragState.id) ?? element.position;\n this.renderElementResizeHandles(this.dragState.id, position, element);\n }\n }\n } else if (this.dragState.type === 'port') {\r\n const constrained = this.applyPortConstraints(this.dragState.id, target);\r\n this.engine.movePortTo(this.dragState.id, constrained.x, constrained.y);\r\n } else {\r\n this.engine.moveTextTo(this.dragState.id, target.x, target.y);\r\n }\r\n } else if (this.dragState.mode === 'link-drag') {\n const linkDrag = this.dragState;\n const dx = point.x - this.dragState.start.x;\n const dy = point.y - this.dragState.start.y;\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\n this.dragState.current = point;\n if (this.dragState.hasMoved) {\n const hit = this.resolveHit(point);\n const source = this.resolveLinkPreviewSource(this.dragState.sourcePortId, point, hit);\n if (source) {\n this.renderer?.renderTempLink([source, point]);\n }\n if (\n linkDrag.completionBehavior === 'hover-or-release' &&\n hit?.type === 'port' &&\n hit.id !== linkDrag.sourcePortId\n ) {\n const completion = this.tryCreateLinkToPort(linkDrag.sourcePortId, linkDrag.sourceElementId, hit.id);\n if (completion.createdLinkId) {\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\n this.engine.emitPortMouseUp({\n portId: linkDrag.sourcePortId,\n elementId: linkDrag.sourceElementId,\n pointer: pointerInfo,\n });\n this.dragState = null;\n this.linkDragContext = null;\n this.emitElementLinkEndedSafely({\n sourcePortId: linkDrag.sourcePortId,\n sourceElementId: linkDrag.sourceElementId,\n linkId: completion.createdLinkId,\n targetPortId: completion.targetPortId,\n targetElementId: completion.targetElementId ?? undefined,\n cancelled: false,\n });\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.setCursor('default');\n return;\n }\n } else if (hit?.type === 'element') {\n const placeholder = this.createPlaceholderPort(hit.id, point, this.dragState.sourcePortId);\n if (placeholder) {\n const hostElement = this.getElementById(hit.id);\n if (hostElement) {\n const hostWorld = this.engine.getElementWorldPosition(hit.id) ?? hostElement.position;\n this.renderer?.renderPortPlaceholder?.(\n placeholder,\n { id: hostElement.id, position: hostWorld, size: hostElement.size, shapeId: hostElement.shapeId },\n );\n } else {\n this.renderer?.renderPortPlaceholder?.(placeholder);\n }\n }\n } else {\n this.renderer?.clearPortPlaceholder?.();\n }\n } else {\r\n this.renderer?.clearPortPlaceholder?.();\r\n }\r\n } else if (this.dragState.mode === 'link-handle') {\r\n const linkState = this.dragState;\r\n const link = this.getLinkById(linkState.linkId);\r\n if (!link) return;\r\n const points = link.points.map((p, index) => (index === linkState.pointIndex ? point : p));\r\n this.engine.updateLinkPoints(link.id, points);\r\n this.renderer?.renderLinkHandles(link.id, points);\r\n } else if (this.dragState.mode === 'link-segment') {\r\n const linkState = this.dragState;\r\n const link = this.getLinkById(linkState.linkId);\r\n if (!link) return;\r\n const dx = point.x - linkState.start.x;\r\n const dy = point.y - linkState.start.y;\r\n const moved = Math.hypot(dx, dy) >= this.dragThreshold;\r\n linkState.hasMoved = linkState.hasMoved || moved;\r\n if (!linkState.hasMoved) return;\r\n\r\n let points = link.points.map((p) => ({ ...p }));\r\n if (linkState.pointIndex === undefined) {\r\n const nearest = this.findNearestSegmentPoint(points, point);\r\n if (!nearest) return;\r\n points = [\r\n ...points.slice(0, nearest.index + 1),\r\n { ...nearest.point },\r\n ...points.slice(nearest.index + 1),\r\n ];\r\n linkState.pointIndex = nearest.index + 1;\r\n }\r\n points = points.map((p, index) => (index === linkState.pointIndex ? point : p));\r\n this.engine.updateLinkPoints(link.id, points);\r\n this.renderer?.renderLinkHandles(link.id, points);\r\n } else if (this.dragState.mode === 'resize') {\r\n this.handleResizeDrag(this.dragState, point);\r\n } else if (this.dragState.mode === 'marquee') {\r\n const rect = this.normalizeRect(this.dragState.start, point);\r\n const moved = rect.width >= this.dragThreshold || rect.height >= this.dragThreshold;\r\n this.dragState.hasMoved = this.dragState.hasMoved || moved;\r\n this.renderer?.renderMarquee(rect);\r\n } else if (this.dragState.mode === 'pan') {\r\n const dx = point.x - this.dragState.start.x;\r\n const dy = point.y - this.dragState.start.y;\r\n this.pan = {\r\n x: this.dragState.origin.x - dx * this.panSpeed,\r\n y: this.dragState.origin.y - dy * this.panSpeed,\r\n };\r\n this.applyStageTransform();\r\n this.engine.setViewport(this.pan, this.zoom);\r\n }\r\n };\r\n\r\n const pointerUp = (...args: unknown[]) => {\n const event = args[0] as { evt?: MouseEvent | PointerEvent } | undefined;\n const nativeEvent = event?.evt;\n const pointerPoint = this.getPointerPosition();\n\n if (this.dragState?.mode === 'shape-control-drag') {\n const dragState = this.dragState;\n this.dragState = null;\n const point = pointerPoint ?? dragState.start;\n const delta = { x: point.x - dragState.start.x, y: point.y - dragState.start.y };\n const dragContext: ElementShapeControlDragEvent = {\n sessionId: dragState.sessionId,\n startPointer: dragState.startPointer,\n delta,\n };\n if (dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-end', dragState.control, point, nativeEvent, dragContext);\n } else {\n this.emitShapeHoverControlInteraction('click', dragState.control, point, nativeEvent);\n this.emitLegacyShapeHoverControlActivation(dragState.control, point, nativeEvent);\n }\n if (pointerPoint) {\n this.lastPointerPosition = { ...pointerPoint };\n this.updateShapeHoverControl(pointerPoint);\n this.updateHoverCursor(pointerPoint);\n } else {\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n return;\n }\n\n if (this.dragState?.mode === 'link-drag') {\n const linkState = this.dragState;\n const point = pointerPoint;\n const pointerInfo = this.buildPointerInfo(point ?? linkState.start, nativeEvent);\n const sourcePortPayload = {\n portId: linkState.sourcePortId,\n elementId: linkState.sourceElementId,\n pointer: pointerInfo,\n };\n this.engine.emitPortMouseUp(sourcePortPayload);\n\r\n let createdLinkId: string | null = null;\r\n let targetPortId: string | null = null;\r\n let targetElementId: string | null = null;\r\n\r\n if (!linkState.hasMoved) {\n this.handleSelection({ id: linkState.sourcePortId, type: 'port' }, linkState.isMulti);\n } else {\n const hit = point ? this.resolveHit(point) : null;\n if (\n linkState.completionBehavior === 'hover-or-release' &&\n hit &&\n hit.type === 'port' &&\n hit.id !== linkState.sourcePortId\n ) {\n const completion = this.tryCreateLinkToPort(linkState.sourcePortId, linkState.sourceElementId, hit.id);\n createdLinkId = completion.createdLinkId;\n targetPortId = completion.targetPortId;\n targetElementId = completion.targetElementId;\n } else if (linkState.completionBehavior === 'hover-or-release' && hit && hit.type === 'element' && point) {\n targetElementId = hit.id;\n const completion = this.tryCreateLinkToElement(\n linkState.sourcePortId,\n linkState.sourceElementId,\n hit.id,\n point,\n );\n targetPortId = completion.targetPortId;\n createdLinkId = completion.createdLinkId;\n targetElementId = completion.targetElementId;\n }\n }\n\r\n this.dragState = null;\n this.linkDragContext = null;\n this.emitElementLinkEndedSafely({\n sourcePortId: linkState.sourcePortId,\n sourceElementId: linkState.sourceElementId,\n linkId: createdLinkId ?? undefined,\n targetPortId: targetPortId ?? undefined,\n targetElementId: targetElementId ?? undefined,\n cancelled: createdLinkId === null,\n });\n\r\n this.renderer?.clearTempLink();\r\n this.renderer?.clearPortPlaceholder?.();\r\n }\r\n\r\n if (this.dragState?.mode === 'marquee') {\r\n const point = pointerPoint ?? this.dragState.start;\r\n const rect = this.normalizeRect(this.dragState.start, point);\r\n this.applyMarqueeSelection(rect, this.dragState.isMulti);\r\n this.renderer?.clearMarquee();\r\n if (!this.dragState.hasMoved) {\r\n const pointerInfo = this.buildPointerInfo(point, nativeEvent);\r\n this.engine.emitPaperClick(pointerInfo);\r\n }\r\n }\r\n\r\n if (this.dragState?.mode === 'move' && this.dragState.type === 'element') {\r\n const element = this.getElementById(this.dragState.id);\r\n if (element) {\r\n const endTopLeft = this.engine.getElementWorldPosition(this.dragState.id) ?? element.position;\r\n const endWorld =\r\n this.dragState.anchor === 'center'\r\n ? {\r\n x: endTopLeft.x + element.size.width / 2,\r\n y: endTopLeft.y + element.size.height / 2,\r\n }\r\n : endTopLeft;\r\n const delta = {\r\n x: endWorld.x - this.dragState.start.x,\r\n y: endWorld.y - this.dragState.start.y,\r\n };\r\n const moved = this.dragState.hasMoved || Math.hypot(delta.x, delta.y) > 0;\r\n if (moved) {\r\n this.engine.emitElementDrop({\r\n elementId: this.dragState.id,\r\n startWorld: { ...this.dragState.start },\r\n endWorld,\r\n delta,\r\n startParentId: this.dragState.startParentId,\r\n selectionIds: [...this.dragState.selectionIds],\r\n anchor: this.dragState.anchor,\r\n });\r\n } else {\r\n const pointerInfo = this.buildPointerInfo(pointerPoint ?? this.dragState.start, nativeEvent);\r\n this.engine.emitElementClick(this.dragState.id, pointerInfo, this.dragState.isMulti);\r\n }\r\n }\r\n }\r\n\r\n if (this.dragState?.mode === 'move' && this.dragState.type === 'port') {\r\n const elementId = this.engine.getPortElementId(this.dragState.id);\r\n if (elementId) {\r\n const pointerInfo = this.buildPointerInfo(pointerPoint ?? this.engine.getPortWorldPosition(this.dragState.id) ?? { x: 0, y: 0 }, nativeEvent);\r\n this.engine.emitPortMouseUp({ portId: this.dragState.id, elementId, pointer: pointerInfo });\r\n }\r\n }\r\n\r\n this.dragState = null;\n this.linkDragContext = null;\n if (pointerPoint) {\n this.lastPointerPosition = { ...pointerPoint };\n this.updateShapeHoverControl(pointerPoint);\n this.updateHoverCursor(pointerPoint);\n } else {\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n };\n\r\n const downEvents = 'mousedown touchstart pointerdown';\r\n const moveEvents = 'mousemove touchmove pointermove';\r\n const upEvents = 'mouseup touchend pointerup';\r\n\r\n this.stage.on(downEvents, pointerDown);\r\n this.handlers.push([downEvents, pointerDown]);\r\n this.stage.on(moveEvents, pointerMove);\r\n this.handlers.push([moveEvents, pointerMove]);\r\n this.stage.on(upEvents, pointerUp);\r\n this.handlers.push([upEvents, pointerUp]);\r\n\r\n const doubleClick = () => {\r\n const point = this.getPointerPosition();\r\n if (!point) return;\r\n const hit = this.resolveHit(point);\r\n if (!hit || hit.type !== 'text') return;\r\n this.startTextEdit(hit.id);\r\n };\r\n\r\n this.stage.on('dblclick dbltap', doubleClick);\r\n this.handlers.push(['dblclick dbltap', doubleClick]);\r\n\r\n const keyDown = (event: Event) => {\r\n const keyEvent = event as KeyboardEvent;\r\n if (this.isEditableTarget(keyEvent.target)) return;\r\n if (keyEvent.key === 'Escape') {\r\n this.cancelLinkDrag();\r\n return;\r\n }\r\n if (keyEvent.key === 'Delete' || keyEvent.key === 'Backspace') {\r\n this.engine.deleteSelection();\r\n }\r\n };\r\n\r\n const wheel = (...args: unknown[]) => {\r\n const event = args[0] as { evt?: WheelEvent } | undefined;\r\n const nativeEvent = event?.evt;\r\n if (!nativeEvent) return;\r\n nativeEvent.preventDefault?.();\r\n const delta = nativeEvent.deltaY;\r\n const direction = delta > 0 ? -1 : 1;\r\n const factor = 1 + direction * 0.05;\r\n this.zoom = Math.max(0.2, Math.min(3, this.zoom * factor));\r\n this.applyStageTransform();\r\n this.engine.setViewport(this.pan, this.zoom);\r\n };\r\n\r\n window.addEventListener('keydown', keyDown);\r\n this.windowHandlers.push(['keydown', keyDown]);\r\n this.previousWindowKeyDown = window.onkeydown;\r\n window.onkeydown = (event: KeyboardEvent) => {\r\n keyDown(event);\r\n this.previousWindowKeyDown?.call(window, event);\r\n };\r\n this.stage.on('wheel', wheel);\r\n this.handlers.push(['wheel', wheel]);\r\n this.selectionUnsub = this.engine.on('selection', () => this.updateSelectionOverlays());\n this.changeUnsub = this.engine.on('change', (event) => {\n this.updateSelectionOverlays();\n this.applyViewportPatch(event.patches);\n if (!this.dragState && this.lastPointerPosition) {\n this.updateShapeHoverControl(this.lastPointerPosition);\n }\n });\n this.bound = true;\n }\n\r\n dispose(): void {\r\n if (this.stage && this.stage.off) {\r\n this.handlers.forEach(([event, handler]) => this.stage?.off?.(event, handler));\r\n }\r\n this.handlers = [];\r\n this.windowHandlers.forEach(([event, handler]) => window.removeEventListener(event, handler));\r\n this.windowHandlers = [];\r\n if (this.previousWindowKeyDown !== null) {\r\n window.onkeydown = this.previousWindowKeyDown;\r\n this.previousWindowKeyDown = null;\r\n }\r\n this.selectionUnsub?.();\r\n this.selectionUnsub = null;\r\n this.changeUnsub?.();\n this.changeUnsub = null;\n this.clearActiveShapeHoverControl();\n this.disposeTextEditor();\n this.bound = false;\n }\n\r\n private handleSelection(hit: HitResult | null, isMulti: boolean): void {\r\n if (!hit || hit.type === 'none') {\r\n this.engine.setSelection([]);\r\n return;\r\n }\r\n if (hit.type === 'resize-handle' || hit.type === 'link-handle' || hit.type === 'shape-hover-control') {\n return;\n }\n if (isMulti) {\r\n this.engine.toggleSelection(hit.id);\r\n return;\r\n }\r\n this.engine.setSelection([hit.id]);\r\n }\r\n\r\n private getPointerPosition(): Point | null {\n const stageAny = this.stage as unknown as {\n getPointerPosition?: () => { x: number; y: number } | null;\n getAbsoluteTransform?: () =>\n | {\n copy?: () => { invert?: () => void; point?: (pos: Point) => Point };\n invert?: () => void;\n point?: (pos: Point) => Point;\n }\n | undefined;\n };\n const pos = stageAny?.getPointerPosition?.();\n if (!pos) return null;\n const transformSource = stageAny.getAbsoluteTransform?.();\n const transform = transformSource?.copy?.() ?? transformSource;\n if (transform && typeof transform.invert === 'function' && typeof transform.point === 'function') {\n transform.invert();\n const point = transform.point(pos);\n return { x: point.x, y: point.y };\n }\n return { x: pos.x, y: pos.y };\n }\r\n\r\n private getStageContainer(): HTMLDivElement | null {\r\n const stageAny = this.stage as unknown as {\r\n container?: HTMLDivElement | (() => HTMLDivElement);\r\n };\r\n const container =\r\n typeof stageAny?.container === 'function' ? stageAny.container() : stageAny?.container;\r\n return container ?? null;\r\n }\r\n\r\n private normalizeHit(hit: HitResult | null): HitResult | null {\r\n if (!hit || hit.type === 'none') return null;\r\n if (\r\n hit.type === 'port' ||\r\n hit.type === 'link' ||\r\n hit.type === 'text' ||\n hit.type === 'resize-handle' ||\n hit.type === 'link-handle' ||\n hit.type === 'shape-hover-control'\n ) {\n return hit;\n }\n return { ...hit, type: 'element' };\r\n }\r\n\r\n private resolveHit(point: Point): HitResult | null {\n const primary = this.withElementDepth(this.normalizeHit(this.hitTester.hitTest(point)));\n const hits: HitResult[] = primary ? [primary] : [];\n const seen = new Set(hits.map((hit) => `${hit.type}:${hit.id}`));\n\n const addHit = (hit: HitResult | null) => {\n const enriched = this.withElementDepth(hit);\n if (!enriched) return;\n const key = `${enriched.type}:${enriched.id}`;\n if (seen.has(key)) return;\n seen.add(key);\n hits.push(enriched);\n };\n\n addHit(this.findLinkHit(point));\n addHit(this.findElementHit(point));\n\n if (hits.length === 0) return null;\n\n const priority: HitResult['type'][] = ['resize-handle', 'link-handle', 'port', 'shape-hover-control', 'link', 'text', 'element'];\n for (let i = 0; i < priority.length; i += 1) {\n const candidates = hits.filter((hit) => hit.type === priority[i]);\n if (candidates.length === 0) continue;\n if (priority[i] === 'element') {\n return candidates.reduce((deepest, current) => {\n const deepestDepth = deepest.depth ?? -1;\n const currentDepth = current.depth ?? -1;\n if (currentDepth > deepestDepth) return current;\n if (currentDepth < deepestDepth) return deepest;\n return deepest; // preserve primary hit when depths are equal\n }, candidates[0]);\n }\n return candidates[0];\n }\n\n return hits[0];\n }\n\n private withElementDepth(hit: HitResult | null): HitResult | null {\n if (!hit || hit.type !== 'element' || hit.depth !== undefined) return hit;\n const byId = new Map(\n this.engine\n .getState()\n .elements.map((element) => [element.id, { parentId: element.parentId }] as const),\n );\n if (!byId.has(hit.id)) return hit;\n return {\n ...hit,\n depth: this.computeElementDepth(hit.id, byId),\n };\n }\n\r\n private findElementHit(point: Point): HitResult | null {\r\n const state = this.engine.getState();\r\n if (!state.elements.length) return null;\r\n const byId = new Map(state.elements.map((element) => [element.id, element]));\r\n let best: HitResult | null = null;\r\n\r\n state.elements.forEach((element) => {\n const world = this.engine.getElementWorldPosition(element.id) ?? element.position;\n const rotation = this.engine.getElementRotation(element.id);\n if (!pointInRotatedRect(point, world, element.size, rotation, element.anchorCenter ?? false)) return;\n const depth = this.computeElementDepth(element.id, byId);\n if (!best || depth > (best.depth ?? -1)) {\n best = { id: element.id, type: 'element', depth };\n }\n });\n\r\n return best;\r\n }\r\n\r\n private computeElementDepth(id: string, byId: Map<string, { parentId?: string | null }>): number {\r\n let depth = 0;\r\n let current = byId.get(id);\r\n while (current?.parentId) {\r\n depth += 1;\r\n current = byId.get(current.parentId);\r\n }\r\n return depth;\r\n }\r\n\r\n private findLinkHit(point: Point): HitResult | null {\r\n const links = this.engine.getState().links;\r\n if (!links.length) return null;\r\n\r\n let bestId: string | null = null;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n\r\n links.forEach((link) => {\r\n if (link.points.length < 2) return;\r\n const tolerance = ((link.style as { hitStrokeWidth?: number } | undefined)?.hitStrokeWidth ?? 15) / 2;\r\n for (let i = 1; i < link.points.length; i += 1) {\r\n const projected = this.projectPointOnSegment(point, link.points[i - 1], link.points[i]);\r\n if (projected.distance > tolerance) continue;\r\n if (projected.distance < bestDistance) {\r\n bestDistance = projected.distance;\r\n bestId = link.id;\r\n }\r\n }\r\n });\r\n\r\n return bestId ? { id: bestId, type: 'link' as const } : null;\r\n }\r\n\r\n private setCursor(cursor: string): void {\r\n const stageAny = this.stage as unknown as {\r\n container?: HTMLDivElement | (() => HTMLDivElement);\r\n };\r\n const container =\r\n typeof stageAny?.container === 'function' ? stageAny.container() : stageAny?.container;\r\n if (container && container.style) {\r\n container.style.cursor = cursor;\r\n }\r\n }\r\n\r\n private updateHoverCursor(point: Point): void {\n const hit = this.resolveHit(point);\r\n if (!hit || hit.type === 'none') {\r\n this.setCursor('default');\r\n return;\r\n }\r\n if (hit.type === 'resize-handle') {\r\n const parsed = this.parseResizeHandle(hit.id);\r\n this.setCursor(parsed ? this.getResizeCursor(parsed.handle) : 'nwse-resize');\r\n return;\r\n }\r\n if (hit.type === 'link-handle') {\n this.setCursor('move');\n return;\n }\n if (hit.type === 'shape-hover-control') {\n this.setCursor('pointer');\n return;\n }\n if (hit.type === 'port') {\n const isSelected = this.engine.getSelection().includes(hit.id);\n this.setCursor(isSelected ? 'grab' : 'crosshair');\n return;\r\n }\r\n if (hit.type === 'link') {\r\n this.setCursor('pointer');\r\n return;\r\n }\n this.setCursor('grab');\n }\n\n private normalizeShapeHoverControls(\n controls?: ElementShapeHoverControls,\n ): NormalizedShapeHoverControls | undefined {\n if (!controls) return undefined;\n const normalizedControls: NormalizedShapeControlDefinition[] = [];\n const usedControlIds = new Set<string>();\n\n (controls.controls ?? []).forEach((control) => {\n const normalized = this.normalizeShapeHoverControlDefinition(control);\n if (!normalized || usedControlIds.has(normalized.id)) return;\n usedControlIds.add(normalized.id);\n normalizedControls.push(normalized);\n });\n\n const legacyEdge = controls.edge?.icon.svgPath?.trim()\n ? this.normalizeShapeHoverControlDefinition({\n id: 'legacy-edge-control',\n targetKind: 'edge',\n icon: {\n svgPath: controls.edge.icon.svgPath,\n size: controls.edge.icon.size,\n style: controls.edge.icon.style,\n },\n allowAllTargets: true,\n visibilityTriggers: ['target-hover'],\n tolerance: controls.edge.tolerance,\n lineStyle: controls.edge.lineStyle,\n })\n : null;\n const legacyVertex = controls.vertex?.icon.svgPath?.trim()\n ? this.normalizeShapeHoverControlDefinition({\n id: 'legacy-vertex-control',\n targetKind: 'vertex',\n icon: {\n svgPath: controls.vertex.icon.svgPath,\n size: controls.vertex.icon.size,\n style: controls.vertex.icon.style,\n },\n allowAllTargets: true,\n visibilityTriggers: ['target-hover'],\n tolerance: controls.vertex.tolerance,\n })\n : null;\n const legacyOrder =\n controls.priority === 'vertex-first'\n ? [legacyVertex, legacyEdge]\n : [legacyEdge, legacyVertex];\n legacyOrder.forEach((legacyControl) => {\n if (!legacyControl || usedControlIds.has(legacyControl.id)) return;\n usedControlIds.add(legacyControl.id);\n normalizedControls.push(legacyControl);\n });\n\n if (normalizedControls.length === 0) return undefined;\n return { controls: normalizedControls };\n }\n\n private normalizeShapeHoverControlDefinition(\n control: ShapeControlDefinition | undefined,\n ): NormalizedShapeControlDefinition | null {\n if (!control) return null;\n const id = control.id?.trim();\n const svgPath = control.icon?.svgPath?.trim();\n if (!id || !svgPath) return null;\n if (\n control.targetKind !== 'edge' &&\n control.targetKind !== 'vertex' &&\n control.targetKind !== 'midpoint' &&\n control.targetKind !== 'ellipse-midpoint'\n ) {\n return null;\n }\n const visibilityTriggers = this.normalizeVisibilityTriggers(control.visibilityTriggers);\n const targetIndices =\n control.targetKind === 'ellipse-midpoint'\n ? undefined\n : this.normalizeTargetIndices(control.targetIndices);\n const ellipseMidPoints =\n control.targetKind === 'ellipse-midpoint'\n ? this.normalizeEllipseMidPoints(control.ellipseMidPoints)\n : undefined;\n return {\n ...control,\n id,\n icon: {\n ...control.icon,\n svgPath,\n },\n visibilityTriggers,\n targetIndices,\n ellipseMidPoints,\n tolerance:\n typeof control.tolerance === 'number'\n ? control.tolerance\n : this.getDefaultShapeHoverControlTolerance(control.targetKind),\n };\n }\n\n private normalizeVisibilityTriggers(\n triggers: ShapeControlVisibilityTrigger[] | undefined,\n ): ShapeControlVisibilityTrigger[] {\n const source = triggers?.length ? triggers : ['target-hover'];\n const normalized: ShapeControlVisibilityTrigger[] = [];\n source.forEach((trigger) => {\n if (trigger !== 'target-hover' && trigger !== 'element-hover') return;\n if (normalized.includes(trigger)) return;\n normalized.push(trigger);\n });\n if (normalized.length === 0) {\n normalized.push('target-hover');\n }\n return normalized;\n }\n\n private normalizeTargetIndices(indices: number[] | undefined): number[] | undefined {\n if (!indices?.length) return undefined;\n const normalized: number[] = [];\n indices.forEach((index) => {\n if (!Number.isInteger(index) || index < 0) return;\n if (normalized.includes(index)) return;\n normalized.push(index);\n });\n return normalized.length ? normalized : undefined;\n }\n\n private normalizeEllipseMidPoints(\n value: EllipseMidPoint | EllipseMidPoint[] | undefined,\n ): EllipseMidPoint[] | undefined {\n if (value === undefined) return undefined;\n const source = Array.isArray(value) ? value : [value];\n const normalized: EllipseMidPoint[] = [];\n source.forEach((entry) => {\n if (!isEllipseMidPoint(entry)) return;\n if (normalized.includes(entry)) return;\n normalized.push(entry);\n });\n return normalized.length ? normalized : undefined;\n }\n\n private getDefaultShapeHoverControlTolerance(targetKind: ShapeControlTargetKind): number {\n if (targetKind === 'vertex') return 12;\n return 10;\n }\n\n private resolveShapeHoverControlFromHit(hitId: string, point: Point): ResolvedShapeHoverControl | null {\n const parsed = this.parseShapeHoverControlHitId(hitId);\n if (!parsed) return this.activeShapeHoverControl;\n if (\n this.activeShapeHoverControl &&\n this.activeShapeHoverControl.elementId === parsed.elementId &&\n this.activeShapeHoverControl.controlId === parsed.controlId &&\n this.activeShapeHoverControl.targetKind === parsed.targetKind &&\n this.activeShapeHoverControl.targetIndex === parsed.targetIndex\n ) {\n return this.activeShapeHoverControl;\n }\n const resolved = this.resolveShapeHoverControl(parsed.elementId, point);\n if (!resolved) return null;\n if (\n resolved.controlId !== parsed.controlId ||\n resolved.targetKind !== parsed.targetKind ||\n resolved.targetIndex !== parsed.targetIndex ||\n (parsed.ellipseMidPoint !== undefined &&\n (!('ellipseMidPoint' in resolved.target) || resolved.target.ellipseMidPoint !== parsed.ellipseMidPoint))\n ) {\n return null;\n }\n return resolved;\n }\n\n private parseShapeHoverControlHitId(hitId: string): {\n elementId: string;\n controlId: string;\n targetKind: ShapeControlTargetKind;\n targetIndex: number;\n ellipseMidPoint?: EllipseMidPoint;\n } | null {\n const parts = hitId.split(':');\n if (parts.length < 5 || parts[0] !== 'shape-hover-control') return null;\n const targetRef = parts[parts.length - 1];\n const targetKind = parts[parts.length - 2];\n if (\n targetKind !== 'edge' &&\n targetKind !== 'vertex' &&\n targetKind !== 'midpoint' &&\n targetKind !== 'ellipse-midpoint'\n ) {\n return null;\n }\n const elementId = parts[1];\n const controlId = parts.slice(2, parts.length - 2).join(':');\n if (!elementId || !controlId) return null;\n if (targetKind === 'ellipse-midpoint') {\n if (!isEllipseMidPoint(targetRef)) return null;\n const targetIndex = ellipseMidPointToIndex(targetRef);\n if (targetIndex < 0) return null;\n return {\n elementId,\n controlId,\n targetKind,\n targetIndex,\n ellipseMidPoint: targetRef,\n };\n }\n const targetIndex = Number(targetRef);\n if (!Number.isInteger(targetIndex) || targetIndex < 0) return null;\n return {\n elementId,\n controlId,\n targetKind,\n targetIndex,\n };\n }\n\n private emitShapeHoverControlInteraction(\n eventType: 'click' | 'drag-start' | 'drag-move' | 'drag-end',\n control: ResolvedShapeHoverControl,\n point: Point,\n nativeEvent?: MouseEvent | PointerEvent,\n drag?: ElementShapeControlDragEvent,\n ): void {\n if (!this.onShapeHoverControlInteracted) return;\n const pointer = this.buildPointerInfo(point, nativeEvent);\n this.onShapeHoverControlInteracted({\n eventType,\n controlId: control.controlId,\n elementId: control.elementId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n pointer,\n edge:\n 'midpoint' in control.target\n ? {\n id: control.target.id,\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n }\n : undefined,\n ellipseMidPoint:\n 'ellipseMidPoint' in control.target\n ? control.target.ellipseMidPoint\n : undefined,\n vertex:\n 'position' in control.target && !('ellipseMidPoint' in control.target)\n ? {\n id: control.target.id,\n position: { ...control.target.position },\n }\n : undefined,\n drag: drag\n ? {\n sessionId: drag.sessionId,\n startPointer: {\n ...drag.startPointer,\n client: { ...drag.startPointer.client },\n world: { ...drag.startPointer.world },\n },\n delta: { ...drag.delta },\n }\n : undefined,\n });\n }\n\n private emitLegacyShapeHoverControlActivation(\n control: ResolvedShapeHoverControl,\n point: Point,\n nativeEvent?: MouseEvent | PointerEvent,\n ): void {\n if (!this.onShapeHoverControlActivated) return;\n if ('ellipseMidPoint' in control.target) return;\n const pointer = this.buildPointerInfo(point, nativeEvent);\n if ('position' in control.target) {\n this.onShapeHoverControlActivated({\n controlKind: 'vertex',\n elementId: control.elementId,\n targetId: control.target.id,\n pointer,\n vertex: {\n id: control.target.id,\n position: { ...control.target.position },\n },\n });\n return;\n }\n this.onShapeHoverControlActivated({\n controlKind: 'edge',\n elementId: control.elementId,\n targetId: control.target.id,\n pointer,\n edge: {\n id: control.target.id,\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n },\n });\n }\n\n private updateShapeHoverControl(point: Point): void {\n if (this.dragState) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (!this.shapeHoverControls) {\n this.clearActiveShapeHoverControl();\n return;\n }\n const hit = this.resolveHit(point);\n if (hit?.type === 'shape-hover-control' && this.activeShapeHoverControl) {\n return;\n }\n if (!hit || hit.type !== 'element') {\n this.clearActiveShapeHoverControl();\n return;\n }\n const resolved = this.resolveShapeHoverControl(hit.id, point);\n if (!resolved) {\n this.clearActiveShapeHoverControl();\n return;\n }\n if (\n this.activeShapeHoverControl &&\n this.activeShapeHoverControl.controlId === resolved.controlId &&\n this.activeShapeHoverControl.elementId === resolved.elementId &&\n this.activeShapeHoverControl.targetKind === resolved.targetKind &&\n this.activeShapeHoverControl.targetIndex === resolved.targetIndex &&\n this.isSameShapeHoverTarget(this.activeShapeHoverControl.target, resolved.target)\n ) {\n return;\n }\n this.activeShapeHoverControl = resolved;\n this.renderer?.renderShapeHoverControl?.(this.toShapeHoverRenderConfig(resolved));\n }\n\n private resolveShapeHoverControl(elementId: string, point: Point): ResolvedShapeHoverControl | null {\n const controls = this.shapeHoverControls?.controls;\n if (!controls?.length) return null;\n const element = this.getElementById(elementId);\n if (!element) return null;\n const shape = this.shapeRegistry?.get(element.shapeId);\n if (!shape) return null;\n const world = this.engine.getElementWorldPosition(elementId) ?? element.position;\n const rect = {\n x: world.x,\n y: world.y,\n width: element.size.width,\n height: element.size.height,\n };\n const geometry = shape.resolveHoverGeometry?.(rect);\n const transformed = geometry\n ? this.resolveRotatedHoverGeometry(\n geometry,\n elementId,\n world,\n element.size,\n element.anchorCenter ?? false,\n )\n : undefined;\n const ellipseMidPoints = this.resolveRotatedEllipseMidPoints(\n shape.resolveEllipseMidPoints?.(rect),\n elementId,\n world,\n element.size,\n element.anchorCenter ?? false,\n );\n for (let index = 0; index < controls.length; index += 1) {\n const control = controls[index];\n const targetHoverCandidate = control.visibilityTriggers.includes('target-hover')\n ? this.resolveTargetHoverCandidate(point, transformed, ellipseMidPoints, control, elementId)\n : null;\n const elementHoverCandidate = control.visibilityTriggers.includes('element-hover')\n ? this.resolveElementHoverCandidate(point, transformed, ellipseMidPoints, control, elementId)\n : null;\n const candidate = targetHoverCandidate ?? elementHoverCandidate;\n if (!candidate) continue;\n return {\n control,\n controlId: control.id,\n elementId,\n targetKind: control.targetKind,\n targetIndex: candidate.targetIndex,\n target: candidate.target,\n };\n }\n return null;\n }\n\n private resolveTargetHoverCandidate(\n point: Point,\n geometry: ShapeHoverGeometry | undefined,\n ellipseMidPoints: ShapeEllipseMidPointTarget[],\n control: NormalizedShapeControlDefinition,\n elementId: string,\n ): { targetIndex: number; target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget } | null {\n if (control.targetKind === 'ellipse-midpoint') {\n const targets = this.resolveEligibleEllipseMidPoints(control, ellipseMidPoints);\n if (!targets.length || control.tolerance <= 0) return null;\n let best: { target: ShapeEllipseMidPointTarget; distance: number } | null = null;\n for (const target of targets) {\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { target, distance };\n }\n if (!best) return null;\n return { targetIndex: ellipseMidPointToIndex(best.target.ellipseMidPoint), target: best.target };\n }\n if (!geometry) return null;\n const indices = this.resolveEligibleTargetIndices(control, geometry, elementId);\n if (!indices.length || control.tolerance <= 0) return null;\n if (control.targetKind === 'vertex') {\n let best: { targetIndex: number; target: ShapeVertexTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.vertices[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n if (control.targetKind === 'edge') {\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const projected = this.projectPointOnSegment(point, target.start, target.end);\n if (projected.distance > control.tolerance) continue;\n if (best && projected.distance >= best.distance) continue;\n best = { targetIndex, target, distance: projected.distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.midpoint.x, point.y - target.midpoint.y);\n if (distance > control.tolerance) continue;\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n\n private resolveElementHoverCandidate(\n point: Point,\n geometry: ShapeHoverGeometry | undefined,\n ellipseMidPoints: ShapeEllipseMidPointTarget[],\n control: NormalizedShapeControlDefinition,\n elementId: string,\n ): { targetIndex: number; target: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget } | null {\n if (control.targetKind === 'ellipse-midpoint') {\n const targets = this.resolveEligibleEllipseMidPoints(control, ellipseMidPoints);\n if (!targets.length) return null;\n let best: { target: ShapeEllipseMidPointTarget; distance: number } | null = null;\n for (const target of targets) {\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (best && distance >= best.distance) continue;\n best = { target, distance };\n }\n if (!best) return null;\n return { targetIndex: ellipseMidPointToIndex(best.target.ellipseMidPoint), target: best.target };\n }\n if (!geometry) return null;\n const indices = this.resolveEligibleTargetIndices(control, geometry, elementId);\n if (!indices.length) return null;\n if (control.targetKind === 'vertex') {\n let best: { targetIndex: number; target: ShapeVertexTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.vertices[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.position.x, point.y - target.position.y);\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n if (control.targetKind === 'edge') {\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const projected = this.projectPointOnSegment(point, target.start, target.end);\n if (best && projected.distance >= best.distance) continue;\n best = { targetIndex, target, distance: projected.distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n let best: { targetIndex: number; target: ShapeEdgeTarget; distance: number } | null = null;\n for (const targetIndex of indices) {\n const target = geometry.edges[targetIndex];\n if (!target) continue;\n const distance = Math.hypot(point.x - target.midpoint.x, point.y - target.midpoint.y);\n if (best && distance >= best.distance) continue;\n best = { targetIndex, target, distance };\n }\n return best ? { targetIndex: best.targetIndex, target: best.target } : null;\n }\n\n private resolveEligibleTargetIndices(\n control: NormalizedShapeControlDefinition,\n geometry: ShapeHoverGeometry,\n elementId: string,\n ): number[] {\n const source = control.targetKind === 'vertex' ? geometry.vertices : geometry.edges;\n if (!source.length) return [];\n const occupiedVertexIndices = this.resolveOccupiedVertexIndices(elementId, geometry);\n if (control.allowAllTargets === true) {\n return Array.from({ length: source.length }, (_, index) => index).filter((index) =>\n control.targetKind === 'vertex' ? !occupiedVertexIndices.has(index) : true,\n );\n }\n if (!control.targetIndices?.length) return [];\n return control.targetIndices.filter((targetIndex) =>\n targetIndex >= 0 &&\n targetIndex < source.length &&\n (control.targetKind !== 'vertex' || !occupiedVertexIndices.has(targetIndex)),\n );\n }\n\n private resolveOccupiedVertexIndices(elementId: string, geometry: ShapeHoverGeometry): Set<number> {\n if (!geometry.vertices.length) return new Set<number>();\n const ports = this.engine.getState().ports.filter((port) => port.elementId === elementId);\n if (!ports.length) return new Set<number>();\n const tolerance = this.occupiedVertexTolerance;\n const occupied = new Set<number>();\n ports.forEach((port) => {\n const world = this.engine.getPortWorldPosition(port.id);\n if (!world) return;\n geometry.vertices.forEach((vertex, index) => {\n if (\n Math.abs(vertex.position.x - world.x) <= tolerance &&\n Math.abs(vertex.position.y - world.y) <= tolerance\n ) {\n occupied.add(index);\n }\n });\n });\n return occupied;\n }\n\n private resolveEligibleEllipseMidPoints(\n control: NormalizedShapeControlDefinition,\n targets: ShapeEllipseMidPointTarget[],\n ): ShapeEllipseMidPointTarget[] {\n if (!targets.length) return [];\n if (control.allowAllTargets === true) {\n return [...targets];\n }\n if (!control.ellipseMidPoints?.length) return [];\n return control.ellipseMidPoints\n .map((midPoint) => targets.find((target) => target.ellipseMidPoint === midPoint))\n .filter((target): target is ShapeEllipseMidPointTarget => Boolean(target));\n }\n\n private resolveRotatedHoverGeometry(\n geometry: ShapeHoverGeometry,\n elementId: string,\n worldPosition: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n ): ShapeHoverGeometry {\n const rotation = this.engine.getElementRotation(elementId);\n if (Math.abs(rotation) <= 1e-6) {\n return geometry;\n }\n const pivot = resolveRectRotationPivot(worldPosition, size, anchorCenter);\n const rotate = (input: Point) => rotatePoint(input, pivot, rotation);\n const vertices = geometry.vertices.map((vertex) => ({\n id: vertex.id,\n position: rotate(vertex.position),\n }));\n const edges = geometry.edges.map((edge) => {\n const start = rotate(edge.start);\n const end = rotate(edge.end);\n return {\n id: edge.id,\n start,\n end,\n midpoint: {\n x: (start.x + end.x) / 2,\n y: (start.y + end.y) / 2,\n },\n };\n });\n return { vertices, edges };\n }\n\n private resolveRotatedEllipseMidPoints(\n targets: ShapeEllipseMidPointTarget[] | undefined,\n elementId: string,\n worldPosition: Point,\n size: { width: number; height: number },\n anchorCenter: boolean,\n ): ShapeEllipseMidPointTarget[] {\n if (!targets?.length) return [];\n const rotation = this.engine.getElementRotation(elementId);\n if (Math.abs(rotation) <= 1e-6) {\n return targets.map((target) => ({\n id: target.id,\n ellipseMidPoint: target.ellipseMidPoint,\n position: { ...target.position },\n }));\n }\n const pivot = resolveRectRotationPivot(worldPosition, size, anchorCenter);\n return targets.map((target) => ({\n id: target.id,\n ellipseMidPoint: target.ellipseMidPoint,\n position: rotatePoint(target.position, pivot, rotation),\n }));\n }\n\n private isSameShapeHoverTarget(\n previous: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget,\n next: ShapeEdgeTarget | ShapeVertexTarget | ShapeEllipseMidPointTarget,\n ): boolean {\n if ('midpoint' in previous && 'midpoint' in next) {\n return (\n this.isSamePoint(previous.start, next.start) &&\n this.isSamePoint(previous.end, next.end) &&\n this.isSamePoint(previous.midpoint, next.midpoint)\n );\n }\n if ('ellipseMidPoint' in previous && 'ellipseMidPoint' in next) {\n return (\n previous.ellipseMidPoint === next.ellipseMidPoint &&\n this.isSamePoint(previous.position, next.position)\n );\n }\n if ('position' in previous && 'position' in next) {\n return this.isSamePoint(previous.position, next.position);\n }\n return false;\n }\n\n private isSamePoint(a: Point, b: Point): boolean {\n return Math.abs(a.x - b.x) <= 1e-6 && Math.abs(a.y - b.y) <= 1e-6;\n }\n\n private toShapeHoverRenderConfig(control: ResolvedShapeHoverControl): ShapeHoverControlRenderConfig {\n if ('ellipseMidPoint' in control.target) {\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n targetRef: control.target.ellipseMidPoint,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n ellipseMidPoint: {\n id: control.target.id,\n position: { ...control.target.position },\n },\n };\n }\n if ('midpoint' in control.target) {\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n edge: {\n start: { ...control.target.start },\n end: { ...control.target.end },\n midpoint: { ...control.target.midpoint },\n lineStyle: control.targetKind === 'edge' ? control.control.lineStyle : undefined,\n },\n };\n }\n return {\n controlId: control.controlId,\n targetKind: control.targetKind,\n targetIndex: control.targetIndex,\n elementId: control.elementId,\n targetId: control.target.id,\n icon: {\n svgPath: control.control.icon.svgPath,\n size: control.control.icon.size,\n style: control.control.icon.style,\n },\n vertex: {\n position: { ...control.target.position },\n },\n };\n }\n\n private clearActiveShapeHoverControl(): void {\n this.activeShapeHoverControl = null;\n this.renderer?.clearShapeHoverControl?.();\n }\n\n private startTextEdit(textId: string): void {\n if (typeof document === 'undefined') return;\r\n const text = this.getTextById(textId);\r\n if (!text) return;\r\n const container = this.getStageContainer();\r\n if (!container) return;\r\n this.disposeTextEditor();\r\n\r\n const editor = document.createElement('textarea');\n const defaults = resolveTextStyleDefaults(text.style);\n const fontSize = defaults.fontSize;\n const fontFamily = defaults.fontFamily;\n const baseWidth = text.size?.width ?? Math.max(text.content.length, 1) * fontSize * 0.6;\r\n const baseHeight = text.size?.height ?? fontSize * 1.2;\r\n const position = this.resolveTextScreenPosition(textId, text.position);\r\n\r\n if (container.style.position === '' || container.style.position === 'static') {\r\n container.style.position = 'relative';\r\n }\r\n\r\n editor.value = text.content;\r\n editor.style.position = 'absolute';\r\n editor.style.left = `${position.x}px`;\r\n editor.style.top = `${position.y}px`;\r\n editor.style.width = `${Math.max(baseWidth, 40)}px`;\r\n editor.style.height = `${Math.max(baseHeight, 20)}px`;\r\n editor.style.fontSize = `${fontSize}px`;\r\n editor.style.fontFamily = fontFamily;\r\n editor.style.padding = '2px 4px';\r\n editor.style.margin = '0';\r\n editor.style.border = '1px solid #1f4d99';\r\n editor.style.borderRadius = '4px';\r\n editor.style.background = '#ffffff';\r\n editor.style.resize = 'none';\r\n editor.style.outline = 'none';\r\n editor.style.zIndex = '10';\r\n\r\n let finalized = false;\r\n const finalize = (apply: boolean) => {\r\n if (finalized) return;\r\n finalized = true;\r\n const value = editor.value;\r\n editor.remove();\r\n this.textEditor = null;\r\n if (apply && value !== text.content) {\r\n this.engine.updateText(textId, value);\r\n }\r\n };\r\n\r\n editor.addEventListener('keydown', (event) => {\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n event.preventDefault();\r\n finalize(true);\r\n } else if (event.key === 'Escape') {\r\n event.preventDefault();\r\n finalize(false);\r\n }\r\n });\r\n editor.addEventListener('blur', () => finalize(true));\r\n\r\n container.appendChild(editor);\r\n editor.focus();\r\n editor.select();\r\n this.textEditor = editor;\r\n }\r\n\r\n private disposeTextEditor(): void {\r\n if (!this.textEditor) return;\r\n this.textEditor.remove();\r\n this.textEditor = null;\r\n }\r\n\r\n private updateSelectionOverlays(): void {\n if (!this.renderer) return;\r\n const selection = this.engine.getSelection();\r\n if (selection.length !== 1) {\r\n this.renderer.clearResizeHandles();\r\n this.renderer.clearLinkHandles();\r\n return;\r\n }\r\n const id = selection[0];\r\n const element = this.getElementById(id);\n if (element) {\n const position = this.engine.getElementWorldPosition(id) ?? element.position;\n this.renderElementResizeHandles(id, position, element);\n this.renderer.clearLinkHandles();\n return;\n }\n const link = this.getLinkById(id);\r\n if (link) {\r\n this.renderer.renderLinkHandles(id, link.points);\r\n this.renderer.clearResizeHandles();\r\n return;\r\n }\r\n this.renderer.clearResizeHandles();\n this.renderer.clearLinkHandles();\n }\n\n private renderElementResizeHandles(\n elementId: string,\n position: Point,\n element: { size: { width: number; height: number }; anchorCenter?: boolean },\n ): void {\n if (!this.renderer) return;\n const rotation = this.engine.getElementRotation(elementId);\n const anchorCenter = element.anchorCenter ?? false;\n if (Math.abs(rotation) > 1e-6 || anchorCenter) {\n this.renderer.renderResizeHandles(elementId, position, element.size, { rotation, anchorCenter });\n return;\n }\n this.renderer.renderResizeHandles(elementId, position, element.size);\n }\n\r\n private handleResizeDrag(state: Extract<DragState, { mode: 'resize' }>, point: Point): void {\n const minSize = 20;\n const origin = state.origin;\n const originX = origin.worldPosition.x;\n const originY = origin.worldPosition.y;\n const originWidth = origin.size.width;\n const originHeight = origin.size.height;\n const originRight = originX + originWidth;\n const originBottom = originY + originHeight;\n\n let localPoint = point;\n if (Math.abs(origin.rotation) > 1e-6) {\n const pivot = resolveRectRotationPivot(origin.worldPosition, origin.size, origin.anchorCenter);\n localPoint = rotatePoint(point, pivot, -origin.rotation);\n }\n\n let x = originX;\n let y = originY;\n let width = originWidth;\n let height = originHeight;\n\n switch (state.handle) {\n case 'se':\n width = Math.max(minSize, localPoint.x - originX);\n height = Math.max(minSize, localPoint.y - originY);\n break;\n case 'sw':\n width = Math.max(minSize, originRight - localPoint.x);\n x = originRight - width;\n height = Math.max(minSize, localPoint.y - originY);\n break;\n case 'ne':\n height = Math.max(minSize, originBottom - localPoint.y);\n y = originBottom - height;\n width = Math.max(minSize, localPoint.x - originX);\n break;\n case 'nw':\n width = Math.max(minSize, originRight - localPoint.x);\n height = Math.max(minSize, originBottom - localPoint.y);\n x = originRight - width;\n y = originBottom - height;\n break;\n default:\n break;\n }\n\n const normalized = this.engine.normalizeElementResize(state.elementId, { x, y, width, height }, state.handle, minSize);\n const moveTarget = origin.anchorCenter\n ? {\n x: normalized.x + normalized.width / 2,\n y: normalized.y + normalized.height / 2,\n }\n : { x: normalized.x, y: normalized.y };\n this.engine.moveElementTo(state.elementId, moveTarget.x, moveTarget.y);\n this.engine.resizeElement(state.elementId, normalized.width, normalized.height);\n this.updateSelectionOverlays();\n }\n\r\n private parseResizeHandle(id: string): { elementId: string; handle: 'nw' | 'ne' | 'sw' | 'se' } | null {\r\n const parts = id.split(':');\r\n if (parts.length !== 3 || parts[0] !== 'resize') return null;\r\n const handle = parts[2] as 'nw' | 'ne' | 'sw' | 'se';\r\n if (!['nw', 'ne', 'sw', 'se'].includes(handle)) return null;\r\n return { elementId: parts[1], handle };\r\n }\r\n\r\n private parseLinkHandle(id: string): { linkId: string; pointIndex: number } | null {\r\n const parts = id.split(':');\r\n if (parts.length !== 3 || parts[0] !== 'link-handle') return null;\r\n const index = Number(parts[2]);\r\n if (Number.isNaN(index)) return null;\r\n return { linkId: parts[1], pointIndex: index };\r\n }\r\n\r\n private getResizeCursor(handle: 'nw' | 'ne' | 'sw' | 'se'): string {\r\n if (handle === 'nw' || handle === 'se') return 'nwse-resize';\r\n return 'nesw-resize';\r\n }\r\n\r\n private normalizeRect(a: Point, b: Point): { x: number; y: number; width: number; height: number } {\r\n const x = Math.min(a.x, b.x);\r\n const y = Math.min(a.y, b.y);\r\n const width = Math.abs(a.x - b.x);\r\n const height = Math.abs(a.y - b.y);\r\n return { x, y, width, height };\r\n }\r\n\r\n private findNearestSegmentPoint(points: Point[], target: Point): { index: number; point: Point } | null {\r\n if (points.length < 2) return null;\r\n let bestIndex = 0;\r\n let bestPoint = points[0];\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n\r\n for (let i = 0; i < points.length - 1; i += 1) {\r\n const projected = this.projectPointOnSegment(target, points[i], points[i + 1]);\r\n if (projected.distance < bestDistance) {\r\n bestDistance = projected.distance;\r\n bestIndex = i;\r\n bestPoint = projected.point;\r\n }\r\n }\r\n\r\n return { index: bestIndex, point: bestPoint };\r\n }\r\n\r\n private projectPointOnSegment(point: Point, a: Point, b: Point): { point: Point; distance: number } {\r\n const dx = b.x - a.x;\r\n const dy = b.y - a.y;\r\n const len2 = dx * dx + dy * dy;\r\n if (len2 === 0) {\r\n const distance = Math.hypot(point.x - a.x, point.y - a.y);\r\n return { point: { ...a }, distance };\r\n }\r\n const t = ((point.x - a.x) * dx + (point.y - a.y) * dy) / len2;\r\n const clamped = Math.max(0, Math.min(1, t));\r\n const projected = { x: a.x + clamped * dx, y: a.y + clamped * dy };\r\n const distance = Math.hypot(point.x - projected.x, point.y - projected.y);\r\n return { point: projected, distance };\r\n }\r\n\r\n private applyMarqueeSelection(\r\n rect: { x: number; y: number; width: number; height: number },\r\n isMulti: boolean,\r\n ): void {\r\n const state = this.engine.getState();\r\n const selected = new Set<string>(isMulti ? this.engine.getSelection() : []);\r\n const containsPoint = (point: Point) =>\r\n point.x >= rect.x &&\r\n point.x <= rect.x + rect.width &&\r\n point.y >= rect.y &&\r\n point.y <= rect.y + rect.height;\r\n state.elements.forEach((element) => {\n const position = this.engine.getElementWorldPosition(element.id) ?? element.position;\n const rotation = this.engine.getElementRotation(element.id);\n const anchorCenter = element.anchorCenter ?? false;\n if (Math.abs(rotation) < 1e-6 && !anchorCenter) {\n const elementRect = { x: position.x, y: position.y, width: element.size.width, height: element.size.height };\n if (rectsIntersect(rect, elementRect)) {\n selected.add(element.id);\n }\n return;\n }\n const corners = getRotatedRectCorners(position, element.size, rotation, anchorCenter);\n if (polygonIntersectsRect([corners.nw, corners.ne, corners.se, corners.sw], rect)) {\n selected.add(element.id);\n }\n });\n state.ports.forEach((port) => {\r\n const position = this.engine.getPortWorldPosition(port.id) ?? port.position;\r\n if (containsPoint(position)) {\r\n selected.add(port.id);\r\n }\r\n });\r\n state.texts.forEach((text) => {\r\n const position = this.engine.getTextWorldPosition(text.id) ?? text.position;\r\n const width = text.size?.width ?? 0;\r\n const height = text.size?.height ?? 0;\r\n const textRect = { x: position.x, y: position.y, width, height };\r\n if (rectsIntersect(rect, textRect) || containsPoint(position)) {\r\n selected.add(text.id);\r\n }\r\n });\r\n state.links.forEach((link) => {\r\n if (link.points.length === 0) return;\r\n const xs = link.points.map((point) => point.x);\r\n const ys = link.points.map((point) => point.y);\r\n const linkRect = {\r\n x: Math.min(...xs),\r\n y: Math.min(...ys),\r\n width: Math.max(...xs) - Math.min(...xs),\r\n height: Math.max(...ys) - Math.min(...ys),\r\n };\r\n if (rectsIntersect(rect, linkRect)) {\r\n selected.add(link.id);\r\n }\r\n });\r\n this.engine.setSelection(Array.from(selected));\r\n }\r\n\r\n private applyPortConstraints(portId: string, worldTarget: Point): Point {\n const port = this.getPortById(portId);\n if (!port) return worldTarget;\n const element = this.getElementById(port.elementId);\n if (!element) return worldTarget;\n const elementPos = this.engine.getElementWorldPosition(port.elementId);\n if (!elementPos) return worldTarget;\n const relative = { x: worldTarget.x - elementPos.x, y: worldTarget.y - elementPos.y };\n const style = port.style as { moveBounds?: { x: number; y: number; width: number; height: number }; moveAxis?: 'horizontal' | 'vertical' } | undefined;\n const limits = element.portMovement?.positionLimits;\n\r\n let constrained = { ...relative };\r\n if (style?.moveAxis === 'horizontal') {\r\n constrained.y = port.position.y;\r\n } else if (style?.moveAxis === 'vertical') {\r\n constrained.x = port.position.x;\r\n }\r\n if (style?.moveBounds) {\n const bounds = style.moveBounds;\n constrained.x = Math.min(bounds.x + bounds.width, Math.max(bounds.x, constrained.x));\n constrained.y = Math.min(bounds.y + bounds.height, Math.max(bounds.y, constrained.y));\n }\n if (limits?.x) {\n if (typeof limits.x.min === 'number') constrained.x = Math.max(constrained.x, limits.x.min);\n if (typeof limits.x.max === 'number') constrained.x = Math.min(constrained.x, limits.x.max);\n }\n if (limits?.y) {\n if (typeof limits.y.min === 'number') constrained.y = Math.max(constrained.y, limits.y.min);\n if (typeof limits.y.max === 'number') constrained.y = Math.min(constrained.y, limits.y.max);\n }\n return { x: elementPos.x + constrained.x, y: elementPos.y + constrained.y };\n }\n\n private resolveLinkPreviewSource(\n sourcePortId: string,\n pointer: Point,\n hit?: HitResult | null,\n ): Point | null {\n const resolvedHit = hit ?? this.resolveHit(pointer);\n if (resolvedHit?.type === 'port' && resolvedHit.id !== sourcePortId) {\n return this.engine.getPortLinkWorldPosition(sourcePortId, { oppositePortId: resolvedHit.id });\n }\n return this.engine.getPortLinkWorldPosition(sourcePortId);\n }\n\n private resolveActiveLinkSession(): {\n sourcePortId: string;\n sourceElementId: string;\n fromProgrammatic: boolean;\n } | null {\n if (this.programmaticLinkSession) {\n return {\n sourcePortId: this.programmaticLinkSession.sourcePortId,\n sourceElementId: this.programmaticLinkSession.sourceElementId,\n fromProgrammatic: true,\n };\n }\n if (this.dragState?.mode === 'link-drag') {\n return {\n sourcePortId: this.dragState.sourcePortId,\n sourceElementId: this.dragState.sourceElementId,\n fromProgrammatic: false,\n };\n }\n return null;\n }\n\n private finishLinkDragSession(result: {\n sourcePortId: string;\n sourceElementId: string;\n createdLinkId?: string;\n targetPortId?: string;\n targetElementId?: string;\n cancelled: boolean;\n fromProgrammatic: boolean;\n }): void {\n this.linkDragContext = null;\n if (result.fromProgrammatic) {\n this.programmaticLinkSession = null;\n } else if (this.dragState?.mode === 'link-drag') {\n this.dragState = null;\n }\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n this.emitElementLinkEndedSafely({\n sourcePortId: result.sourcePortId,\n sourceElementId: result.sourceElementId,\n linkId: result.createdLinkId,\n targetPortId: result.targetPortId,\n targetElementId: result.targetElementId,\n cancelled: result.cancelled,\n });\n }\n\n private emitElementLinkEndedSafely(event: {\n sourcePortId: string;\n sourceElementId: string;\n linkId?: string;\n targetPortId?: string;\n targetElementId?: string;\n cancelled: boolean;\n }): void {\n if (this.emittingElementLinkEnded) return;\n this.emittingElementLinkEnded = true;\n try {\n this.engine.emitElementLinkEnded(event);\n } finally {\n this.emittingElementLinkEnded = false;\n }\n }\n\n private tryCreateLinkToPort(\n sourcePortId: string,\n sourceElementId: string,\n targetPortId: string,\n ): { createdLinkId: string | null; targetPortId: string; targetElementId: string | null } {\n const targetElementId = this.engine.getPortElementId(targetPortId);\n const cancelledByHost =\n targetElementId !== null &&\n this.engine.emitElementLinkConnecting({\n sourcePortId,\n sourceElementId,\n targetPortId,\n targetElementId,\n cancel: () => {},\n cancelled: false,\n });\n if (cancelledByHost || !targetElementId) {\n return { createdLinkId: null, targetPortId, targetElementId };\n }\n const createdLinkId = createId();\n this.engine.addLink({\n id: createdLinkId,\n sourcePortId,\n targetPortId,\n points: [],\n });\n return { createdLinkId, targetPortId, targetElementId };\n }\n\n private tryCreateLinkToElement(\n sourcePortId: string,\n sourceElementId: string,\n targetElementId: string,\n worldPoint: Point,\n ): { createdLinkId: string | null; targetPortId: string | null; targetElementId: string | null } {\n const targetPort = this.createPortForLink(targetElementId, worldPoint, sourcePortId);\n if (!targetPort) {\n return { createdLinkId: null, targetPortId: null, targetElementId: null };\n }\n const cancelledByHost = this.engine.emitElementLinkConnecting({\n sourcePortId,\n sourceElementId,\n targetPortId: targetPort.id,\n targetElementId,\n cancel: () => {},\n cancelled: false,\n });\n if (cancelledByHost) {\n return { createdLinkId: null, targetPortId: targetPort.id, targetElementId };\n }\n this.engine.addPortToElement(targetElementId, targetPort);\n this.engine.movePortTo(targetPort.id, worldPoint.x, worldPoint.y);\n const createdLinkId = createId();\n this.engine.addLink({\n id: createdLinkId,\n sourcePortId,\n targetPortId: targetPort.id,\n points: [],\n });\n return { createdLinkId, targetPortId: targetPort.id, targetElementId };\n }\n\n private createPortForLink(elementId: string, worldPoint: Point, sourcePortId: string): PortData | null {\n const element = this.getElementById(elementId);\n if (!element) return null;\n const elementPosition = this.engine.getElementWorldPosition(elementId) ?? element.position;\n const relative = {\n x: worldPoint.x - elementPosition.x,\n y: worldPoint.y - elementPosition.y,\r\n };\n const sourcePort = this.getPortById(sourcePortId);\n const destinationMoveMode =\n element.portMovement?.moveMode && element.portMovement.moveMode !== 'anchors'\n ? element.portMovement.moveMode\n : undefined;\n return {\n id: createId(),\n elementId,\n position: relative,\n shapeId: sourcePort?.shapeId,\n size: sourcePort?.size ? { ...sourcePort.size } : undefined,\n style: sourcePort?.style ? { ...sourcePort.style } : undefined,\n moveMode: destinationMoveMode ?? sourcePort?.moveMode,\n anchorCenter: sourcePort?.anchorCenter ?? true,\n orientToHostBorder: sourcePort?.orientToHostBorder ?? true,\n placementPoint: sourcePort?.placementPoint ? { ...sourcePort.placementPoint } : undefined,\n linkAttachPoint: sourcePort?.linkAttachPoint ? { ...sourcePort.linkAttachPoint } : undefined,\n externalLinkAttachPoint: sourcePort?.externalLinkAttachPoint ? { ...sourcePort.externalLinkAttachPoint } : undefined,\n internalLinkAttachPoint: sourcePort?.internalLinkAttachPoint ? { ...sourcePort.internalLinkAttachPoint } : undefined,\n rotationPivot: sourcePort?.rotationPivot ? { ...sourcePort.rotationPivot } : undefined,\n };\n }\n\n private createPlaceholderPort(elementId: string, worldPoint: Point, sourcePortId: string) {\n const element = this.getElementById(elementId);\n const sourcePort = this.getPortById(sourcePortId);\n const destinationMoveMode =\n element?.portMovement?.moveMode && element.portMovement.moveMode !== 'anchors'\n ? element.portMovement.moveMode\n : undefined;\n return {\n id: `port-placeholder:${sourcePortId}`,\n elementId,\n position: { x: worldPoint.x, y: worldPoint.y },\n shapeId: sourcePort?.shapeId,\n size: sourcePort?.size ? { ...sourcePort.size } : undefined,\n style: sourcePort?.style ? { ...sourcePort.style } : undefined,\n moveMode: destinationMoveMode ?? sourcePort?.moveMode,\n anchorCenter: sourcePort?.anchorCenter ?? true,\n orientToHostBorder: sourcePort?.orientToHostBorder ?? true,\n placementPoint: sourcePort?.placementPoint ? { ...sourcePort.placementPoint } : undefined,\n linkAttachPoint: sourcePort?.linkAttachPoint ? { ...sourcePort.linkAttachPoint } : undefined,\n externalLinkAttachPoint: sourcePort?.externalLinkAttachPoint ? { ...sourcePort.externalLinkAttachPoint } : undefined,\n internalLinkAttachPoint: sourcePort?.internalLinkAttachPoint ? { ...sourcePort.internalLinkAttachPoint } : undefined,\n rotationPivot: sourcePort?.rotationPivot ? { ...sourcePort.rotationPivot } : undefined,\n };\n }\n\r\n private getElementById(id: string) {\r\n return this.engine.getState().elements.find((element) => element.id === id);\r\n }\r\n\r\n private getPortById(id: string) {\r\n return this.engine.getState().ports.find((port) => port.id === id);\r\n }\r\n\r\n private getTextById(id: string) {\r\n return this.engine.getState().texts.find((text) => text.id === id);\r\n }\r\n\r\n private getLinkById(id: string): LinkData | undefined {\r\n return this.engine.getState().links.find((link) => link.id === id);\r\n }\r\n\r\n private resolveTextScreenPosition(textId: string, fallbackPosition: Point): Point {\r\n const world = this.engine.getTextWorldPosition(textId) ?? fallbackPosition;\r\n return {\r\n x: world.x * this.zoom + this.pan.x,\r\n y: world.y * this.zoom + this.pan.y,\r\n };\r\n }\r\n\r\n private applyViewportPatch(patches: { entity: string; payload?: Record<string, unknown> }[]): void {\r\n const viewportPatch = patches.find((patch) => patch.entity === 'viewport');\r\n if (!viewportPatch?.payload) return;\r\n const pan = viewportPatch.payload.pan as Point | undefined;\r\n const zoom = viewportPatch.payload.zoom as number | undefined;\r\n if (!pan || typeof zoom !== 'number') return;\r\n if (pan.x === this.pan.x && pan.y === this.pan.y && zoom === this.zoom) return;\r\n this.pan = { ...pan };\r\n this.zoom = zoom;\r\n this.applyStageTransform();\r\n }\r\n\r\n private applyStageTransform(): void {\r\n const stageAny = this.stage as unknown as {\r\n scale?: (value: { x: number; y: number }) => void;\r\n position?: (value: Point) => void;\r\n };\r\n stageAny?.scale?.({ x: this.zoom, y: this.zoom });\r\n stageAny?.position?.(this.pan);\r\n }\r\n\r\n private cancelLinkDrag(): void {\n if (this.dragState?.mode === 'shape-control-drag') {\n const dragState = this.dragState;\n const point = this.lastPointerPosition ?? dragState.start;\n this.dragState = null;\n if (dragState.hasMoved) {\n this.emitShapeHoverControlInteraction('drag-end', dragState.control, point, undefined, {\n sessionId: dragState.sessionId,\n startPointer: dragState.startPointer,\n delta: {\n x: point.x - dragState.start.x,\n y: point.y - dragState.start.y,\n },\n });\n }\n if (this.programmaticLinkSession) {\n const session = this.programmaticLinkSession;\n this.programmaticLinkSession = null;\n this.linkDragContext = null;\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.emitElementLinkEndedSafely({\n sourcePortId: session.sourcePortId,\n sourceElementId: session.sourceElementId,\n cancelled: true,\n });\n }\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n return;\n }\n if (this.programmaticLinkSession) {\n const session = this.programmaticLinkSession;\n this.programmaticLinkSession = null;\n this.linkDragContext = null;\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.emitElementLinkEndedSafely({\n sourcePortId: session.sourcePortId,\n sourceElementId: session.sourceElementId,\n cancelled: true,\n });\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n return;\n }\n if (!this.dragState || this.dragState.mode !== 'link-drag') {\n if (this.linkDragContext) {\n const context = this.linkDragContext;\n this.linkDragContext = null;\n this.emitElementLinkEndedSafely({\n ...context,\n cancelled: true,\n });\n }\n return;\n }\n const linkState = this.dragState;\n const point = linkState.current ?? linkState.start;\n const pointerInfo = this.buildPointerInfo(point, null);\n this.engine.emitPortMouseUp({\n portId: linkState.sourcePortId,\n elementId: linkState.sourceElementId,\n pointer: pointerInfo,\n });\n this.dragState = null;\n this.linkDragContext = null;\n this.renderer?.clearTempLink();\n this.renderer?.clearPortPlaceholder?.();\n this.emitElementLinkEndedSafely({\n sourcePortId: linkState.sourcePortId,\n sourceElementId: linkState.sourceElementId,\n cancelled: true,\n });\n this.clearActiveShapeHoverControl();\n this.setCursor('default');\n }\n\r\n private isEditableTarget(target: EventTarget | null): boolean {\r\n if (!target || !(target instanceof HTMLElement)) return false;\r\n if (target.isContentEditable) return true;\r\n const tag = target.tagName.toLowerCase();\r\n return tag === 'input' || tag === 'textarea' || tag === 'select';\r\n }\r\n\r\n private isPanKeyPressed(event: MouseEvent | PointerEvent): boolean {\r\n switch (this.panKey) {\r\n case 'Shift':\r\n return event.shiftKey;\r\n case 'Alt':\r\n return event.altKey;\r\n case 'Meta':\r\n return event.metaKey;\r\n case 'Control':\r\n default:\r\n return event.ctrlKey;\r\n }\r\n }\r\n}\r\n","import {\n EllipseMidPoint,\n Point,\n PortBorderTransformContext,\n PortBorderTransformResult,\n PortAnchor,\n Rect,\n ResolvePortAnchorsOptions,\n ShapeEdgeTarget,\n ShapeEllipseMidPointTarget,\n ShapeHoverGeometry,\n ShapeVertexTarget,\n} from '../api/types';\nimport { ShapeNodeSizeUpdater, ShapeResizeNormalizeContext } from '../renderer/RenderTypes';\nimport { BorderSide, projectPointToBoundary, resolveBoundarySide } from '../utils/borderGeometry';\n\nexport type BuiltInShapeKind =\n | 'rect'\n | 'circle'\n | 'ellipse'\n | 'diamond'\n | 'triangle'\n | 'pentagon'\n | 'hexagon';\n\nexport type ShapeNodeModel = {\n id: string;\n position: { x: number; y: number };\n size?: { width?: number; height?: number };\n style?: Record<string, unknown>;\n anchorCenter?: boolean;\n};\n\nexport type KonvaShapeLibraryLike = {\n Rect: new (config: Record<string, unknown>) => unknown;\n Circle: new (config: Record<string, unknown>) => unknown;\n Ellipse: new (config: Record<string, unknown>) => unknown;\n Line: new (config: Record<string, unknown>) => unknown;\n};\n\nexport type ShapeCreateContext = {\n Konva: KonvaShapeLibraryLike;\n model: ShapeNodeModel;\n isPort: boolean;\n anchorCenter: boolean;\n};\n\ntype ShapeLibraryConfig = {\n id: string;\n kind: BuiltInShapeKind;\n style?: Record<string, unknown>;\n};\n\nconst resolveModelSize = (\n model: ShapeNodeModel,\n defaults: { width: number; height: number },\n): { width: number; height: number } => ({\n width: model.size?.width ?? defaults.width,\n height: model.size?.height ?? defaults.height,\n});\n\nconst resolveShapeName = (style: Record<string, unknown> | undefined, isPort: boolean): string =>\n (style?.name as string | undefined) ?? (isPort ? 'port' : 'element');\n\nconst splitStyleRotation = (\n style: Record<string, unknown> | undefined,\n): { style: Record<string, unknown> | undefined; rotation: number } => {\n if (!style) return { style: undefined, rotation: 0 };\n const { rotation, ...rest } = style;\n return {\n style: rest,\n rotation: typeof rotation === 'number' ? rotation : 0,\n };\n};\n\nconst createRectSizeUpdater = (): ShapeNodeSizeUpdater => ({ size, anchorCenter, updateOffsetX, updateOffsetY }) => {\n const attrs: Record<string, unknown> = {};\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? size.width / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? size.height / 2 : 0;\n }\n return attrs;\n};\n\nconst createCircleSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const autoRadius = getNodeAttr<boolean>('__autoRadius');\n const computedRadius = Math.min(size.width, size.height) / 2;\n const resolvedRadius =\n autoRadius === false ? (getNodeAttr<number>('radius') ?? computedRadius) : computedRadius;\n if (autoRadius !== false) {\n attrs.radius = computedRadius;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? 0 : -resolvedRadius;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? 0 : -resolvedRadius;\n }\n return attrs;\n};\n\nconst createEllipseSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const radiusX = Math.max(0, size.width / 2);\n const radiusY = Math.max(0, size.height / 2);\n const autoRadiusX = getNodeAttr<boolean>('__autoRadiusX');\n const autoRadiusY = getNodeAttr<boolean>('__autoRadiusY');\n const resolvedRadiusX = autoRadiusX === false ? (getNodeAttr<number>('radiusX') ?? radiusX) : radiusX;\n const resolvedRadiusY = autoRadiusY === false ? (getNodeAttr<number>('radiusY') ?? radiusY) : radiusY;\n if (autoRadiusX !== false) {\n attrs.radiusX = radiusX;\n }\n if (autoRadiusY !== false) {\n attrs.radiusY = radiusY;\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? 0 : -resolvedRadiusX;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? 0 : -resolvedRadiusY;\n }\n return attrs;\n};\n\nconst createPolygonSizeUpdater = (): ShapeNodeSizeUpdater => ({\n size,\n anchorCenter,\n updateOffsetX,\n updateOffsetY,\n getNodeAttr,\n}) => {\n const attrs: Record<string, unknown> = {};\n const autoPoints = getNodeAttr<boolean>('__autoPoints');\n const edgeCount = Math.max(3, getNodeAttr<number>('__edgeCount') ?? 3);\n if (autoPoints !== false) {\n attrs.points = resolveRegularPolygonPoints(size, edgeCount);\n }\n if (updateOffsetX) {\n attrs.offsetX = anchorCenter ? size.width / 2 : 0;\n }\n if (updateOffsetY) {\n attrs.offsetY = anchorCenter ? size.height / 2 : 0;\n }\n return attrs;\n};\n\nconst resolveRegularPolygonPoints = (\n size: { width: number; height: number },\n sides: number,\n baseRotation = 0,\n): number[] => {\n const cx = size.width / 2;\n const cy = size.height / 2;\n const rx = size.width / 2;\n const ry = size.height / 2;\n const baseRadians = (baseRotation * Math.PI) / 180;\n const points: number[] = [];\n for (let i = 0; i < sides; i += 1) {\n const angle = -Math.PI / 2 + baseRadians + (i * Math.PI * 2) / sides;\n points.push(cx + rx * Math.cos(angle), cy + ry * Math.sin(angle));\n }\n return points;\n};\n\nconst projectPointToSegment = (\n point: { x: number; y: number },\n start: { x: number; y: number },\n end: { x: number; y: number },\n): { x: number; y: number } => {\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const lengthSquared = dx * dx + dy * dy;\n if (lengthSquared <= 1e-6) return { x: start.x, y: start.y };\n const t = ((point.x - start.x) * dx + (point.y - start.y) * dy) / lengthSquared;\n const clamped = Math.max(0, Math.min(1, t));\n return { x: start.x + dx * clamped, y: start.y + dy * clamped };\n};\n\nconst resolveDirectionalRectSide = (point: Point, rect: Rect): BorderSide => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const rx = rect.width / 2;\n const ry = rect.height / 2;\n if (rx <= 0 || ry <= 0) return 'top';\n const nx = (point.x - cx) / rx;\n const ny = (point.y - cy) / ry;\n if (Math.abs(nx) < 1e-6 && Math.abs(ny) < 1e-6) return 'top';\n if (Math.abs(nx) >= Math.abs(ny)) return nx < 0 ? 'left' : 'right';\n return ny < 0 ? 'top' : 'bottom';\n};\n\nconst projectPointToCircleBorder = (point: Point, rect: Rect): Point => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const radius = Math.min(rect.width, rect.height) / 2;\n if (radius <= 0) return { x: cx, y: cy };\n const dx = point.x - cx;\n const dy = point.y - cy;\n if (Math.abs(dx) < 1e-6 && Math.abs(dy) < 1e-6) {\n return { x: cx, y: cy - radius };\n }\n const scale = radius / Math.sqrt(dx * dx + dy * dy);\n return { x: cx + dx * scale, y: cy + dy * scale };\n};\n\nconst projectPointToPolygonBorder = (\n point: Point,\n rect: Rect,\n resolvePoints: (size: { width: number; height: number }) => number[],\n): Point => {\n const localPoints = resolvePoints({ width: Math.max(0, rect.width), height: Math.max(0, rect.height) });\n if (localPoints.length < 6) {\n return { x: rect.x, y: rect.y };\n }\n\n const vertices: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < localPoints.length; i += 2) {\n vertices.push({ x: rect.x + localPoints[i], y: rect.y + localPoints[i + 1] });\n }\n\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const dx = point.x - cx;\n const dy = point.y - cy;\n\n let bestRayT = Number.POSITIVE_INFINITY;\n let bestRayPoint: Point | null = null;\n for (let i = 0; i < vertices.length; i += 1) {\n const start = vertices[i];\n const end = vertices[(i + 1) % vertices.length];\n const edgeDx = end.x - start.x;\n const edgeDy = end.y - start.y;\n const denom = dx * edgeDy - dy * edgeDx;\n if (Math.abs(denom) < 1e-6) continue;\n const fromCenterX = start.x - cx;\n const fromCenterY = start.y - cy;\n const rayT = (fromCenterX * edgeDy - fromCenterY * edgeDx) / denom;\n const edgeT = (fromCenterX * dy - fromCenterY * dx) / denom;\n if (rayT >= 0 && edgeT >= 0 && edgeT <= 1 && rayT < bestRayT) {\n bestRayT = rayT;\n bestRayPoint = { x: cx + dx * rayT, y: cy + dy * rayT };\n }\n }\n if (bestRayPoint) return bestRayPoint;\n\n let nearest = vertices[0];\n let nearestDistanceSquared = Number.POSITIVE_INFINITY;\n for (let i = 0; i < vertices.length; i += 1) {\n const start = vertices[i];\n const end = vertices[(i + 1) % vertices.length];\n const projected = projectPointToSegment(point, start, end);\n const diffX = projected.x - point.x;\n const diffY = projected.y - point.y;\n const distanceSquared = diffX * diffX + diffY * diffY;\n if (distanceSquared < nearestDistanceSquared) {\n nearestDistanceSquared = distanceSquared;\n nearest = projected;\n }\n }\n return nearest;\n};\n\nconst normalizeVector = (vector: Point): Point => {\n const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);\n if (length <= 1e-6) return { x: 0, y: -1 };\n return { x: vector.x / length, y: vector.y / length };\n};\n\nconst sideToNormal = (side: BorderSide): Point => {\n if (side === 'left') return { x: -1, y: 0 };\n if (side === 'right') return { x: 1, y: 0 };\n if (side === 'top') return { x: 0, y: -1 };\n return { x: 0, y: 1 };\n};\n\nconst resolveCardinalAnchors = (rect: Rect): PortAnchor[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n { id: 'top', position: { x: cx, y: rect.y }, side: 'top', normal: { x: 0, y: -1 } },\n { id: 'right', position: { x: rect.x + rect.width, y: cy }, side: 'right', normal: { x: 1, y: 0 } },\n { id: 'bottom', position: { x: cx, y: rect.y + rect.height }, side: 'bottom', normal: { x: 0, y: 1 } },\n { id: 'left', position: { x: rect.x, y: cy }, side: 'left', normal: { x: -1, y: 0 } },\n ];\n};\n\nconst createEllipseMidPointTarget = (\n ellipseMidPoint: EllipseMidPoint,\n position: Point,\n): ShapeEllipseMidPointTarget => ({\n id: ellipseMidPoint,\n ellipseMidPoint,\n position,\n});\n\nconst resolveEllipseMidPoints = (rect: Rect): ShapeEllipseMidPointTarget[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n createEllipseMidPointTarget(EllipseMidPoint.top, { x: cx, y: rect.y }),\n createEllipseMidPointTarget(EllipseMidPoint.right, { x: rect.x + rect.width, y: cy }),\n createEllipseMidPointTarget(EllipseMidPoint.bottom, { x: cx, y: rect.y + rect.height }),\n createEllipseMidPointTarget(EllipseMidPoint.left, { x: rect.x, y: cy }),\n ];\n};\n\nconst resolveCircleMidPoints = (rect: Rect): ShapeEllipseMidPointTarget[] => {\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n const radius = Math.max(0, Math.min(rect.width, rect.height) / 2);\n return [\n createEllipseMidPointTarget(EllipseMidPoint.top, { x: cx, y: cy - radius }),\n createEllipseMidPointTarget(EllipseMidPoint.right, { x: cx + radius, y: cy }),\n createEllipseMidPointTarget(EllipseMidPoint.bottom, { x: cx, y: cy + radius }),\n createEllipseMidPointTarget(EllipseMidPoint.left, { x: cx - radius, y: cy }),\n ];\n};\n\nconst resolveRegularPolygonVertices = (\n rect: Rect,\n edgeCount: number,\n): Point[] => {\n const points = resolveRegularPolygonPoints(\n { width: Math.max(0, rect.width), height: Math.max(0, rect.height) },\n edgeCount,\n );\n const vertices: Point[] = [];\n for (let i = 0; i < points.length; i += 2) {\n vertices.push({ x: rect.x + points[i], y: rect.y + points[i + 1] });\n }\n return vertices;\n};\n\nconst createHoverGeometryFromVertices = (vertices: Point[]): ShapeHoverGeometry => {\n const shapeVertices: ShapeVertexTarget[] = vertices.map((position, index) => ({\n id: `v${index}`,\n position,\n }));\n const edges: ShapeEdgeTarget[] = shapeVertices.map((vertex, index) => {\n const next = shapeVertices[(index + 1) % shapeVertices.length];\n const midpoint = {\n x: (vertex.position.x + next.position.x) / 2,\n y: (vertex.position.y + next.position.y) / 2,\n };\n return {\n id: `e${index}`,\n start: vertex.position,\n end: next.position,\n midpoint,\n };\n });\n return { vertices: shapeVertices, edges };\n};\n\nexport abstract class BuiltInShape {\n readonly id: string;\n readonly style?: Record<string, unknown>;\n readonly renderStyle?: Record<string, unknown>;\n readonly baseRotation: number;\n abstract readonly sizeUpdater: ShapeNodeSizeUpdater;\n normalizeResize?: (context: ShapeResizeNormalizeContext) => { width: number; height: number };\n\n constructor(id: string, style?: Record<string, unknown>, presetBaseRotation = 0) {\n this.id = id;\n this.style = style;\n const split = splitStyleRotation(style);\n this.renderStyle = split.style;\n this.baseRotation = presetBaseRotation + split.rotation;\n }\n\n abstract createNode(context: ShapeCreateContext): unknown;\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToBoundary(point, rect, 'rect');\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n return resolveBoundarySide(point, rect, 'rect');\n }\n\n resolveBorderNormal(point: Point, rect: Rect): Point {\n return sideToNormal(this.resolveBorderSide(point, rect));\n }\n\n resolvePortAnchors(_rect: Rect, _options: ResolvePortAnchorsOptions): PortAnchor[] {\n return [];\n }\n\n resolvePortBorderTransform(\n _context: PortBorderTransformContext,\n ): PortBorderTransformResult | undefined {\n return undefined;\n }\n\n resolveHoverGeometry(_rect: Rect): ShapeHoverGeometry | undefined {\n return undefined;\n }\n\n resolveEllipseMidPoints(_rect: Rect): ShapeEllipseMidPointTarget[] | undefined {\n return undefined;\n }\n\n protected resolveShapeName(isPort: boolean): string {\n return resolveShapeName(this.style, isPort);\n }\n}\n\nexport class RectangleShape extends BuiltInShape {\n readonly sizeUpdater = createRectSizeUpdater();\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, { width: 160, height: 100 });\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? size.width / 2 : 0);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? size.height / 2 : 0);\n return new Konva.Rect({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n width: size.width,\n height: size.height,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'vertices') return [];\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return [\n { id: 'top-left', position: { x: rect.x, y: rect.y } },\n { id: 'top-right', position: { x: rect.x + rect.width, y: rect.y } },\n { id: 'bottom-right', position: { x: rect.x + rect.width, y: rect.y + rect.height } },\n { id: 'bottom-left', position: { x: rect.x, y: rect.y + rect.height } },\n ].map((anchor) => ({\n ...anchor,\n side: resolveDirectionalRectSide(anchor.position, rect),\n normal: normalizeVector({ x: anchor.position.x - cx, y: anchor.position.y - cy }),\n }));\n }\n\n resolveHoverGeometry(rect: Rect): ShapeHoverGeometry {\n const vertices = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n return createHoverGeometryFromVertices(vertices);\n }\n}\n\nexport class EllipseShape extends BuiltInShape {\n readonly sizeUpdater = createEllipseSizeUpdater();\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, { width: 160, height: 100 });\n const radiusX = size.width / 2;\n const radiusY = size.height / 2;\n const hasRadiusX = typeof this.style?.radiusX === 'number';\n const hasRadiusY = typeof this.style?.radiusY === 'number';\n const resolvedRadiusX = (this.style?.radiusX as number | undefined) ?? radiusX;\n const resolvedRadiusY = (this.style?.radiusY as number | undefined) ?? radiusY;\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? 0 : -resolvedRadiusX);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? 0 : -resolvedRadiusY);\n return new Konva.Ellipse({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n radiusX: resolvedRadiusX,\n radiusY: resolvedRadiusY,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoRadiusX: !hasRadiusX,\n __autoRadiusY: !hasRadiusY,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToBoundary(point, rect, 'ellipse');\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n return resolveBoundarySide(point, rect, 'ellipse');\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'cardinal') return [];\n return resolveCardinalAnchors(rect);\n }\n\n resolveEllipseMidPoints(rect: Rect): ShapeEllipseMidPointTarget[] {\n return resolveEllipseMidPoints(rect);\n }\n}\n\nexport class CircleShape extends BuiltInShape {\n readonly sizeUpdater = createCircleSizeUpdater();\n normalizeResize = ({ proposal, minSize }: ShapeResizeNormalizeContext): { width: number; height: number } => {\n const side = Math.max(minSize, proposal.width, proposal.height);\n return { width: side, height: side };\n };\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = model.size;\n const hasSize = Boolean(size?.width && size?.height);\n const hasRadius = typeof this.style?.radius === 'number';\n const radius =\n (this.style?.radius as number | undefined) ??\n (hasSize ? Math.min(size?.width ?? 8, size?.height ?? 8) / 2 : 4);\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? 0 : -radius);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? 0 : -radius);\n return new Konva.Circle({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n radius,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoRadius: !hasRadius,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToCircleBorder(point, rect);\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n const projected = projectPointToCircleBorder(point, rect);\n return resolveDirectionalRectSide(projected, rect);\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'cardinal') return [];\n return resolveCardinalAnchors(rect);\n }\n\n resolveEllipseMidPoints(rect: Rect): ShapeEllipseMidPointTarget[] {\n return resolveCircleMidPoints(rect);\n }\n}\n\nexport class PolygonShape extends BuiltInShape {\n readonly sizeUpdater = createPolygonSizeUpdater();\n readonly edgeCount: number;\n private readonly defaults: { width: number; height: number };\n\n constructor(\n id: string,\n style: Record<string, unknown> | undefined,\n edgeCount: number,\n defaults: { width: number; height: number },\n presetBaseRotation = 0,\n ) {\n super(id, style, presetBaseRotation);\n this.edgeCount = Math.max(3, edgeCount);\n this.defaults = defaults;\n }\n\n createNode({ Konva, model, isPort, anchorCenter }: ShapeCreateContext): unknown {\n const size = resolveModelSize(model, this.defaults);\n const hasOffsetX = this.style?.offsetX !== undefined;\n const hasOffsetY = this.style?.offsetY !== undefined;\n const offsetX = (this.style?.offsetX as number | undefined) ?? (anchorCenter ? size.width / 2 : 0);\n const offsetY = (this.style?.offsetY as number | undefined) ?? (anchorCenter ? size.height / 2 : 0);\n return new Konva.Line({\n id: model.id,\n x: model.position.x,\n y: model.position.y,\n points: resolveRegularPolygonPoints(size, this.edgeCount),\n closed: true,\n offsetX,\n offsetY,\n rotation: this.baseRotation,\n ...(this.renderStyle ?? {}),\n name: this.resolveShapeName(isPort),\n __autoPoints: true,\n __autoOffsetX: !hasOffsetX,\n __autoOffsetY: !hasOffsetY,\n __edgeCount: this.edgeCount,\n });\n }\n\n projectToBorder(point: Point, rect: Rect): Point {\n return projectPointToPolygonBorder(point, rect, (size) =>\n resolveRegularPolygonPoints(size, this.edgeCount),\n );\n }\n\n resolveBorderSide(point: Point, rect: Rect): BorderSide {\n const projected = this.projectToBorder(point, rect);\n return resolveDirectionalRectSide(projected, rect);\n }\n\n resolvePortAnchors(rect: Rect, options: ResolvePortAnchorsOptions): PortAnchor[] {\n if (options.preset !== 'vertices') return [];\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n return resolveRegularPolygonVertices(rect, this.edgeCount).map((position, index) => ({\n id: `v${index}`,\n position,\n side: resolveDirectionalRectSide(position, rect),\n normal: normalizeVector({ x: position.x - cx, y: position.y - cy }),\n }));\n }\n\n resolveHoverGeometry(rect: Rect): ShapeHoverGeometry {\n return createHoverGeometryFromVertices(resolveRegularPolygonVertices(rect, this.edgeCount));\n }\n}\n\nexport class DiamondShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 4, { width: 120, height: 80 });\n }\n}\n\nexport class TriangleShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 3, { width: 120, height: 80 });\n }\n}\n\nexport class PentagonShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 5, { width: 150, height: 130 });\n }\n}\n\nexport class HexagonShape extends PolygonShape {\n constructor(id: string, style?: Record<string, unknown>) {\n super(id, style, 6, { width: 170, height: 120 });\n }\n}\n\nexport const createBuiltInShape = (config: ShapeLibraryConfig): BuiltInShape => {\n if (config.kind === 'circle') return new CircleShape(config.id, config.style);\n if (config.kind === 'ellipse') return new EllipseShape(config.id, config.style);\n if (config.kind === 'diamond') return new DiamondShape(config.id, config.style);\n if (config.kind === 'triangle') return new TriangleShape(config.id, config.style);\n if (config.kind === 'pentagon') return new PentagonShape(config.id, config.style);\n if (config.kind === 'hexagon') return new HexagonShape(config.id, config.style);\n return new RectangleShape(config.id, config.style);\n};\n","import {\n DiagramEngineHandle,\n Point,\n DiagramState,\n ElementShapeHoverControlActivationEvent,\n ElementShapeHoverControlInteractionEvent,\n ElementShapeHoverControls,\n EngineChangeEvent,\n EngineSelectionEvent,\n LinkRoutingMode,\n} from './types';\nimport DiagramEngine from '../engine/DiagramEngine';\r\nimport KonvaRenderer from '../renderer/konva/KonvaRenderer';\r\nimport KonvaInteraction from '../renderer/konva/KonvaInteraction';\nimport KonvaHitTester from '../renderer/konva/KonvaHitTester';\nimport type { HitResult } from '../renderer/konva/KonvaHitTester';\nimport { ShapeDefinition, ShapeRegistry } from '../renderer/RenderTypes';\nimport { RouterStrategy } from '../strategies/RouterStrategy';\nimport { SnapStrategy } from '../strategies/SnapStrategy';\nimport { createBuiltInShape, type BuiltInShapeKind, type ShapeNodeModel } from '../shapes';\n\r\ntype KonvaEditorLike = {\n Stage: new (config: { container: HTMLDivElement | string; width: number; height: number }) => {\n width: (value?: number) => number;\r\n height: (value?: number) => number;\r\n add: (layer: unknown) => void;\r\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n off?: (event: string, handler: (...args: unknown[]) => void) => void;\r\n getPointerPosition?: () => { x: number; y: number } | null;\r\n getIntersection: (pos: { x: number; y: number }) => unknown;\r\n getAllIntersections?: (pos: { x: number; y: number }) => unknown[];\n toDataURL?: (config?: {\n mimeType?: string;\n quality?: number;\n pixelRatio?: number;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n }) => string;\n container?: HTMLDivElement | (() => HTMLDivElement);\n getAbsoluteTransform?: () => { copy?: () => { invert?: () => void; point: (pos: { x: number; y: number }) => { x: number; y: number } }; point?: (pos: { x: number; y: number }) => { x: number; y: number } };\r\n destroy: () => void;\r\n };\r\n Rect: new (config: Record<string, unknown>) => unknown;\n Circle: new (config: Record<string, unknown>) => unknown;\n Ellipse: new (config: Record<string, unknown>) => unknown;\n Line: new (config: Record<string, unknown>) => unknown;\n};\n\r\nconst getKonva = (): KonvaEditorLike => {\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const module = require('konva') as { default?: KonvaEditorLike } | KonvaEditorLike;\r\n return (module as { default?: KonvaEditorLike }).default ?? (module as KonvaEditorLike);\r\n};\r\n\r\nexport type SimpleShape = {\n id: string;\n kind: BuiltInShapeKind;\n style?: Record<string, unknown>;\n};\n\r\nexport type DiagramEditorConfig = {\n container: HTMLDivElement | string;\n width?: number;\n height?: number;\n initialState?: DiagramState;\r\n elementShapes?: SimpleShape[];\r\n portShapes?: SimpleShape[];\r\n panKey?: 'Control' | 'Shift' | 'Alt' | 'Meta';\n elementShapeHoverControls?: ElementShapeHoverControls;\n onElementShapeHoverControlInteraction?: (event: ElementShapeHoverControlInteractionEvent) => void;\n onElementShapeHoverControlActivated?: (event: ElementShapeHoverControlActivationEvent) => void;\n onChange?: (event: EngineChangeEvent) => void;\n onSelection?: (event: EngineSelectionEvent) => void;\n};\n\nexport type DiagramImageExportOptions = {\n mimeType?: string;\n quality?: number;\n pixelRatio?: number;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n fitToContent?: boolean | {\n padding?: number;\n };\n};\n\nexport type DiagramEditorHandle = DiagramEngineHandle & {\n startLinkFromPort: (sourcePortId: string, pointer?: Point) => void;\n updateLinkPreview: (pointer: Point) => void;\n completeLinkToPort: (targetPortId: string) => void;\n completeLinkToElement: (targetElementId: string, pointer: Point) => void;\n cancelLink: () => void;\n exportImage: (options?: DiagramImageExportOptions) => string;\n resize: (width: number, height: number) => void;\n setElementShapeHoverControls: (controls?: ElementShapeHoverControls) => void;\n destroy: () => void;\n};\n\r\ntype KonvaHitNode = {\n id?: () => string;\n name?: () => string;\n getAttr?: (key: string) => unknown;\n};\n\ntype KonvaNodeAttrLike = {\n setAttrs?: (attrs: Record<string, unknown>) => void;\n getAttr?: (key: string) => unknown;\n attrs?: Record<string, unknown>;\n};\n\ntype DiagramBounds = {\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n};\n\nconst createBounds = (): DiagramBounds => ({\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n});\n\nconst expandBounds = (bounds: DiagramBounds, x: number, y: number): void => {\n if (x < bounds.minX) bounds.minX = x;\n if (y < bounds.minY) bounds.minY = y;\n if (x > bounds.maxX) bounds.maxX = x;\n if (y > bounds.maxY) bounds.maxY = y;\n};\n\nconst includeRect = (\n bounds: DiagramBounds,\n x: number,\n y: number,\n width: number,\n height: number,\n): void => {\n const safeWidth = Math.max(0, width);\n const safeHeight = Math.max(0, height);\n expandBounds(bounds, x, y);\n expandBounds(bounds, x + safeWidth, y + safeHeight);\n};\n\nconst hasBounds = (bounds: DiagramBounds): boolean =>\n Number.isFinite(bounds.minX) &&\n Number.isFinite(bounds.minY) &&\n Number.isFinite(bounds.maxX) &&\n Number.isFinite(bounds.maxY) &&\n bounds.maxX >= bounds.minX &&\n bounds.maxY >= bounds.minY;\n\nconst resolveStateWorldBounds = (state: DiagramState): DiagramBounds | null => {\n const bounds = createBounds();\n\n state.elements.forEach((element) => {\n includeRect(bounds, element.position.x, element.position.y, element.size.width, element.size.height);\n });\n\n state.ports.forEach((port) => {\n const size = port.size;\n if (!size) {\n expandBounds(bounds, port.position.x, port.position.y);\n return;\n }\n const anchorCenter = port.anchorCenter ?? true;\n const x = anchorCenter ? port.position.x - size.width / 2 : port.position.x;\n const y = anchorCenter ? port.position.y - size.height / 2 : port.position.y;\n includeRect(bounds, x, y, size.width, size.height);\n });\n\n state.links.forEach((link) => {\n link.points.forEach((point) => {\n expandBounds(bounds, point.x, point.y);\n });\n });\n\n state.texts.forEach((text) => {\n const offset = text.displayOffset ?? { x: 0, y: 0 };\n const position: Point = { x: text.position.x + offset.x, y: text.position.y + offset.y };\n const clipSize = text.displayClipSize;\n const size = clipSize ?? text.size;\n if (size) {\n includeRect(bounds, position.x, position.y, size.width, size.height);\n return;\n }\n expandBounds(bounds, position.x, position.y);\n });\n\n return hasBounds(bounds) ? bounds : null;\n};\n\nconst resolveFitToContentPadding = (\n fitToContent: NonNullable<DiagramImageExportOptions['fitToContent']>,\n): number => {\n if (typeof fitToContent === 'object' && typeof fitToContent.padding === 'number') {\n return Math.max(0, fitToContent.padding);\n }\n return 0;\n};\n\nconst getNodeAttr = <T = unknown>(node: KonvaNodeAttrLike, key: string): T | undefined => {\n if (node.getAttr) {\n return node.getAttr(key) as T | undefined;\n }\n return node.attrs ? (node.attrs[key] as T | undefined) : undefined;\n};\n\nconst applyInstanceStyle = (node: unknown, style: Record<string, unknown> | undefined): void => {\n if (!style) return;\n const target = node as KonvaNodeAttrLike;\n if (!target.setAttrs) return;\n const attrs = { ...style };\n if (typeof style.rotation === 'number') {\n const baseRotation = getNodeAttr<number>(target, 'rotation') ?? 0;\n attrs.rotation = baseRotation + style.rotation;\n }\n target.setAttrs(attrs);\n};\n\nconst registerSimpleShapes = (\n registry: ShapeRegistry,\n shapes: SimpleShape[] | undefined,\n isPort: boolean,\n): void => {\n if (!shapes) return;\n shapes.forEach((shape) => {\n const behavior = createBuiltInShape({\n id: shape.id,\n kind: shape.kind,\n style: shape.style,\n });\n const definition: ShapeDefinition = {\n id: shape.id,\n baseRotation: behavior.baseRotation,\n sizeUpdater: behavior.sizeUpdater,\n normalizeResize: behavior.normalizeResize\n ? (context) => (behavior.normalizeResize as NonNullable<typeof behavior.normalizeResize>)(context)\n : undefined,\n projectToBorder: (point, rect) => behavior.projectToBorder(point, rect),\n resolveBorderSide: (point, rect) => behavior.resolveBorderSide(point, rect),\n resolveBorderNormal: behavior.resolveBorderNormal\n ? (point, rect) => behavior.resolveBorderNormal!(point, rect)\n : undefined,\n resolvePortAnchors: (rect, options) => behavior.resolvePortAnchors(rect, options),\n resolvePortBorderTransform: behavior.resolvePortBorderTransform\n ? (context) => behavior.resolvePortBorderTransform!(context)\n : undefined,\n resolveHoverGeometry: (rect) => behavior.resolveHoverGeometry(rect),\n resolveEllipseMidPoints: (rect) => behavior.resolveEllipseMidPoints(rect),\n createNode: (model) => {\n const Konva = getKonva();\n const anchorCenter = isPort\n ? (model as { anchorCenter?: boolean }).anchorCenter ?? true\n : false;\n const node = behavior.createNode({\n Konva,\n model: model as ShapeNodeModel,\n isPort,\n anchorCenter,\n });\n applyInstanceStyle(node, (model as { style?: Record<string, unknown> }).style);\n return node;\n },\n };\n registry.register(definition);\n });\n};\n\r\nexport const createDiagramEditor = (config: DiagramEditorConfig): DiagramEditorHandle => {\r\n const Konva = getKonva();\r\n const stage = new Konva.Stage({\r\n container: config.container,\r\n width: config.width ?? 900,\r\n height: config.height ?? 560,\r\n });\r\n const stageContainer =\r\n typeof stage.container === 'function' ? stage.container() : (stage.container as HTMLDivElement | undefined);\r\n if (stageContainer && stageContainer.tabIndex < 0) {\r\n stageContainer.tabIndex = 0;\r\n }\r\n\r\n const shapeRegistry = new ShapeRegistry();\r\n registerSimpleShapes(shapeRegistry, config.elementShapes, false);\r\n registerSimpleShapes(shapeRegistry, config.portShapes, true);\r\n\r\n const renderer = new KonvaRenderer({ stage, konva: Konva as unknown as any, shapeRegistry });\r\n const engine = new DiagramEngine({ renderer, shapeRegistry });\r\n\r\n if (config.onChange) {\r\n engine.on('change', config.onChange);\r\n }\r\n if (config.onSelection) {\r\n engine.on('selection', config.onSelection);\r\n }\r\n\r\n const resolveHit = (node: KonvaHitNode | null): HitResult | null => {\r\n if (!node) return null;\r\n const id = node.id ? node.id() : (node.getAttr?.('id') as string) ?? '';\r\n const rawName = node.name ? node.name() : (node.getAttr?.('name') as string) ?? 'element';\r\n const depth = typeof node.getAttr === 'function' ? (node.getAttr('__depth') as number | undefined) : undefined;\r\n if (rawName === 'resize-handle') return { id, type: 'resize-handle', depth };\n if (rawName === 'link-handle') return { id, type: 'link-handle', depth };\n if (rawName === 'shape-hover-control') return { id, type: 'shape-hover-control', depth };\n if (rawName === 'port') return { id, type: 'port', depth };\n if (rawName === 'link') return { id, type: 'link', depth };\r\n if (rawName === 'text') return { id, type: 'text', depth };\r\n if (rawName === 'none') return { id, type: 'none', depth };\r\n return { id, type: 'element', depth };\r\n };\r\n\r\n const prioritizeHits = (nodes: Array<KonvaHitNode | null>): HitResult => {\r\n const hits = nodes\r\n .map((node) => resolveHit(node))\r\n .filter((hit): hit is HitResult => Boolean(hit));\r\n if (hits.length === 0) return { id: '', type: 'none' };\r\n\r\n const priority: HitResult['type'][] = ['resize-handle', 'link-handle', 'port', 'shape-hover-control', 'link', 'text', 'element'];\n for (let i = 0; i < priority.length; i += 1) {\r\n const candidates = hits.filter((hit) => hit.type === priority[i]);\r\n if (candidates.length === 0) continue;\r\n if (priority[i] === 'element') {\r\n return candidates.reduce((deepest, current) => {\r\n const deepestDepth = deepest.depth ?? -1;\r\n const currentDepth = current.depth ?? -1;\r\n return currentDepth > deepestDepth ? current : deepest;\r\n }, candidates[0]);\r\n }\r\n return candidates[0];\r\n }\r\n return hits[0];\r\n };\r\n\r\n const hitTester = new KonvaHitTester((point) => {\n const toStagePoint = (world: { x: number; y: number }) => {\n const transform = stage.getAbsoluteTransform?.();\n if (!transform) return world;\n const directPoint = (transform as { point?: (pos: { x: number; y: number }) => { x: number; y: number } }).point;\n if (directPoint) {\n return directPoint.call(transform, world);\n }\n const copied = (transform as { copy?: () => unknown }).copy?.();\n const copiedPoint = (copied as { point?: (pos: { x: number; y: number }) => { x: number; y: number } } | undefined)\n ?.point;\n if (!copiedPoint) return world;\n return copiedPoint.call(copied, world);\n };\n const stagePoint = toStagePoint(point);\r\n const all = typeof stage.getAllIntersections === 'function' ? stage.getAllIntersections(stagePoint) : null;\r\n if (all && all.length > 0) {\r\n return prioritizeHits(all as KonvaHitNode[]);\r\n }\r\n const single = stage.getIntersection(stagePoint) as KonvaHitNode | null;\r\n return prioritizeHits(single ? [single] : []);\r\n });\r\n\r\n const interaction = new KonvaInteraction(engine, {\n stage,\n hitTester,\n renderer,\n panKey: config.panKey,\n shapeRegistry,\n shapeHoverControls: config.elementShapeHoverControls,\n onShapeHoverControlInteracted: config.onElementShapeHoverControlInteraction,\n onShapeHoverControlActivated: config.onElementShapeHoverControlActivated,\n });\n interaction.bind();\n\r\n if (config.initialState) {\r\n engine.load(config.initialState);\r\n }\r\n\r\n return {\r\n load: (state) => engine.load(state),\r\n getState: () => engine.getState(),\r\n getViewport: () => engine.getViewport(),\r\n clientToWorld: (clientPoint, container) => engine.clientToWorld(clientPoint, container),\r\n createOverlayShape: (config) => engine.createOverlayShape(config),\r\n on: (event, handler) => engine.on(event, handler),\r\n addElement: (element) => engine.addElement(element),\r\n moveElementTo: (id, x, y) => engine.moveElementTo(id, x, y),\r\n resizeElement: (id, width, height) => engine.resizeElement(id, width, height),\r\n setElementLayout: (id, layout) => engine.setElementLayout(id, layout),\r\n removeElement: (id) => engine.removeElement(id),\r\n addPortToElement: (elementId, port) => engine.addPortToElement(elementId, port),\r\n movePortTo: (id, x, y) => engine.movePortTo(id, x, y),\r\n removePort: (id) => engine.removePort(id),\r\n addLink: (link) => engine.addLink(link),\r\n updateLinkPoints: (id, points) => engine.updateLinkPoints(id, points),\r\n setLinkRoutingMode: (id, mode) => engine.setLinkRoutingMode(id, mode as LinkRoutingMode),\r\n rerouteAllLinks: () => engine.rerouteAllLinks(),\r\n rerouteLinks: (linkIds, options) => engine.rerouteLinks(linkIds, options),\r\n removeLink: (id) => engine.removeLink(id),\r\n addText: (text) => engine.addText(text),\r\n updateText: (id, content) => engine.updateText(id, content),\r\n moveTextTo: (id, x, y) => engine.moveTextTo(id, x, y),\r\n removeText: (id) => engine.removeText(id),\r\n setSelection: (ids) => engine.setSelection(ids),\r\n setViewport: (pan, zoom) => engine.setViewport(pan, zoom),\r\n setRouting: (router) => engine.setRouting(router as RouterStrategy),\r\n setSnapping: (snapper) => engine.setSnapping(snapper as SnapStrategy),\n registerShape: (shape) => engine.registerShape(shape as ShapeDefinition),\n render: () => engine.render(),\n startLinkFromPort: (sourcePortId, pointer) => interaction.startLinkFromPort(sourcePortId, pointer),\n updateLinkPreview: (pointer) => interaction.updateLinkPreview(pointer),\n completeLinkToPort: (targetPortId) => interaction.completeLinkToPort(targetPortId),\n completeLinkToElement: (targetElementId, pointer) => interaction.completeLinkToElement(targetElementId, pointer),\n cancelLink: () => interaction.cancelLink(),\n exportImage: (options) => {\n engine.render();\n if (typeof stage.toDataURL !== 'function') {\n throw new Error('Diagram image export is not available on the current stage.');\n }\n if (!options) {\n return stage.toDataURL();\n }\n\n const { fitToContent, ...baseOptions } = options;\n if (!fitToContent) {\n return stage.toDataURL(baseOptions);\n }\n\n const padding = resolveFitToContentPadding(fitToContent);\n const worldBounds = resolveStateWorldBounds(engine.getState());\n if (!worldBounds) {\n return stage.toDataURL(baseOptions);\n }\n\n const viewport = engine.getViewport();\n const safeZoom = viewport.zoom === 0 ? 1 : viewport.zoom;\n const cropX = worldBounds.minX * safeZoom + viewport.pan.x - padding;\n const cropY = worldBounds.minY * safeZoom + viewport.pan.y - padding;\n const cropWidth = Math.max(1, (worldBounds.maxX - worldBounds.minX) * safeZoom + padding * 2);\n const cropHeight = Math.max(1, (worldBounds.maxY - worldBounds.minY) * safeZoom + padding * 2);\n\n return stage.toDataURL({\n ...baseOptions,\n x: cropX,\n y: cropY,\n width: cropWidth,\n height: cropHeight,\n });\n },\n resize: (width, height) => {\n stage.width(width);\n stage.height(height);\n engine.render();\n },\n setElementShapeHoverControls: (controls) => {\n interaction.setShapeHoverControls(controls);\n },\n destroy: () => {\n interaction.dispose();\n renderer.destroy?.();\n stage.destroy();\r\n },\r\n };\r\n};\r\n"],"names":["POSITION_EPSILON","cachedKonva","getKonva"],"mappings":"IAuDY,gBAKX;AALD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EALW,eAAe,KAAf,eAAe,GAK1B,EAAA,CAAA,CAAA;;AC5DD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE;AACnC,IAAI,aAAa,GAAG,MAAM,CAAC,cAAc;AACzC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;AACpF,QAAQ,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1G,IAAI,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AACF;AACO,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;AAChC,IAAI,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,IAAI;AAC7C,QAAQ,MAAM,IAAI,SAAS,CAAC,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC;AAClG,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,IAAI,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACzF,CAAC;AACD;AACO,IAAI,QAAQ,GAAG,WAAW;AACjC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,EAAE;AACrD,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7D,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC;AACjB,MAAK;AACL,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,EAAC;AACD;AACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACvF,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU;AACvE,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChF,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,SAAS;AACT,IAAI,OAAO,CAAC,CAAC;AACb,CAAC;AAgKD;AACO,SAAS,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;AAC9C,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACzF,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE;AAChC,YAAY,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAS;AACT,KAAK;AACL,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAiGD;AACuB,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,UAAU,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;AACvH,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;AACrF;;AChUA,IAAA,YAAA,kBAAA,YAAA;AAcE,IAAA,SAAA,YAAA,CAAY,IAAiB,EAAA;;AAC3B,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAA,QAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,QAAQ,CAAE,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,GAAA,QAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,IAAI,CAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAO,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,EAAA,IAAA,CAAA,GAAI,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAO,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,EAAA,IAAA,CAAA,GAAI,EAAE,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;KACvC;IAED,YAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAY,QAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAQ,QAAA,CAAA,EAAA,EAAA,QAAQ,CAAE,CAAC;KACjC,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,IAAU,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAE,CAAC;KACzB,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,MAAc,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAA;KACF,CAAA;IAED,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,EAAE,EAAA,EAAK,OAAA,EAAE,KAAK,MAAM,CAAb,EAAa,CAAC,CAAC;KAC3D,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,MAAc,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAA;KACF,CAAA;IAED,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,EAAE,EAAA,EAAK,OAAA,EAAE,KAAK,MAAM,CAAb,EAAa,CAAC,CAAC;KAC3D,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;QACE,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAE;AAC9B,YAAA,IAAI,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,IAAI,CAAE;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,OAAO,EAAM,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,EAAC,IAAA,CAAA;AAC1B,YAAA,OAAO,EAAM,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,EAAC,IAAA,CAAA;YAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;KACH,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACzED,IAAA,SAAA,kBAAA,YAAA;AASE,IAAA,SAAA,SAAA,CAAY,IAAc,EAAA;;AACxB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAA,EAAK,QAAM,QAAA,CAAA,EAAA,EAAA,KAAK,GAAX,EAAc,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAO,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,EAAA,IAAA,CAAA,GAAI,EAAE,CAAC;KACtD;IAED,SAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAU,MAAe,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAA,EAAK,QAAM,QAAA,CAAA,EAAA,EAAA,KAAK,GAAX,EAAc,CAAC,CAAC;KACrD,CAAA;IAED,SAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,IAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACrB,CAAA;IAED,SAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,MAAc,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAA;KACF,CAAA;IAED,SAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,EAAE,EAAA,EAAK,OAAA,EAAE,KAAK,MAAM,CAAb,EAAa,CAAC,CAAC;KAC3D,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;QACE,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAA,EAAK,QAAM,QAAA,CAAA,EAAA,EAAA,KAAK,CAAG,EAAA,EAAA,CAAC;YAClD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,OAAO,EAAM,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,EAAC,IAAA,CAAA;SAC3B,CAAC;KACH,CAAA;IACH,OAAC,SAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AClDD,IAAA,cAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,cAAA,GAAA;AACU,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;KA0BvD;AAxBC,IAAA,cAAA,CAAA,SAAA,CAAA,GAAG,GAAH,UAAI,OAAe,EAAE,MAAc,EAAA;;AACjC,QAAA,IAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,GAAG,EAAU,CAAC;AAChE,QAAA,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;KACrC,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,MAAM,GAAN,UAAO,OAAe,EAAE,MAAc,EAAA;QACpC,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO;AACjB,QAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC,SAAA;KACF,CAAA;IAED,cAAQ,CAAA,SAAA,CAAA,QAAA,GAAR,UAAS,OAAe,EAAA;QACtB,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;KACjC,CAAA;IAED,cAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,OAAe,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACnC,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACzBD,IAAA,SAAA,kBAAA,YAAA;AAkBE,IAAA,SAAA,SAAA,CAAY,IAAc,EAAA;;AACxB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAA,QAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,QAAQ,CAAE,CAAC;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,IAAI,CAAA,GAAK,SAAS,CAAC;AACrD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAO,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,EAAA,IAAA,CAAA,GAAI,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC;QAC9C,IAAI,CAAC,kBAAkB,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,kBAAkB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,cAAc,CAAA,GAAK,SAAS,CAAC;AACnF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,eAAe,CAAA,GAAK,SAAS,CAAC;AACtF,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,uBAAuB,CAAA,GAAK,SAAS,CAAC;AAC9G,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,uBAAuB,CAAA,GAAK,SAAS,CAAC;AAC9G,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,aAAa,CAAA,GAAK,SAAS,CAAC;AAChF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;KAC7C;IAED,SAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAY,QAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAQ,QAAA,CAAA,EAAA,EAAA,QAAQ,CAAE,CAAC;KACjC,CAAA;IAED,SAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,eAAwB,EAAA;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;KACxC,CAAA;IAED,SAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,MAAc,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAA;KACF,CAAA;IAED,SAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,MAAc,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,EAAE,EAAA,EAAK,OAAA,EAAE,KAAK,MAAM,CAAb,EAAa,CAAC,CAAC;KAC3D,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;QACE,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,YAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAE;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,IAAI,CAAG,GAAE,SAAS;YAC9C,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,OAAO,EAAM,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,EAAC,IAAA,CAAA;YAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;AAC3C,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,cAAc,CAAG,GAAE,SAAS;AAC5E,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,eAAe,CAAG,GAAE,SAAS;AAC/E,YAAA,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,uBAAuB,CAAG,GAAE,SAAS;AACvG,YAAA,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,uBAAuB,CAAG,GAAE,SAAS;AACvG,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,aAAa,CAAG,GAAE,SAAS;YACzE,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC;KACH,CAAA;IACH,OAAC,SAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC3ED,IAAA,SAAA,kBAAA,YAAA;AAYE,IAAA,SAAA,SAAA,CAAY,IAAc,EAAA;;AACxB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAA,QAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,QAAQ,CAAE,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,IAAI,CAAA,GAAK,SAAS,CAAC;AACrD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,MAAM,CAAA,GAAK,SAAS,CAAC;QAC3D,IAAI,CAAC,cAAc,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC;AAC1D,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,aAAa,CAAA,GAAK,SAAS,CAAC;AAChF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,eAAe,CAAA,GAAK,SAAS,CAAC;KACvF;IAED,SAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,OAAe,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;KAC/B,CAAA;IAED,SAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,IAAU,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAE,CAAC;KACzB,CAAA;IAED,SAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,OAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;KAC/B,CAAA;IAED,SAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAiB,MAAyB,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,GAAQ,QAAA,CAAA,EAAA,EAAA,MAAM,CAAG,GAAE,SAAS,CAAC;KACzD,CAAA;IAED,SAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,IAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAG,GAAE,SAAS,CAAC;KACvD,CAAA;IAED,SAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAU,MAA0B,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,GAAQ,QAAA,CAAA,EAAA,EAAA,MAAM,CAAG,GAAE,SAAS,CAAC;KAClD,CAAA;IAED,SAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAY,QAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAQ,QAAA,CAAA,EAAA,EAAA,QAAQ,CAAE,CAAC;KACjC,CAAA;AAED,IAAA,SAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;;QACE,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAE;AAC9B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,IAAI,CAAG,GAAE,SAAS;YAC9C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,MAAM,CAAG,GAAE,SAAS;YACpD,cAAc,EAAE,MAAA,IAAI,CAAC,cAAc,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,OAAO;AACnD,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,aAAa,CAAG,GAAE,SAAS;AACzE,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,eAAe,CAAG,GAAE,SAAS;SAChF,CAAC;KACH,CAAA;IACH,OAAC,SAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC7DM,IAAM,QAAQ,GAAG,UAAC,CAAQ,EAAE,CAAQ,EAAA;IACzC,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC,CAAC;AAEK,IAAM,KAAK,GAAG,UAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAA;IAC3D,IAAI,KAAK,GAAG,GAAG;AAAE,QAAA,OAAO,GAAG,CAAC;IAC5B,IAAI,KAAK,GAAG,GAAG;AAAE,QAAA,OAAO,GAAG,CAAC;AAC5B,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEK,IAAM,iBAAiB,GAAG,UAAC,IAAU,EAAE,KAAY,EAAA;AACxD,IAAA,QACE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACjB,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;AAC9B,QAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACjB,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAC/B;AACJ,CAAC,CAAC;AAEK,IAAM,cAAc,GAAG,UAAC,CAAO,EAAE,CAAO,EAAA;AAC7C,IAAA,OAAO,EACL,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACrB,CAAC;AACJ,CAAC,CAAC;AAEK,IAAM,gBAAgB,GAAG,UAAC,OAAe,IAAa,OAAA,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,CAAA,EAAA,CAAC;AAEhF,IAAM,WAAW,GAAG,UAAC,KAAY,EAAE,MAAa,EAAE,OAAe,EAAA;AACtE,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI;AAAE,QAAA,OAAA,QAAA,CAAA,EAAA,EAAY,KAAK,CAAG,CAAA;AAClD,IAAA,IAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC9B,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC9B,OAAO;QACL,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG;QACjC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG;KAClC,CAAC;AACJ,CAAC,CAAC;AAEK,IAAM,wBAAwB,GAAG,UACtC,OAAc,EACd,IAAuC,EACvC,YAAqB,EAAA;AAErB,IAAA,IAAI,YAAY,EAAE;QAChB,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AAC1E,KAAA;AACD,IAAA,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC,CAAC;AAEK,IAAM,qBAAqB,GAAG,UACnC,OAAc,EACd,IAAuC,EACvC,QAAgB,EAChB,YAAoB,EAAA;AAApB,IAAA,IAAA,YAAA,KAAA,KAAA,CAAA,EAAA,EAAA,YAAoB,GAAA,KAAA,CAAA,EAAA;AAEpB,IAAA,IAAM,EAAE,GAAA,QAAA,CAAA,EAAA,EAAQ,OAAO,CAAE,CAAC;AAC1B,IAAA,IAAM,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;AACvD,IAAA,IAAM,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACxD,IAAM,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACrE,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI;AAAE,QAAA,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,EAAE,EAAA,EAAA,EAAE,EAAE,EAAA,EAAA,EAAE,EAAE,EAAA,EAAA,EAAE,CAAC;IACzD,IAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACpE,OAAO;QACL,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC;QACpC,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC;QACpC,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC;QACpC,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC;KACrC,CAAC;AACJ,CAAC,CAAC;AAEK,IAAM,cAAc,GAAG,UAAC,KAAY,EAAE,OAAgB,EAAA;AAC3D,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;IACrC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QACzE,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAM,UAAU,GACd,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;AAC7B,YAAA,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;AACrE,QAAA,IAAI,UAAU;YAAE,MAAM,GAAG,CAAC,MAAM,CAAC;AAClC,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,IAAM,WAAW,GAAG,UAAC,CAAQ,EAAE,CAAQ,EAAE,CAAQ,EAAA;AAC/C,IAAA,OAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAArD,CAAqD,CAAC;AAExD,IAAM,SAAS,GAAG,UAAC,CAAQ,EAAE,CAAQ,EAAE,CAAQ,EAAA;AAC7C,IAAA,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AAHzB,CAGyB,CAAC;AAErB,IAAM,iBAAiB,GAAG,UAAC,EAAS,EAAE,EAAS,EAAE,EAAS,EAAE,EAAS,EAAA;IAC1E,IAAM,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AAC5C,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AAC9D,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AAC9D,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AAC9D,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AAC9D,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEK,IAAM,kBAAkB,GAAG,UAChC,KAAY,EACZ,OAAc,EACd,IAAuC,EACvC,QAAgB,EAChB,YAAoB,EAAA;AAApB,IAAA,IAAA,YAAA,KAAA,KAAA,CAAA,EAAA,EAAA,YAAoB,GAAA,KAAA,CAAA,EAAA;IAEpB,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE;AAC7B,QAAA,OAAO,iBAAiB,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;AACzG,KAAA;IACD,IAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACpE,IAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC5D,IAAA,OAAO,iBAAiB,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC;AACnH,CAAC,CAAC;AAEK,IAAM,qBAAqB,GAAG,UAAC,OAAgB,EAAE,IAAU,EAAA;AAChE,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;AACrC,IAAA,IAAI,OAAO,CAAC,IAAI,CAAC,UAAC,KAAK,EAAK,EAAA,OAAA,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA,EAAA,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AAEzE,IAAA,IAAM,WAAW,GAAG;QAClB,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AACxB,QAAA,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AACrC,QAAA,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACnD,QAAA,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;KACvC,CAAC;AAEF,IAAA,IAAI,WAAW,CAAC,IAAI,CAAC,UAAC,MAAM,EAAK,EAAA,OAAA,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA,EAAA,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AAE/E,IAAA,IAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAK,EAAA,OAAA,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAU,CAAvD,EAAuD,CAAC,CAAC;AAC5G,IAAA,IAAM,SAAS,GAAG;QAChB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;KACxB,CAAC;AAEX,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACzC,IAAA,EAAA,GAAW,YAAY,CAAC,CAAC,CAAC,EAAzB,EAAE,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,EAAE,GAAA,EAAA,CAAA,CAAA,CAAmB,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACtC,IAAA,EAAA,GAAW,SAAS,CAAC,CAAC,CAAC,EAAtB,EAAE,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,EAAE,GAAA,EAAA,CAAA,CAAA,CAAgB,CAAC;YAC9B,IAAI,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;AACpD,SAAA;AACF,KAAA;AAED,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEK,IAAM,UAAU,GAAG,UAAC,KAAY,EAAE,QAAgB,EAAA;IACvD,IAAI,QAAQ,IAAI,CAAC;AAAE,QAAA,OAAA,QAAA,CAAA,EAAA,EAAY,KAAK,CAAG,CAAA;IACvC,OAAO;AACL,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ;AAC5C,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ;KAC7C,CAAC;AACJ,CAAC;;ACzKD,IAAA,YAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,YAAA,GAAA;AACE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;AAC3C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;AACrC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;AACrC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;AACrC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;KAqWlC;IAnWC,YAAI,CAAA,SAAA,CAAA,IAAA,GAAJ,UAAK,KAAmB,EAAA;QAAxB,IA2CC,KAAA,GAAA,IAAA,CAAA;AA1CC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;AAEtC,QAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AACrF,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AAC5E,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AAC5E,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AACvB,YAAA,IAAM,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YACjC,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AACtB,YAAA,IAAM,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;AAC1B,YAAA,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAE1C,YAAA,IAAM,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzB,OAAO;AACR,aAAA;AAED,YAAA,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtB,OAAO;AACR,aAAA;AAED,YAAA,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,OAAO,EAAK,EAAA,OAAA,OAAO,CAAC,MAAM,EAAE,CAAhB,EAAgB,CAAC;YAC/E,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,MAAM,EAAE,CAAb,EAAa,CAAC;YACnE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,MAAM,EAAE,CAAb,EAAa,CAAC;YACnE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,MAAM,EAAE,CAAb,EAAa,CAAC;SACpE,CAAC;KACH,CAAA;IAED,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAAU,EAAA;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC9B,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAiB,EAAU,EAAE,MAA6B,EAAA;QACxD,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AACrB,QAAA,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;KACzB,CAAA;IAED,YAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAY,QAAgB,EAAA;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,UAAC,KAAK,EAAK,EAAA,OAAA,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAA,EAAA,CAAC,CAAC;KAC1F,CAAA;IAED,YAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,EAAU,EAAA;QAChC,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;KAClD,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC3B,CAAA;IAED,YAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,EAAU,EAAA;QAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QACvB,IAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,eAAe;YAAE,OAAY,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAG,CAAA;QAClD,OAAO;YACL,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;SACvC,CAAC;KACH,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC3B,CAAA;IAED,YAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,EAAU,EAAA;QACxB,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AACvB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;KACvC,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,EAAU,EAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC3B,CAAA;IAED,YAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,EAAU,EAAA;QAC7B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAY,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAG,CAAA;AAE/C,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,IAAI,OAAO,EAAE;YACX,IAAM,eAAe,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;YAClE,OAAO;gBACL,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;aACvC,CAAC;AACH,SAAA;AAED,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,QAAA,IAAI,IAAI,EAAE;YACR,IAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,YAAY;gBAAE,OAAY,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAG,CAAA;YAC/C,OAAO;gBACL,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;aACpC,CAAC;AACH,SAAA;AAED,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,QAAA,IAAI,IAAI,EAAE;YACR,IAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO;gBACL,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/B,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChC,CAAC;AACH,SAAA;QAED,OAAY,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAG,CAAA;KAC7B,CAAA;IAED,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,IAAiB,EAAA;AAC1B,QAAA,IAAM,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAY,EAAU,EAAE,QAAe,EAAA;QACrC,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AACrB,QAAA,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KAC/B,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAc,EAAU,EAAE,IAAuC,EAAA;QAC/D,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AACrB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACvB,CAAA;IAED,YAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAc,EAAU,EAAA;QAAxB,IAWC,KAAA,GAAA,IAAA,CAAA;QAVC,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AAErB,QAAA,IAAM,OAAO,GAAO,aAAA,CAAA,EAAA,EAAA,OAAO,CAAC,OAAO,OAAC,CAAC;AACrC,QAAA,IAAM,OAAO,GAAO,aAAA,CAAA,EAAA,EAAA,OAAO,CAAC,OAAO,OAAC,CAAC;AAErC,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAvB,EAAuB,CAAC,CAAC;AACrD,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAvB,EAAuB,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC1B,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,IAAc,EAAA;AACpB,QAAA,IAAM,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,UAAS,EAAU,EAAE,QAAe,EAAA;QAClC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KAC5B,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,sBAAsB,GAAtB,UAAuB,EAAU,EAAE,eAAwB,EAAA;QACzD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;KAC1C,CAAA;IAED,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAAU,EAAA;QAArB,IAmBC,KAAA,GAAA,IAAA,CAAA;QAlBC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAElB,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACxB,SAAA;AAED,QAAA,IAAM,WAAW,GAAO,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,OAAC,CAAC;AACtC,QAAA,WAAW,CAAC,OAAO,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAvB,EAAuB,CAAC,CAAC;AAEzD,QAAA,IAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAClD,aAAA,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,YAAY,KAAK,EAAE,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,CAAA,EAAA,CAAC;aACtE,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,EAAE,CAAA,EAAA,CAAC,CAAC;AAE1B,QAAA,aAAa,CAAC,OAAO,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAvB,EAAuB,CAAC,CAAC;AAE3D,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KACvB,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,IAAc,EAAA;AACpB,QAAA,IAAM,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9B,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAiB,EAAU,EAAE,MAAe,EAAA;QAC1C,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAmB,EAAU,EAAE,IAAqB,EAAA;QAClD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACvB,CAAA;IAED,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAAU,EAAA;QAArB,IAQC,KAAA,GAAA,IAAA,CAAA;QAPC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAElB,QAAA,IAAM,OAAO,GAAO,aAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,OAAC,CAAC;AAClC,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAvB,EAAuB,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KACvB,CAAA;IAED,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,IAAc,EAAA;AACpB,QAAA,IAAM,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAE9B,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAE1C,YAAA,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,aAAA;AAED,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,aAAA;AAED,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,UAAU,GAAV,UAAW,EAAU,EAAE,OAAe,EAAA;QACpC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC1B,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,UAAS,EAAU,EAAE,QAAe,EAAA;QAClC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KAC5B,CAAA;IAED,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAAU,EAAA;QACnB,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAExC,YAAA,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACxB,aAAA;AAED,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACrB,aAAA;AAED,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACrB,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KACvB,CAAA;IAEO,YAA2B,CAAA,SAAA,CAAA,2BAAA,GAAnC,UAAoC,OAAqB,EAAA;AACvD,QAAA,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,YAAY,EAAE;YACxB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YAC5B,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,SAAA;QACD,IAAI,OAAO,GAA6B,OAAO,CAAC;AAChD,QAAA,OAAO,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE;AACxB,YAAA,IAAM,QAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,QAAM;gBAAE,MAAM;AACnB,YAAA,IAAI,OAAO,GAAG,QAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,OAAO,GAAG,QAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,IAAI,QAAM,CAAC,YAAY,EAAE;gBACvB,OAAO,IAAI,QAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBACjC,OAAO,IAAI,QAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACnC,aAAA;YACD,CAAC,IAAI,OAAO,CAAC;YACb,CAAC,IAAI,OAAO,CAAC;YACb,OAAO,GAAG,QAAM,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC;KACjB,CAAA;IAEO,YAAmB,CAAA,SAAA,CAAA,mBAAA,GAA3B,UAA4B,IAAe,EAAA;AACzC,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/C,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAA,QAAA,CAAA,EAAA,EAAY,MAAM,CAAC,CAAC,CAAC,CAAG,CAAA;QAEjD,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,SAAA;AAED,QAAA,IAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1B,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,IAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,YAAA,IAAI,QAAQ,GAAG,OAAO,IAAI,OAAO,EAAE;AACjC,gBAAA,IAAM,KAAK,GAAG,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,IAAI,OAAO,CAAC;gBACjE,OAAO;AACL,oBAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK;AAC5D,oBAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK;iBAC7D,CAAC;AACH,aAAA;YACD,QAAQ,IAAI,OAAO,CAAC;AACrB,SAAA;QAED,OAAY,QAAA,CAAA,EAAA,EAAA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAG,CAAA;KACzC,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC9WD,IAAA,YAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,YAAA,GAAA;QACU,IAAK,CAAA,KAAA,GAAoB,EAAE,CAAC;KAqBrC;IAnBC,YAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,OAAsB,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC1B,CAAA;IAED,YAAK,CAAA,SAAA,CAAA,KAAA,GAAL,UAAM,KAAmB,EAAA;QACvB,IAAM,OAAO,GAAmB,EAAE,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC,YAAA,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAS,IAAI,CAAE,CAAA;AACvB,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,GAAG,GAAH,UAAI,OAAsB,EAAE,KAAmB,EAAA;AAC7C,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC1B,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACxBD,IAAA,QAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,QAAA,GAAA;AACU,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAiE,CAAC;KA2B7F;AAzBC,IAAA,QAAA,CAAA,SAAA,CAAA,SAAS,GAAT,UACE,KAAa,EACb,OAA2C,EAAA;QAF7C,IAgBC,KAAA,GAAA,IAAA,CAAA;;AAZC,QAAA,IAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,GAAG,EAAE,CAAC;AAClD,QAAA,GAAG,CAAC,GAAG,CAAC,OAAoD,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE9B,OAAO,YAAA;YACL,IAAM,QAAQ,GAAG,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,QAAQ;gBAAE,OAAO;AACtB,YAAA,QAAQ,CAAC,MAAM,CAAC,OAAoD,CAAC,CAAC;AACtE,YAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE;AACvB,gBAAA,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7B,aAAA;AACH,SAAC,CAAC;KACH,CAAA;AAED,IAAA,QAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,UAAmC,KAAa,EAAE,OAAwB,EAAA;QACxE,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO;AACjB,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,OAAO,EAAA;YACvC,OAAO,CAAC,OAAiC,CAAC,CAAC;AAC7C,SAAC,CAAC,CAAC;KACJ,CAAA;IACH,OAAC,QAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC9BD,IAAA,cAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,cAAA,GAAA;AACU,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;KAqBzC;IAnBC,cAAG,CAAA,SAAA,CAAA,GAAA,GAAH,UAAI,GAAa,EAAA;QACf,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;KACjC,CAAA;IAED,cAAM,CAAA,SAAA,CAAA,MAAA,GAAN,UAAO,EAAU,EAAA;QACf,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1B,SAAA;KACF,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,GAAG,GAAH,YAAA;QACE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;KAC9C,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;AACE,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;KAC1B,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACpBD,IAAA,aAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,aAAA,GAAA;QACE,IAAG,CAAA,GAAA,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;KASV;IAPC,aAAM,CAAA,SAAA,CAAA,MAAA,GAAN,UAAO,KAAY,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,GAAQ,QAAA,CAAA,EAAA,EAAA,KAAK,CAAE,CAAC;KACzB,CAAA;IAED,aAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;KACnB,CAAA;IACH,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACXM,IAAM,QAAQ,GAAG,UAAC,MAA8B,EAAE,EAAU,EAAE,OAAiC,EAAmB,EAAA,QAAC;AACxH,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,MAAM,EAAA,MAAA;AACN,IAAA,EAAE,EAAA,EAAA;AACF,IAAA,OAAO,EAAA,OAAA;CACR,EAAC,EAAA,CAAC;AAEI,IAAM,WAAW,GAAG,UAAC,MAA8B,EAAE,EAAU,EAAE,OAAiC,EAAmB,EAAA,QAAC;AAC3H,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,MAAM,EAAA,MAAA;AACN,IAAA,EAAE,EAAA,EAAA;AACF,IAAA,OAAO,EAAA,OAAA;CACR,EAAC,EAAA,CAAC;AAEI,IAAM,WAAW,GAAG,UAAC,MAA8B,EAAE,EAAU,EAAmB,EAAA,QAAC;AACxF,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,MAAM,EAAA,MAAA;AACN,IAAA,EAAE,EAAA,EAAA;CACH,EAAC,EAAA;;ACXK,IAAM,iBAAiB,GAAG,UAAC,KAAmB,EAAA,EAAoB,QAAC;AACxE,IAAA,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClB,QAAA,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;KAC1D;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,uBAAuB,GAAG,UAAC,OAAoB,EAAA,EAAoB,QAAC;AAC/E,IAAA,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1B,QAAA,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;KACnD;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,wBAAwB,GAAG,UAAC,EAAU,EAAE,QAAe,EAAoB,EAAA,QAAC;AACvF,IAAA,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAChC,QAAA,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC,CAAC,CAAC;KACnD;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,0BAA0B,GAAG,UACxC,EAAU,EACV,IAAuC,EACrB,EAAA,QAAC;AACnB,IAAA,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,UAAC,KAAK,EAAA;QACX,IAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAM,YAAY,GAAG,OAAO,GAAE,QAAA,CAAA,EAAA,EAAM,OAAO,CAAC,IAAI,CAAA,GAAK,SAAS,CAAC;AAC/D,QAAA,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9B,QAAA,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,EAAA,IAAA,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC,CAAC,CAAC;KAC7D;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,0BAA0B,GAAG,UAAC,EAAU,EAAA,EAAoB,QAAC;AACxE,IAAA,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;KACrC;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,6BAA6B,GAAG,UAC3C,EAAU,EACV,MAA6B,EACX,EAAA,QAAC;AACnB,IAAA,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACnC,QAAA,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC,CAAC,CAAC;KACjD;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,oBAAoB,GAAG,UAAC,IAAc,EAAA,EAAoB,QAAC;AACtE,IAAA,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;KAC1C;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,qBAAqB,GAAG,UACnC,EAAU,EACV,MAA4D,EAC1C,EAAA,QAAC;AACnB,IAAA,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAC,KAAK,EAAA;;AACX,QAAA,IAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC3F,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,IAAI,kBAAkB,EAAE;AACtB,YAAA,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,SAAS,CAAC,CAAC;AACvE,SAAA;QACD,IAAM,OAAO,GAA4B,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AACvE,QAAA,IAAI,kBAAkB,EAAE;YACtB,OAAO,CAAC,eAAe,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC;AAC1D,SAAA;QACD,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;KAC3C;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,uBAAuB,GAAG,UAAC,EAAU,EAAA,EAAoB,QAAC;AACrE,IAAA,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;KAClC;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,oBAAoB,GAAG,UAAC,IAAc,EAAA,EAAoB,QAAC;AACtE,IAAA,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;KAC1C;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,uBAAuB,GAAG,UACrC,EAAU,EACV,MAAuD,EACrC,EAAA,QAAC;AACnB,IAAA,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;YAC/B,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;YAChC,KAAK,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9C,SAAA;QACD,IAAM,OAAO,GAA4B,EAAE,CAAC;AAC5C,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAChE,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACnE,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;KAC3C;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,uBAAuB,GAAG,UAAC,EAAU,EAAA,EAAoB,QAAC;AACrE,IAAA,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;KAClC;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,oBAAoB,GAAG,UAAC,IAAc,EAAA,EAAoB,QAAC;AACtE,IAAA,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpB,QAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;KAC1C;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,uBAAuB,GAAG,UAAC,EAAU,EAAE,OAAe,EAAoB,EAAA,QAAC;AACtF,IAAA,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAC9B,QAAA,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAA,OAAA,EAAE,CAAC,CAAC,CAAC;KAC/C;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,qBAAqB,GAAG,UAAC,EAAU,EAAE,QAAe,EAAoB,EAAA,QAAC;AACpF,IAAA,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7B,QAAA,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC,CAAC,CAAC;KAChD;CACF,EAAC,EAAA,CAAC;AAEI,IAAM,uBAAuB,GAAG,UAAC,EAAU,EAAA,EAAoB,QAAC;AACrE,IAAA,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,UAAC,KAAK,EAAA;AACX,QAAA,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;KAClC;CACF,EAAC,EAAA;;ACrKF,IAAA,eAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,eAAA,GAAA;QACU,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAChB,IAAY,CAAA,YAAA,GAAwB,IAAI,CAAC;KAoBlD;IAlBC,eAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAc,QAAoB,EAAA;QAAlC,IAiBC,KAAA,GAAA,IAAA,CAAA;AAhBC,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAM,QAAQ,GAAG,OAAO,qBAAqB,KAAK,WAAW;AAC3D,cAAE,qBAAqB;cACrB,UAAC,EAAwB,EAAA,EAAK,OAAA,UAAU,CAAC,YAAM,EAAA,OAAA,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAd,EAAc,EAAE,EAAE,CAAC,CAApC,EAAoC,CAAC;AAEvE,QAAA,QAAQ,CAAC,YAAA;AACP,YAAA,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,YAAA,IAAM,IAAI,GAAG,KAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,KAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,EAAE,CAAC;AACR,aAAA;AACH,SAAC,CAAC,CAAC;KACJ,CAAA;IACH,OAAC,eAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACbD,IAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,IAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,IAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,IAAM,UAAU,GAAG,UAAC,IAAU,EAAE,MAAc,EAAA;IAC5C,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;IACtC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;AACxC,IAAA,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;IAC3C,OAAO;AACL,QAAA,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM;AAClB,QAAA,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM;AAClB,QAAA,KAAK,EAAA,KAAA;AACL,QAAA,MAAM,EAAA,MAAA;KACP,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,qBAAqB,GAAG,UAAC,KAAY,EAAE,GAAU,EAAE,IAAU,EAAA;IACjE,IAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,IAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC3B,IAAA,IAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7B,IAAA,IAAM,CAAC,GAAG;AACR,QAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AAC7B,QAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;KAC/B,CAAC;IAEF,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;AAEX,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,QAAA,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,QAAA,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,GAAG,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC;AAC1B,SAAA;AAAM,aAAA;AACL,YAAA,IAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;YAClB,IAAI,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,CAAC,GAAG,EAAE;AAAE,oBAAA,OAAO,KAAK,CAAC;gBACzB,IAAI,CAAC,GAAG,EAAE;oBAAE,EAAE,GAAG,CAAC,CAAC;AACpB,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,GAAG,EAAE;AAAE,oBAAA,OAAO,KAAK,CAAC;gBACzB,IAAI,CAAC,GAAG,EAAE;oBAAE,EAAE,GAAG,CAAC,CAAC;AACpB,aAAA;AACF,SAAA;AACF,KAAA;AAED,IAAA,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,IAAM,6BAA6B,GAAG,UAAC,KAAY,EAAE,GAAU,EAAE,IAAU,EAAE,SAAiB,EAAA;IAC5F,IAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1C,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK,CAAC;IACzB,OAAO,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,IAAM,eAAe,GAAG,UAAC,KAAY,EAAE,IAAU,EAAE,SAAiB,EAAA;IAClE,QACE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,SAAS;QAC7B,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS;AAC1C,QAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,SAAS;AAC7B,QAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,EAC3C;AACJ,CAAC,CAAC;AAEF,IAAM,WAAW,GAAG,UAAC,MAAe,EAAA;IAClC,IAAM,OAAO,GAAY,EAAE,CAAC;AAC5B,IAAA,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;QACnB,IAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE;AACrD,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,SAAA;AACH,KAAC,CAAC,CAAC;AAEH,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,OAAO,CAAC;IAEvC,IAAM,SAAS,GAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnD,QAAA,IACE,UAAU;AACV,aAAC,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAClG;YACA,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AACxC,SAAA;AAAM,aAAA;AACL,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,SAAA;AACF,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,IAAM,UAAU,GAAG,UAAC,MAAe,EAAA;IACjC,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACzC,QAAA,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACvC,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,IAAA,cAAA,kBAAA,YAAA;AAKE,IAAA,SAAA,cAAA,CAAY,OAA+B,EAAA;;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,eAAe,CAAC;AACnD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,iBAAiB,CAAC;AACzD,QAAA,IAAI,CAAC,UAAU,GAAG,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,mBAAmB,CAAC;KAC9D;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,KAAK,GAAL,UAAM,MAAa,EAAE,MAAa,EAAE,OAAsB,EAAA;;AACxD,QAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;QAC3C,IAAM,MAAM,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAC;QAE/B,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAChG,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAEhG,IAAM,WAAW,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,UAAU,GAAI,MAAM,CAAC;QACzC,IAAM,WAAW,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,UAAU,GAAI,MAAM,CAAC;AAEzC,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAC5E,QAAA,IAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAE5E,IAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,CAAC,EAAA,EAAK,QAAA,QAAA,CAAA,EAAA,EAAM,CAAC,CAAG,EAAA,EAAA,CAAC,CAAC;AAClE,QAAA,IAAM,MAAM,GAAY,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AACxC,QAAA,IAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA,IAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,aAAa,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,IAAI,CAAM,QAAA,CAAA,EAAA,EAAA,UAAU,EAAG,CAAC;AAChC,SAAA;AACD,QAAA,MAAM,CAAC,IAAI,CAAA,KAAA,CAAX,MAAM,EAAS,MAAM,CAAE,CAAA;QACvB,IAAI,aAAa,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,IAAI,CAAM,QAAA,CAAA,EAAA,EAAA,UAAU,EAAG,CAAC;AAChC,SAAA;AACD,QAAA,MAAM,CAAC,IAAI,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;QAE3B,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;KAC1E,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,MAAa,EAAE,MAAa,EAAE,SAA0B,EAAA;QAAhF,IA0CC,KAAA,GAAA,IAAA,CAAA;AAzCC,QAAA,IAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;AACrC,QAAA,IAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAErC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtD,QAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEzB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtD,QAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEzB,QAAA,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAA;AACzB,YAAA,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI,CAAC,OAAO,CAAC,CAAC;AAC/C,YAAA,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,KAAI,CAAC,OAAO,CAAC,CAAC;AACrE,YAAA,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI,CAAC,OAAO,CAAC,CAAC;AAC/C,YAAA,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,KAAI,CAAC,OAAO,CAAC,CAAC;AACxE,SAAC,CAAC,CAAC;QAEH,IAAM,UAAU,GAAc,EAAE,CAAC;AAEjC,QAAA,UAAU,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;YACtB,IAAM,IAAI,GAAG,WAAW,CAAC;6BAClB,MAAM,CAAA;gBACX,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;gBACxB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;6BACnB,MAAM,CAAA;AACZ,aAAA,CAAC,CAAC;AACH,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,SAAC,CAAC,CAAC;AAEH,QAAA,UAAU,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;YACtB,IAAM,IAAI,GAAG,WAAW,CAAC;6BAClB,MAAM,CAAA;gBACX,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE;gBACxB,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE;6BACnB,MAAM,CAAA;AACZ,aAAA,CAAC,CAAC;AACH,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,UAAU,CAAC;KACnB,CAAA;IAEO,cAAY,CAAA,SAAA,CAAA,YAAA,GAApB,UAAqB,MAAa,EAAE,MAAa,EAAE,SAA0B,EAAE,MAAa,EAAA;QAA5F,IAyBC,KAAA,GAAA,IAAA,CAAA;QAxBC,IAAM,MAAM,GAAG,WAAW,CAAC,CAAA,QAAA,CAAA,EAAA,EAAM,MAAM,CAAS,EAAA,QAAA,CAAA,EAAA,EAAA,MAAM,CAAG,CAAA,CAAC,CAAC;AAE3D,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE;AAClF,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;AAC/C,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AAED,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACnE,IAAI,IAAI,GAAmB,IAAI,CAAC;AAChC,QAAA,IAAI,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE1C,QAAA,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS,EAAA;YAC3B,IAAI,CAAC,KAAI,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;gBAAE,OAAO;AAC5D,YAAA,IAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,MAAM,GAAG,UAAU,EAAE;gBACvB,IAAI,GAAG,SAAS,CAAC;gBACjB,UAAU,GAAG,MAAM,CAAC;AACrB,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,IAAI,KAAJ,IAAA,IAAA,IAAI,cAAJ,IAAI,GAAI,MAAM,CAAC;KACvB,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,kBAAkB,GAA1B,UAA2B,MAAe,EAAE,MAAY,EAAA;QAAxD,IAEC,KAAA,GAAA,IAAA,CAAA;QADC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAI,CAAC,SAAS,CAAC,CAAA,EAAA,CAAC,CAAC;KAChF,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,WAAW,GAAnB,UAAoB,MAAe,EAAE,SAA0B,EAAE,MAAa,EAAA;AAC5E,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QACnC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AAErE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACzC,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBAAE,SAAS;AACrD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC5C,gBAAA,IAAI,6BAA6B,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;AAChF,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAEO,cAAmB,CAAA,SAAA,CAAA,mBAAA,GAA3B,UACE,KAAY,EACZ,QAAwC,EACxC,MAAwB,EACxB,SAA0B,EAAA;AAE1B,QAAA,IAAI,EAAC,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,UAAU,CAAA,IAAI,CAAC,QAAQ,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QACzD,IAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,cAAc,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;;;AAI7G,QAAA,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;AACnF,YAAA,IAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;AAClE,YAAA,IAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACjH,IAAI,YAAY,GAAG,SAAS,EAAE;gBAC5B,cAAc,GAAG,YAAY,CAAC;gBAC9B,SAAS,GAAG,YAAY,CAAC;AAC1B,aAAA;AACF,SAAA;QAED,IAAI,SAAS,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QAEhC,OAAO;YACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,SAAS;YACzC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,SAAS;SAC1C,CAAC;KACH,CAAA;IAEO,cAA0B,CAAA,SAAA,CAAA,0BAAA,GAAlC,UACE,KAAY,EACZ,MAAa,EACb,MAAwB,EACxB,SAA0B,EAC1B,QAAiB,EAAA;AAEjB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AAChC,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/E,SAAA;AACD,QAAA,IAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACnF,IAAI,aAAa,KAAK,IAAI,EAAE;YAC1B,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,CAAO,EAAE,CAAO,EAAA;AACjC,QAAA,QACE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS;AACrC,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS;AACrC,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS;AAC7C,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAC/C;KACH,CAAA;IAEO,cAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,IAAyC,EAAA;AACzD,QAAA,QAAQ,IAAI;AACV,YAAA,KAAK,MAAM;gBACT,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzB,YAAA,KAAK,OAAO;gBACV,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxB,YAAA,KAAK,KAAK;gBACR,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACzB,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA;gBACE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzB,SAAA;KACF,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,gBAAgB,GAAxB,UAAyB,KAAY,EAAE,MAAa,EAAE,MAAY,EAAA;AAChE,QAAA,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACvD,SAAA;AACD,QAAA,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;KACxD,CAAA;IAEO,cAAmB,CAAA,SAAA,CAAA,mBAAA,GAA3B,UACE,KAAY,EACZ,MAAa,EACb,SAA0B,EAC1B,QAAiB,EAAA;QAJnB,IAgCC,KAAA,GAAA,IAAA,CAAA;AA1BC,QAAA,IAAI,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACrC,IAAM,oBAAoB,GAAG,UAAC,IAAU,EAAA;YACtC,OAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAI,CAAC,SAAS,CAAA;AAAtF,SAAsF,CAAC;QACzF,IAAM,kBAAkB,GAAG,UAAC,IAAU,EAAA;YACpC,OAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,KAAI,CAAC,SAAS,CAAA;AAArF,SAAqF,CAAC;AAExF,QAAA,SAAS,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAA;AACzB,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ;gBAAE,OAAO;AACjD,YAAA,IAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE;AAChF,gBAAA,IAAM,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,KAAI,CAAC,SAAS,CAAC,CAAC;gBACnE,IAAI,SAAS,GAAG,KAAK;oBAAE,KAAK,GAAG,SAAS,CAAC;AAC1C,aAAA;AAAM,iBAAA,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE;AAC1E,gBAAA,IAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpD,IAAI,SAAS,GAAG,KAAK;oBAAE,KAAK,GAAG,SAAS,CAAC;AAC1C,aAAA;iBAAM,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE;AACtF,gBAAA,IAAM,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAI,CAAC,SAAS,CAAC,CAAC;gBACpE,IAAI,SAAS,GAAG,KAAK;oBAAE,KAAK,GAAG,SAAS,CAAC;AAC1C,aAAA;AAAM,iBAAA,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE;AACxE,gBAAA,IAAM,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpD,IAAI,SAAS,GAAG,KAAK;oBAAE,KAAK,GAAG,SAAS,CAAC;AAC1C,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KAC3B,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,MAAe,EAAE,MAAa,EAAE,MAAa,EAAA;AACnE,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,CAAS,EAAA,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AAC/D,QAAA,IAAM,MAAM,GAAA,aAAA,CAAA,EAAA,EAAO,MAAM,EAAA,IAAA,CAAC,CAAC;AAC3B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,MAAM,CAAC,OAAO,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AAC9B,YAAA,MAAM,CAAC,IAAI,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AAC3B,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;QACD,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE;AACxD,YAAA,MAAM,CAAC,OAAO,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AAC/B,SAAA;QACD,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE;AAC9C,YAAA,MAAM,CAAC,IAAI,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AAC5B,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf,CAAA;AAEO,IAAA,cAAA,CAAA,SAAA,CAAA,sBAAsB,GAA9B,UAA+B,MAAe,EAAE,aAAsB,EAAE,aAAsB,EAAA;AAC5F,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,EAAA,EAAK,QAAA,QAAA,CAAA,EAAA,EAAM,CAAC,CAAA,EAAP,EAAU,CAAC,CAAC;QAC7D,IAAM,OAAO,GAAY,EAAE,CAAC;AAC5B,QAAA,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;YACnB,IAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE;AACrD,gBAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC,EAAA,EAAK,QAAA,QAAA,CAAA,EAAA,EAAM,CAAC,CAAA,EAAP,EAAU,CAAC,CAAC;QAE9D,IAAM,MAAM,GAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC9C,IAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,YAAA,IAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAM,WAAW,GAAG,aAAa,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YACzD,IAAM,UAAU,GAAG,aAAa,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,YAAA,IAAM,SAAS,GACb,CAAC,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AACnG,YAAA,IAAI,SAAS,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE;gBAC5C,SAAS;AACV,aAAA;AACD,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,SAAA;AACD,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,EAAA,EAAK,QAAA,QAAA,CAAA,EAAA,EAAM,CAAC,CAAA,EAAP,EAAU,CAAC,CAAC;KACtC,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACrZD,IAAA,cAAA,kBAAA,YAAA;AAGE,IAAA,SAAA,cAAA,CAAY,QAAY,EAAA;AAAZ,QAAA,IAAA,QAAA,KAAA,KAAA,CAAA,EAAA,EAAA,QAAY,GAAA,CAAA,CAAA,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IAED,cAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAY,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB,CAAA;IAED,cAAI,CAAA,SAAA,CAAA,IAAA,GAAJ,UAAK,KAAY,EAAA;QACf,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACzC,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACoCD,IAAA,aAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,aAAA,GAAA;AACU,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;KAarD;IAXC,aAAQ,CAAA,SAAA,CAAA,QAAA,GAAR,UAAS,KAAsB,EAAA;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;KAClC,CAAA;IAED,aAAG,CAAA,SAAA,CAAA,GAAA,GAAH,UAAI,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC5B,CAAA;IAED,aAAG,CAAA,SAAA,CAAA,GAAA,GAAH,UAAI,EAAU,EAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAC5B,CAAA;IACH,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACpEM,IAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,IAAM,wBAAwB,GAAG,OAAO,CAAC;AACzC,IAAM,wBAAwB,GAAG,GAAG,CAAC;AAQrC,IAAM,wBAAwB,GAAG,UACtC,KAA+B,EAAA;;AAE/B,IAAA,IAAM,QAAQ,GAAG,CAAC,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,QAA+B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,sBAAsB,CAAC;AACnF,IAAA,IAAM,UAAU,GAAG,CAAC,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,UAAiC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,wBAAwB,CAAC;AACzF,IAAA,IAAM,UAAU,GAAG,CAAC,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,UAAiC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,wBAAwB,CAAC;IACzF,OAAO,EAAE,QAAQ,EAAA,QAAA,EAAE,UAAU,YAAA,EAAE,UAAU,EAAA,UAAA,EAAE,CAAC;AAC9C,CAAC;;ACbD,IAAA,kBAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,kBAAA,GAAA;QACU,IAAO,CAAA,OAAA,GAAoC,IAAI,CAAC;KA6BzD;AA3BS,IAAA,kBAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,YAAA;QACE,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,IAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI,CAAC;QACjD,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI;YACF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACxC,SAAA;QAAC,OAAM,EAAA,EAAA;AACN,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB,SAAA;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB,CAAA;IAED,kBAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,IAAc,EAAA;AACd,QAAA,IAAA,KAAuC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAzE,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,UAAU,gBAAyC,CAAC;AAClF,QAAA,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,EAAE;YACR,OAAO;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG;gBACxD,MAAM,EAAE,QAAQ,GAAG,UAAU;aAC9B,CAAC;AACH,SAAA;QACD,GAAG,CAAC,IAAI,GAAG,EAAA,CAAA,MAAA,CAAG,QAAQ,EAAM,KAAA,CAAA,CAAA,MAAA,CAAA,UAAU,CAAE,CAAC;AACzC,QAAA,IAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AACpD,QAAA,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAM,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AACrC,QAAA,OAAO,EAAE,KAAK,EAAA,KAAA,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;KAC1B,CAAA;IACH,OAAC,kBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC7BD,IAAM,sBAAsB,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA;IACtD,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,IAAA,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzC,IAAA,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,IAAA,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,IAAA,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,IAAA,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,GAAG,KAAK,IAAI;AAAE,QAAA,OAAO,MAAM,CAAC;IAChC,IAAI,GAAG,KAAK,KAAK;AAAE,QAAA,OAAO,OAAO,CAAC;IAClC,IAAI,GAAG,KAAK,GAAG;AAAE,QAAA,OAAO,KAAK,CAAC;AAC9B,IAAA,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,IAAM,wBAAwB,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA;IACxD,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvD,IAAI,IAAI,KAAK,OAAO;AAAE,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrE,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACtD,IAAA,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF,IAAM,sBAAsB,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA;IACtD,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,IAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AACtB,QAAA,OAAO,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5C,KAAA;IAED,IAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC/B,IAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAC/B,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE;AAC9C,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;AACD,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAChC,OAAO,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC;AAClC,KAAA;IACD,OAAO,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC;AACnC,CAAC,CAAC;AAEF,IAAM,2BAA2B,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA;IAC3D,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,IAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AACtB,QAAA,OAAO,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,KAAA;AAED,IAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,IAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE;QAC9C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;AAC9B,KAAA;AAED,IAAA,IAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3E,IAAA,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,IAAM,2BAA2B,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA;IAC3D,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,IAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AACtB,QAAA,OAAO,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,KAAA;AAED,IAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,IAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,IAAA,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACpD,IAAI,KAAK,GAAG,IAAI,EAAE;QAChB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAC7B,KAAA;IACD,OAAO;AACL,QAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK;AAClB,QAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK;KACnB,CAAC;AACJ,CAAC,CAAC;AAEK,IAAM,sBAAsB,GAAG,UAAC,KAAY,EAAE,IAAU,EAAE,QAAsB,EAAA;IACrF,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,QAAA,OAAO,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACjD,KAAA;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,QAAA,OAAO,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACjD,KAAA;AACD,IAAA,OAAO,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEK,IAAM,mBAAmB,GAAG,UAAC,KAAY,EAAE,IAAU,EAAE,QAAsB,EAAA;AAClF,IAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE;AACpD,QAAA,OAAO,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5C,KAAA;AACD,IAAA,OAAO,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEK,IAAM,0BAA0B,GAAG,UAAC,IAAgB,EAAA;IACzD,IAAI,IAAI,KAAK,KAAK;AAAE,QAAA,OAAO,GAAG,CAAC;IAC/B,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,CAAC,EAAE,CAAC;IACjC,IAAI,IAAI,KAAK,MAAM;AAAE,QAAA,OAAO,EAAE,CAAC;AAC/B,IAAA,OAAO,CAAC,CAAC;AACX,CAAC;;ACpGD,IAAMA,kBAAgB,GAAG,IAAI,CAAC;AAC9B,IAAM,mCAAmC,GAAG,GAAG,CAAC;AAChD,IAAM,iCAAiC,GAAG,GAAG,CAAC;AAC9C,IAAM,gCAAgC,GAAG,CAAC,CAAC;AAc3C,IAAA,iBAAA,kBAAA,YAAA;AAIE,IAAA,SAAA,iBAAA,CAAY,MAA+B,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;KACzC;IAED,iBAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,IAAc,EAAA;QAAtC,IA0EC,KAAA,GAAA,IAAA,CAAA;;AAzEC,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM,EAAE;YACX,IAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;AAC/G,SAAA;QAED,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;QACnC,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;AAC3C,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAC;QACjD,IAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3D,QAAA,IAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAChC,IAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpE,QAAA,IAAM,qBAAqB,GAAG,iBAAiB,GAAG,CAAC,CAAC;AACpD,QAAA,IAAM,mBAAmB,GAAG,iBAAiB,GAAG,CAAC,CAAC;QAClD,IAAM,gBAAgB,GAAG,OAAO,IAAIA,kBAAgB,IAAI,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACzG,IAAM,aAAa,GACjB,QAAQ,KAAK,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,CAAC,GAAG,qBAAqB,CAAC,GAAG,SAAS,CAAC;QAC5G,IAAM,cAAc,GAClB,SAAS,KAAK,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,gBAAgB,GAAG,CAAC,GAAG,mBAAmB,CAAC,GAAG,SAAS,CAAC;AAC5G,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAM,IAAI,CAAA,EAAA,EAAE,OAAO,EAAE,GAAG,EAAG,CAAA,CAAA,CAAC,MAAM,CAAC;QAC/E,IAAM,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AAEnC,QAAA,IAAM,KAAK,GACT,IAAI,KAAK,MAAM;AACb,cAAE,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChE,cAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAExD,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,IAAM,kBAAkB,GACtB,cAAc,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC;AAC5C,cAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC;cACpD,SAAS,CAAC;AAChB,QAAA,IAAM,kBAAkB,GACtB,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AACrE,cAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;cACxC,SAAS,CAAC;QAChB,IAAM,iBAAiB,GACrB,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,SAAS;cAChE,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;cAChD,kBAAkB,KAAlB,IAAA,IAAA,kBAAkB,cAAlB,kBAAkB,GAAI,kBAAkB,CAAC;QAE/C,IAAI,iBAAiB,KAAK,SAAS,IAAI,aAAa,CAAC,MAAM,GAAG,iBAAiB,EAAE;YAC/E,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAC1D,IAAI,QAAQ,KAAK,MAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACnD,gBAAA,IAAM,SAAS,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3C,gBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,eAAe,CAC7C,aAAa,CAAC,SAAS,CAAC,EACxB,aAAa,EACb,cAAc,EACd,IAAI,CACL,CAAC;AACH,aAAA;AACF,SAAA;QAED,IAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA,EAAA,CAAC,CAAC;QAClF,IAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,UAAU,CAAE,GAAE,CAAC,CAAC;AACzE,QAAA,IAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9E,QAAA,IAAM,eAAe,GAAG,YAAY,GAAG,qBAAqB,CAAC;AAC7D,QAAA,IAAM,gBAAgB,GAAG,aAAa,GAAG,mBAAmB,CAAC;QAC7D,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC,CAAC;QACpF,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACpH,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC;AACjE,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC;AACnE,QAAA,IAAM,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC;AACvC,QAAA,IAAM,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC;QAEzC,OAAO;YACL,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;AAChE,YAAA,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,YAAA,aAAa,EAAE,EAAE,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE;YAC/E,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;SAC1D,CAAC;KACH,CAAA;AAED,IAAA,iBAAA,CAAA,SAAA,CAAA,uBAAuB,GAAvB,UACE,OAAuB,EACvB,OAGC,EAAA;QALH,IAuDC,KAAA,GAAA,IAAA,CAAA;QAhDC,IAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAC/D,QAAA,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO,CAAC;QAE/C,IAAM,WAAW,GAAmB,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO;AAChE,YAAA,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC;gBAAE,OAAO;YACvD,IAAM,QAAQ,GAAG,KAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACvD,IAAM,cAAc,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,cAAc,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC,OAAO,CAAC;AACjE,YAAA,IAAM,WAAW,GACf,CAAC,OAAO,CAAC,IAAI;gBACb,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK;gBAC1C,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/C,YAAA,IAAM,cAAc,GAAG,cAAc,KAAK,QAAQ,CAAC,cAAc,CAAC;YAClE,IAAM,aAAa,GACjB,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;gBACpE,CAAC,CAAA,EAAA,GAAA,MAAA,OAAO,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,0CAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC;YACvE,IAAM,WAAW,GACf,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;gBAChF,CAAC,CAAA,EAAA,GAAA,MAAA,OAAO,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,eAAe,0CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW;gBAAE,OAAO;AAE9E,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAClD,WAAW,CAAC,IAAI,CACd,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;gBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,eAAe,EAAE,QAAQ,CAAC,eAAe;AAC1C,aAAA,CAAC,CACH,CAAC;YAEF,IAAI,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,EAAE;AACpC,gBAAA,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,aAAa,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,OAAA,EAAA;oBACvB,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;AACvC,oBAAA,MAAM,EAAE,QAAQ;AACjB,iBAAA,CAAC,CAAC;AACJ,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,GAAO,aAAA,CAAA,aAAA,CAAA,EAAA,EAAA,OAAO,SAAK,WAAW,EAAA,IAAA,CAAA,GAAI,OAAO,CAAC;KACxE,CAAA;IAEO,iBAAwB,CAAA,SAAA,CAAA,wBAAA,GAAhC,UAAiC,OAAuB,EAAA;AACtD,QAAA,IAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;AAC9B,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;;AACpB,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO;AAC/E,YAAA,IAAI,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,0CAAE,IAAI;AAAE,gBAAA,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7C,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC;KACZ,CAAA;IAEO,iBAA2B,CAAA,SAAA,CAAA,2BAAA,GAAnC,UAAoC,IAAc,EAAA;;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK,CAAC;QAC/B,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAK,IAAI,CAAC,OAAO,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;AACxF,QAAA,OAAO,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,WAAW,CAAC;KACnE,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,uBAAuB,GAA/B,UAAgC,IAAc,EAAE,OAAe,EAAA;;AAC7D,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC;QAEvB,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAK,IAAI,CAAC,OAAO,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;QACnF,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;YACtC,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC;YACxC,OAAO;gBACL,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS;gBAC/E,MAAM,EAAE,OAAO,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS;aACnF,CAAC;AACH,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,WAAW,KAAK,IAAI,CAAC,OAAO,EAAE;AAChF,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,EAAE,CAAC;AACtB,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAC1D,IAAI,UAAU,KAAK,aAAa;AAAE,gBAAA,OAAO,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;YACnD,OAAO;AACL,gBAAA,KAAK,EAAA,KAAA;AACL,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;aACrD,CAAC;AACH,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;IAEO,iBAAQ,CAAA,SAAA,CAAA,QAAA,GAAhB,UAAiB,OAAe,EAAE,QAA4B,EAAE,IAAwB,EAAE,IAAc,EAAA;QAAxG,IAiBC,KAAA,GAAA,IAAA,CAAA;QAhBC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACxD,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnD,SAAA;QAED,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACpC,QAAA,IAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,IAAM,OAAO,GAAa,EAAE,CAAC;AAC7B,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AACjB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO;AACR,aAAA;AACD,YAAA,IAAM,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACzG,YAAA,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAS,MAAM,CAAE,CAAA;AAC1B,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,IAAY,EAAE,QAAgB,EAAE,IAAc,EAAA;QAAjE,IA8BC,KAAA,GAAA,IAAA,CAAA;QA7BC,IAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA,EAAA,CAAC,CAAC;AACzE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAEpC,IAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AACjB,YAAA,IAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,EAAG,CAAA,MAAA,CAAA,OAAO,cAAI,IAAI,CAAE,GAAG,IAAI,CAAC;YACnE,IAAI,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,QAAQ,EAAE;gBACtD,OAAO,GAAG,SAAS,CAAC;gBACpB,OAAO;AACR,aAAA;AACD,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrB,aAAA;YACD,IAAI,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE;gBACjD,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO;AACR,aAAA;AACD,YAAA,IAAM,SAAS,GAAG,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACxD,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;AACR,aAAA;AACD,YAAA,KAAK,CAAC,IAAI,CAAV,KAAA,CAAA,KAAK,EAAS,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;YACtC,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;KACxC,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,IAAY,EAAE,QAAgB,EAAE,IAAc,EAAA;QAAjE,IAeC,KAAA,GAAA,IAAA,CAAA;QAdC,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AAC5B,YAAA,IAAM,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;AACjC,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,QAAQ,EAAE;gBAC9E,OAAO,GAAG,SAAS,CAAC;gBACpB,OAAO;AACR,aAAA;AACD,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,GAAG,IAAI,CAAC;AACjB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;KACxC,CAAA;IAEO,iBAAe,CAAA,SAAA,CAAA,eAAA,GAAvB,UACE,OAAe,EACf,QAA4B,EAC5B,QAAgC,EAChC,IAAc,EAAA;QAEd,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,OAAO,CAAC;QACzE,IAAI,QAAQ,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QAC7B,IAAM,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;AACjE,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,gBAAgB,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS;AAAE,YAAA,OAAO,OAAO,CAAC;QACtE,IAAI,QAAQ,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAE3E,IAAM,QAAQ,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,SAAS,EAAE;YACrD,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACnD,SAAA;QAED,IAAI,QAAQ,KAAK,gBAAgB,EAAE;AACjC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC1C,gBAAA,IAAM,SAAS,GAAG,EAAG,CAAA,MAAA,CAAA,QAAQ,CAAG,CAAA,MAAA,CAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC;gBACnD,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,SAAS;AAAE,oBAAA,OAAO,SAAS,CAAC;AAC3E,aAAA;AACD,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;QAED,IAAI,QAAQ,KAAK,iBAAiB,EAAE;AAClC,YAAA,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE;AACpD,gBAAA,KAAK,IAAI,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,EAAE;oBACzE,IAAM,SAAS,GAAG,EAAG,CAAA,MAAA,CAAA,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAG,CAAA,MAAA,CAAA,QAAQ,SAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAE,CAAC;oBACrF,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,SAAS;AAAE,wBAAA,OAAO,SAAS,CAAC;AAC3E,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3C,YAAA,IAAM,SAAS,GAAG,EAAG,CAAA,MAAA,CAAA,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAG,CAAA,MAAA,CAAA,QAAQ,CAAE,CAAC;YACtD,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAS,CAAC;AAC3E,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,WAAW,GAAnB,UAAoB,OAAe,EAAE,QAAgB,EAAE,IAAc,EAAA;QAArE,IASC,KAAA,GAAA,IAAA,CAAA;QARC,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AAC/B,YAAA,IAAM,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;YACjC,IAAI,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,QAAQ,EAAE;gBACtD,OAAO,GAAG,SAAS,CAAC;AACrB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAxB,UAAyB,IAAc,EAAE,OAAe,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAM,IAAI,CAAA,EAAA,EAAE,OAAO,EAAA,OAAA,EAAG,CAAA,CAAA,CAAC,KAAK,CAAC;KAC9D,CAAA;IAEO,iBAA4B,CAAA,SAAA,CAAA,4BAAA,GAApC,UAAqC,IAAc,EAAA;;QACjD,IAAM,WAAW,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC;QACzC,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACnE,QAAQ,GAAG,WAAW,CAAC;AACxB,SAAA;AAAM,aAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YAC1C,IAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC9C,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC3B,QAAQ,GAAG,MAAM,CAAC;AACnB,aAAA;AACF,SAAA;AACD,QAAA,IAAM,aAAa,GAAG,gCAAgC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,iCAAiC,CAAC;QACnH,OAAO,IAAI,CAAC,GAAG,CAAC,mCAAmC,EAAE,aAAa,CAAC,CAAC;KACrE,CAAA;IAEO,iBAAwB,CAAA,SAAA,CAAA,wBAAA,GAAhC,UAAiC,KAA+B,EAAA;QAC9D,IAAM,UAAU,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,OAAO,CAAC;QAClC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACjE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAChC,SAAA;AACD,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,IAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC7C,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACzD,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV,CAAA;IACH,OAAC,iBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC9VD,IAAA,iBAAA,kBAAA,YAAA;AAKE,IAAA,SAAA,iBAAA,CAAY,MAA+B,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACxC,QAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;KAC3D;IAED,iBAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,QAAgB,EAAA;;QAArC,IAqKC,KAAA,GAAA,IAAA,CAAA;;QApKC,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AACtD,QAAA,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAElF,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAEpE,QAAA,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAM,GAAG,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;QAC7B,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,QAAQ,CAAC;QACvC,IAAM,gBAAgB,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;QAC3D,IAAM,iBAAiB,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;AAC7D,QAAA,IAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC/C,QAAA,IAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAC/C,IAAM,oBAAoB,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEhF,IAAM,MAAM,GAAG,aAAA,CAAA,EAAA,EAAI,QAAQ,EAAA,IAAA,CAAA,CAAE,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,EAAA;YACrC,IAAM,IAAI,GAAG,IAAI,KAAK,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjE,IAAM,IAAI,GAAG,IAAI,KAAK,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjE,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnD,OAAO,IAAI,GAAG,IAAI,CAAC;AACrB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,QAAA,IAAM,oBAAoB,GAAG,UAAC,WAAmB,EAAE,YAAoB,EAAA;AACrE,YAAA,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,YAAA,IAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;AACzF,YAAA,IAAM,aAAa,GACjB,IAAI,KAAK,YAAY;AACnB,kBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,GAAG,GAAG,QAAQ,CAAC;AAC9C,kBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC;AAEpD,YAAA,IAAM,oBAAoB,GACxB,gBAAgB,KAAK,YAAY;kBAC7B,KAAI,CAAC,qBAAqB,CACxB,aAAa,EACb,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,GAAG,CAAC,YACT,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAA,OAAA,IAAI,KAAK,YAAY,GAAG,CAAA,EAAA,GAAA,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAe,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,GAAG,CAAA,EAAA,GAAA,eAAe,KAAf,IAAA,IAAA,eAAe,uBAAf,eAAe,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAA,EAAA,CACnF,EACD,MAAM,CAAC,GAAG,CAAC,YAAA;;oBACT,OAAA,IAAI,KAAK,YAAY;AACnB,0BAAE,CAAA,EAAA,GAAA,eAAe,KAAA,IAAA,IAAf,eAAe,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAf,eAAe,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,iBAAiB;AACpD,0BAAE,CAAA,EAAA,GAAA,eAAe,KAAA,IAAA,IAAf,eAAe,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAf,eAAe,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,iBAAiB,CAAA;AAAA,iBAAA,CACxD,CACF;kBACD,IAAI,CAAC;AAEX,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;AAC7B,gBAAA,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,gBAAA,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AAE/B,gBAAA,IAAI,oBAAoB,EAAE;oBACxB,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,wBAAA,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACrC,qBAAA;AAAM,yBAAA;AACL,wBAAA,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACtC,qBAAA;AACF,iBAAA;gBAED,IAAI,iBAAiB,KAAK,SAAS,EAAE;oBACnC,IAAI,IAAI,KAAK,YAAY,EAAE;wBACzB,MAAM,GAAG,eAAe,CAAC;AAC1B,qBAAA;AAAM,yBAAA;wBACL,KAAK,GAAG,cAAc,CAAC;AACxB,qBAAA;AACF,iBAAA;gBAED,OAAO;oBACL,KAAK,EAAE,KAAI,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAf,eAAe,CAAE,KAAK,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAe,CAAE,KAAK,CAAC;oBAClF,MAAM,EAAE,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAf,eAAe,CAAE,MAAM,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAe,CAAE,MAAM,CAAC;iBACvF,CAAC;AACJ,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;QAEF,IAAM,iBAAiB,GAAG,UAAC,WAAqD,EAAA;YAC9E,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAR,KAAA,CAAA,IAAI,EAAQ,WAAW,CAAC,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,KAAK,CAAV,EAAU,CAAC,CAAC,CAAC;YACpE,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAR,KAAA,CAAA,IAAI,EAAQ,WAAW,CAAC,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,MAAM,CAAX,EAAW,CAAC,CAAC,CAAC;YACtE,IAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,EAAA,EAAK,OAAA,GAAG,GAAG,IAAI,CAAC,KAAK,GAAA,EAAE,CAAC,CAAC,CAAC;YAC1E,IAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,EAAA,EAAK,OAAA,GAAG,GAAG,IAAI,CAAC,MAAM,GAAA,EAAE,CAAC,CAAC,CAAC;YAE5E,IAAI,IAAI,KAAK,YAAY,EAAE;gBACzB,OAAO;oBACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,GAAG,GAAG,QAAQ,CAAC;oBAC/E,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,oBAAoB,GAAG,SAAS,CAAC;iBACvF,CAAC;AACH,aAAA;YACD,OAAO;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;gBAC5D,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,oBAAoB,GAAG,WAAW,GAAG,GAAG,GAAG,QAAQ,CAAC;aAC1G,CAAC;AACJ,SAAC,CAAC;AAEF,QAAA,IAAI,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1E,IAAA,EAAA,GAAqD,iBAAiB,CAAC,WAAW,CAAC,EAA1E,cAAc,GAAA,EAAA,CAAA,KAAA,EAAU,eAAe,GAAA,EAAA,CAAA,MAAmC,CAAC;AACxF,QAAA,WAAW,GAAG,oBAAoB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AACpE,QAAA,CAAC,EAAqD,GAAA,iBAAiB,CAAC,WAAW,CAAC,EAA1E,cAAc,GAAA,EAAA,CAAA,KAAA,EAAU,eAAe,GAAA,EAAA,CAAA,MAAA,EAAqC;AAEtF,QAAA,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,QAAA,IAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAE5F,QAAA,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,oBAAoB,CAAC;AAC/C,QAAA,IAAM,gBAAgB,GAAG,IAAI,GAAG,EAAiB,CAAC;AAClD,QAAA,IAAM,YAAY,GAAG,IAAI,GAAG,EAA6C,CAAC;AAE1E,QAAA,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;AAC1B,YAAA,IAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACtC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACvC,IAAI,IAAI,KAAK,YAAY,EAAE;AACzB,gBAAA,IAAM,CAAC,GACL,KAAK,KAAK,OAAO;AACf,sBAAE,OAAO,CAAC,CAAC,GAAG,oBAAoB;sBAChC,KAAK,KAAK,KAAK;0BACf,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM;0BAC/C,OAAO,CAAC,CAAC,GAAG,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,eAAe,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAChG,gBAAA,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,CAAC;gBAClD,OAAO,IAAI,UAAU,CAAC,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACrE,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAM,CAAC,GACL,KAAK,KAAK,OAAO;sBACb,OAAO,CAAC,CAAC;sBACT,KAAK,KAAK,KAAK;0BACf,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;0BAC7C,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AACvE,gBAAA,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;gBAClD,OAAO,IAAI,UAAU,CAAC,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACtE,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,IAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAM,YAAY,GAAa,EAAE,CAAC;AAElC,QAAA,gBAAgB,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAE,OAAO,EAAA;YACzC,IAAM,KAAK,GAAG,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO;AACnB,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE;AACtE,gBAAA,IAAM,WAAW,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;AACnG,gBAAA,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAS,WAAW,CAAE,CAAA;gBAC7B,YAAY,CAAC,IAAI,CAAA,KAAA,CAAjB,YAAY,EAAS,KAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAE,CAAA;AAC3D,aAAA;YACD,IAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,UAAU,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC,EAAE;AACpG,gBAAA,IAAM,aAAa,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;AACzG,gBAAA,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAS,aAAa,CAAE,CAAA;gBAC/B,YAAY,CAAC,IAAI,CAAA,KAAA,CAAjB,YAAY,EAAS,KAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAE,CAAA;gBAC1D,IAAM,MAAM,GAAG,KAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAZ,KAAA,CAAA,OAAO,EAAS,MAAM,CAAC,OAAO,CAAE,CAAA;gBAChC,YAAY,CAAC,IAAI,CAAjB,KAAA,CAAA,YAAY,EAAS,MAAM,CAAC,YAAY,CAAE,CAAA;AAC3C,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,cAAc,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,eAAe,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;YAClF,IAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CACzC,0BAA0B,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,EACxF,IAAI,CAAC,KAAK,CACX,CAAC;AACF,YAAA,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAS,aAAa,CAAE,CAAA;YAC/B,YAAY,CAAC,IAAI,CAAjB,KAAA,CAAA,YAAY,EAAS,MAAM,CAAC,OAAO,CAAE,CAAA;AACtC,SAAA;AAED,QAAA,OAAO,EAAE,OAAO,EAAA,OAAA,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;KACrE,CAAA;IAED,iBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,aAA4B,EAAA;;QAC7C,IAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAM,YAAY,GAAa,EAAE,CAAC;AAClC,QAAA,IAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,IAAI,OAAO,GAAG,aAAa,CAAC;AAC5B,QAAA,OAAO,OAAO,EAAE;AACd,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,MAAM;AAChC,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,IAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAZ,KAAA,CAAA,OAAO,EAAS,MAAM,CAAC,OAAO,CAAE,CAAA;YAChC,YAAY,CAAC,IAAI,CAAjB,KAAA,CAAA,YAAY,EAAS,MAAM,CAAC,YAAY,CAAE,CAAA;YAC1C,IAAM,QAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,GAAG,CAAA,EAAA,GAAA,QAAM,KAAN,IAAA,IAAA,QAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAM,CAAE,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC;AACpC,SAAA;AACD,QAAA,OAAO,EAAE,OAAO,EAAA,OAAA,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;KACrE,CAAA;AAED,IAAA,iBAAA,CAAA,SAAA,CAAA,eAAe,GAAf,YAAA;QAAA,IAuBC,KAAA,GAAA,IAAA,CAAA;AAtBC,QAAA,IAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACnE,UAAC,OAAO,IAAK,OAAA,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAlD,EAAkD,CAChE,CAAC;QACF,IAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAM,KAAK,GAAG,UAAC,SAAiB,EAAA;YAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/C,YAAA,OAAO,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE;gBACxB,KAAK,IAAI,CAAC,CAAC;gBACX,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnD,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC;QACF,aAAa;aACV,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,EAAK,EAAA,OAAA,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAzB,EAAyB,CAAC;aACzC,OAAO,CAAC,UAAC,OAAO,EAAA;YACf,IAAM,MAAM,GAAG,KAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAZ,KAAA,CAAA,OAAO,EAAS,MAAM,CAAC,OAAO,CAAE,CAAA;YAChC,YAAY,CAAC,IAAI,CAAjB,KAAA,CAAA,YAAY,EAAS,MAAM,CAAC,YAAY,CAAE,CAAA;AAC5C,SAAC,CAAC,CAAC;AACL,QAAA,OAAO,EAAE,OAAO,EAAA,OAAA,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;KACrE,CAAA;IAEO,iBAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UAA6B,MAA6B,EAAA;;AACxD,QAAA,IAAM,OAAO,GAAG,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;QACtC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QACnE,OAAO;AACL,YAAA,CAAC,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,CAAC,mCAAI,EAAE;AAClB,YAAA,CAAC,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,CAAC,mCAAI,EAAE;SACnB,CAAC;KACH,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,2BAA2B,GAAnC,UAAoC,QAAgB,EAAE,MAA6B,EAAA;;QACjF,IAAM,MAAM,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,kBAAkB,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC,CAAC;QACtB,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;QACnC,IAAI,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAA,MAAM,CAAC,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,MAAM,KAAK;AAAE,YAAA,OAAO,CAAC,CAAC;AAEpD,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAC;AACjD,QAAA,IAAM,OAAO,GACX,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;cACjE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AACnC,cAAE,MAAM,CAAC,iBAAiB,CAAC;QAE/B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,YAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAC;AAC1C,SAAA;AAAM,aAAA;AACL,YAAA,QAAQ,GAAG,IAAI,CAAC,gCAAgC,CAAC,QAAQ,CAAC,CAAC;AAC5D,SAAA;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KACzD,CAAA;IAEO,iBAAgC,CAAA,SAAA,CAAA,gCAAA,GAAxC,UAAyC,QAAgB,EAAA;QACvD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AAC5B,YAAA,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ;gBAAE,OAAO;AACtC,YAAA,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACpD,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,IAAI,CAAC;AAC/C,YAAA,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;AACjC,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;YACnD,IAAI,MAAM,GAAG,IAAI,EAAE;gBACjB,IAAI,GAAG,MAAM,CAAC;AACf,aAAA;AACH,SAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KAC1B,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,KAAa,EAAE,GAAY,EAAE,GAAY,EAAA;QAC/D,IAAM,QAAQ,GAAG,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,GAAG,GAAI,CAAC,CAAC;QAC1B,IAAM,QAAQ,GAAG,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,GAAG,GAAI,MAAM,CAAC,iBAAiB,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;KACtD,CAAA;IAEO,iBAAqB,CAAA,SAAA,CAAA,qBAAA,GAA7B,UACE,KAAa,EACb,KAAa,EACb,SAAmB,EACnB,SAAmB,EAAA;QAEnB,IAAI,KAAK,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QAC1B,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrC,QAAA,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,UAAC,CAAC,EAAE,KAAK,EAAA,EAAA,IAAA,EAAA,CAAA,CAAK,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAA,SAAS,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AAC7F,QAAA,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,UAAC,CAAC,EAAE,KAAK,EAAA;AAClD,YAAA,IAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;YAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;AACH,QAAA,IAAM,MAAM,GAAA,aAAA,CAAA,EAAA,EAAO,IAAI,EAAA,IAAA,CAAC,CAAC;QACzB,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,KAAK,EAAK,EAAA,OAAA,GAAG,GAAG,KAAK,GAAA,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,SAAS,IAAI,CAAC,EAAE;AAClB,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAK,EAAA,OAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAjB,EAAiB,CAAC,CAAC;AACjD,SAAA;QAED,IAAI,MAAM,GAAG,MAAM;aAChB,GAAG,CAAC,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,KAAK,CAAL,EAAK,CAAC;AACxB,aAAA,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAlC,EAAkC,CAAC,CAAC;;AAGvD,YAAA,IAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;YACxC,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAM,UAAU,GAAa,EAAE,CAAC;AAEhC,YAAA,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;gBACnB,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7C,IAAI,QAAQ,IAAI,IAAI;oBAAE,OAAO;gBAC7B,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACtC,IAAI,GAAG,GAAG,CAAC,EAAE;AACX,oBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;oBACrB,SAAS,IAAI,GAAG,CAAC;oBACjB,UAAU,GAAG,IAAI,CAAC;AACnB,iBAAA;gBACD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE;AACtC,oBAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,iBAAA;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,UAAU;AAAQ,gBAAA,OAAA,OAAA,CAAA;YACvB,MAAM,GAAG,UAAU,CAAC;;QApBtB,OAAO,SAAS,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAA;;;;AAqB3C,SAAA;AAED,QAAA,IAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAjB,EAAiB,CAAC,CAAC;QACzD,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,KAAK,EAAK,EAAA,OAAA,GAAG,GAAG,KAAK,GAAA,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,KAAK,EAAA,EAAK,OAAA,GAAG,GAAG,KAAK,CAAX,EAAW,EAAE,CAAC,CAAC,CAC/F,CAAC;QACF,IAAM,SAAS,GAAG,MAAM;aACrB,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,IAAK,QAAC,EAAE,KAAK,EAAA,KAAA,EAAE,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAA5C,EAA6C,CAAC;aACpE,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA,EAAA,CAAC,CAAC;QAChE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,SAAS,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,YAAA,IAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;AACzD,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpB,SAAS,IAAI,CAAC,CAAC;YACf,MAAM,IAAI,CAAC,CAAC;AACb,SAAA;AACD,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAlB,EAAkB,CAAC,CAAC;KACnD,CAAA;IACH,OAAC,iBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC5TD,IAAM,UAAU,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAEzC,IAAM,UAAU,GAAG,UAAC,KAAY,IAAY,QAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAA3B,EAA4B,CAAC;AAElE,IAAM,kBAAkB,GAAG,UAAC,IAAgB,EAAA;IACjD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5C,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC3C,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxB,CAAC,CAAC;AAEK,IAAM,yBAAyB,GAAG,UACvC,IAGC,EACD,UAA8B,EAAA;;IAE9B,IAAM,cAAc,GAAG,UAAU,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,UAAU,CAAC,CAAC;IACrE,IAAM,qBAAqB,GAAG,UAAU,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,cAAc,CAAC,CAAC;AACjF,IAAA,IAAM,wBAAwB,GAAG,UAAU,CACzC,UAAU,KAAK,UAAU;AACvB,UAAE,CAAA,EAAA,GAAA,IAAI,CAAC,uBAAuB,mCAAI,qBAAqB;UACrD,MAAA,IAAI,CAAC,uBAAuB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,qBAAqB,CAC1D,CAAC;IACF,IAAM,aAAa,GAAG,UAAU,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,cAAc,CAAC,CAAC;IACvE,OAAO;AACL,QAAA,cAAc,EAAA,cAAA;AACd,QAAA,qBAAqB,EAAA,qBAAA;AACrB,QAAA,wBAAwB,EAAA,wBAAA;AACxB,QAAA,aAAa,EAAA,aAAA;KACd,CAAC;AACJ,CAAC,CAAC;AAEK,IAAM,6BAA6B,GAAG,UAAC,OAmB7C,EAAA;;IACS,IAAA,IAAI,GAAsD,OAAO,CAA7D,IAAA,EAAE,cAAc,GAAsC,OAAO,CAA7C,cAAA,EAAE,IAAI,GAAgC,OAAO,CAAvC,IAAA,EAAE,aAAa,GAAiB,OAAO,CAAA,aAAxB,EAAE,UAAU,GAAK,OAAO,CAAA,UAAZ,CAAa;IAC1E,IAAM,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;AAC7E,IAAA,IAAM,aAAa,GACjB,CAAC,CAAA,EAAA,GAAA,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAE,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC;SAC5B,QAAO,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAA,KAAK,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,QAAmB,GAAG,CAAC,CAAC,CAAC;AACnF,IAAA,IAAM,eAAe,GACnB,IAAI,CAAC,YAAY,KAAI,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAT,SAAS,CAAE,OAAO,CAAA;AACrC,UAAE;YACE,CAAC,EAAE,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,SAAS,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,mCAAI,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,IAAI,CAAC;YAC1D,CAAC,EAAE,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,SAAS,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,mCAAI,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,IAAI,CAAC;AAC7D,SAAA;UACF,QAAA,CAAA,EAAA,EAAM,UAAU,CAAE,CAAC;AACxB,IAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;AAC5E,QAAA,OAAO,EAAE,aAAa,EAAA,aAAA,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAA,QAAA,CAAA,EAAA,EAAO,UAAU,CAAE,EAAE,eAAe,EAAA,eAAA,EAAE,CAAC;AACnF,KAAA;AACD,IAAA,IAAM,QAAQ,GAAS;AACrB,QAAA,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClB,QAAA,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClB,QAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;AACtB,QAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;KACzB,CAAC;IACF,IAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAM,IAAI,GAAG,CAAA,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,iBAAiB;UACjC,KAAK,CAAC,iBAAiB,CAAC,cAAc,EAAE,QAAQ,CAAC;UACjD,mBAAmB,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAM,MAAM,GAAG,CAAA,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,mBAAmB;UACrC,KAAK,CAAC,mBAAmB,CAAC,cAAc,EAAE,QAAQ,CAAC;AACrD,UAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC7D,IAAA,IAAM,WAAW,GAA+B;AAC9C,QAAA,IAAI,EAAA,IAAA;AACJ,QAAA,MAAM,EAAA,MAAA;AACN,QAAA,QAAQ,EAAA,QAAA;AACR,QAAA,UAAU,EAAA,UAAA;QACV,wBAAwB,EAAE,QAAQ,CAAC,wBAAwB;QAC3D,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,QAAQ,EAAE,IAAI,CAAC,IAAI;KACpB,CAAC;AACF,IAAA,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,0BAA0B,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAA,WAAW,CAAC,CAAC;IACpE,OAAO;AACL,QAAA,aAAa,EAAA,aAAA;AACb,QAAA,eAAe,EAAA,eAAA;AACf,QAAA,IAAI,EAAA,IAAA;AACJ,QAAA,MAAM,EAAA,MAAA;AACN,QAAA,QAAQ,EAAE,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAA,EAAA,GAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC;QACxE,MAAM,EAAE,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,MAAM,IAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,GAAQ,QAAA,CAAA,EAAA,EAAA,UAAU,CAAE;KAC/E,CAAC;AACJ,CAAC,CAAC;AAEK,IAAM,yBAAyB,GAAG,UAAC,OAQzC,EAAA;AACS,IAAA,IAAA,IAAI,GAA8C,OAAO,KAArD,EAAE,cAAc,GAA8B,OAAO,CAAA,cAArC,EAAE,UAAU,GAAkB,OAAO,CAAzB,UAAA,EAAE,WAAW,GAAK,OAAO,YAAZ,CAAa;IAClE,IAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAM,aAAa,GAAG,WAAW,CAAC,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC;IACvE,IAAM,gBAAgB,GAAG,WAAW,CAClC;QACE,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QAC5D,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;AAC7D,KAAA,EACD,UAAU,EACV,aAAa,CACd,CAAC;IACF,IAAM,aAAa,GAAG,WAAW,CAC/B;QACE,CAAC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;QACtE,CAAC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;AACvE,KAAA,EACD,UAAU,EACV,aAAa,CACd,CAAC;AACF,IAAA,IAAM,YAAY,GAAG;AACnB,QAAA,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/D,QAAA,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;KAChE,CAAC;AACF,IAAA,IAAM,eAAe,GAAG;AACtB,QAAA,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;AACnC,QAAA,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;KACpC,CAAC;AACF,IAAA,OAAO,EAAE,YAAY,EAAA,YAAA,EAAE,eAAe,EAAA,eAAA,EAAE,CAAC;AAC3C,CAAC;;ACxKD,IAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,IAAMA,kBAAgB,GAAG,IAAI,CAAC;AAS9B,IAAA,kBAAA,kBAAA,YAAA;AAME,IAAA,SAAA,kBAAA,CAAY,MAAgC,EAAA;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;KAC3C;IAED,kBAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAU,MAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB,CAAA;IAED,kBAAmB,CAAA,SAAA,CAAA,mBAAA,GAAnB,UAAoB,OAAiB,EAAA;QAArC,IAsBC,KAAA,GAAA,IAAA,CAAA;AArBC,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AACpC,QAAA,IAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,IAAM,OAAO,GAAmB,EAAE,CAAC;AACnC,QAAA,IAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBAC1E,OAAO;AACR,aAAA;AACD,YAAA,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO;YACtC,IAAM,SAAS,GAAG,KAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAClD,YAAA,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAChC,YAAA,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAChC,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;gBAAE,OAAO;AAC/B,YAAA,IAAM,MAAM,GAAG,KAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACrE,IAAM,WAAW,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;AACpG,YAAA,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAS,WAAW,CAAE,CAAA;AAC7B,YAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5B,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,yBAAyB,GAAzB,YAAA;QAAA,IAgBC,KAAA,GAAA,IAAA,CAAA;QAfC,IAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AAC5B,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YACnC,IAAM,SAAS,GAAG,KAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAClD,YAAA,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAChC,YAAA,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAChC,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;gBAAE,OAAO;YAC/B,IAAM,MAAM,GACV,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,MAAM,QAAQ;AACnC,kBAAE,CAAA,QAAA,CAAA,EAAA,EAAM,MAAM,CAAA,EAAA,QAAA,CAAA,EAAA,EAAS,MAAM,CAAG,CAAA;kBAC9B,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAClD,IAAM,WAAW,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;AACpG,YAAA,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAS,WAAW,CAAE,CAAA;AAC/B,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,wBAAwB,GAAxB,UACE,MAAc,EACd,OAAsE,EAAA;;QAEtE,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QACvB,IAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI,CAAC;QACjC,IAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,UAAU,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,cAAc,CAAC,CAAC;QAC1G,IAAM,WAAW,GAAG,6BAA6B,CAAC;AAChD,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,cAAc,EAAA,cAAA;AACd,YAAA,IAAI,EAAA,IAAA;YACJ,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,YAAA,UAAU,EAAA,UAAA;AACX,SAAA,CAAC,CAAC;QACH,IAAM,WAAW,GAAG,yBAAyB,CAAC;AAC5C,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;AACnB,YAAA,cAAc,EAAA,cAAA;AACd,YAAA,UAAU,EAAA,UAAA;AACV,YAAA,WAAW,EAAA,WAAA;AACZ,SAAA,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,eAAe,CAAC;KACpC,CAAA;AAED,IAAA,kBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAiB,IAAc,EAAE,MAAa,EAAE,MAAa,EAAA;AAC3D,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,YAAA,OAAO,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,CAAS,EAAA,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AACvC,SAAA;AACD,QAAA,IAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAK,EAAA,qBAAM,KAAK,CAAA,EAAX,EAAc,CAAC,CAAC;AACzD,QAAA,UAAU,CAAC,CAAC,CAAC,GAAQ,QAAA,CAAA,EAAA,EAAA,MAAM,CAAE,CAAC;QAC9B,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAA,QAAA,CAAA,EAAA,EAAQ,MAAM,CAAE,CAAC;AAClD,QAAA,OAAO,UAAU,CAAC;KACnB,CAAA;AAEO,IAAA,kBAAA,CAAA,SAAA,CAAA,0BAA0B,GAAlC,UAAmC,IAAc,EAAE,MAAa,EAAE,MAAa,EAAA;;QAC7E,IAAM,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;QACvC,IAAI,OAAO,KAAK,QAAQ,EAAE;AACxB,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5D,SAAA;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACpD,CAAA;IAEO,kBAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UAA6B,IAAqD,EAAA;QAIhF,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/F,YAAA,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SAChG,CAAC;KACH,CAAA;AAEO,IAAA,kBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,UAA0B,MAAe,EAAE,MAAa,EAAE,MAAa,EAAA;AACrE,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,CAAS,EAAA,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AACvC,SAAA;AACD,QAAA,IAAM,WAAW,GAAG;YAClB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1B,CAAC;AACF,QAAA,IAAM,WAAW,GAAG;AAClB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACzC,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;SAC1C,CAAC;AACF,QAAA,IAAM,wBAAwB,GAC5B,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAIA,kBAAgB;AAC3D,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAIA,kBAAgB,CAAC;AAE9D,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;YAC7B,IAAI,KAAK,KAAK,CAAC;AAAE,gBAAA,OAAA,QAAA,CAAA,EAAA,EAAY,MAAM,CAAG,CAAA;AACtC,YAAA,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,OAAA,QAAA,CAAA,EAAA,EAAY,MAAM,CAAG,CAAA;AACtD,YAAA,IAAI,wBAAwB,EAAE;gBAC5B,OAAO;AACL,oBAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;AAC1B,oBAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;iBAC3B,CAAC;AACH,aAAA;AACD,YAAA,OAAA,QAAA,CAAA,EAAA,EAAY,KAAK,CAAG,CAAA;AACtB,SAAC,CAAC,CAAC;KACJ,CAAA;IAEO,kBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAzB,UAA0B,IAAc,EAAA;QAAxC,IAgFC,KAAA,GAAA,IAAA,CAAA;;AA/EC,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACzD,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzD,IAAM,eAAe,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,SAAS,CAAC;QAC9C,IAAM,eAAe,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,SAAS,CAAC;QAE9C,IAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,IAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;AACxC,QAAA,IAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;AACxC,QAAA,IAAM,UAAU,GAAG,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;AACjF,QAAA,IAAM,UAAU,GAAG,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;AACjF,QAAA,IAAM,sBAAsB,GAC1B,cAAc,IAAI,UAAU;AAC1B,cAAE,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,KAAd,IAAA,IAAA,cAAc,cAAd,cAAc,GAAI,SAAS,CAAC;cACtG,SAAS,CAAC;AAChB,QAAA,IAAM,sBAAsB,GAC1B,cAAc,IAAI,UAAU;AAC1B,cAAE,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,KAAd,IAAA,IAAA,cAAc,cAAd,cAAc,GAAI,SAAS,CAAC;cACtG,SAAS,CAAC;AAChB,QAAA,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,sBAAsB,KAAtB,IAAA,IAAA,sBAAsB,KAAtB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,sBAAsB,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAAC;AAC7D,QAAA,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,sBAAsB,KAAtB,IAAA,IAAA,sBAAsB,KAAtB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,sBAAsB,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAAC;QAE7D,IAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAClF,QAAA,IAAA,EAA8B,GAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,eAAe,CAAC,EAArF,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,eAAe,qBAA8D,CAAC;AAE9F,QAAA,IAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,IAAI,eAAe,IAAI,YAAY;AAAE,YAAA,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC1E,IAAI,eAAe,IAAI,YAAY;AAAE,YAAA,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC1E,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACzC,SAAA;AAED,QAAA,IAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;AACnC,QAAA,kBAAkB,CAAC,OAAO,CAAC,UAAC,EAAE,IAAK,OAAA,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAhB,EAAgB,CAAC,CAAC;QACrD,IAAI,eAAe,IAAI,CAAC,YAAY;AAAE,YAAA,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACpE,IAAI,eAAe,IAAI,CAAC,YAAY;AAAE,YAAA,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACpE,QAAA,IAAI,eAAe;AAAE,YAAA,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEnD,QAAA,IAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACvD,MAAM,CAAC,UAAC,OAAO,EAAA;AACd,YAAA,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;AACjD,YAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC;AAC3C,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;aACD,GAAG,CAAC,UAAC,OAAO,EAAA;;AACX,YAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,mCAAI,OAAO,CAAC,QAAQ,CAAC;YACpF,OAAO;gBACL,EAAE,EAAE,OAAO,CAAC,EAAE;AACd,gBAAA,IAAI,EAAE;oBACJ,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACb,CAAC,EAAE,QAAQ,CAAC,CAAC;AACb,oBAAA,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;AACzB,oBAAA,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;AAC5B,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,CAAC;QAEL,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,SAAS,EAAA,SAAA;AACT,YAAA,MAAM,EAAA,MAAA;YACN,cAAc,EACZ,cAAc,IAAI,UAAU;AAC1B,kBAAE;AACE,oBAAA,SAAS,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,eAAe,GAAI,SAAS;AACvC,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE,sBAAsB,KAAA,IAAA,IAAtB,sBAAsB,KAAtB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,sBAAsB,CAAE,UAAU;AAC/C,iBAAA;AACH,kBAAE,SAAS;YACf,cAAc,EACZ,cAAc,IAAI,UAAU;AAC1B,kBAAE;AACE,oBAAA,SAAS,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,eAAe,GAAI,SAAS;AACvC,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE,sBAAsB,KAAA,IAAA,IAAtB,sBAAsB,KAAtB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,sBAAsB,CAAE,UAAU;AAC/C,iBAAA;AACH,kBAAE,SAAS;SAChB,CAAC;KACH,CAAA;IAEO,kBAAuB,CAAA,SAAA,CAAA,uBAAA,GAA/B,UACE,KAAY,EACZ,IAAU,EACV,SAAkB,EAClB,aAAqB,EAAA;;QAErB,IAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAClD,IAAM,MAAM,GAAG,CAAA,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,eAAe;AACnC,cAAE,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC;cACjF,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACxD,QAAA,IAAI,UAAU,GAAG,MAAM,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAG,KAAK,EAAE,IAAI,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;QACnH,IAAI,UAAU,IAAI,aAAa,EAAE;AAC/B,YAAA,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AACrF,SAAA;AACD,QAAA,OAAO,EAAE,MAAM,EAAA,MAAA,EAAE,UAAU,EAAA,UAAA,EAAE,CAAC;KAC/B,CAAA;IAEO,kBAAyB,CAAA,SAAA,CAAA,yBAAA,GAAjC,UACE,KAAY,EACZ,IAAU,EACV,aAAoB,EACpB,WAAgD,EAAA;AAEhD,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;QAC5D,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,cAAc,CAAC;AAC5E,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;QAC3D,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,cAAc,CAAC;AAC9E,QAAA,IAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;AAClE,QAAA,IAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;AAChE,QAAA,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,EAAE;AACpC,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;AACD,QAAA,IAAM,SAAS,GAAG;AAChB,YAAA,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAC5B,YAAA,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;SAC7B,CAAC;AACF,QAAA,IAAM,eAAe,GAAG,cAAc,KAAK,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC/E,QAAA,IAAM,aAAa,GAAG,YAAY,KAAK,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,aAAa,CAAC,IAAI,IAAI,EAAE;AACrD,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;QACD,OAAO,aAAa,GAAG,eAAe,GAAG,YAAY,GAAG,cAAc,CAAC;KACxE,CAAA;IAEO,kBAAmB,CAAA,SAAA,CAAA,mBAAA,GAA3B,UAA4B,SAAkB,EAAA;AAC5C,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,SAAS,CAAC;QACjC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS,CAAC;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAChD,CAAA;IAEO,kBAAwB,CAAA,SAAA,CAAA,wBAAA,GAAhC,UACE,KAAY,EACZ,IAAU,EACV,eAAoD,EACpD,SAAiB,EAAA;QAEjB,IAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;KACrG,CAAA;IAEO,kBAAc,CAAA,SAAA,CAAA,cAAA,GAAtB,UAAuB,SAAiB,EAAA;;QACtC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AAC1B,QAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO,CAAC,QAAQ,CAAC;QACnF,OAAO;YACL,CAAC,EAAE,QAAQ,CAAC,CAAC;YACb,CAAC,EAAE,QAAQ,CAAC,CAAC;AACb,YAAA,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;AACzB,YAAA,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;SAC5B,CAAC;KACH,CAAA;IAEO,kBAAkB,CAAA,SAAA,CAAA,kBAAA,GAA1B,UAA2B,MAAc,EAAA;;QACvC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AACvB,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;AACd,YAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC,QAAQ;YAC5E,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;KACH,CAAA;AAEO,IAAA,kBAAA,CAAA,SAAA,CAAA,yBAAyB,GAAjC,UAAkC,MAAc,EAAE,cAAuB,EAAA;;AACvE,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,UAAU,CAAC;AACvC,QAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,CAAC;AACxD,QAAA,IAAM,iBAAiB,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,UAAU,CAAC;AACxD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,iBAAiB,CAAC,GAAG,UAAU,GAAG,UAAU,CAAC;KAClF,CAAA;AAEO,IAAA,kBAAA,CAAA,SAAA,CAAA,YAAY,GAApB,UAAqB,mBAA2B,EAAE,qBAA6B,EAAA;QAC7E,IAAI,mBAAmB,KAAK,qBAAqB;AAAE,YAAA,OAAO,KAAK,CAAC;QAChE,IAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;AACrE,QAAA,OAAO,eAAe,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;KACtD,CAAA;IAEO,kBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAxB,UAAyB,SAAiB,EAAA;;QACxC,IAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,SAAS,GAAkB,SAAS,CAAC;AACzC,QAAA,OAAO,SAAS,EAAE;YAChB,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,OAAO;gBAAE,MAAM;AACpB,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACvB,YAAA,SAAS,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;AAEO,IAAA,kBAAA,CAAA,SAAA,CAAA,qBAAqB,GAA7B,UAA8B,eAAwB,EAAE,eAAwB,EAAA;AAC9E,QAAA,IAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;AACrC,QAAA,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,IAAK,OAAA,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA,EAAA,CAAC,CAAC;AAC5E,SAAA;AACD,QAAA,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,IAAK,OAAA,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA,EAAA,CAAC,CAAC;AAC5E,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KACnB,CAAA;AAEO,IAAA,kBAAA,CAAA,SAAA,CAAA,kBAAkB,GAA1B,UACE,eAAwB,EACxB,eAAwB,EAAA;AAExB,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,EAAE,CAAC;QACpD,IAAI,eAAe,KAAK,eAAe;AAAE,YAAA,OAAO,EAAE,CAAC;QAEnD,IAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAC3D,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;YACzC,IAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;AAClD,YAAA,IAAI,IAAI,EAAE;gBACR,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;AAC3D,aAAA;AACF,SAAA;QAED,IAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAC3D,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;YACzC,IAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;AAClD,YAAA,IAAI,IAAI,EAAE;gBACR,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;AAC3D,aAAA;AACF,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;AAEO,IAAA,kBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,UAA0B,KAAY,EAAE,IAAU,EAAE,SAAiB,EAAA;QACnE,IAAM,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QAC5F,IAAM,OAAO,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AAC7F,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK,CAAC;AACvC,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACvD,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC;AACvE,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACtD,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC;AACzE,QAAA,OAAO,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,CAAC;KAC/C,CAAA;AAEO,IAAA,kBAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,KAAY,EAAE,IAAU,EAAA;AAC9C,QAAA,IAAM,SAAS,GAAwE;AACrF,YAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;YACnD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACnE,YAAA,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;YAClD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;SACtE,CAAC;AACF,QAAA,IAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,OAAO,IAAK,QAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,EAAC,EAAA,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjH,QAAA,OAAO,OAAO,CAAC,KAAK,IAAI,cAAc,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;KACnE,CAAA;IACH,OAAC,kBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC3YD,IAAA,gBAAA,kBAAA,YAAA;AAOE,IAAA,SAAA,gBAAA,CAAY,MAA8B,EAAA;AACxC,QAAA,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAClE,QAAA,IAAI,CAAC,sCAAsC,GAAG,MAAM,CAAC,sCAAsC,CAAC;AAC5F,QAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;KACvD;IAED,gBAAG,CAAA,SAAA,CAAA,GAAA,GAAH,UAAI,OAAmC,EAAA;;AACrC,QAAA,IAAM,UAAU,GAAuB,aAAA,CAAA,EAAA,EAAA,OAAO,CAAC,WAAW,OAAC,CAAC;AAC5D,QAAA,IAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,CAAC;QAEzD,CAAC,CAAA,EAAA,GAAA,OAAO,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,OAAO,CAAC,UAAC,IAAI,EAAA;AACvC,YAAA,IAAM,MAAM,GAAG,IAAI,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAf,KAAA,CAAA,UAAU,EAAS,MAAM,CAAC,OAAO,CAAE,CAAA;AACnC,YAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAC,EAAE,EAAK,EAAA,OAAA,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAApB,EAAoB,CAAC,CAAC;AAC5D,SAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,uBAAuB,EAAE;YACnC,UAAU,CAAC,IAAI,CAAf,KAAA,CAAA,UAAU,EAAS,IAAI,CAAC,yBAAyB,EAAE,CAAE,CAAA;AACtD,SAAA;QAED,IAAM,qBAAqB,GAAG,IAAI,CAAC,sCAAsC,CAAC,UAAU,CAAC,CAAC;QACtF,UAAU,CAAC,IAAI,CAAf,KAAA,CAAA,UAAU,EAAS,qBAAqB,CAAC,OAAO,CAAE,CAAA;AAClD,QAAA,qBAAqB,CAAC,YAAY,CAAC,OAAO,CAAC,UAAC,EAAE,EAAK,EAAA,OAAA,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAApB,EAAoB,CAAC,CAAC;QAEzE,IAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAChD,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,UAAU,CAAC,IAAI,CAAA,KAAA,CAAf,UAAU,EAAS,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAE,CAAA;AAC9D,SAAA;AAED,QAAA,OAAO,UAAU,CAAC;KACnB,CAAA;IACH,OAAC,gBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACQD,IAAM,WAAW,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA,EAAY,QAAC;AACxD,IAAA,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAC9C,IAAA,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;CAChD,EAAC,EAAA,CAAC;AAEH,IAAM,gBAAgB,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA;IAChD,IAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACzC,IAAA,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,IAAA,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,IAAA,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,GAAG,KAAK,IAAI;AAAE,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACrD,IAAI,GAAG,KAAK,KAAK;AAAE,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACnE,IAAI,GAAG,KAAK,GAAG;AAAE,QAAA,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACpD,IAAA,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACnD,CAAC,CAAC;AAEF,IAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,IAAM,4BAA4B,GAAuB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAWlF,IAAA,aAAA,kBAAA,YAAA;AAeE,IAAA,SAAA,aAAA,CAAY,MAA2B,EAAA;QAAvC,IAwBC,KAAA,GAAA,IAAA,CAAA;;AAtCO,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;AAC3B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,QAAQ,EAAkB,CAAC;AACxC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;AACjC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;AAWrC,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,eAAe,EAAE,CAAC;QAC3D,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,cAAc,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,cAAc,EAAE,CAAC;QACtD,IAAI,CAAC,aAAa,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,aAAa,EAAE,CAAC;QACjE,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,kBAAkB,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC,CAAC;AACpF,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,qBAAqB,EAAE,UAAC,SAAS,EAAA,EAAK,OAAA,KAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA,EAAA;AAC5E,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC;YAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,YAAA,MAAM,EAAA,MAAA;YACN,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC3C,yBAAyB,EAAE,cAAM,OAAA,KAAI,CAAC,yBAAyB,EAAE,GAAA;AACjE,YAAA,sCAAsC,EAAE,UAAC,OAAO,EAAA,EAAK,OAAA,KAAI,CAAC,sCAAsC,CAAC,OAAO,CAAC,CAAA,EAAA;AACzG,YAAA,mBAAmB,EAAE,UAAC,OAAO,EAAA,EAAK,OAAA,KAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,EAAA;AACpE,SAAA,CAAC,CAAC;KACJ;IAEM,aAAM,CAAA,MAAA,GAAb,UAAc,MAA2B,EAAA;AACvC,QAAA,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;KAClC,CAAA;IAED,aAAI,CAAA,SAAA,CAAA,IAAA,GAAJ,UAAK,KAAmB,EAAA;QAAxB,IAcC,KAAA,GAAA,IAAA,CAAA;AAbC,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5E,QAAA,IAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAChD,YAAA,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,CAAC,YAAA,EAAM,OAAA,KAAI,CAAC,eAAe,EAAE,CAAtB,EAAsB,CAAC;AAC3C,YAAA,uBAAuB,EAAE,IAAI;AAC9B,SAAA,CAAC,CAAC;AACH,QAAA,IAAM,eAAe,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;QAC7D,IAAM,qBAAqB,GAAG,eAAe,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;cACjE,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,YAAY,CAAC;cACtD,EAAE,CAAC;QACP,IAAM,uBAAuB,GAAG,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC;AAC9E,QAAA,IAAM,UAAU,GAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,EAAA,EAAO,eAAe,EAAA,IAAA,CAAA,EAAK,eAAe,CAAC,OAAO,EAAA,IAAA,CAAA,EAAK,qBAAqB,EAAA,IAAA,CAAA,EAAK,uBAAuB,EAAA,IAAA,CAAC,CAAC;AAC1H,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KAC7B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;KAC7B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;AACE,QAAA,OAAO,EAAE,GAAG,EAAA,QAAA,CAAA,EAAA,EAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACpE,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAc,WAAkB,EAAE,SAAyE,EAAA;AACzG,QAAA,IAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;QACzC,IAAA,EAAA,GAAgB,IAAI,CAAC,WAAW,EAAE,EAAhC,GAAG,GAAA,EAAA,CAAA,GAAA,EAAE,IAAI,GAAA,EAAA,CAAA,IAAuB,CAAC;AACzC,QAAA,IAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACvC,OAAO;AACL,YAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,QAAQ;AACjD,YAAA,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,QAAQ;SACjD,CAAC;KACH,CAAA;IAED,aAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,MAA0B,EAAA;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;KACjD,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,EAAE,GAAF,UAAwC,KAAa,EAAE,OAAkD,EAAA;QACvG,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KAC9C,CAAA;IAED,aAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,OAAoB,EAAA;QAA/B,IAOC,KAAA,GAAA,IAAA,CAAA;AANC,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACpF,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC3C,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,WAAW,EAAE,CAAC,YAAA,EAAA,IAAA,EAAA,CAAA,CAAM,OAAA,KAAI,CAAC,kBAAkB,CAAC,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAA,EAAA,CAAC;AACvE,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KAC7B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAc,EAAU,EAAE,CAAS,EAAE,CAAS,EAAA;QAA9C,IAiEC,KAAA,GAAA,IAAA,CAAA;QAhEC,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;AACxD,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAA,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,CAAC;QAC5C,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,QAAQ,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE;AACrB,YAAA,IAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5E,YAAA,IAAI,cAAc,EAAE;AAClB,gBAAA,QAAQ,GAAG;AACT,oBAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;AAC/B,oBAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;iBAChC,CAAC;AACF,gBAAA,IAAM,QAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACvD,IAAI,QAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE;oBAC7D,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAM,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvE,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAM,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1E,oBAAA,IAAI,MAAM,GAAS;AACjB,wBAAA,CAAC,EAAE,CAAC;AACJ,wBAAA,CAAC,EAAE,CAAC;AACJ,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,MAAM,EAAE,WAAW;qBACpB,CAAC;oBACF,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,wBAAA,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ;AACpC,8BAAE;AACE,gCAAA,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;AACzB,gCAAA,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AAC1B,gCAAA,KAAK,EAAE,UAAU;AACjB,gCAAA,MAAM,EAAE,WAAW;AACpB,6BAAA;AACH,8BAAE;AACE,gCAAA,CAAC,EAAE,CAAC;AACJ,gCAAA,CAAC,EAAE,CAAC;AACJ,gCAAA,KAAK,EAAE,QAAM,CAAC,IAAI,CAAC,KAAK;AACxB,gCAAA,MAAM,EAAE,QAAM,CAAC,IAAI,CAAC,MAAM;6BAC3B,CAAC;AACP,qBAAA;oBACD,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC/G,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1F,IAAM,YAAY,GAAa,EAAE,CAAC;AAClC,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,YAAY,CAAC,IAAI,CAAjB,KAAA,CAAA,YAAY,EAAS,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAE,CAAA;AAC9D,SAAA;AACD,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC3C,YAAA,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,CAAC,YAAM,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,KAAI,CAAC,kBAAkB,CAAC,CAAA,EAAA,GAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,QAAQ,mCAAI,IAAI,CAAC,CAAA,EAAA,CAAC;AACvE,YAAA,YAAY,EAAA,YAAA;AACb,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE5B,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,QAAQ,IAAI,QAAQ,EAAE;YACxB,IAAM,KAAK,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzE,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;AAClC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;AAC/B,oBAAA,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAA,QAAA,CAAA,EAAA,EAAO,QAAQ,CAAE;oBACzB,QAAQ,EAAA,QAAA,CAAA,EAAA,EAAO,QAAQ,CAAE;AACzB,oBAAA,KAAK,EAAA,KAAA;AACN,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;KACF,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,aAAa,GAAb,UAAc,EAAU,EAAE,KAAa,EAAE,MAAc,EAAA;QAAvD,IAeC,KAAA,GAAA,IAAA,CAAA;;QAdC,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAM,OAAO,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,IAAI,CAAC;QAC9B,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACrG,QAAA,IAAM,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AAC3E,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC3C,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,WAAW,EAAE,CAAC,YAAM,EAAA,OAAA,KAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAA,EAAA,EAAE,sBAAM,OAAA,KAAI,CAAC,kBAAkB,CAAC,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAA,EAAA,CAAC;AAC5G,YAAA,YAAY,EAAA,YAAA;AACb,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC5B,QAAA,IAAM,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAC;QAChD,IAAI,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE;YAChG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAA,QAAA,CAAA,EAAA,EAAO,OAAO,CAAE,EAAE,OAAO,eAAO,OAAO,CAAE,EAAE,CAAC,CAAC;AACzG,SAAA;KACF,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAiB,EAAU,EAAE,MAA6B,EAAA;QAA1D,IAUC,KAAA,GAAA,IAAA,CAAA;AATC,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7F,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC3C,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,WAAW,EAAE;gBACX,YAAM,EAAA,OAAA,KAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,GAAA;gBACnC,YAAM,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAA,OAAA,KAAI,CAAC,kBAAkB,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAA,EAAA;AAC3E,aAAA;AACF,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KAC7B,CAAA;IAED,aAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAc,EAAU,EAAA;QAAxB,IAeC,KAAA,GAAA,IAAA,CAAA;;QAdC,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC3C,QAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC;QAC5C,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAChD,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;YAC3C,WAAW,EAAE,OAAO,CAAC,OAAO;AAC5B,YAAA,WAAW,EAAE,CAAC,YAAM,EAAA,OAAA,KAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAjC,EAAiC,CAAC;AACvD,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC5B,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;AACvD,SAAA;AACD,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAChD,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAiB,SAAiB,EAAE,IAAc,EAAA;;QAChD,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,QAAA,IAAM,QAAQ,GAAkB,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,IAAI,KAAE,SAAS,EAAA,SAAA,GAAE,CAAC;AAClD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAM,WAAW,GAAG,IAAI,CAAC,sCAAsC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtG,YAAA,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;YACzC,QAAQ,CAAC,eAAe,GAAG,CAAA,EAAA,GAAA,WAAW,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,SAAS,CAAC;AACrE,SAAA;AACD,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC1B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,UAAW,EAAU,EAAE,CAAS,EAAE,CAAS,EAAA;AACzC,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAA,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,CAAC;QAC5C,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,QAAQ,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,eAA0C,CAAC;AAC/C,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3E,YAAA,IAAI,eAAe,EAAE;AACnB,gBAAA,IAAM,iBAAiB,GAAG;AACxB,oBAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;AAChC,oBAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;iBACjC,CAAC;AACF,gBAAA,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtD,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,IAAM,WAAW,GAAG,IAAI,CAAC,sCAAsC,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAClG,oBAAA,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;AAChC,oBAAA,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC;AAC/C,iBAAA;AAAM,qBAAA;oBACL,QAAQ,GAAG,iBAAiB,CAAC;AAC9B,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,IAAM,UAAU,GAAyD,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC;QACtF,IAAI,eAAe,KAAK,SAAS,EAAE;AACjC,YAAA,UAAU,CAAC,eAAe,GAAG,eAAe,CAAC;AAC9C,SAAA;AACD,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACzF,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,CAAC,IAAI,CAAZ,KAAA,CAAA,OAAO,EAAS,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAA;AACtD,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACrD,QAAA,IAAI,IAAI,IAAI,QAAQ,IAAI,QAAQ,EAAE;YAChC,IAAM,KAAK,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzE,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;AAClC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;AAC5B,oBAAA,MAAM,EAAE,EAAE;oBACV,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,QAAQ,EAAA,QAAA,CAAA,EAAA,EAAO,QAAQ,CAAE;oBACzB,QAAQ,EAAA,QAAA,CAAA,EAAA,EAAO,QAAQ,CAAE;AACzB,oBAAA,KAAK,EAAA,KAAA;AACN,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;KACF,CAAA;IAED,aAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAAU,EAAA;QACnB,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAChD,CAAA;IAED,aAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,IAAc,EAAA;;QACpB,IAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE;YACjF,cAAc,EAAE,IAAI,CAAC,YAAY;AAClC,SAAA,CAAC,CAAC;QACH,IAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE;YACjF,cAAc,EAAE,IAAI,CAAC,YAAY;AAClC,SAAA,CAAC,CAAC;QACH,IAAM,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;AACvC,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,MAAM,IAAI,MAAM,EAAE;YACpB,IAAI,OAAO,KAAK,MAAM,EAAE;gBACtB,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACtD,aAAA;AAAM,iBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,gBAAA,MAAM,GAAG,CAAM,QAAA,CAAA,EAAA,EAAA,MAAM,CAAS,EAAA,QAAA,CAAA,EAAA,EAAA,MAAM,EAAG,CAAC;AACzC,aAAA;AACF,SAAA;QACD,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CACnC,oBAAoB,CAAM,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,IAAI,KAAE,MAAM,EAAA,MAAA,EAAE,OAAO,EAAA,OAAA,EAAA,CAAA,CAAG,EAClD,IAAI,CAAC,KAAK,CACX,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC1B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAiB,EAAU,EAAE,MAAe,EAAA;QAC1C,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CACnC,uBAAuB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAA,MAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAC1D,IAAI,CAAC,KAAK,CACX,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC1B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAmB,EAAU,EAAE,IAAqB,EAAA;QAClD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAM,MAAM,GAAmD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjF,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,IAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE;gBACjF,cAAc,EAAE,IAAI,CAAC,YAAY;AAClC,aAAA,CAAC,CAAC;YACH,IAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE;gBACjF,cAAc,EAAE,IAAI,CAAC,YAAY;AAClC,aAAA,CAAC,CAAC;YACH,IAAI,MAAM,IAAI,MAAM,EAAE;AACpB,gBAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7D,aAAA;AACF,SAAA;AACD,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC1B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,eAAe,GAAf,YAAA;QACE,IAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;YAC5B,IAAI,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,mCAAI,MAAM,MAAM,MAAM,EAAE;AACvC,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KAC5B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,UAAa,OAAiB,EAAE,OAA6B,EAAA;QAA7D,IA2BC,KAAA,GAAA,IAAA,CAAA;AA1BC,QAAA,IAAM,aAAa,GAAG,OAAO,CAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,aAAa,CAAC,CAAC;QACtD,IAAM,OAAO,GAAmB,EAAE,CAAC;AACnC,QAAA,IAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAElC,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;;AACjB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO;AAC5B,YAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAM,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;AACvC,YAAA,IAAI,OAAO,KAAK,QAAQ,IAAI,CAAC,aAAa;gBAAE,OAAO;YACnD,IAAM,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE;gBACjF,cAAc,EAAE,IAAI,CAAC,YAAY;AAClC,aAAA,CAAC,CAAC;YACH,IAAM,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE;gBACjF,cAAc,EAAE,IAAI,CAAC,YAAY;AAClC,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;gBAAE,OAAO;AAC/B,YAAA,IAAM,MAAM,GAAG,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAM,WAAW,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;AACpG,YAAA,OAAO,CAAC,IAAI,CAAA,KAAA,CAAZ,OAAO,EAAS,WAAW,CAAE,CAAA;AAC/B,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1B,SAAA;KACF,CAAA;IAED,aAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAAU,EAAA;QACnB,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAChD,CAAA;IAED,aAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,IAAc,EAAA;QACpB,IAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACpD,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CACnC,oBAAoB,CACf,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,IAAI,KACP,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,cAAc,EAAE,QAAQ,CAAC,cAAc,EACvC,aAAa,EAAE,QAAQ,CAAC,aAAa,EACrC,eAAe,EAAE,QAAQ,CAAC,eAAe,EACzC,CAAA,CAAA,EACF,IAAI,CAAC,KAAK,CACX,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC1B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,UAAW,EAAU,EAAE,OAAe,EAAA;QAAtC,IAuCC,KAAA,GAAA,IAAA,CAAA;AAtCC,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACxF,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,IAAM,aAAa,GACjB,CAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,OAAO,KAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1F,QAAA,IAAI,IAAI,EAAE;YACR,IAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CACV,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE;gBACtB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,eAAe,EAAE,QAAQ,CAAC,eAAe;AAC1C,aAAA,CAAC,CACH,CAAC;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC9B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;AACvC,gBAAA,MAAM,EAAE,SAAS;AAClB,aAAA,CAAC,CAAC;AACJ,SAAA;QACD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO;AACR,SAAA;AACD,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC3C,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,WAAW,EAAE;gBACX,YAAM,EAAA,OAAA,KAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,GAAA;gBAC9C,YAAM,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAA,OAAA,KAAI,CAAC,kBAAkB,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAA,EAAA;AACtF,aAAA;AACF,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KAC7B,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,UAAW,EAAU,EAAE,CAAS,EAAE,CAAS,EAAA;QACzC,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,QAAQ,GAAU,EAAE,CAAC,GAAA,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,IAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzE,gBAAA,IAAI,eAAe,EAAE;AACnB,oBAAA,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC;AACnE,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,gBAAA,IAAI,IAAI,EAAE;AACR,oBAAA,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnE,oBAAA,IAAI,YAAY,EAAE;AAChB,wBAAA,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC;AAC7D,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,oBAAA,IAAI,IAAI,EAAE;AACR,wBAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1D,wBAAA,IAAI,QAAQ,EAAE;AACZ,4BAAA,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC;AACrD,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC1B,CAAA;IAED,aAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAAU,EAAA;QACnB,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAChD,CAAA;IAED,aAAY,CAAA,SAAA,CAAA,YAAA,GAAZ,UAAa,GAAa,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAA;IAED,aAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;KAC7B,CAAA;IAED,aAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,EAAU,EAAA;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;KAC/C,CAAA;IAED,aAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,EAAU,EAAA;;QAC3B,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC,CAAC;AACvB,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtD,QAAA,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;QAC9C,IAAM,gBAAgB,GAAG,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAA+B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;QAC9E,OAAO,YAAY,GAAG,gBAAgB,CAAC;KACxC,CAAA;IAED,aAAsB,CAAA,SAAA,CAAA,sBAAA,GAAtB,UACE,EAAU,EACV,QAAiE,EACjE,MAAyB,EACzB,OAAY,EAAA;AAAZ,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAY,GAAA,EAAA,CAAA,EAAA;AAEZ,QAAA,IAAM,OAAO,GAAG;YACd,CAAC,EAAE,QAAQ,CAAC,CAAC;YACb,CAAC,EAAE,QAAQ,CAAC,CAAC;YACb,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;SAC3C,CAAC;QACF,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,OAAO,CAAC;AAE7B,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,EAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,eAAe,CAAA;AAAE,YAAA,OAAO,OAAO,CAAC;AAE5C,QAAA,IAAM,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC;AACvC,YAAA,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,EAAA,MAAA;AACN,YAAA,OAAO,EAAA,OAAA;AACP,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;AAC3D,SAAA,CAAC,CAAC;AACH,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AAClD,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;AAEpD,QAAA,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;AACtC,YAAA,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;AACtC,YAAA,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9B,SAAA;AAED,QAAA,OAAO,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,EAAA,CAAA,EAAE,KAAK,EAAA,KAAA,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;KAChC,CAAA;IAED,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,EAAU,EAAA;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;KAC5C,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,wBAAwB,GAAxB,UACE,EAAU,EACV,OAA2E,EAAA;QAE3E,OAAO,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;KACtE,CAAA;IAED,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,EAAU,EAAA;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;KAC5C,CAAA;IAED,aAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAiB,MAAc,EAAA;;AAC7B,QAAA,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;KACtD,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,eAAe,GAAf,YAAA;QAAA,IAwCC,KAAA,GAAA,IAAA,CAAA;QAvCC,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACtC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClC,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAEpC,IAAM,UAAU,GAAa,EAAE,CAAC;AAIhC,QAAA,QAAQ,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;AAClB,YAAA,IAAI,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;AAAE,gBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9C,iBAAA,IAAI,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAAE,gBAAA,CAAiB;AAC7C,iBAAA,IAAI,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAAE,gBAAA,CAAiB;AAC7C,iBAAA,IAAI,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AAAE,gBAAA,CAAiB;AACpD,SAAC,CAAC,CAAC;AAEH,QAAA,QAAQ,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;YAClB,IAAI,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;AAC7B,gBAAA,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;gBAClE,OAAO;AACR,aAAA;YACD,IAAI,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AAC1B,gBAAA,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;gBAC/D,OAAO;AACR,aAAA;YACD,IAAI,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AAC1B,gBAAA,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;gBAC/D,OAAO;AACR,aAAA;YACD,IAAI,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AAC1B,gBAAA,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;AAChE,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/C,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS,EAAK,EAAA,OAAA,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAA,SAAA,EAAE,CAAC,CAAA,EAAA,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAX,UAAY,GAAU,EAAE,IAAY,EAAA;QAClC,IAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACpF,IAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC;AAClD,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa;YAAE,OAAO;AAE5C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CACb;AACE,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,EAAE,GAAG,EAAA,QAAA,CAAA,EAAA,EAAO,GAAG,CAAE,EAAE,IAAI,EAAA,IAAA,EAAE;AACnC,aAAA;AACF,SAAA,EACD,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;KACH,CAAA;IAED,aAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,MAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;KACjD,CAAA;IAED,aAAW,CAAA,SAAA,CAAA,WAAA,GAAX,UAAY,OAAqB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;KAClD,CAAA;IAED,aAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAc,KAAsB,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;KACnD,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;QACE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClC,CAAA;IAED,aAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,KAAuB,EAAA;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;KAC3C,CAAA;IAED,aAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAe,OAA0B,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAA,OAAA,EAAE,CAAC,CAAC;KAC7C,CAAA;IAED,aAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,KAAqB,EAAA;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;KAC1C,CAAA;IAED,aAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,KAAqB,EAAA;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;KACxC,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,UAAiB,SAAiB,EAAE,OAA0B,EAAE,OAAgB,EAAA;AAC9E,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAA,SAAA,EAAE,OAAO,EAAA,OAAA,EAAE,OAAO,EAAA,OAAA,EAAE,CAAC,CAAC;KACnE,CAAA;IAED,aAAsB,CAAA,SAAA,CAAA,sBAAA,GAAtB,UAAuB,KAA2E,EAAA;QAChG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;KAC/C,CAAA;IAED,aAAyB,CAAA,SAAA,CAAA,yBAAA,GAAzB,UAA0B,KAAiC,EAAA;QACzD,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAM,OAAO,yBACR,KAAK,CAAA,EAAA,EACR,SAAS,EAAE,KAAK,EAChB,MAAM,EAAE,YAAA;gBACN,SAAS,GAAG,IAAI,CAAC;AACjB,gBAAA,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AAC3B,aAAC,GACF,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;AACnD,QAAA,OAAO,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;KACvC,CAAA;IAED,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,KAOpB,EAAA;QACC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;KAC7C,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,OAAuB,EAAE,OAAyD,EAAA;QAArG,IAMC,KAAA,GAAA,IAAA,CAAA;;AALC,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAC;QAC3F,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,MAAM,MAAK,KAAK;YAAE,OAAO;QACtC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,YAAM,EAAA,OAAA,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAI,CAAC,KAAK,CAAC,CAAhC,EAAgC,CAAC,CAAC;KACtE,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,uBAAuB,GAA/B,UAAgC,OAAuB,EAAE,eAAwB,EAAA;QAAjF,IAKC,KAAA,GAAA,IAAA,CAAA;AAJC,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,EAAE;AAC7D,YAAA,eAAe,EAAA,eAAA;AACf,YAAA,aAAa,EAAE,UAAC,OAAO,EAAK,EAAA,OAAA,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAA;AACrE,SAAA,CAAC,CAAC;KACJ,CAAA;IAEO,aAAsC,CAAA,SAAA,CAAA,sCAAA,GAA9C,UACE,OAAuB,EAAA;QADzB,IAuDC,KAAA,GAAA,IAAA,CAAA;QApDC,IAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACjE,QAAA,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAEzE,IAAM,mBAAmB,GAAmB,EAAE,CAAC;AAC/C,QAAA,IAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;AAEvC,QAAA,eAAe,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAE,SAAS,EAAA;YAC1C,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAC,MAAM,EAAA;;gBAC1B,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxC,gBAAA,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,IAAM,iBAAiB,GAAG,KAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACxE,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,KAAK,MAAM,IAAI,iBAAiB,KAAK,QAAQ;oBAAE,OAAO;gBACjG,IAAI,iBAAiB,KAAK,SAAS,EAAE;AACnC,oBAAA,IAAM,QAAQ,GAAG,KAAI,CAAC,mCAAmC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3F,oBAAA,IAAM,WAAS,GACb,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB;AACnE,wBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB;wBACnE,QAAQ,CAAC,eAAe,MAAM,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,CAAC;AAC9D,oBAAA,IAAI,WAAS;wBAAE,OAAO;AACtB,oBAAA,IAAM,gBAAc,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAC1C,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE;wBAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,eAAe,EAAE,QAAQ,CAAC,eAAe;AAC1C,qBAAA,CAAC,EACF,KAAI,CAAC,KAAK,CACX,CAAC;AACF,oBAAA,mBAAmB,CAAC,IAAI,CAAA,KAAA,CAAxB,mBAAmB,EAAS,gBAAc,CAAE,CAAA;AAC5C,oBAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1B,OAAO;AACR,iBAAA;gBACD,IAAM,SAAS,GAAG,KAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3G,gBAAA,IAAM,WAAW,GAAG,KAAI,CAAC,sCAAsC,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AACvF,gBAAA,IAAM,SAAS,GACb,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB;AACtE,oBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB;AACtE,oBAAA,CAAC,MAAA,WAAW,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAC;AAC3E,gBAAA,IAAI,SAAS;oBAAE,OAAO;AACtB,gBAAA,IAAM,cAAc,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAC1C,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE;oBAC7B,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,eAAe,EAAE,WAAW,CAAC,eAAe;AAC7C,iBAAA,CAAC,EACF,KAAI,CAAC,KAAK,CACX,CAAC;AACF,gBAAA,mBAAmB,CAAC,IAAI,CAAA,KAAA,CAAxB,mBAAmB,EAAS,cAAc,CAAE,CAAA;AAC5C,gBAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5B,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;KACjF,CAAA;IAEO,aAA0B,CAAA,SAAA,CAAA,0BAAA,GAAlC,UACE,OAAuB,EAAA;AAEvB,QAAA,IAAM,OAAO,GAAG,IAAI,GAAG,EAAyG,CAAC;AACjI,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;;YACpB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAC,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAA;gBAAE,OAAO;AACvG,YAAA,IAAM,OAAO,GAAG,KAAK,CAAC,OAGrB,CAAC;YACF,IAAI,QAAO,CAAA,EAAA,GAAA,OAAO,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAA,KAAK,QAAQ,IAAI,QAAO,MAAA,OAAO,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,KAAK,QAAQ;gBAAE,OAAO;YAChG,IAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvC,YAAA,IAAM,YAAY,GAChB,CAAA,EAAA,GAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,YAAY,MACtB,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,QAAO,MAAA,OAAO,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAA,KAAK,QAAQ,IAAI,QAAO,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA,KAAK,QAAQ;AAClG,kBAAE,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE;kBAC1E,SAAS,CAAC,CAAC;AACjB,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;AACpB,gBAAA,YAAY,EAAA,YAAA;AACZ,gBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;AACjE,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;IAEO,aAAiC,CAAA,SAAA,CAAA,iCAAA,GAAzC,UACE,QAAe,EACf,OAAe,EACf,MAAqG,EACrG,WAA8C,EAAA;AAE9C,QAAA,IAAM,QAAQ,GAAG;YACf,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;SACxC,CAAC;AACF,QAAA,IAAM,YAAY,GAAG,MAAM,CAAC,YAAY;AACtC,cAAE;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AAC7C,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;AAChD,aAAA;cACD,SAAS,CAAC;AACd,QAAA,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,KAAK,IAAI,gBAAgB,IAAI,YAAY,CAAC,MAAM,IAAI,gBAAgB,CAAC,EAAE;YACxG,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnE,SAAA;AAED,QAAA,IAAM,cAAc,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACjF,QAAA,IAAM,UAAU,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACrE,QAAA,IAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AACzF,QAAA,IAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;AACjD,QAAA,IAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,QAAA,IAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AACzC,QAAA,IAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,IAAM,WAAW,GACf,iBAAiB,GAAG,gBAAgB,GAAG,CAAC,iBAAiB,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1G,IAAM,WAAW,GACf,kBAAkB,GAAG,gBAAgB,GAAG,CAAC,iBAAiB,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAC5G,QAAA,IAAM,eAAe,GAAG;AACtB,YAAA,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,WAAW,GAAG,aAAa;AAC7C,YAAA,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,WAAW,GAAG,cAAc;SAC/C,CAAC;QACF,OAAO,IAAI,CAAC,wBAAwB,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;KAC1E,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,sCAAsC,GAA9C,UACE,IAAqG,EACrG,OAA+D,EAC/D,iBAAwB,EAAA;;AAExB,QAAA,IAAI,QAAQ,GAAA,QAAA,CAAA,EAAA,EAAQ,iBAAiB,CAAE,CAAC;QACxC,IAAM,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAE3E,QAAA,IAAI,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,KAAK,QAAQ,EAAE;YACpE,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAC,CAAC;AAChF,YAAA,IAAI,MAAM,GAAS;AACjB,gBAAA,CAAC,EAAE,CAAC;AACJ,gBAAA,CAAC,EAAE,CAAC;AACJ,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;aACzC,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE;gBAClC,MAAM,GAAG,iBAAiB,KAAK,QAAQ;AACrC,sBAAE;AACE,wBAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;AACtB,wBAAA,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,MAAM,EAAE,WAAW;AACpB,qBAAA;AACH,sBAAE;AACE,wBAAA,CAAC,EAAE,CAAC;AACJ,wBAAA,CAAC,EAAE,CAAC;AACJ,wBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,wBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;qBACvC,CAAC;AACT,aAAA;YACD,IAAI,iBAAiB,KAAK,QAAQ,EAAE;AAClC,gBAAA,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1C,aAAA;AAAM,iBAAA;gBACL,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9D,aAAA;AACF,SAAA;AAED,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAEN,CAAC;QACd,IAAI,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,QAAQ,MAAK,YAAY,EAAE;YACpC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9B,SAAA;aAAM,IAAI,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,QAAQ,MAAK,UAAU,EAAE;YACzC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,UAAU,EAAE;AACrB,YAAA,IAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;YAChC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAClE,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACpE,SAAA;QAED,IAAI,iBAAiB,KAAK,QAAQ,EAAE;AAClC,YAAA,IAAM,cAAc,GAAG,IAAI,CAAC,+BAA+B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAA,OAAO,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAc,CAAC,CAAC;AACrH,YAAA,QAAQ,GAAG,cAAc,KAAd,IAAA,IAAA,cAAc,cAAd,cAAc,GAAI,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChF,SAAA;AAAM,aAAA;AACL,YAAA,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAc,CAAC,CAAC;AACzF,SAAA;QAED,IAAI,iBAAiB,KAAK,SAAS,EAAE;AACnC,YAAA,IAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACtF,YAAA,IAAI,MAAM,EAAE;gBACV,OAAO;AACL,oBAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,MAAM,CAAC,QAAQ,CAAE;oBAChC,eAAe,EAAE,MAAM,CAAC,EAAE;iBAC3B,CAAC;AACH,aAAA;AACD,YAAA,OAAO,EAAE,QAAQ,EAAA,QAAA,CAAA,EAAA,EAAO,IAAI,CAAC,QAAQ,CAAE,EAAE,eAAe,EAAE,MAAA,IAAI,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,EAAE,CAAC;AAC1F,SAAA;QAED,OAAO,EAAE,QAAQ,EAAA,QAAA,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;KAC5C,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,uBAAuB,GAA/B,UACE,QAAe,EACf,MAAoD,EAAA;AAEpD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAA,QAAA,CAAA,EAAA,EAAY,QAAQ,CAAG,CAAA;AACpC,QAAA,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QACnB,IAAI,MAAM,CAAC,CAAC,EAAE;YACZ,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AACpC,gBAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,aAAA;YACD,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AACpC,gBAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,aAAA;AACF,SAAA;QACD,IAAI,MAAM,CAAC,CAAC,EAAE;YACZ,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AACpC,gBAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,aAAA;YACD,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AACpC,gBAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC;KACjB,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,+BAA+B,GAAvC,UACE,QAAe,EACf,OAA8C,EAC9C,MAAoD,EAAA;QAHtD,IA2CC,KAAA,GAAA,IAAA,CAAA;;QAtCC,IAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,UAAU,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,2BAA2B,CAAC,UAAU,EAAE,MAAM,CAAC;AAAE,YAAA,OAAO,UAAU,CAAC;QAE5E,IAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAChE,QAAA,IAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9F,QAAA,IAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAI,QAAO,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAA,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,QAAO,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAA,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,QAAO,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAA,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,QAAO,CAAA,EAAA,GAAA,MAAM,CAAC,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAA,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEjE,IAAM,KAAK,GAAY,EAAE,CAAC;AAC1B,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,CAAC,EAAK,EAAA,OAAA,OAAO,CAAC,OAAO,CAAC,UAAC,CAAC,IAAK,OAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,GAAA,CAAC,CAA5C,EAA4C,CAAC,CAAC;AACrE,QAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;QAE/E,IAAM,UAAU,GAAY,EAAE,CAAC;AAC/B,QAAA,IAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;AAC/B,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;YACjB,IAAM,SAAS,GAAG,KAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAChE,IAAM,GAAG,GAAG,EAAG,CAAA,MAAA,CAAA,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC;AAClE,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACd,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;QAEH,IAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,UAAC,SAAS,EAAK,EAAA,OAAA,KAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA,EAAA,CAAC,CAAC;AACpG,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AAEpC,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,SAAS,EAAA;AAClC,YAAA,IAAM,YAAY,GAAG,IAAA,CAAA,GAAA,EAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAK,CAAC,CAAA,GAAG,IAAA,CAAA,GAAA,EAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAK,CAAC,CAAA,CAAC;AACzE,YAAA,IAAM,iBAAiB,GAAG,IAAA,CAAA,GAAA,EAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAK,CAAC,CAAA,GAAG,IAAA,CAAA,GAAA,EAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAK,CAAC,CAAA,CAAC;YACxF,IAAI,iBAAiB,GAAG,YAAY;AAAE,gBAAA,OAAO,SAAS,CAAC;YACvD,IAAI,iBAAiB,GAAG,YAAY;AAAE,gBAAA,OAAO,IAAI,CAAC;AAClD,YAAA,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,SAAS,CAAC;AAC3C,YAAA,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;AACtC,YAAA,OAAO,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AACjD,SAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACd,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,2BAA2B,GAAnC,UACE,QAAe,EACf,MAAoD,EAAA;AAEpD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC;QACzB,IAAI,MAAM,CAAC,CAAC,EAAE;AACZ,YAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK,CAAC;AAChF,YAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK,CAAC;AACjF,SAAA;QACD,IAAI,MAAM,CAAC,CAAC,EAAE;AACZ,YAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK,CAAC;AAChF,YAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAAE,gBAAA,OAAO,KAAK,CAAC;AACjF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,6BAA6B,GAArC,UACE,OAAqB,EACrB,MAAoD,EAAA;AAEpD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,OAAO,CAAC;AAC5B,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,UAAC,MAAM,EAAA;AACnB,YAAA,IAAA,QAAQ,GAAK,MAAM,CAAA,QAAX,CAAY;YAC5B,IAAI,MAAM,CAAC,CAAC,EAAE;AACZ,gBAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAAE,oBAAA,OAAO,KAAK,CAAC;AAChF,gBAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAAE,oBAAA,OAAO,KAAK,CAAC;AACjF,aAAA;YACD,IAAI,MAAM,CAAC,CAAC,EAAE;AACZ,gBAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAAE,oBAAA,OAAO,KAAK,CAAC;AAChF,gBAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG;AAAE,oBAAA,OAAO,KAAK,CAAC;AACjF,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC,CAAC;KACJ,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,4BAA4B,GAApC,UACE,IAAgC,EAChC,OAA0C,EAAA;;QAE1C,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC;KACxD,CAAA;IAEO,aAA4B,CAAA,SAAA,CAAA,4BAAA,GAApC,UACE,OAA+D,EAAA;;AAE/D,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,EAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,kBAAkB,CAAA;AAAE,YAAA,OAAO,EAAE,CAAC;AAC1C,QAAA,IAAM,IAAI,GAAS;AACjB,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;SACzC,CAAC;QACF,IAAM,cAAc,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC;QACtE,IAAM,WAAW,GAAuB,EAAE,CAAC;AAC3C,QAAA,IAAI,cAAc,EAAE;AAClB,YAAA,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,4BAA4B,CAAC,OAAO,CAAC,UAAC,MAAM,EAAA;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACjC,gBAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,KAAqB,UAAW,EAAX,aAAA,GAAA,WAAW,EAAX,EAAW,GAAA,aAAA,CAAA,MAAA,EAAX,IAAW,EAAE;AAA7B,YAAA,IAAM,MAAM,GAAA,aAAA,CAAA,EAAA,CAAA,CAAA;AACf,YAAA,IAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC,CAAC;AAC3D,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,OAAO,OAAO,CAAC;AACxC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,wBAAwB,GAAhC,UACE,OAA+D,EAC/D,MAAa,EACb,iBAA0B,EAAA;;QAE1B,IAAM,OAAO,GAAG,IAAI,CAAC,6BAA6B,CAChD,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,EAC1C,MAAA,OAAO,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAc,CACrC,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AACtC,QAAA,IAAI,iBAAiB,EAAE;AACrB,YAAA,IAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,UAAC,MAAM,EAAA,EAAK,OAAA,MAAM,CAAC,EAAE,KAAK,iBAAiB,CAA/B,EAA+B,CAAC,CAAC;AAC5E,YAAA,IAAI,SAAS;AAAE,gBAAA,OAAO,SAAS,CAAC;AACjC,SAAA;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpD,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,qBAAqB,GAA7B,UAA8B,MAAa,EAAE,OAAqB,EAAA;AAChE,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,OAAO,EAAA;AAClC,YAAA,IAAM,YAAY,GAAG,IAAA,CAAA,GAAA,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAK,CAAC,CAAA,GAAG,IAAA,CAAA,GAAA,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAK,CAAC,CAAA,CAAC;AAC3F,YAAA,IAAM,eAAe,GAAG,IAAA,CAAA,GAAA,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAK,CAAC,CAAA,GAAG,IAAA,CAAA,GAAA,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAK,CAAC,CAAA,CAAC;YACpG,OAAO,eAAe,GAAG,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC;AACzD,SAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;KAChB,CAAA;IAEO,aAAmC,CAAA,SAAA,CAAA,mCAAA,GAA3C,UACE,IAAoD,EACpD,IAA4D,EAC5D,MAAqG,EACrG,WAA8C,EAAA;;AAE9C,QAAA,IAAM,QAAQ,GAAG;YACf,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;SACxC,CAAC;AACF,QAAA,IAAM,QAAQ,GAA2D;YACvE,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;AACF,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/F,IAAI,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE;AACtD,YAAA,OAAO,EAAE,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,SAAS,CAAC,QAAQ,CAAE,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;AAC/E,SAAA;AAED,QAAA,IAAM,YAAY,GAAG,MAAM,CAAC,YAAY;AACtC,cAAE;AACE,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AAC7C,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;AAChD,aAAA;cACD,SAAS,CAAC;AACd,QAAA,IAAI,eAAe,GAAQ,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,QAAQ,CAAE,CAAC;AAC3C,QAAA,IAAI,YAAY,KAAK,YAAY,CAAC,KAAK,GAAG,gBAAgB,IAAI,YAAY,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE;AACrG,YAAA,IAAM,cAAc,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACjF,YAAA,IAAM,UAAU,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACrE,YAAA,IAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;AACjD,YAAA,IAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,YAAA,IAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AACzC,YAAA,IAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,IAAM,WAAW,GACf,iBAAiB,GAAG,gBAAgB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,iBAAiB,GAAG,CAAC,CAAC;YACtG,IAAM,WAAW,GACf,kBAAkB,GAAG,gBAAgB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,kBAAkB,GAAG,CAAC,CAAC;AACxG,YAAA,eAAe,GAAG;AAChB,gBAAA,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,WAAW,GAAG,aAAa;AAC7C,gBAAA,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,WAAW,GAAG,cAAc;aAC/C,CAAC;AACH,SAAA;QAED,IAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,EAAE,QAAQ,EAAA,QAAA,CAAA,EAAA,EAAO,IAAI,CAAC,QAAQ,CAAE,EAAE,eAAe,EAAE,MAAA,IAAI,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,EAAE,CAAC;AAC1F,SAAA;QACD,OAAO;AACL,YAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,QAAQ,CAAC,QAAQ,CAAE;YAClC,eAAe,EAAE,QAAQ,CAAC,EAAE;SAC7B,CAAC;KACH,CAAA;IAEO,aAAuB,CAAA,SAAA,CAAA,uBAAA,GAA/B,UAAgC,IAAc,EAAA;QAM5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;KAC7D,CAAA;IAEO,aAAiC,CAAA,SAAA,CAAA,iCAAA,GAAzC,UAA0C,eAAwB,EAAA;QAAlE,IA0CC,KAAA,GAAA,IAAA,CAAA;QAzCC,IAAM,WAAW,GAAmB,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AAC5B,YAAA,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAM,QAAQ,GAAG,KAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACvD,IAAM,cAAc,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,cAAc,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC,OAAO,CAAC;AACjE,YAAA,IAAM,WAAW,GACf,CAAC,OAAO,CAAC,IAAI;gBACb,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK;gBAC1C,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/C,YAAA,IAAM,cAAc,GAAG,cAAc,KAAK,QAAQ,CAAC,cAAc,CAAC;YAClE,IAAM,aAAa,GACjB,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;gBACpE,CAAC,CAAA,EAAA,GAAA,MAAA,OAAO,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,0CAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC;YACvE,IAAM,WAAW,GACf,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;gBAChF,CAAC,CAAA,EAAA,GAAA,MAAA,OAAO,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,OAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,eAAe,0CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC;YACrF,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW;gBAAE,OAAO;AAE9E,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAClD,WAAW,CAAC,IAAI,CACd,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;gBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,eAAe,EAAE,QAAQ,CAAC,eAAe;AAC1C,aAAA,CAAC,CACH,CAAC;AACF,YAAA,IAAI,eAAe,EAAE;AACnB,gBAAA,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;oBAC9B,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;AACvC,oBAAA,MAAM,EAAE,QAAQ;AACjB,iBAAA,CAAC,CAAC;AACJ,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,WAAW,CAAC;KACpB,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,aAAa,GAArB,YAAA;QAAA,IAoBC,KAAA,GAAA,IAAA,CAAA;QAnBC,IAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,EAAA,WAAA,EAAE,CAAC,CAAC;AAC/C,QAAA,WAAW,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;YACrB,IAAM,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC1C,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvD,OAAO;AACR,aAAA;YACD,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC5E,OAAO;AACR,aAAA;YACD,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AAClD,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;KAC5C,CAAA;IAEO,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UAA6B,QAAgB,EAAA;QAC3C,OAAO,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAC9D,CAAA;IAEO,aAAkB,CAAA,SAAA,CAAA,kBAAA,GAA1B,UAA2B,aAA4B,EAAA;QACrD,OAAO,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;KACjE,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC;KACjD,CAAA;IAEO,aAA6B,CAAA,SAAA,CAAA,6BAAA,GAArC,UAAsC,SAAiB,EAAA;;QACrD,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,QAAA,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,MAAA,CAAA,EAAA,GAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,kBAAkB,0CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;QACjE,OAAO,IAAI,KAAK,UAAU,CAAC;KAC5B,CAAA;IAEO,aAAmB,CAAA,SAAA,CAAA,mBAAA,GAA3B,UAA4B,OAAiB,EAAA;QAC3C,OAAO,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;KAC7D,CAAA;IAEO,aAAqB,CAAA,SAAA,CAAA,qBAAA,GAA7B,UAA8B,SAAiB,EAAA;AAC7C,QAAA,IAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO,EAAA;;YAClC,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,OAAO;AAC9B,YAAA,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AAC1D,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtB,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;QAEH,IAAM,OAAO,GAAa,EAAE,CAAC;AAC7B,QAAA,IAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1B,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,IAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACjD,YAAA,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,IAAI,CAAZ,KAAA,CAAA,OAAO,EAAS,OAAO,CAAC,OAAO,CAAE,CAAA;AAClC,aAAA;YACD,IAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjD,YAAA,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAnB,EAAmB,CAAC,CAAC;AACpD,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,gBAAgB,GAAxB,UAAyB,IAAc,EAAE,MAAa,EAAE,MAAa,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACvE,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,yBAAyB,GAAjC,UACE,QAAe,EACf,OAAqE,EAAA;AAErE,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/E,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,wBAAwB,GAAhC,UACE,QAAe,EACf,OAAe,EACf,IAAuC,EAAA;AAEvC,QAAA,IAAM,IAAI,GAAS;AACjB,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;YAC9B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;SACjC,CAAC;QACF,IAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9C,QAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,eAAe,EAAE;YAC1B,OAAO,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC9C,SAAA;QACD,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;KACvD,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,yBAAyB,GAAjC,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,EAAE,CAAC;KAC5D,CAAA;IAEO,aAA6B,CAAA,SAAA,CAAA,6BAAA,GAArC,UACE,OAAkB,EAAA;QADpB,IAsCC,KAAA,GAAA,IAAA,CAAA;QAnCC,IAAM,GAAG,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,OAAO,GAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAM,iBAAiB,GAAmB,EAAE,CAAC;AAC7C,QAAA,IAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;AAEvC,QAAA,GAAG,CAAC,OAAO,CAAC,UAAC,MAAM,EAAA;;YACjB,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO;AAClB,YAAA,IAAM,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,OAAO;gBAAE,OAAO;AAErB,YAAA,IAAM,WAAW,GAAG,KAAI,CAAC,sCAAsC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9F,IAAM,gBAAgB,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;YACtD,IAAM,qBAAqB,GAAG,gBAAgB,KAAK,IAAI,IAAI,WAAW,CAAC,eAAe,KAAK,IAAI,CAAC;AAChG,YAAA,IAAM,YAAY,GAAG,qBAAqB,IAAI,CAAA,EAAA,GAAA,WAAW,CAAC,eAAe,mCAAI,IAAI,IAAI,gBAAgB,CAAC;AACtG,YAAA,IAAM,SAAS,GACb,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB;AACtE,gBAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB;gBACtE,gBAAgB,KAAK,YAAY,CAAC;AACpC,YAAA,IAAI,SAAS;gBAAE,OAAO;AAEtB,YAAA,IAAM,MAAM,GAAyD;gBACnE,QAAQ,EAAE,WAAW,CAAC,QAAQ;aAC/B,CAAC;AACF,YAAA,IAAI,qBAAqB,EAAE;AACzB,gBAAA,MAAM,CAAC,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC;AACtD,aAAA;YACD,IAAM,OAAO,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CACnC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EACtC,KAAI,CAAC,KAAK,CACX,CAAC;AACF,YAAA,iBAAiB,CAAC,IAAI,CAAA,KAAA,CAAtB,iBAAiB,EAAS,OAAO,CAAE,CAAA;AACnC,YAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5B,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;KAC/E,CAAA;IAEO,aAAkB,CAAA,SAAA,CAAA,kBAAA,GAA1B,UAA2B,MAAoB,EAAA;QAI7C,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,IAAM,cAAc,GAAmB,EAAE,CAAC;QAC1C,IAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,EAAA,EAAK,OAAA,OAAO,CAAC,EAAE,CAAV,EAAU,CAAC,CAAC,CAAC;QAC7E,IAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,CAAP,EAAO,CAAC,CAAC,CAAC;QACjE,IAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,CAAP,EAAO,CAAC,CAAC,CAAC;QACjE,IAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,CAAP,EAAO,CAAC,CAAC,CAAC;QAEjE,IAAM,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,EAAA,EAAK,OAAA,OAAO,CAAC,EAAE,CAAV,EAAU,CAAC,CAAC,CAAC;QAC3E,IAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,CAAP,EAAO,CAAC,CAAC,CAAC;QAC/D,IAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,CAAP,EAAO,CAAC,CAAC,CAAC;QAC/D,IAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,CAAP,EAAO,CAAC,CAAC,CAAC;AAE/D,QAAA,cAAc,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9E,SAAC,CAAC,CAAC;QACH,IAAM,YAAY,GAAe,EAAE,CAAC;AACpC,QAAA,WAAW,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACvB,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,EAAE,KAAK,EAAE,CAAd,EAAc,CAAC,CAAC;AAChE,gBAAA,IAAI,WAAW;AAAE,oBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjD,aAAA;AACH,SAAC,CAAC,CAAC;QACH,IAAM,YAAY,GAAe,EAAE,CAAC;AACpC,QAAA,WAAW,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACvB,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,EAAE,KAAK,EAAE,CAAd,EAAc,CAAC,CAAC;AAChE,gBAAA,IAAI,WAAW;AAAE,oBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjD,aAAA;AACH,SAAC,CAAC,CAAC;QACH,IAAM,YAAY,GAAe,EAAE,CAAC;AACpC,QAAA,WAAW,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACvB,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,EAAE,KAAK,EAAE,CAAd,EAAc,CAAC,CAAC;AAChE,gBAAA,IAAI,WAAW;AAAE,oBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjD,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,OAAO;AACL,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;SAC3E,CAAC;KACH,CAAA;IAEO,aAAwB,CAAA,SAAA,CAAA,wBAAA,GAAhC,UAAiC,OAAoE,EAAA;QAArG,IAcC,KAAA,GAAA,IAAA,CAAA;AAbC,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;YACzB,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAClF,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AACzB,YAAA,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC9B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;YACzB,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9E,SAAC,CAAC,CAAC;KACJ,CAAA;IACH,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAEM,IAAM,mBAAmB,GAAG,UAAC,MAA2B,EAAA;AAC7D,IAAA,IAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO;AACL,QAAA,IAAI,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,EAAA;QACnC,QAAQ,EAAE,cAAM,OAAA,MAAM,CAAC,QAAQ,EAAE,GAAA;QACjC,WAAW,EAAE,cAAM,OAAA,MAAM,CAAC,WAAW,EAAE,GAAA;AACvC,QAAA,aAAa,EAAE,UAAC,WAAW,EAAE,SAAS,IAAK,OAAA,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,GAAA;AACvF,QAAA,kBAAkB,EAAE,UAAC,MAAM,EAAA,EAAK,OAAA,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA,EAAA;AACjE,QAAA,EAAE,EAAE,UAAC,KAAK,EAAE,OAAO,IAAK,OAAA,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,GAAA;AACjD,QAAA,UAAU,EAAE,UAAC,OAAO,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA,EAAA;QACnD,aAAa,EAAE,UAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAK,OAAA,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAA;QAC3D,aAAa,EAAE,UAAC,EAAE,EAAE,KAAK,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAA;AAC7E,QAAA,gBAAgB,EAAE,UAAC,EAAE,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAA;AACrE,QAAA,aAAa,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA,EAAA;AAC/C,QAAA,gBAAgB,EAAE,UAAC,SAAS,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAA;QAC/E,UAAU,EAAE,UAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAA;AACrD,QAAA,UAAU,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA,EAAA;AACzC,QAAA,OAAO,EAAE,UAAC,IAAI,EAAA,EAAK,OAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,EAAA;AACvC,QAAA,gBAAgB,EAAE,UAAC,EAAE,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAA;AACrE,QAAA,kBAAkB,EAAE,UAAC,EAAE,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAuB,CAAC,GAAA;QACxF,eAAe,EAAE,cAAM,OAAA,MAAM,CAAC,eAAe,EAAE,GAAA;AAC/C,QAAA,YAAY,EAAE,UAAC,OAAO,EAAE,OAAO,IAAK,OAAA,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,GAAA;AACzE,QAAA,UAAU,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA,EAAA;AACzC,QAAA,OAAO,EAAE,UAAC,IAAI,EAAA,EAAK,OAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,EAAA;AACvC,QAAA,UAAU,EAAE,UAAC,EAAE,EAAE,OAAO,IAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,GAAA;QAC3D,UAAU,EAAE,UAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAA;AACrD,QAAA,UAAU,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA,EAAA;AACzC,QAAA,YAAY,EAAE,UAAC,GAAG,EAAA,EAAK,OAAA,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,EAAA;AAC/C,QAAA,WAAW,EAAE,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAA;AACzD,QAAA,UAAU,EAAE,UAAC,MAAM,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,MAAwB,CAAC,CAAA,EAAA;AACnE,QAAA,WAAW,EAAE,UAAC,OAAO,EAAA,EAAK,OAAA,MAAM,CAAC,WAAW,CAAC,OAAuB,CAAC,CAAA,EAAA;AACrE,QAAA,aAAa,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,MAAM,CAAC,aAAa,CAAC,KAAwB,CAAC,CAAA,EAAA;QACxE,MAAM,EAAE,cAAM,OAAA,MAAM,CAAC,MAAM,EAAE,GAAA;KAC9B,CAAC;AACJ;;AC79CA,IAAA,WAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;AAC3C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;KAoCnC;AAlCC,IAAA,WAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,UAAS,IAAY,EAAE,KAAqB,EAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC9B,CAAA;IAED,WAAQ,CAAA,SAAA,CAAA,QAAA,GAAR,UAAS,IAAY,EAAA;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC9B,CAAA;IAED,WAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAU,IAAY,EAAA;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,SAAA;KACF,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,YAAA;QAAA,IAEC,KAAA,GAAA,IAAA,CAAA;AADC,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,KAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,EAAA,CAAC,CAAC;KACxE,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,SAAS,GAAT,YAAA;QAAA,IASC,KAAA,GAAA,IAAA,CAAA;AARC,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9C,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;YACjB,IAAM,KAAK,GAAG,KAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,YAAA,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,IAAI,EAAE,CAAC;AACd,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KACpB,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK,EAAK,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,EAAA,GAAA,KAAK,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KACpB,CAAA;IACH,OAAC,WAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACjBD,IAAIC,aAAW,GAAqB,IAAI,CAAC;AAEzC,IAAMC,UAAQ,GAAG,YAAA;;AACf,IAAA,IAAID,aAAW;AAAE,QAAA,OAAOA,aAAW,CAAC;;;AAGpC,IAAA,IAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAwC,CAAC;IACvE,IAAM,QAAQ,GAAG,CAAC,EAAA,GAAA,MAAkC,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;IACvEA,aAAW,GAAG,QAAqB,CAAC;AACpC,IAAA,OAAOA,aAAW,CAAC;AACrB,CAAC,CAAC;AAEF,IAAA,gBAAA,kBAAA,YAAA;IAIE,SAAY,gBAAA,CAAA,QAAuB,EAAE,KAA6B,EAAA;QAA7B,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAmB,GAAAC,UAAQ,EAAE,CAAA,EAAA;AAChE,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,gBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,KAAkB,EAAA;AAClC,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/C,QAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,UAAU,EAAE;YACrB,IAAM,MAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAkB,CAAC;AACtD,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,YAAA,OAAO,MAAI,CAAC;AACb,SAAA;AACD,QAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE;YAClB,IAAM,MAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACzF,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,YAAA,OAAO,MAAI,CAAC;AACb,SAAA;AACD,QAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE;YACf,IAAM,MAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACtF,YAAA,IAAI,CAAC,uBAAuB,CAAC,MAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,YAAA,OAAO,MAAI,CAAC;AACb,SAAA;QACD,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAChC,YAAA,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACnB,YAAA,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnB,EAAE,EAAE,KAAK,CAAC,EAAE;AACZ,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,gBAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAe,KAAe,EAAA;;QAC5B,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/C,YAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,UAAU,EAAE;gBACrB,IAAM,MAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAkB,CAAC;AACtD,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,gBAAA,OAAO,MAAI,CAAC;AACb,aAAA;AACD,YAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE;AAClB,gBAAA,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACnD,gBAAA,IAAM,MAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAA,IAAA,EAAE,CAAC,CAAC;AAC1E,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,gBAAA,OAAO,MAAI,CAAC;AACb,aAAA;AACD,YAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE;AACf,gBAAA,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACnD,gBAAA,IAAM,MAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAA,IAAA,EAAE,CAAC,CAAC;AACvE,gBAAA,IAAI,CAAC,uBAAuB,CAAC,MAAI,EAAE,KAAK,CAAC,CAAC;AAC1C,gBAAA,OAAO,MAAI,CAAC;AACb,aAAA;AACF,SAAA;QACD,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACjC,YAAA,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACnB,YAAA,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnB,EAAE,EAAE,KAAK,CAAC,EAAE;AACZ,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,IAAI,EAAE,MAAM;AACb,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,gBAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAe,KAAe,EAAA;;QAC5B,IAAM,UAAU,GAAa,EAAE,CAAC;AAChC,QAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;YACzB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;AACH,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,KAA4C,CAAC;AACjE,QAAA,IAAM,WAAW,GAAG,CAAC,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,WAAkC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;AACpE,QAAA,IAAM,cAAc,GAAG,CAAC,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,cAAqC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AAC3E,QAAA,IAAM,MAAM,GAAG,CAAC,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,MAA6B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC;AAChE,QAAA,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,QAAA,CAAA,EAC9B,MAAM,EAAE,UAAU,EAClB,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,MAAM,EAAA,MAAA,EACN,WAAW,aAAA,EACX,cAAc,gBAAA,EACd,IAAI,EAAE,MAAM,EAAA,GACR,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,EAAE,GACf,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,CAAC;AACzE,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,gBAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAe,KAAe,EAAA;;AAC5B,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,KAA4C,CAAC;AACjE,QAAA,IAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACjD,QAAA,IAAM,QAAQ,GAAG,CAAC,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,IAA2B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC;AAChE,QAAA,IAAM,aAAa,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5D,QAAA,IAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC;QACnC,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,QAAA,CAAA,QAAA,CAAA,EAC9B,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EACrC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EACrC,IAAI,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,cAAc,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAAC,OAAO,EAC3C,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU,EAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU,EAC5B,GAAC,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,EAAE,EAAC,EAAA,EAChB,KAAK,EAAE,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,EAClB,MAAM,EAAE,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAM,EACpB,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,KAAK;;AAEf,YAAA,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,SAAS,EAC3B,KAAK,EAAE,IAAI,GAAG,CAAC,GAAG,SAAS,EAC3B,SAAS,EAAE,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,KAAK,EACtB,UAAU,EAAE,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,IACxB,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AACzC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAED,gBAAwB,CAAA,SAAA,CAAA,wBAAA,GAAxB,UAAyB,MAUxB,EAAA;AACC,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;AACjC,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC,CAAC;KACJ,CAAA;IAED,gBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAhB,UAAiB,MAAwE,EAAA;AACvF,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,KAAK,EAAE,MAAM,CAAC,IAAI;YAClB,MAAM,EAAE,MAAM,CAAC,IAAI;AACnB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,MAAM,CAAC,IAAI;AAClB,SAAA,CAAC,CAAC;KACJ,CAAA;IAED,gBAAsB,CAAA,SAAA,CAAA,sBAAA,GAAtB,UAAuB,MAA0E,EAAA;AAC/F,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,MAAM,CAAC,IAAI;AAClB,SAAA,CAAC,CAAC;KACJ,CAAA;IAED,gBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,MAAwC,EAAA;AACzD,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC,CAAC;KACJ,CAAA;IAED,gBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,MAA2E,EAAA;AAC3F,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,IAAI,EAAE,0BAA0B;AAChC,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC,CAAC;KACJ,CAAA;IAED,gBAA8B,CAAA,SAAA,CAAA,8BAAA,GAA9B,UAA+B,MAK9B,EAAA;;AACC,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CACxB,QAAA,CAAA,EAAA,EAAE,EAAE,MAAM,CAAC,EAAE,EACb,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EACpE,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,EACd,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,KAAK,KACZ,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,GACtB,CAAC;KACJ,CAAA;IAED,gBAA0B,CAAA,SAAA,CAAA,0BAAA,GAA1B,UAA2B,MAM1B,EAAA;;AACC,QAAA,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC5D,QAAA,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAC9B,QAAA,CAAA,EAAA,EAAE,EAAE,MAAM,CAAC,EAAE,EACb,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EACpB,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,CAAC,OAAO,EACpB,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,EAAA,GACV,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,GACtB,CAAC;QACH,IAAM,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;AACrF,QAAA,IAAM,SAAS,GAAG,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,KAAK,KAAI,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;AACvD,QAAA,IAAM,UAAU,GAAG,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAM,KAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;AAC1D,QAAA,IAAM,MAAM,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC;AACvE,QAAA,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC;gBACZ,OAAO,EAAE,SAAS,GAAG,CAAC;gBACtB,OAAO,EAAE,UAAU,GAAG,CAAC;AACvB,gBAAA,MAAM,EAAA,MAAA;AACN,gBAAA,MAAM,EAAA,MAAA;AACN,gBAAA,oBAAoB,EAAE,SAAS;AAC/B,gBAAA,qBAAqB,EAAE,UAAU;AAClC,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,cAAc,GAAtB,UACE,KAA6B,EAC7B,KAAsB,EACtB,MAAkE,EAAA;;AAElE,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,KAA4C,CAAC;AAC3D,QAAA,IAAA,EAAqC,GAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAnE,aAAa,GAAA,EAAA,CAAA,KAAA,EAAE,QAAQ,cAA4C,CAAC;QACnF,IAAM,KAAK,GACT,QAAA,CAAA,QAAA,CAAA,EAAA,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,IAAI,EAAE,MAAM,CAAC,IAAI,EACd,GAAC,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,KAAA,CAAA,GAAb,aAAa,GAAI,EAAE,EACvB,EAAA,EAAA,WAAW,EAAE,IAAI,EACjB,OAAO,EAAE,KAAK,EACd,QAAQ,EAAA,QAAA,EACR,SAAS,EAAE,UAAC,GAA6B,EAAE,IAAmB,EAAA;;AAC5D,gBAAA,IAAM,aAAa,GACjB,CAAA,EAAA,IAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAAC;AAC1E,gBAAA,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAG,EAAE,GAAG,EAAA,GAAA,EAAE,KAAK,EAAE,aAAuC,EAAE,CAAC,CAAC;AACxE,aAAC,GACF,CAAC;QACF,IAAI,CAAA,MAAA,MAAM,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAK,SAAS,EAAE;YACpC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,SAAA;QACD,IAAI,CAAA,MAAA,MAAM,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAK,SAAS,EAAE;YACrC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,SAAA;QACD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACpC,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,UACE,KAA6B,EAC7B,KAAsB,EACtB,MAAkE,EAAA;;AAElE,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,KAA4C,CAAC;AAC3D,QAAA,IAAA,EAAqC,GAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAnE,aAAa,GAAA,EAAA,CAAA,KAAA,EAAE,QAAQ,cAA4C,CAAC;QACnF,IAAM,WAAW,GAAyB,UAAC,EAM1C,EAAA;;AALO,YAAA,IAAA,QAAQ,GAAA,EAAA,CAAA,IAAA,EACd,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,WAAW,GAAA,EAAA,CAAA,WAAA,CAAA;YAEX,IAAM,KAAK,GAA4B,EAAE,CAAC;YAC1C,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,WAAW,CAAS,iBAAiB,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,QAAQ,CAAC,KAAK,CAAC;YAC3E,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,WAAW,CAAS,kBAAkB,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,QAAQ,CAAC,MAAM,CAAC;AAC9E,YAAA,IAAI,SAAS,EAAE;gBACb,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC;AAC3C,aAAA;AACD,YAAA,IAAI,UAAU,EAAE;gBACd,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;AAC7C,aAAA;AACD,YAAA,IAAI,aAAa,EAAE;AACjB,gBAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;AAClD,aAAA;AACD,YAAA,IAAI,aAAa,EAAE;AACjB,gBAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACf,SAAC,CAAC;AAEF,QAAA,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACpD,QAAA,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,QAAA,CAAA,QAAA,CAAA,EAC9B,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,QAAQ,EAAA,QAAA,EACR,IAAI,EAAE,KAAK,CAAC,OAAO,EACnB,IAAI,EAAE,MAAM,CAAC,IAAI,EACd,GAAC,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,aAAa,GAAI,EAAE,EAAC,EAAA,EACxB,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,IAAI,EACnB,aAAa,EAAE,IAAI,IACnB,CAAC;QAEH,IAAM,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QACrF,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC;QACpE,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC;AACxE,QAAA,IAAM,MAAM,GAAG,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AAC5D,QAAA,IAAM,MAAM,GAAG,UAAU,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QAE/D,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC;AACZ,gBAAA,MAAM,EAAA,MAAA;AACN,gBAAA,MAAM,EAAA,MAAA;AACN,gBAAA,eAAe,EAAE,SAAS;AAC1B,gBAAA,gBAAgB,EAAE,UAAU;AAC5B,gBAAA,aAAa,EAAE,WAAW;AAC3B,aAAA,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,oBAAoB,GAA5B,UACE,KAAsB,EACtB,KAA0C,EAAA;;QAE1C,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;AACL,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,YAAY,mCAAI,CAAC;aAClC,CAAC;AACH,SAAA;QACO,IAAA,QAAQ,GAAc,KAAK,CAAnB,QAAA,EAAK,IAAI,GAAA,MAAA,CAAK,KAAK,EAA7B,CAAqB,UAAA,CAAA,CAAF,CAAW;QACpC,OAAO;AACL,YAAA,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,CAAC,CAAA,EAAA,GAAA,KAAK,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,KAAK,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC;SACpF,CAAC;KACH,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,uBAAuB,GAA/B,UAAgC,IAAmB,EAAE,KAAsB,EAAA;QACzE,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO;QACjD,IAAI,CAAC,QAAQ,CAAC;YACZ,aAAa,EAAE,KAAK,CAAC,WAAW;AACjC,SAAA,CAAC,CAAC;KACJ,CAAA;IACH,OAAC,gBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACvWD,IAAI,WAAW,GAAwC,IAAI,CAAC;AAE5D,IAAMA,UAAQ,GAAG,YAAA;;AACf,IAAA,IAAI,WAAW;AAAE,QAAA,OAAO,WAAwD,CAAC;;;AAGjF,IAAA,IAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAA8E,CAAC;IAC7G,IAAM,QAAQ,GAAG,CAAC,EAAA,GAAA,MAAqD,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC;IAC1F,WAAW,GAAG,QAAwC,CAAC;AACvD,IAAA,OAAO,QAAqD,CAAC;AAC/D,CAAC,CAAC;AAEF,IAAA,aAAA,kBAAA,YAAA;AAsBE,IAAA,SAAA,aAAA,CAAY,MAAgC,EAAA;AAAhC,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAgC,GAAA,EAAA,CAAA,EAAA;;AApBpC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;AAG3B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;AAChD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;AAC7C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;AAC7C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;AAC7C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,GAAG,EAAyB,CAAC;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEhC,IAAY,CAAA,YAAA,GAAyB,IAAI,CAAC;QAC1C,IAAY,CAAA,YAAA,GAAyB,IAAI,CAAC;QAE1C,IAAW,CAAA,WAAA,GAAyB,IAAI,CAAC;AACzC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAyB,CAAC;AACrD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAC;QACnD,IAAsB,CAAA,sBAAA,GAA8D,IAAI,CAAC;AACzF,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAgF,CAAC;QACxG,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;QAGpB,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAIA,UAAQ,EAAE,CAAC;QACzC,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,aAAa,EAAE,CAAC;AAC7D,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE/E,IAAI,MAAM,CAAC,KAAK,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,IAAK,KAAmC,CAAC,KAAK,CAAC;AAC1D,gBAAA,SAAS,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,mCAAI,SAAS;AACxC,gBAAA,KAAK,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,mCAAI,GAAG;AAC1B,gBAAA,MAAM,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,mCAAI,GAAG;AAC7B,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAM,YAAY,GAAG,IAAK,KAAmC,CAAC,KAAK,EAAE,CAAC;AACtE,QAAA,IAAM,SAAS,GAAG,IAAK,KAAmC,CAAC,KAAK,EAAE,CAAC;AACnE,QAAA,IAAM,SAAS,GAAG,IAAK,KAAmC,CAAC,KAAK,EAAE,CAAC;AACnE,QAAA,IAAM,SAAS,GAAG,IAAK,KAAmC,CAAC,KAAK,EAAE,CAAC;AACnE,QAAA,IAAM,YAAY,GAAG,IAAK,KAAmC,CAAC,KAAK,EAAE,CAAC;QAEtE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAE7B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;KAClC;IAED,aAAM,CAAA,SAAA,CAAA,MAAA,GAAN,UAAO,KAAmB,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;KACzB,CAAA;IAED,aAAe,CAAA,SAAA,CAAA,eAAA,GAAf,UAAgB,GAAa,EAAA;QAA7B,IAkDC,KAAA,GAAA,IAAA,CAAA;QAjDC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,EAAE,EAAA;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC3B,IAAM,UAAU,GAAG,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC;gBACZ,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;gBAC1C,WAAW,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC;AAChC,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,EAAE,EAAA;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC3B,IAAM,UAAU,GAAG,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC;gBACZ,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;gBAC1C,WAAW,EAAE,UAAU,GAAG,CAAC,GAAG,CAAC;AAChC,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,EAAE,EAAA;;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC3B,IAAM,UAAU,GAAG,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAM,UAAU,GACd,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,WAAW,CAAS,IAAI,EAAE,cAAc,CAAC,MAC9C,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAI,CAAC,WAAW,CAAS,IAAI,EAAE,QAAQ,CAAC,MACxC,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC;YACV,IAAM,eAAe,GACnB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,WAAW,CAAS,IAAI,EAAE,mBAAmB,CAAC,MACnD,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAI,CAAC,WAAW,CAAS,IAAI,EAAE,aAAa,CAAC,MAC7C,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC;gBACZ,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU;gBAC3C,WAAW,EAAE,UAAU,GAAG,eAAe,GAAG,CAAC,GAAG,eAAe;AAChE,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,EAAE,EAAA;;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC3B,IAAM,UAAU,GAAG,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAM,QAAQ,GACZ,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,WAAW,CAAS,IAAI,EAAE,YAAY,CAAC,MAC5C,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAI,CAAC,WAAW,CAAS,IAAI,EAAE,MAAM,CAAC,MACtC,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ;AACvC,gBAAA,UAAU,EAAE,QAAQ;AACrB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAChC,CAAA;IAED,aAAmB,CAAA,SAAA,CAAA,mBAAA,GAAnB,UACE,SAAiB,EACjB,QAAe,EACf,IAAuC,EACvC,OAAuD,EAAA;QAJzD,IAkCC,KAAA,GAAA,IAAA,CAAA;;QA5BC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAM,UAAU,GAAG,CAAC,CAAC;AACrB,QAAA,IAAM,IAAI,GAAG,UAAU,GAAG,CAAC,CAAC;AAC5B,QAAA,IAAM,OAAO,GAAG,qBAAqB,CACnC,QAAQ,EACR,IAAI,EACJ,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,EACtB,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAC/B,CAAC;AACF,QAAA,IAAM,OAAO,GAAoC;AAC/C,YAAA,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAClC,YAAA,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAClC,YAAA,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAClC,YAAA,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;SACnC,CAAC;AAEF,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,EAAc,EAAA;;AAAb,YAAA,IAAA,MAAM,QAAA,EAAE,CAAC,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,CAAC,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5B,YAAA,IAAM,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;AAC7C,gBAAA,EAAE,EAAE,SAAA,CAAA,MAAA,CAAU,SAAS,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,MAAM,CAAE;gBACnC,CAAC,EAAE,CAAC,GAAG,IAAI;gBACX,CAAC,EAAE,CAAC,GAAG,IAAI;AACX,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,eAAe;AACtB,aAAA,CAAC,CAAC;AACH,YAAA,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAA,CAAA,MAAA,CAAG,SAAS,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,MAAM,CAAE,EAAE,IAAI,CAAC,CAAC;YAC3D,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,YAAY,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,YAAA;AACE,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA,EAAA,IAAA,EAAA,CAAA,CAAK,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,oDAAI,CAAA,EAAA,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAkB,MAAc,EAAE,MAAe,EAAA;QAAjD,IAeC,KAAA,GAAA,IAAA,CAAA;QAdC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAM,MAAM,GAAG,CAAC,CAAC;AACjB,QAAA,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;;AAC1B,YAAA,IAAM,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC;AACnD,gBAAA,EAAE,EAAE,cAAA,CAAA,MAAA,CAAe,MAAM,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,KAAK,CAAE;gBACpC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,CAAC,EAAE,KAAK,CAAC,CAAC;AACV,gBAAA,MAAM,EAAA,MAAA;AACN,gBAAA,IAAI,EAAE,aAAa;AACpB,aAAA,CAAC,CAAC;AACH,YAAA,KAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAA,CAAA,MAAA,CAAG,MAAM,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,KAAK,CAAE,EAAE,IAAI,CAAC,CAAC;YACrD,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,YAAY,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,YAAA;AACE,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA,EAAA,IAAA,EAAA,CAAA,CAAK,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,oDAAI,CAAA,EAAA,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;IAED,aAAc,CAAA,SAAA,CAAA,cAAA,GAAd,UAAe,MAAe,EAAA;;QAC5B,IAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAK,EAAA,OAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;AACtD,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,MAAM,EAAE,UAAU;AACnB,aAAA,CAAC,CAAC;YACH,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5C,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AACpD,SAAA;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UACE,IAAc,EACd,WAAuG,EAAA;;AAEvG,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,EAAE;AAC1D,YAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,kDAAI,CAAC;YAC/B,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAC7E,aAAA;AACD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAC,CAAC;AAC/B,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtD,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;gBAC9B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9C,aAAA;AACF,SAAA;QACD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,MAAA,IAAI,CAAC,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;AACvE,gBAAA,YAAY,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,mCAAI,IAAI;AACxC,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAC3F,SAAA;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,oBAAoB,GAApB,YAAA;;AACE,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,kDAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,aAAa,GAAb,YAAA;;AACE,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,kDAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;IAED,aAAa,CAAA,SAAA,CAAA,aAAA,GAAb,UAAc,IAA6D,EAAA;;AACzE,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;AACpD,gBAAA,EAAE,EAAE,SAAS;gBACb,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,aAAA,CAAC,CAAC;YACH,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3C,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,YAAA;;AACE,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,WAAW,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,kDAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;IAED,aAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,MAAqC,EAAA;;AAC3D,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,QAAmC,CAAC;QACxC,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AAC/C,YAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC;gBACzD,EAAE,EAAE,2BAAoB,MAAM,CAAC,SAAS,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAC,QAAQ,CAAE;AAC7D,gBAAA,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;AACxB,gBAAA,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;AACpB,gBAAA,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;AAC7B,aAAA,CAAC,CAAC;YACH,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,QAAQ,CAAC,CAAC;AACnC,SAAA;AACD,QAAA,IAAM,YAAY,GAChB,MAAM,CAAC,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU;AAC9D,cAAE,CAAA,EAAA,GAAA,MAAM,CAAC,IAAI,0CAAE,QAAQ;AACvB,cAAE,MAAM,CAAC,UAAU,KAAK,kBAAkB;AACxC,kBAAE,CAAA,EAAA,GAAA,MAAM,CAAC,eAAe,0CAAE,QAAQ;AAClC,kBAAE,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,sBAAsB,GAAG,QAAQ,GAAG,EAAE,QAAQ,UAAA,EAAE,GAAG,IAAI,CAAC;YAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO;AACR,SAAA;AACD,QAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACjE,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC;AACvD,YAAA,EAAE,EAAE,sBAAA,CAAA,MAAA,CAAuB,MAAM,CAAC,SAAS,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAC,SAAS,cAAI,MAAM,CAAC,UAAU,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,SAAS,CAAE;AACnG,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;AAC5B,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;AACtB,YAAA,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;AACzB,SAAA,CAAC,CAAC;QACH,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,sBAAsB,GAAG,EAAE,QAAQ,UAAA,EAAE,IAAI,EAAA,IAAA,EAAE,CAAC;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;IAED,aAAsB,CAAA,SAAA,CAAA,sBAAA,GAAtB,UAAuB,IAAW,EAAA;;AAAX,QAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAW,GAAA,IAAA,CAAA,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAAE,OAAO;QACzC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAI,CAAC;QAClD,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAI,CAAC;AAC9C,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACnC,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,SAAA;KACF,CAAA;IAED,aAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,MAA0B,EAAA;QAA7C,IAcC,KAAA,GAAA,IAAA,CAAA;QAbC,IAAM,EAAE,GAAG,UAAW,CAAA,MAAA,CAAA,IAAI,CAAC,SAAS,EAAE,CAAE,CAAC;QACzC,IAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,OAAO;YACL,MAAM,EAAE,UAAC,IAAI,EAAA;AACX,gBAAA,KAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;aACpC;AACD,YAAA,OAAO,EAAE,YAAA;AACP,gBAAA,KAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;aAC/B;SACF,CAAC;KACH,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;AACE,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA,EAAA,IAAA,EAAA,CAAA,CAAK,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,oDAAI,CAAA,EAAA,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,kDAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAC,MAAM,gBAAK,OAAA,CAAA,EAAA,GAAA,MAAA,MAAM,CAAC,IAAI,EAAC,OAAO,kDAAI,CAAA,EAAA,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC5B,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,YAAY,GAApB,YAAA;AACE,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;KACzB,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,mBAAmB,GAA3B,UACE,EAAU,EACV,MAA0B,EAAA;;AAE1B,QAAA,IAAM,KAAK,GAAgB;AACzB,YAAA,EAAE,EAAA,EAAA;AACF,YAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,MAAM,CAAC,QAAQ,CAAE;AAChC,YAAA,IAAI,EAAO,QAAA,CAAA,EAAA,EAAA,MAAM,CAAC,IAAI,CAAE;YACxB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;QACF,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACvD,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,EAAC,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC7C,QAAA,OAAO,EAAE,IAAI,EAAA,IAAA,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAA,QAAA,CAAA,EAAA,EAAO,MAAM,CAAE,EAAE,CAAC;KACjE,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,mBAAmB,GAA3B,UAA4B,EAAU,EAAE,MAA0B,EAAA;;QAChE,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAM,cAAc,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC;AACzD,QAAA,IAAI,cAAc,EAAE;AAClB,YAAA,CAAA,EAAA,GAAA,MAAA,MAAM,CAAC,IAAI,EAAC,OAAO,kDAAI,CAAC;YACxB,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACvC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO;AACR,SAAA;AAED,QAAA,IAAM,KAAK,GAAgB;AACzB,YAAA,EAAE,EAAA,EAAA;AACF,YAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,MAAM,CAAC,QAAQ,CAAE;AAChC,YAAA,IAAI,EAAO,QAAA,CAAA,EAAA,EAAA,MAAM,CAAC,IAAI,CAAE;YACxB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACpD,QAAA,MAAM,CAAC,MAAM,GAAQ,QAAA,CAAA,EAAA,EAAA,MAAM,CAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;IAEO,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UAA6B,EAAU,EAAA;;QACrC,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO;AACpB,QAAA,CAAA,EAAA,GAAA,MAAA,MAAM,CAAC,IAAI,EAAC,OAAO,kDAAI,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,kBAAkB,GAA1B,UAA2B,IAAmB,EAAE,KAAkB,EAAE,MAA0B,EAAA;;QAC5F,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;QAClD,IAAM,gBAAgB,GAAG,YAAY;AACnC,cAAE;AACE,gBAAA,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;AAC1C,gBAAA,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AAC5C,aAAA;AACH,cAAE,KAAK,CAAC,QAAQ,CAAC;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC,CAAC;AACpD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAU,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACnC,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CACR,QAAA,CAAA,QAAA,CAAA,EAAA,GAAC,MAAA,MAAM,CAAC,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EACtB,EAAA,EAAA,SAAS,EAAE,KAAK,EAChB,IAAI,EAAE,eAAe,IACrB,CAAC;AACJ,SAAA;KACF,CAAA;IAEO,aAAY,CAAA,SAAA,CAAA,YAAA,GAApB,UAAqB,KAAmB,EAAA;QAAxC,IA+CC,KAAA,GAAA,IAAA,CAAA;QA9CC,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,OAAO,EAAE,KAAK,EAAK,EAAA,QAAC;AAC5E,YAAA,OAAO,EAAA,OAAA;YACP,KAAK,EAAE,KAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC;AAC3C,YAAA,KAAK,EAAE,KAAK;SACb,EAAC,EAAA,CAAC,CAAC;QACJ,QAAQ;aACL,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAtC,EAAsC,CAAC;aACtD,OAAO,CAAC,UAAC,EAAkB,EAAA;;gBAAhB,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,CAAA;AACxB,YAAA,IAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAC9B,YAAA,IAAI,IAAI,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAChD,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACxC,gBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,IAAI,CAAC,CAAC;AAC/C,aAAA;AACD,YAAA,IAAI,KAAI,CAAC,WAAW,CAAU,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAClC,aAAA;AACD,YAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO,CAAC,QAAQ,CAAC;AAC/E,YAAA,IAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY;AAC3C,kBAAE;oBACE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;oBACtC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AACxC,iBAAA;kBACD,QAAQ,CAAC;AACb,YAAA,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAC5C,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,mCAAI,KAAK,EAAE,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACnC,aAAA;AACH,SAAC,CAAC,CAAC;AAEL,QAAA,QAAQ,CAAC,OAAO,CAAC,UAAC,EAAW,EAAA;;AAAT,YAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA,CAAA;AACzB,YAAA,IAAM,IAAI,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAA,EAAA,GAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,SAAS,oDAAI,CAAC;AACtB,SAAC,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;;YAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAC3B,IAAM,IAAI,GAAG,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvC,CAAA,EAAA,GAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,OAAO,oDAAI,CAAC;AAClB,gBAAA,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC7B,gBAAA,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACnC,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KACnC,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,KAAmB,EAAE,OAAqB,EAAA;QAChE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAA6B,OAAO,CAAC;AAChD,QAAA,OAAO,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE;YACxB,IAAM,QAAM,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,QAAM;gBAAE,MAAM;YACnB,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,GAAG,QAAM,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;IAEO,aAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,KAAmB,EAAA;QAArC,IA4BC,KAAA,GAAA,IAAA,CAAA;AA3BC,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AACjB,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3B,YAAA,IAAI,IAAI,GAAG,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE;gBACT,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC7C,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAClC,gBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,IAAI,CAAC,CAAC;AAC5C,aAAA;AACD,YAAA,IAAI,KAAI,CAAC,WAAW,CAAU,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAClC,aAAA;AACD,YAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,QAAQ,CAAC;AACtE,YAAA,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,EAAE,CAAC,CAAC;AACzG,YAAA,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACpC,KAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACzD,SAAC,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;;YAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACxB,IAAM,IAAI,GAAG,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,CAAA,EAAA,GAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,OAAO,oDAAI,CAAC;AAClB,gBAAA,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B,gBAAA,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAChC,CAAA;IAEO,aAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,KAAmB,EAAA;QAArC,IAqBC,KAAA,GAAA,IAAA,CAAA;AApBC,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AACjB,YAAA,IAAI,IAAI,GAAG,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAClC,gBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,IAAI,CAAC,CAAC;AAC5C,aAAA;YACD,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;;YAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACxB,IAAM,IAAI,GAAG,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,CAAA,EAAA,GAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,OAAO,oDAAI,CAAC;AAClB,gBAAA,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B,gBAAA,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAChC,CAAA;IAEO,aAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,KAAmB,EAAA;QAArC,IA4HC,KAAA,GAAA,IAAA,CAAA;AA3HC,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AACjB,YAAA,IAAI,IAAI,GAAG,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAClC,gBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,IAAI,CAAC,CAAC;AAC5C,aAAA;AACD,YAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,QAAQ,CAAC;AACtE,YAAA,IAAM,aAAa,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3D,YAAA,IAAM,YAAY,GAAG;AACnB,gBAAA,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;AAC/B,gBAAA,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;aAChC,CAAC;AACF,YAAA,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE;gBACxB,CAAC,EAAE,YAAY,CAAC,CAAC;gBACjB,CAAC,EAAE,YAAY,CAAC,CAAC;AAClB,aAAA,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAM,OAAK,GAAG,IAAI,CAAC,KAA4C,CAAC;AAChE,gBAAA,IAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAK,CAAC,CAAC;AACjD,gBAAA,IAAM,QAAQ,GACZ,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAC,OAAK,KAAA,IAAA,IAAL,OAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,OAAK,CAAE,IAA2B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GACnC,KAAI,CAAC,WAAW,CAAS,IAAI,EAAE,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAC5C,KAAI,CAAC,WAAW,CAAS,IAAI,EAAE,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GACtC,OAAO,CAAC;gBACV,IAAM,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,QAAQ,CAAC;AAClE,gBAAA,IAAM,MAAI,GAAG,IAAI,CAAC,eAAe,CAAC;AAClC,gBAAA,IAAI,CAAC,QAAQ,CAAA,QAAA,CAAA,QAAA,CAAA,EACX,IAAI,EAAE,MAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,OAAO,EACzC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU,EAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAA,GAC3B,OAAK,KAAA,IAAA,IAAL,OAAK,KAAL,KAAA,CAAA,GAAA,OAAK,GAAI,EAAE,EACf,EAAA,EAAA,KAAK,EAAE,MAAI,KAAA,IAAA,IAAJ,MAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAI,CAAE,KAAK,EAClB,MAAM,EAAE,MAAI,KAAJ,IAAA,IAAA,MAAI,uBAAJ,MAAI,CAAE,MAAM,EACpB,IAAI,EAAE,MAAI,GAAG,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,KAAK,EACf,IAAI,MAAA,EACJ,UAAU,EAAE,QAAQ;;AAEpB,oBAAA,KAAK,EAAE,MAAI,GAAG,CAAC,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAI,GAAG,CAAC,GAAG,SAAS,EAC3B,SAAS,EAAE,MAAI,KAAA,IAAA,IAAJ,MAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAI,CAAE,KAAK,EACtB,UAAU,EAAE,MAAI,aAAJ,MAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,MAAI,CAAE,MAAM,IACxB,CAAC;AACJ,aAAA;AAED,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAA4C,CAAC;YAChE,IAAM,cAAc,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,cAAc,CAAC;AAC7C,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;AAClC,YAAA,IAAM,eAAe,GAAG,CAAA,EAAA,GAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,KAAK,mCAAI,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AACxD,YAAA,IAAM,gBAAgB,GAAG,CAAA,EAAA,GAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAM,mCAAI,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC;AAC3D,YAAA,IAAM,cAAc,GAAG,KAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5E,YAAA,IAAM,aAAa,GACjB,OAAO,cAAc,KAAK,QAAQ;gBAClC,cAAc,CAAC,MAAM,GAAG,CAAC;gBACzB,OAAO,eAAe,KAAK,QAAQ;gBACnC,OAAO,gBAAgB,KAAK,QAAQ;AACpC,gBAAA,eAAe,GAAG,CAAC;gBACnB,gBAAgB,GAAG,CAAC,CAAC;AAEvB,YAAA,IAAI,aAAa,EAAE;gBACjB,IAAM,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;gBACpD,IAAM,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;AACpD,gBAAA,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACtE,gBAAA,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;gBACpE,IAAM,gBAAgB,GACpB,QAAO,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,gBAAgB,CAAA,KAAK,QAAQ,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;sBAC5E,KAAK,CAAC,gBAAgB;sBACtB,SAAS,CAAC;AAChB,gBAAA,IAAM,qBAAqB,GACzB,QAAO,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,qBAAqB,CAAA,KAAK,QAAQ;sBAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC;sBACxC,SAAS,CAAC;AAChB,gBAAA,IAAI,cAAc,GAAG,KAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,cAAc,EAAE;AACnB,oBAAA,cAAc,GAAG,KAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC;AACzD,wBAAA,EAAE,EAAE,kBAAA,CAAA,MAAA,CAAmB,IAAI,CAAC,EAAE,CAAE;AAChC,wBAAA,CAAC,EAAE,KAAK;AACR,wBAAA,CAAC,EAAE,KAAK;AACR,wBAAA,KAAK,EAAA,KAAA;AACL,wBAAA,MAAM,EAAA,MAAA;AACN,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,MAAM,EAAE,gBAAgB;AACxB,wBAAA,WAAW,EAAE,qBAAqB;wBAClC,YAAY,EAAE,cAAc,CAAC,YAAY;AAC1C,qBAAA,CAAC,CAAC;oBACH,KAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AACtD,oBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,cAAc,CAAC,CAAC;AACtD,iBAAA;AAAM,qBAAA;AACL,oBAAA,KAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC5D,CAAA,EAAA,GAAA,cAAc,CAAC,QAAQ,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,cAAA,EAAA;AACxB,wBAAA,KAAK,EAAA,KAAA;AACL,wBAAA,MAAM,EAAA,MAAA;AACN,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,MAAM,EAAE,gBAAgB;AACxB,wBAAA,WAAW,EAAE,qBAAqB;wBAClC,YAAY,EAAE,cAAc,CAAC,YAAY;AACzC,wBAAA,SAAS,EAAE,KAAK;AAChB,wBAAA,IAAI,EAAE,iBAAiB;AACxB,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACD,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAI,CAAC;AACpB,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAM,cAAc,GAAG,KAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7D,CAAA,EAAA,GAAA,cAAc,aAAd,cAAc,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAd,cAAc,CAAE,OAAO,8DAAI,CAAC;gBAC5B,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1C,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,EAAA;;YAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACxB,IAAM,cAAc,GAAG,KAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAA,EAAA,GAAA,cAAc,aAAd,cAAc,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAd,cAAc,CAAE,OAAO,8DAAI,CAAC;AAC5B,gBAAA,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAM,IAAI,GAAG,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,CAAA,EAAA,GAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,OAAO,oDAAI,CAAC;AAClB,gBAAA,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B,gBAAA,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAChC,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,yBAAyB,GAAjC,UACE,KAAmB,EACnB,IAAkD,EAAA;;QAElD,IAAM,OAAO,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAClC,IAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAChC,QAAA,IAAM,UAAU,GAAG,KAAK,CAAC,KAA4C,CAAC;AACtE,QAAA,IAAM,WAAW,GAAG,QAAO,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,WAAW,CAAA,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1G,QAAA,IAAM,KAAK,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;QACpD,IAAM,eAAe,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,YAAY,CAAC;QACjD,IAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;QAClC,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,GAAG,CAAC,EAAE;AAC9D,YAAA,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC,CAAC;AACvD,YAAA,OAAO,EAAE,KAAK,EAAA,KAAA,EAAE,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC9D,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAClE,YAAA,IAAM,EAAE,GAAG,OAAO,eAAe,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAChG,YAAA,IAAM,EAAE,GAAG,OAAO,eAAe,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAChG,YAAA,OAAO,EAAE,KAAK,EAAA,KAAA,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;KAClB,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,cAAc,GAAtB,UAAuB,IAAmB,EAAE,QAAe,EAAA;QACzD,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YAChD,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACjD,SAAA;KACF,CAAA;IAEO,aAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UACE,IAAmB,EACnB,IAAc,EACd,aAAoB,EACpB,KAAoB,EACpB,mBAA+G,EAAA;;QAE/G,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAM,YAAY,GAChB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAS,IAAI,EAAE,gBAAgB,CAAC,MAChD,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAS,IAAI,EAAE,UAAU,CAAC,MAC1C,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;QACJ,IAAI,IAAI,CAAC,WAAW,CAAS,IAAI,EAAE,gBAAgB,CAAC,KAAK,SAAS,EAAE;YAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;AACjD,SAAA;AACD,QAAA,IAAM,IAAI,GAAG,mBAAmB,aAAnB,mBAAmB,KAAA,KAAA,CAAA,GAAnB,mBAAmB,GAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACnF,IAAM,WAAW,GAAG,6BAA6B,CAAC;AAChD,YAAA,IAAI,EAAA,IAAA;AACJ,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,IAAI,EAAA,IAAA;YACJ,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,YAAA,UAAU,EAAE,UAAU;AACvB,SAAA,CAAC,CAAC;QACH,IAAM,SAAS,GAAG,yBAAyB,CAAC;AAC1C,YAAA,IAAI,EAAA,IAAA;AACJ,YAAA,cAAc,EAAE,aAAa;AAC7B,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,WAAW,EAAA,WAAA;AACZ,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;KAClE,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,kBAAkB,GAA1B,UACE,SAAiB,EACjB,KAAoB,EAAA;;AAEpB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;QACxB,IAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,QAAQ,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO,CAAC,QAAQ;YACtE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;KACH,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAnB,UAAuB,IAAmB,EAAE,GAAW,EAAA;QACrD,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAM,CAAC;AAChD,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;AACvE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UACE,IAAmB,EACnB,IAAuC,EACvC,OAAoC,EAAA;QAHtC,IA4BC,KAAA,GAAA,IAAA,CAAA;;QAvBC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;AAC3B,QAAA,IAAM,KAAK,GAA4B,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAClF,QAAA,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAAC;QACpD,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAU,IAAI,EAAE,eAAe,CAAC,CAAC;QACrE,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAU,IAAI,EAAE,eAAe,CAAC,CAAC;AACrE,QAAA,IAAM,aAAa,GAAG,WAAW,KAAK,KAAK,CAAC;AAC5C,QAAA,IAAM,aAAa,GAAG,WAAW,KAAK,KAAK,CAAC;QAE5C,IAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAuB,IAAI,EAAE,eAAe,CAAC,CAAC;AAClF,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,CAAC,MAAM,CACX,KAAK,EACL,WAAW,CAAC;AACV,gBAAA,IAAI,EAAA,IAAA;AACJ,gBAAA,YAAY,EAAA,YAAA;AACZ,gBAAA,aAAa,EAAA,aAAA;AACb,gBAAA,aAAa,EAAA,aAAA;AACb,gBAAA,WAAW,EAAE,UAAc,GAAW,EAAA,EAAK,OAAA,KAAI,CAAC,WAAW,CAAI,IAAI,EAAE,GAAG,CAAC,GAAA;AAC1E,aAAA,CAAC,CACH,CAAC;AACH,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACtB,CAAA;AAEO,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,IAAmB,EAAE,IAAc,EAAA;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAM,UAAU,GAAa,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;YACxB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;KACvC,CAAA;IACH,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACl1BD,IAAA,cAAA,kBAAA,YAAA;AAGE,IAAA,SAAA,cAAA,CAAY,QAA0B,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IAED,cAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,KAAY,EAAA;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC;AAChC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC7B,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACrBD,IAAM,UAAU,GAAG,YAAA;IACjB,OAAA,KAAA,CAAA,MAAA,CAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAA;AAA1E,CAA0E,CAAC;AAEtE,IAAM,QAAQ,GAAG,YAAA;AACtB,IAAA,IAAM,SAAS,GAAI,UAAyD,CAAC,MAAM,CAAC;AACpF,IAAA,IAAI,SAAS,KAAT,IAAA,IAAA,SAAS,uBAAT,SAAS,CAAE,UAAU,EAAE;AACzB,QAAA,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC;AAC/B,KAAA;IACD,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;;ACyID,IAAM,oBAAoB,GAAsB;AAC9C,IAAA,eAAe,CAAC,GAAG;AACnB,IAAA,eAAe,CAAC,KAAK;AACrB,IAAA,eAAe,CAAC,MAAM;AACtB,IAAA,eAAe,CAAC,IAAI;CACrB,CAAC;AAEF,IAAM,iBAAiB,GAAG,UAAC,KAAc,EAAA;AACvC,IAAA,OAAA,KAAK,KAAK,eAAe,CAAC,GAAG;QAC7B,KAAK,KAAK,eAAe,CAAC,KAAK;QAC/B,KAAK,KAAK,eAAe,CAAC,MAAM;QAChC,KAAK,KAAK,eAAe,CAAC,IAAI,CAAA;AAH9B,CAG8B,CAAC;AAEjC,IAAM,sBAAsB,GAAG,UAAC,KAAsB,EAAA;AACpD,IAAA,OAAA,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAAnC,CAAmC,CAAC;AAEtC,IAAA,gBAAA,kBAAA,YAAA;IA6BE,SAAY,gBAAA,CAAA,MAAqB,EAAE,MAA8B,EAAA;AAA9B,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAA8B,GAAA,EAAA,CAAA,EAAA;;QApBzD,IAAe,CAAA,eAAA,GAA6D,IAAI,CAAC;QACjF,IAAuB,CAAA,uBAAA,GAAmC,IAAI,CAAC;QAC/D,IAAK,CAAA,KAAA,GAAG,KAAK,CAAC;QACd,IAAQ,CAAA,QAAA,GAAkD,EAAE,CAAC;QAC7D,IAAc,CAAA,cAAA,GAA0D,EAAE,CAAC;QAC3E,IAAqB,CAAA,qBAAA,GAAuE,IAAI,CAAC;QACjG,IAAS,CAAA,SAAA,GAAqB,IAAI,CAAC;QACnC,IAAc,CAAA,cAAA,GAAwB,IAAI,CAAC;QAC3C,IAAW,CAAA,WAAA,GAAwB,IAAI,CAAC;QACxC,IAAuB,CAAA,uBAAA,GAAqC,IAAI,CAAC;QACjE,IAAmB,CAAA,mBAAA,GAAiB,IAAI,CAAC;QACzC,IAAI,CAAA,IAAA,GAAG,CAAC,CAAC;QACT,IAAG,CAAA,GAAA,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5B,IAAU,CAAA,UAAA,GAA+B,IAAI,CAAC;QACrC,IAAa,CAAA,aAAA,GAAG,CAAC,CAAC;QAClB,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAC;QACf,IAAuB,CAAA,uBAAA,GAAG,CAAC,CAAC;QACrC,IAAwB,CAAA,wBAAA,GAAG,KAAK,CAAC;AAIvC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,cAAc,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,SAAS,CAAC;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACtF,QAAA,IAAI,CAAC,6BAA6B,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAC1E,QAAA,IAAI,CAAC,4BAA4B,GAAG,MAAM,CAAC,4BAA4B,CAAC;KACzE;IAED,gBAAqB,CAAA,SAAA,CAAA,qBAAA,GAArB,UAAsB,QAAoC,EAAA;QACxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAC/C,YAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxD,SAAA;KACF,CAAA;AAED,IAAA,gBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAkB,YAAoB,EAAE,OAAe,EAAA;;QACrD,IAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7B,IAAM,WAAW,GACf,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,MAClD,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,WAAW;YAAE,OAAO;AACzB,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,MAAK,WAAW,IAAI,IAAI,CAAC,uBAAuB,EAAE;YACxE,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,SAAA;QACD,IACE,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,oBAAoB;AAC5C,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EACnC;YACA,OAAO;AACR,SAAA;AAED,QAAA,IAAM,KAAK,GAAA,QAAA,CAAA,EAAA,EAAQ,WAAW,CAAE,CAAC;QACjC,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,oBAAoB,EAAE;YACjD,IAAI,CAAC,uBAAuB,GAAG;AAC7B,gBAAA,YAAY,EAAA,YAAA;AACZ,gBAAA,eAAe,EAAA,eAAA;AACf,gBAAA,KAAK,EAAA,KAAA;AACL,gBAAA,OAAO,EAAE,KAAK;aACf,CAAC;AACH,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,SAAS,GAAG;AACf,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,YAAY,EAAA,YAAA;AACZ,gBAAA,eAAe,EAAA,eAAA;AACf,gBAAA,KAAK,EAAA,KAAA;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,kBAAkB,EAAE,UAAU;aAC/B,CAAC;AACH,SAAA;QACD,IAAI,CAAC,eAAe,GAAG,EAAE,YAAY,cAAA,EAAE,eAAe,EAAA,eAAA,EAAE,CAAC;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,YAAY,EAAA,YAAA,EAAE,eAAe,EAAA,eAAA,EAAE,UAAU,EAAA,QAAA,CAAA,EAAA,EAAO,KAAK,CAAE,EAAE,CAAC,CAAC;AAChG,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC5B,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACjC,SAAA;KACF,CAAA;IAED,gBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,OAAc,EAAA;;QAC9B,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,GAAQ,QAAA,CAAA,EAAA,EAAA,OAAO,CAAE,CAAC;AACvD,SAAA;aAAM,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,WAAW,EAAE;AAC/C,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,GAAQ,QAAA,CAAA,EAAA,EAAA,OAAO,CAAE,CAAC;AACxC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;AAChC,SAAA;AAAM,aAAA;YACL,OAAO;AACR,SAAA;AACD,QAAA,IAAM,YAAY,GAChB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,uBAAuB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAY,MAC1C,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,IAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AACpE,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAClD,SAAA;QACD,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,IAAI,MAAK,SAAS,EAAE;AAC3B,YAAA,IAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAC9E,YAAA,IAAI,WAAW,EAAE;gBACf,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChD,gBAAA,IAAI,WAAW,EAAE;AACf,oBAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,mCAAI,WAAW,CAAC,QAAQ,CAAC;AACtF,oBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,0CAAE,qBAAqB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAClC,WAAW,EACX,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAClG,CAAC;AACH,iBAAA;AAAM,qBAAA;oBACL,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,0CAAE,qBAAqB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,WAAW,CAAC,CAAC;AACrD,iBAAA;AACF,aAAA;YACD,OAAO;AACR,SAAA;AACD,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;KACzC,CAAA;IAED,gBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAlB,UAAmB,YAAoB,EAAA;;AACrC,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AACrB,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CACzC,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,eAAe,EACvB,YAAY,CACb,CAAC;QACF,IAAI,CAAC,qBAAqB,CAAC;YACzB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,eAAe,EAAE,OAAO,CAAC,eAAe;AACxC,YAAA,aAAa,EAAE,CAAA,EAAA,GAAA,UAAU,CAAC,aAAa,mCAAI,SAAS;YACpD,YAAY,EAAE,UAAU,CAAC,YAAY;AACrC,YAAA,eAAe,EAAE,CAAA,EAAA,GAAA,UAAU,CAAC,eAAe,mCAAI,SAAS;AACxD,YAAA,SAAS,EAAE,UAAU,CAAC,aAAa,KAAK,IAAI;YAC5C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;AAC3C,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,gBAAA,CAAA,SAAA,CAAA,qBAAqB,GAArB,UAAsB,eAAuB,EAAE,OAAc,EAAA;;AAC3D,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AACrB,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAC5C,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,eAAe,EACvB,eAAe,EACf,OAAO,CACR,CAAC;QACF,IAAI,CAAC,qBAAqB,CAAC;YACzB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,eAAe,EAAE,OAAO,CAAC,eAAe;AACxC,YAAA,aAAa,EAAE,CAAA,EAAA,GAAA,UAAU,CAAC,aAAa,mCAAI,SAAS;AACpD,YAAA,YAAY,EAAE,CAAA,EAAA,GAAA,UAAU,CAAC,YAAY,mCAAI,SAAS;AAClD,YAAA,eAAe,EAAE,CAAA,EAAA,GAAA,UAAU,CAAC,eAAe,mCAAI,SAAS;AACxD,YAAA,SAAS,EAAE,UAAU,CAAC,aAAa,KAAK,IAAI;YAC5C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;AAC3C,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,gBAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;QACE,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAxB,UAAyB,KAAY,EAAE,WAA8C,EAAA;QACnF,IAAM,GAAG,GAAG,WAAW,KAAA,IAAA,IAAX,WAAW,KAAX,KAAA,CAAA,GAAA,WAAW,GAAI,SAAS,CAAC;AACrC,QAAA,IAAM,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACrF,QAAA,IAAM,WAAW,GACf,GAAG,IAAI,aAAa,IAAI,GAAG,GAAI,GAAoB,CAAC,WAAW,GAAG,SAAS,CAAC;QAC9E,OAAO;AACL,YAAA,MAAM,EAAA,MAAA;YACN,KAAK,EAAA,QAAA,CAAA,EAAA,EAAO,KAAK,CAAE;AACnB,YAAA,MAAM,EAAE,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,MAAM;AACnB,YAAA,OAAO,EAAG,GAA6C,KAAA,IAAA,IAA7C,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAA4C,OAAO;AAChE,YAAA,MAAM,EAAE,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,MAAM;AACnB,YAAA,OAAO,EAAE,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,OAAO;AACrB,YAAA,OAAO,EAAE,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,OAAO;AACrB,YAAA,QAAQ,EAAE,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,QAAQ;AACvB,YAAA,WAAW,EAAA,WAAA;SACZ,CAAC;KACH,CAAA;IAED,gBAAI,CAAA,SAAA,CAAA,IAAA,GAAJ,UAAK,KAAsB,EAAA;QAA3B,IA2iBC,KAAA,GAAA,IAAA,CAAA;AA1iBC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,IAAI,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;AAExD,QAAA,IAAM,WAAW,GAAG,YAAA;;YAAC,IAAkB,IAAA,GAAA,EAAA,CAAA;iBAAlB,IAAkB,EAAA,GAAA,CAAA,EAAlB,EAAkB,GAAA,SAAA,CAAA,MAAA,EAAlB,EAAkB,EAAA,EAAA;gBAAlB,IAAkB,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;AACrC,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAoD,CAAC;AACzE,YAAA,IAAM,KAAK,GAAG,KAAI,CAAC,kBAAkB,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO;AACnB,YAAA,KAAI,CAAC,mBAAmB,GAAQ,QAAA,CAAA,EAAA,EAAA,KAAK,CAAE,CAAC;YACxC,IAAI,KAAI,CAAC,UAAU;gBAAE,OAAO;YAC5B,IAAM,GAAG,GAAG,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACnC,IAAM,WAAW,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,GAAG,CAAC;YAC/B,IAAM,OAAO,GAAG,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7G,YAAA,IAAM,YAAY,GAAG,OAAO,CAAC,WAAW,IAAI,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YAC3G,IAAM,WAAW,GAAG,KAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAE9D,IAAI,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,IAAI,MAAK,qBAAqB,EAAE;AACvC,gBAAA,IAAM,eAAe,GAAG,KAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC5E,gBAAA,IAAI,CAAC,eAAe;oBAAE,OAAO;gBAC7B,KAAI,CAAC,SAAS,GAAG;AACf,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,OAAO,EAAE,eAAe;oBACxB,SAAS,EAAE,QAAQ,EAAE;oBACrB,KAAK,EAAA,QAAA,CAAA,EAAA,EAAO,KAAK,CAAE;AACnB,oBAAA,YAAY,EAAE,WAAW;AACzB,oBAAA,QAAQ,EAAE,KAAK;iBAChB,CAAC;AACF,gBAAA,KAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAC3B,OAAO;AACR,aAAA;YAED,KAAI,CAAC,4BAA4B,EAAE,CAAC;AAEpC,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,KAAI,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAO,QAAA,CAAA,EAAA,EAAA,KAAI,CAAC,GAAG,CAAE,EAAE,CAAC;AACxE,gBAAA,KAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAC3B,OAAO;AACR,aAAA;YAED,IAAI,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,IAAI,MAAK,eAAe,EAAE;gBACjC,IAAM,MAAM,GAAG,KAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9C,gBAAA,IAAI,MAAM,EAAE;oBACV,IAAM,OAAO,GAAG,KAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACtD,oBAAA,IAAI,OAAO,EAAE;AACX,wBAAA,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;4BAC1D,KAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,yBAAA;AACD,wBAAA,IAAM,aAAa,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,mCAAI,OAAO,CAAC,QAAQ,CAAC;wBAChG,KAAI,CAAC,SAAS,GAAG;AACf,4BAAA,IAAI,EAAE,QAAQ;4BACd,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,4BAAA,MAAM,EAAE;AACN,gCAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,OAAO,CAAC,QAAQ,CAAE;AACjC,gCAAA,aAAa,EAAA,aAAA;AACb,gCAAA,IAAI,EAAO,QAAA,CAAA,EAAA,EAAA,OAAO,CAAC,IAAI,CAAE;AACzB,gCAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,mCAAI,IAAI;AAClC,gCAAA,YAAY,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,mCAAI,KAAK;gCAC3C,QAAQ,EAAE,KAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;AAC3D,6BAAA;yBACF,CAAC;AACF,wBAAA,KAAI,CAAC,SAAS,CAAC,KAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,qBAAA;AACF,iBAAA;gBACD,OAAO;AACR,aAAA;YAED,IAAI,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,IAAI,MAAK,aAAa,EAAE;gBAC/B,IAAM,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,gBAAA,IAAI,MAAM,EAAE;oBACV,KAAI,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AAC/F,oBAAA,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACxB,iBAAA;gBACD,OAAO;AACR,aAAA;YAED,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,gBAAA,KAAI,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAA,OAAA,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7E,gBAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9E,OAAO;AACR,aAAA;AAED,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,gBAAA,IAAM,SAAS,GAAG,KAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,SAAS;oBAAE,OAAO;gBACvB,KAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,WAAA,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AACnF,gBAAA,IAAM,UAAU,GAAG,KAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/D,gBAAA,IAAI,UAAU,EAAE;AACd,oBAAA,IAAM,IAAI,GAAG,KAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtD,oBAAA,IAAI,IAAI,EAAE;wBACR,KAAI,CAAC,SAAS,GAAG;AACf,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,IAAI,EAAE,MAAM;4BACZ,EAAE,EAAE,GAAG,CAAC,EAAE;4BACV,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;yBACrD,CAAC;AACF,wBAAA,KAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5B,qBAAA;AACF,iBAAA;AAAM,qBAAA;oBACL,KAAI,CAAC,SAAS,GAAG;AACf,wBAAA,IAAI,EAAE,WAAW;wBACjB,YAAY,EAAE,GAAG,CAAC,EAAE;AACpB,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,OAAO,EAAE,KAAK;AACd,wBAAA,OAAO,EAAA,OAAA;AACP,wBAAA,QAAQ,EAAE,KAAK;AACf,wBAAA,kBAAkB,EAAE,kBAAkB;qBACvC,CAAC;AACF,oBAAA,KAAI,CAAC,eAAe,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;oBAC5E,KAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,eAAO,KAAK,CAAE,EAAE,CAAC,CAAC;AACnH,oBAAA,KAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC7B,iBAAA;gBACD,OAAO;AACR,aAAA;AAED,YAAA,KAAI,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACnC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE;gBACnC,KAAI,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACzF,gBAAA,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACvB,OAAO;AACR,aAAA;AACD,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,gBAAA,IAAM,IAAI,GAAG,KAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtD,gBAAA,IAAI,IAAI,EAAE;oBACR,KAAI,CAAC,SAAS,GAAG;AACf,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,IAAI,EAAE,MAAM;wBACZ,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;qBACrD,CAAC;AACF,oBAAA,KAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5B,iBAAA;gBACD,OAAO;AACR,aAAA;AACD,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;AAC1B,gBAAA,IAAM,WAAW,GAAG,KAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChE,gBAAA,IAAI,WAAW,EAAE;oBACf,IAAM,OAAO,GAAG,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,oBAAA,IAAI,CAAC,OAAO;wBAAE,OAAO;AACrB,oBAAA,IAAM,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC5D,oBAAA,IAAM,IAAI,GAAG,OAAO,CAAC,YAAY;AAC/B,0BAAE;4BACE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;4BACzC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AAC3C,yBAAA;0BACD,WAAW,CAAC;oBAChB,KAAI,CAAC,SAAS,GAAG;AACf,wBAAA,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;wBACpD,KAAK,EAAA,QAAA,CAAA,EAAA,EAAO,IAAI,CAAE;AAClB,wBAAA,MAAM,EAAA,MAAA;AACN,wBAAA,aAAa,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,mCAAI,IAAI;AACvC,wBAAA,YAAY,EAAE,KAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACxC,wBAAA,OAAO,EAAA,OAAA;AACP,wBAAA,QAAQ,EAAE,KAAK;qBAChB,CAAC;AACF,oBAAA,KAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5B,iBAAA;AACF,aAAA;AACH,SAAC,CAAC;AAEF,QAAA,IAAM,WAAW,GAAG,YAAA;;YAAC,IAAkB,IAAA,GAAA,EAAA,CAAA;iBAAlB,IAAkB,EAAA,GAAA,CAAA,EAAlB,EAAkB,GAAA,SAAA,CAAA,MAAA,EAAlB,EAAkB,EAAA,EAAA;gBAAlB,IAAkB,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;AACrC,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAoD,CAAC;YACzE,IAAM,WAAW,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,GAAG,CAAC;AAC/B,YAAA,IAAM,KAAK,GAAG,KAAI,CAAC,kBAAkB,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO;AACnB,YAAA,KAAI,CAAC,mBAAmB,GAAQ,QAAA,CAAA,EAAA,EAAA,KAAK,CAAE,CAAC;AACxC,YAAA,IAAI,CAAC,KAAI,CAAC,SAAS,EAAE;AACnB,gBAAA,KAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACpC,gBAAA,KAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBAC9B,OAAO;AACR,aAAA;YACD,KAAI,CAAC,4BAA4B,EAAE,CAAC;AACpC,YAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,oBAAoB,EAAE;AAChD,gBAAA,IAAM,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC;gBACjC,IAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACjF,gBAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAI,CAAC,aAAa,CAAC;AACjE,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,KAAK,EAAE;AAChC,oBAAA,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,oBAAA,KAAI,CAAC,gCAAgC,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;wBACzF,SAAS,EAAE,SAAS,CAAC,SAAS;wBAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;AACpC,wBAAA,KAAK,EAAA,KAAA;AACN,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,KAAI,CAAC,SAAS,KAAK,SAAS,EAAE;wBAChC,OAAO;AACR,qBAAA;AACF,iBAAA;gBACD,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,oBAAA,KAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE;wBACxF,SAAS,EAAE,SAAS,CAAC,SAAS;wBAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;AACpC,wBAAA,KAAK,EAAA,KAAA;AACN,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,KAAI,CAAC,SAAS,KAAK,SAAS,EAAE;wBAChC,OAAO;AACR,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;AACzC,gBAAA,IAAM,MAAM,GAAG;oBACb,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBACpC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;iBACrC,CAAC;AACF,gBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE;AACrC,oBAAA,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,oBAAA,IAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,oBAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,KAAI,CAAC,aAAa,CAAC;AACvD,oBAAA,KAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC;AAC3D,oBAAA,KAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACjE,oBAAA,IAAI,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;AAC3E,wBAAA,IAAM,OAAO,GAAG,KAAI,CAAC,cAAc,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACvD,wBAAA,IAAI,OAAO,EAAE;AACX,4BAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,mCAAI,OAAO,CAAC,QAAQ,CAAC;AAC5F,4BAAA,KAAI,CAAC,0BAA0B,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvE,yBAAA;AACF,qBAAA;AACF,iBAAA;AAAM,qBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;AACzC,oBAAA,IAAM,WAAW,GAAG,KAAI,CAAC,oBAAoB,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACzE,oBAAA,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACzE,iBAAA;AAAM,qBAAA;AACL,oBAAA,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/D,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;AAC9C,gBAAA,IAAM,QAAQ,GAAG,KAAI,CAAC,SAAS,CAAC;AAChC,gBAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,KAAI,CAAC,aAAa,CAAC;AACvD,gBAAA,KAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC;AAC3D,gBAAA,KAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;AAC/B,gBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;oBAC3B,IAAM,GAAG,GAAG,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACnC,oBAAA,IAAM,MAAM,GAAG,KAAI,CAAC,wBAAwB,CAAC,KAAI,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACtF,oBAAA,IAAI,MAAM,EAAE;AACV,wBAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChD,qBAAA;AACD,oBAAA,IACE,QAAQ,CAAC,kBAAkB,KAAK,kBAAkB;wBAClD,CAAA,GAAG,aAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,IAAI,MAAK,MAAM;AACpB,wBAAA,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,YAAY,EAChC;AACA,wBAAA,IAAM,UAAU,GAAG,KAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;wBACrG,IAAI,UAAU,CAAC,aAAa,EAAE;4BAC5B,IAAM,WAAW,GAAG,KAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC9D,4BAAA,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC;gCAC1B,MAAM,EAAE,QAAQ,CAAC,YAAY;gCAC7B,SAAS,EAAE,QAAQ,CAAC,eAAe;AACnC,gCAAA,OAAO,EAAE,WAAW;AACrB,6BAAA,CAAC,CAAC;AACH,4BAAA,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,4BAAA,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC;4BAC5B,KAAI,CAAC,0BAA0B,CAAC;gCAC9B,YAAY,EAAE,QAAQ,CAAC,YAAY;gCACnC,eAAe,EAAE,QAAQ,CAAC,eAAe;gCACzC,MAAM,EAAE,UAAU,CAAC,aAAa;gCAChC,YAAY,EAAE,UAAU,CAAC,YAAY;AACrC,gCAAA,eAAe,EAAE,CAAA,EAAA,GAAA,UAAU,CAAC,eAAe,mCAAI,SAAS;AACxD,gCAAA,SAAS,EAAE,KAAK;AACjB,6BAAA,CAAC,CAAC;AACH,4BAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,EAAE,CAAC;AAC/B,4BAAA,CAAA,EAAA,GAAA,MAAA,KAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;AACxC,4BAAA,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;4BAC1B,OAAO;AACR,yBAAA;AACF,qBAAA;yBAAM,IAAI,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,IAAI,MAAK,SAAS,EAAE;AAClC,wBAAA,IAAM,WAAW,GAAG,KAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AAC3F,wBAAA,IAAI,WAAW,EAAE;4BACf,IAAM,WAAW,GAAG,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChD,4BAAA,IAAI,WAAW,EAAE;AACf,gCAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,mCAAI,WAAW,CAAC,QAAQ,CAAC;AACtF,gCAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,0CAAE,qBAAqB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAClC,WAAW,EACX,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAClG,CAAC;AACH,6BAAA;AAAM,iCAAA;gCACL,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,0CAAE,qBAAqB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,WAAW,CAAC,CAAC;AACrD,6BAAA;AACF,yBAAA;AACF,qBAAA;AAAM,yBAAA;AACL,wBAAA,CAAA,EAAA,GAAA,MAAA,KAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;AACzC,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,CAAA,EAAA,GAAA,MAAA,KAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;AACzC,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE;AAChD,gBAAA,IAAM,WAAS,GAAG,KAAI,CAAC,SAAS,CAAC;gBACjC,IAAM,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,WAAS,CAAC,MAAM,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI;oBAAE,OAAO;AAClB,gBAAA,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,EAAE,KAAK,EAAA,EAAK,QAAC,KAAK,KAAK,WAAS,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,EAA3C,EAA4C,CAAC,CAAC;gBAC3F,KAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC9C,gBAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACnD,aAAA;AAAM,iBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc,EAAE;AACjD,gBAAA,IAAM,WAAS,GAAG,KAAI,CAAC,SAAS,CAAC;gBACjC,IAAM,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,WAAS,CAAC,MAAM,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,WAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvC,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,WAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,gBAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,KAAI,CAAC,aAAa,CAAC;gBACvD,WAAS,CAAC,QAAQ,GAAG,WAAS,CAAC,QAAQ,IAAI,KAAK,CAAC;gBACjD,IAAI,CAAC,WAAS,CAAC,QAAQ;oBAAE,OAAO;AAEhC,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,EAAA,EAAK,QAAM,QAAA,CAAA,EAAA,EAAA,CAAC,GAAP,EAAU,CAAC,CAAC;AAChD,gBAAA,IAAI,WAAS,CAAC,UAAU,KAAK,SAAS,EAAE;oBACtC,IAAM,OAAO,GAAG,KAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5D,oBAAA,IAAI,CAAC,OAAO;wBAAE,OAAO;AACrB,oBAAA,MAAM,GACD,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,EAAA,EAAA,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAA,IAAA,CAAA,EAAA;AAChC,wBAAA,QAAA,CAAA,EAAA,EAAA,OAAO,CAAC,KAAK,CAAA;+BACf,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAA,IAAA,CACnC,CAAC;oBACF,WAAS,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1C,iBAAA;AACD,gBAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,EAAE,KAAK,EAAA,EAAK,QAAC,KAAK,KAAK,WAAS,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,EAA3C,EAA4C,CAAC,CAAC;gBAChF,KAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC9C,gBAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACnD,aAAA;AAAM,iBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC3C,KAAI,CAAC,gBAAgB,CAAC,KAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC9C,aAAA;AAAM,iBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE;AAC5C,gBAAA,IAAM,IAAI,GAAG,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7D,gBAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,IAAI,KAAI,CAAC,aAAa,CAAC;AACpF,gBAAA,KAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC;gBAC3D,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AACpC,aAAA;AAAM,iBAAA,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,EAAE;AACxC,gBAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5C,KAAI,CAAC,GAAG,GAAG;AACT,oBAAA,CAAC,EAAE,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI,CAAC,QAAQ;AAC/C,oBAAA,CAAC,EAAE,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI,CAAC,QAAQ;iBAChD,CAAC;gBACF,KAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,gBAAA,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAI,CAAC,GAAG,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;AAC9C,aAAA;AACH,SAAC,CAAC;AAEF,QAAA,IAAM,SAAS,GAAG,YAAA;;YAAC,IAAkB,IAAA,GAAA,EAAA,CAAA;iBAAlB,IAAkB,EAAA,GAAA,CAAA,EAAlB,EAAkB,GAAA,SAAA,CAAA,MAAA,EAAlB,EAAkB,EAAA,EAAA;gBAAlB,IAAkB,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;AACnC,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAoD,CAAC;YACzE,IAAM,WAAW,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,GAAG,CAAC;AAC/B,YAAA,IAAM,YAAY,GAAG,KAAI,CAAC,kBAAkB,EAAE,CAAC;YAE/C,IAAI,CAAA,MAAA,KAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,oBAAoB,EAAE;AACjD,gBAAA,IAAM,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC;AACjC,gBAAA,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAM,KAAK,GAAG,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,KAAA,CAAA,GAAA,YAAY,GAAI,SAAS,CAAC,KAAK,CAAC;gBAC9C,IAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACjF,gBAAA,IAAM,WAAW,GAAiC;oBAChD,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;AACpC,oBAAA,KAAK,EAAA,KAAA;iBACN,CAAC;gBACF,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,oBAAA,KAAI,CAAC,gCAAgC,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACvG,iBAAA;AAAM,qBAAA;AACL,oBAAA,KAAI,CAAC,gCAAgC,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;oBACtF,KAAI,CAAC,qCAAqC,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AACnF,iBAAA;AACD,gBAAA,IAAI,YAAY,EAAE;AAChB,oBAAA,KAAI,CAAC,mBAAmB,GAAQ,QAAA,CAAA,EAAA,EAAA,YAAY,CAAE,CAAC;AAC/C,oBAAA,KAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;AAC3C,oBAAA,KAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACtC,iBAAA;AAAM,qBAAA;oBACL,KAAI,CAAC,4BAA4B,EAAE,CAAC;AACpC,oBAAA,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC3B,iBAAA;gBACD,OAAO;AACR,aAAA;YAED,IAAI,CAAA,MAAA,KAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,WAAW,EAAE;AACxC,gBAAA,IAAM,SAAS,GAAG,KAAI,CAAC,SAAS,CAAC;gBACjC,IAAM,KAAK,GAAG,YAAY,CAAC;AAC3B,gBAAA,IAAM,WAAW,GAAG,KAAI,CAAC,gBAAgB,CAAC,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACjF,gBAAA,IAAM,iBAAiB,GAAG;oBACxB,MAAM,EAAE,SAAS,CAAC,YAAY;oBAC9B,SAAS,EAAE,SAAS,CAAC,eAAe;AACpC,oBAAA,OAAO,EAAE,WAAW;iBACrB,CAAC;AACF,gBAAA,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;gBAE/C,IAAI,aAAa,GAAkB,IAAI,CAAC;gBACxC,IAAI,YAAY,GAAkB,IAAI,CAAC;gBACvC,IAAI,eAAe,GAAkB,IAAI,CAAC;AAE1C,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACvB,oBAAA,KAAI,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;AACvF,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAM,GAAG,GAAG,KAAK,GAAG,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAClD,oBAAA,IACE,SAAS,CAAC,kBAAkB,KAAK,kBAAkB;wBACnD,GAAG;wBACH,GAAG,CAAC,IAAI,KAAK,MAAM;AACnB,wBAAA,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,YAAY,EACjC;AACA,wBAAA,IAAM,UAAU,GAAG,KAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACvG,wBAAA,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;AACzC,wBAAA,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AACvC,wBAAA,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9C,qBAAA;AAAM,yBAAA,IAAI,SAAS,CAAC,kBAAkB,KAAK,kBAAkB,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,EAAE;AACxG,wBAAA,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC;wBACzB,IAAM,UAAU,GAAG,KAAI,CAAC,sBAAsB,CAC5C,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,eAAe,EACzB,GAAG,CAAC,EAAE,EACN,KAAK,CACN,CAAC;AACF,wBAAA,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AACvC,wBAAA,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;AACzC,wBAAA,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC;AAC9C,qBAAA;AACF,iBAAA;AAED,gBAAA,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,gBAAA,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,KAAI,CAAC,0BAA0B,CAAC;oBAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;oBACpC,eAAe,EAAE,SAAS,CAAC,eAAe;AAC1C,oBAAA,MAAM,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,aAAa,GAAI,SAAS;AAClC,oBAAA,YAAY,EAAE,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,YAAY,GAAI,SAAS;AACvC,oBAAA,eAAe,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,eAAe,GAAI,SAAS;oBAC7C,SAAS,EAAE,aAAa,KAAK,IAAI;AAClC,iBAAA,CAAC,CAAC;AAEH,gBAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,EAAE,CAAC;AAC/B,gBAAA,CAAA,EAAA,GAAA,MAAA,KAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;AACzC,aAAA;YAED,IAAI,CAAA,MAAA,KAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,SAAS,EAAE;AACtC,gBAAA,IAAM,KAAK,GAAG,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,KAAA,CAAA,GAAZ,YAAY,GAAI,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnD,gBAAA,IAAM,IAAI,GAAG,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC7D,KAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACzD,gBAAA,CAAA,EAAA,GAAA,KAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAY,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;oBAC5B,IAAM,WAAW,GAAG,KAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC9D,oBAAA,KAAI,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACzC,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,KAAI,CAAC,SAAS,0CAAE,IAAI,MAAK,MAAM,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE;AACxE,gBAAA,IAAM,OAAO,GAAG,KAAI,CAAC,cAAc,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACvD,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,mCAAI,OAAO,CAAC,QAAQ,CAAC;oBAC9F,IAAM,QAAQ,GACZ,KAAI,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;AAChC,0BAAE;4BACE,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;4BACxC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AAC1C,yBAAA;0BACD,UAAU,CAAC;AACjB,oBAAA,IAAM,KAAK,GAAG;wBACZ,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;wBACtC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;qBACvC,CAAC;oBACF,IAAM,KAAK,GAAG,KAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1E,oBAAA,IAAI,KAAK,EAAE;AACT,wBAAA,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC;AAC1B,4BAAA,SAAS,EAAE,KAAI,CAAC,SAAS,CAAC,EAAE;AAC5B,4BAAA,UAAU,eAAO,KAAI,CAAC,SAAS,CAAC,KAAK,CAAE;AACvC,4BAAA,QAAQ,EAAA,QAAA;AACR,4BAAA,KAAK,EAAA,KAAA;AACL,4BAAA,aAAa,EAAE,KAAI,CAAC,SAAS,CAAC,aAAa;AAC3C,4BAAA,YAAY,oBAAM,KAAI,CAAC,SAAS,CAAC,YAAY,EAAC,IAAA,CAAA;AAC9C,4BAAA,MAAM,EAAE,KAAI,CAAC,SAAS,CAAC,MAAM;AAC9B,yBAAA,CAAC,CAAC;AACJ,qBAAA;AAAM,yBAAA;wBACL,IAAM,WAAW,GAAG,KAAI,CAAC,gBAAgB,CAAC,YAAY,aAAZ,YAAY,KAAA,KAAA,CAAA,GAAZ,YAAY,GAAI,KAAI,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC7F,wBAAA,KAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,KAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACtF,qBAAA;AACF,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,KAAI,CAAC,SAAS,0CAAE,IAAI,MAAK,MAAM,IAAI,KAAI,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;AACrE,gBAAA,IAAM,SAAS,GAAG,KAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAClE,gBAAA,IAAI,SAAS,EAAE;AACb,oBAAA,IAAM,WAAW,GAAG,KAAI,CAAC,gBAAgB,CAAC,CAAA,EAAA,GAAA,YAAY,KAAZ,IAAA,IAAA,YAAY,cAAZ,YAAY,GAAI,KAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;oBAC9I,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,KAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAA,SAAA,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7F,iBAAA;AACF,aAAA;AAED,YAAA,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,YAAA,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,KAAI,CAAC,mBAAmB,GAAQ,QAAA,CAAA,EAAA,EAAA,YAAY,CAAE,CAAC;AAC/C,gBAAA,KAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;AAC3C,gBAAA,KAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;gBACL,KAAI,CAAC,4BAA4B,EAAE,CAAC;AACpC,gBAAA,KAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC3B,aAAA;AACH,SAAC,CAAC;QAEF,IAAM,UAAU,GAAG,kCAAkC,CAAC;QACtD,IAAM,UAAU,GAAG,iCAAiC,CAAC;QACrD,IAAM,QAAQ,GAAG,4BAA4B,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAE1C,QAAA,IAAM,WAAW,GAAG,YAAA;AAClB,YAAA,IAAM,KAAK,GAAG,KAAI,CAAC,kBAAkB,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO;YACrB,IAAM,GAAG,GAAG,KAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO;AACxC,YAAA,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,SAAC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC;QAErD,IAAM,OAAO,GAAG,UAAC,KAAY,EAAA;YAC3B,IAAM,QAAQ,GAAG,KAAsB,CAAC;AACxC,YAAA,IAAI,KAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO;AACnD,YAAA,IAAI,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE;gBAC7B,KAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,OAAO;AACR,aAAA;YACD,IAAI,QAAQ,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,KAAK,WAAW,EAAE;AAC7D,gBAAA,KAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;AAC/B,aAAA;AACH,SAAC,CAAC;AAEF,QAAA,IAAM,KAAK,GAAG,YAAA;;YAAC,IAAkB,IAAA,GAAA,EAAA,CAAA;iBAAlB,IAAkB,EAAA,GAAA,CAAA,EAAlB,EAAkB,GAAA,SAAA,CAAA,MAAA,EAAlB,EAAkB,EAAA,EAAA;gBAAlB,IAAkB,CAAA,EAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;AAC/B,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAqC,CAAC;YAC1D,IAAM,WAAW,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,GAAG,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW;gBAAE,OAAO;AACzB,YAAA,CAAA,EAAA,GAAA,WAAW,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,WAAA,CAAI,CAAC;AAC/B,YAAA,IAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;AACjC,YAAA,IAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACrC,YAAA,IAAM,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;YACpC,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;YAC3D,KAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,YAAA,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAI,CAAC,GAAG,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,SAAC,CAAC;AAEF,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,SAAS,CAAC;AAC9C,QAAA,MAAM,CAAC,SAAS,GAAG,UAAC,KAAoB,EAAA;;YACtC,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,CAAA,EAAA,GAAA,KAAI,CAAC,qBAAqB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAClD,SAAC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,YAAM,EAAA,OAAA,KAAI,CAAC,uBAAuB,EAAE,CAA9B,EAA8B,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAC,KAAK,EAAA;YAChD,KAAI,CAAC,uBAAuB,EAAE,CAAC;AAC/B,YAAA,KAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,KAAI,CAAC,SAAS,IAAI,KAAI,CAAC,mBAAmB,EAAE;AAC/C,gBAAA,KAAI,CAAC,uBAAuB,CAAC,KAAI,CAAC,mBAAmB,CAAC,CAAC;AACxD,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACnB,CAAA;AAED,IAAA,gBAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QAAA,IAkBC,KAAA,GAAA,IAAA,CAAA;;QAjBC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,EAAgB,EAAA;;oBAAf,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAAM,gBAAA,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,KAAK,EAAE,OAAO,CAAC,CAAA;AAAA,aAAA,CAAC,CAAC;AAChF,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAC,EAAgB,EAAA;gBAAf,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAAM,YAAA,OAAA,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAA1C,SAA0C,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,EAAE;AACvC,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC;AAC9C,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACnC,SAAA;AACD,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAI,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAI,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,GAAqB,EAAE,OAAgB,EAAA;QAC7D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC7B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,EAAE;YACpG,OAAO;AACR,SAAA;AACD,QAAA,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,OAAO;AACR,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACpC,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,kBAAkB,GAA1B,YAAA;;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,KASrB,CAAC;QACF,IAAM,GAAG,GAAG,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,QAAA,CAAI,CAAC;AAC7C,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI,CAAC;AACtB,QAAA,IAAM,eAAe,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,oBAAoB,wDAAI,CAAC;AAC1D,QAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,eAAe,KAAf,IAAA,IAAA,eAAe,KAAf,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAe,CAAE,IAAI,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,eAAA,CAAA,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,eAAe,CAAC;AAC/D,QAAA,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;YAChG,SAAS,CAAC,MAAM,EAAE,CAAC;YACnB,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnC,YAAA,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AACnC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;KAC/B,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,YAAA;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,KAErB,CAAC;AACF,QAAA,IAAM,SAAS,GACb,QAAO,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,SAAS,CAAA,KAAK,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,SAAS,CAAC;AACzF,QAAA,OAAO,SAAS,KAAT,IAAA,IAAA,SAAS,cAAT,SAAS,GAAI,IAAI,CAAC;KAC1B,CAAA;IAEO,gBAAY,CAAA,SAAA,CAAA,YAAA,GAApB,UAAqB,GAAqB,EAAA;AACxC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC;AAC7C,QAAA,IACE,GAAG,CAAC,IAAI,KAAK,MAAM;YACnB,GAAG,CAAC,IAAI,KAAK,MAAM;YACnB,GAAG,CAAC,IAAI,KAAK,MAAM;YACnB,GAAG,CAAC,IAAI,KAAK,eAAe;YAC5B,GAAG,CAAC,IAAI,KAAK,aAAa;AAC1B,YAAA,GAAG,CAAC,IAAI,KAAK,qBAAqB,EAClC;AACA,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AACD,QAAA,OAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAY,GAAG,CAAA,EAAA,EAAE,IAAI,EAAE,SAAS,EAAG,CAAA,CAAA;KACpC,CAAA;IAEO,gBAAU,CAAA,SAAA,CAAA,UAAA,GAAlB,UAAmB,KAAY,EAAA;QAA/B,IAoCC,KAAA,GAAA,IAAA,CAAA;QAnCC,IAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxF,QAAA,IAAM,IAAI,GAAgB,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,IAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,GAAG,EAAK,EAAA,OAAA,UAAG,GAAG,CAAC,IAAI,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,GAAG,CAAC,EAAE,CAAE,CAAvB,EAAuB,CAAC,CAAC,CAAC;QAEjE,IAAM,MAAM,GAAG,UAAC,GAAqB,EAAA;YACnC,IAAM,QAAQ,GAAG,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,IAAM,GAAG,GAAG,EAAA,CAAA,MAAA,CAAG,QAAQ,CAAC,IAAI,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,QAAQ,CAAC,EAAE,CAAE,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtB,SAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AAEnC,QAAA,IAAM,QAAQ,GAAwB,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gCACxH,CAAC,EAAA;YACR,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAC,GAAG,EAAK,EAAA,OAAA,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AAClE,YAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;AAAW,gBAAA,OAAA,UAAA,CAAA;AACtC,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACtB,gBAAA,OAAA,EAAA,KAAA,EAAA,UAAU,CAAC,MAAM,CAAC,UAAC,OAAO,EAAE,OAAO,EAAA;;wBACxC,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC;wBACzC,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC;wBACzC,IAAI,YAAY,GAAG,YAAY;AAAE,4BAAA,OAAO,OAAO,CAAC;wBAChD,IAAI,YAAY,GAAG,YAAY;AAAE,4BAAA,OAAO,OAAO,CAAC;wBAChD,OAAO,OAAO,CAAC;AACjB,qBAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAA,CAAA;AAClB,aAAA;4BACM,UAAU,CAAC,CAAC,CAAC,EAAA,CAAA;;AAZtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAA;kCAAlC,CAAC,CAAA,CAAA;;;AAaT,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;KAChB,CAAA;IAEO,gBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAxB,UAAyB,GAAqB,EAAA;AAC5C,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,GAAG,CAAC;AAC1E,QAAA,IAAM,IAAI,GAAG,IAAI,GAAG,CAClB,IAAI,CAAC,MAAM;AACR,aAAA,QAAQ,EAAE;aACV,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,IAAK,OAAA,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAU,CAArD,EAAqD,CAAC,CACpF,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC;AAClC,QAAA,OAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACK,GAAG,CAAA,EAAA,EACN,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAC7C,CAAA,CAAA;KACH,CAAA;IAEO,gBAAc,CAAA,SAAA,CAAA,cAAA,GAAtB,UAAuB,KAAY,EAAA;QAAnC,IAiBC,KAAA,GAAA,IAAA,CAAA;QAhBC,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC;QACxC,IAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,IAAK,OAAA,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAArB,EAAqB,CAAC,CAAC,CAAC;QAC7E,IAAI,IAAI,GAAqB,IAAI,CAAC;AAElC,QAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO,EAAA;;AAC7B,YAAA,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,mCAAI,OAAO,CAAC,QAAQ,CAAC;AAClF,YAAA,IAAM,QAAQ,GAAG,KAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;gBAAE,OAAO;AACrG,YAAA,IAAM,KAAK,GAAG,KAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC,EAAE;AACvC,gBAAA,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;AACnD,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,mBAAmB,GAA3B,UAA4B,EAAU,EAAE,IAA+C,EAAA;QACrF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAA,OAAO,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE;YACxB,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;IAEO,gBAAW,CAAA,SAAA,CAAA,WAAA,GAAnB,UAAoB,KAAY,EAAA;QAAhC,IAqBC,KAAA,GAAA,IAAA,CAAA;QApBC,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC;QAE/B,IAAI,MAAM,GAAkB,IAAI,CAAC;AACjC,QAAA,IAAI,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE5C,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AACjB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;AACnC,YAAA,IAAM,SAAS,GAAG,CAAC,CAAA,EAAA,GAAA,MAAC,IAAI,CAAC,KAAiD,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,IAAI,CAAC,CAAC;AACtG,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC9C,IAAM,SAAS,GAAG,KAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACxF,gBAAA,IAAI,SAAS,CAAC,QAAQ,GAAG,SAAS;oBAAE,SAAS;AAC7C,gBAAA,IAAI,SAAS,CAAC,QAAQ,GAAG,YAAY,EAAE;AACrC,oBAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC;AAClC,oBAAA,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;AAClB,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,MAAM,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,IAAI,CAAC;KAC9D,CAAA;IAEO,gBAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,MAAc,EAAA;AAC9B,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,KAErB,CAAC;AACF,QAAA,IAAM,SAAS,GACb,QAAO,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,SAAS,CAAA,KAAK,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,SAAS,CAAC;AACzF,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,EAAE;AAChC,YAAA,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACjC,SAAA;KACF,CAAA;IAEO,gBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAzB,UAA0B,KAAY,EAAA;QACpC,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC1B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE;YAChC,IAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC;YAC7E,OAAO;AACR,SAAA;AACD,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,EAAE;AACtC,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC1B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,YAAA,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC;YAClD,OAAO;AACR,SAAA;AACD,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC1B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB,CAAA;IAEO,gBAA2B,CAAA,SAAA,CAAA,2BAAA,GAAnC,UACE,QAAoC,EAAA;QADtC,IAuDC,KAAA,GAAA,IAAA,CAAA;;AApDC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,SAAS,CAAC;QAChC,IAAM,kBAAkB,GAAuC,EAAE,CAAC;AAClE,QAAA,IAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QAEzC,CAAC,CAAA,EAAA,GAAA,QAAQ,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,OAAO,CAAC,UAAC,OAAO,EAAA;YACxC,IAAM,UAAU,GAAG,KAAI,CAAC,oCAAoC,CAAC,OAAO,CAAC,CAAC;YACtE,IAAI,CAAC,UAAU,IAAI,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAAE,OAAO;AAC7D,YAAA,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAClC,YAAA,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,MAAA,QAAQ,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,EAAE;AACpD,cAAE,IAAI,CAAC,oCAAoC,CAAC;AACxC,gBAAA,EAAE,EAAE,qBAAqB;AACzB,gBAAA,UAAU,EAAE,MAAM;AAClB,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;AACnC,oBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC7B,oBAAA,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;AAChC,iBAAA;AACD,gBAAA,eAAe,EAAE,IAAI;gBACrB,kBAAkB,EAAE,CAAC,cAAc,CAAC;AACpC,gBAAA,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;AAClC,gBAAA,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;aACnC,CAAC;cACF,IAAI,CAAC;AACT,QAAA,IAAM,YAAY,GAAG,CAAA,CAAA,EAAA,GAAA,MAAA,QAAQ,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,EAAE;AACxD,cAAE,IAAI,CAAC,oCAAoC,CAAC;AACxC,gBAAA,EAAE,EAAE,uBAAuB;AAC3B,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;AACrC,oBAAA,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;AAC/B,oBAAA,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;AAClC,iBAAA;AACD,gBAAA,eAAe,EAAE,IAAI;gBACrB,kBAAkB,EAAE,CAAC,cAAc,CAAC;AACpC,gBAAA,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;aACrC,CAAC;cACF,IAAI,CAAC;AACT,QAAA,IAAM,WAAW,GACf,QAAQ,CAAC,QAAQ,KAAK,cAAc;AAClC,cAAE,CAAC,YAAY,EAAE,UAAU,CAAC;AAC5B,cAAE,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACjC,QAAA,WAAW,CAAC,OAAO,CAAC,UAAC,aAAa,EAAA;YAChC,IAAI,CAAC,aAAa,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBAAE,OAAO;AACnE,YAAA,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACrC,YAAA,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;AACtD,QAAA,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;KACzC,CAAA;IAEO,gBAAoC,CAAA,SAAA,CAAA,oCAAA,GAA5C,UACE,OAA2C,EAAA;;AAE3C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;QAC1B,IAAM,EAAE,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,EAAE,CAAC;AAC9B,QAAA,IAAM,OAAO,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AACjC,QAAA,IACE,OAAO,CAAC,UAAU,KAAK,MAAM;YAC7B,OAAO,CAAC,UAAU,KAAK,QAAQ;YAC/B,OAAO,CAAC,UAAU,KAAK,UAAU;AACjC,YAAA,OAAO,CAAC,UAAU,KAAK,kBAAkB,EACzC;AACA,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,IAAM,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACxF,QAAA,IAAM,aAAa,GACjB,OAAO,CAAC,UAAU,KAAK,kBAAkB;AACvC,cAAE,SAAS;cACT,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACzD,QAAA,IAAM,gBAAgB,GACpB,OAAO,CAAC,UAAU,KAAK,kBAAkB;cACrC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,gBAAgB,CAAC;cACxD,SAAS,CAAC;AAChB,QAAA,OAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACK,OAAO,CAAA,EAAA,EACV,EAAE,EAAA,EAAA,EACF,IAAI,EACC,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,OAAO,CAAC,IAAI,CACf,EAAA,EAAA,OAAO,SAAA,EAET,CAAA,EAAA,kBAAkB,EAAA,kBAAA,EAClB,aAAa,EAAA,aAAA,EACb,gBAAgB,EAAA,gBAAA,EAChB,SAAS,EACP,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;kBACjC,OAAO,CAAC,SAAS;kBACjB,IAAI,CAAC,oCAAoC,CAAC,OAAO,CAAC,UAAU,CAAC,EACnE,CAAA,CAAA;KACH,CAAA;IAEO,gBAA2B,CAAA,SAAA,CAAA,2BAAA,GAAnC,UACE,QAAqD,EAAA;QAErD,IAAM,MAAM,GAAG,CAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,MAAM,IAAG,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC;QAC9D,IAAM,UAAU,GAAoC,EAAE,CAAC;AACvD,QAAA,MAAM,CAAC,OAAO,CAAC,UAAC,OAAO,EAAA;AACrB,YAAA,IAAI,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,eAAe;gBAAE,OAAO;AACtE,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO;AACzC,YAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACjC,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KACnB,CAAA;IAEO,gBAAsB,CAAA,SAAA,CAAA,sBAAA,GAA9B,UAA+B,OAA6B,EAAA;QAC1D,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAA;AAAE,YAAA,OAAO,SAAS,CAAC;QACvC,IAAM,UAAU,GAAa,EAAE,CAAC;AAChC,QAAA,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;YACpB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO;AAClD,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO;AACvC,YAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;KACnD,CAAA;IAEO,gBAAyB,CAAA,SAAA,CAAA,yBAAA,GAAjC,UACE,KAAsD,EAAA;QAEtD,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS,CAAC;AAC1C,QAAA,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QACtD,IAAM,UAAU,GAAsB,EAAE,CAAC;AACzC,QAAA,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;AACnB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAAE,OAAO;AACtC,YAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO;AACvC,YAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;KACnD,CAAA;IAEO,gBAAoC,CAAA,SAAA,CAAA,oCAAA,GAA5C,UAA6C,UAAkC,EAAA;QAC7E,IAAI,UAAU,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE,CAAC;AACvC,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,+BAA+B,GAAvC,UAAwC,KAAa,EAAE,KAAY,EAAA;QACjE,IAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,uBAAuB,CAAC;QACjD,IACE,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;AAC3D,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;AAC3D,YAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;YAC7D,IAAI,CAAC,uBAAuB,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,EAC/D;YACA,OAAO,IAAI,CAAC,uBAAuB,CAAC;AACrC,SAAA;AACD,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC;AAC3B,QAAA,IACE,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;AACvC,YAAA,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;AACzC,YAAA,QAAQ,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;AAC3C,aAAC,MAAM,CAAC,eAAe,KAAK,SAAS;iBAClC,EAAE,iBAAiB,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,eAAe,KAAK,MAAM,CAAC,eAAe,CAAC,CAAC,EAC1G;AACA,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB,CAAA;IAEO,gBAA2B,CAAA,SAAA,CAAA,2BAAA,GAAnC,UAAoC,KAAa,EAAA;QAO/C,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,qBAAqB;AAAE,YAAA,OAAO,IAAI,CAAC;QACxE,IAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,IACE,UAAU,KAAK,MAAM;AACrB,YAAA,UAAU,KAAK,QAAQ;AACvB,YAAA,UAAU,KAAK,UAAU;YACzB,UAAU,KAAK,kBAAkB,EACjC;AACA,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,IAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI,CAAC;QAC1C,IAAI,UAAU,KAAK,kBAAkB,EAAE;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;AAC/C,YAAA,IAAM,aAAW,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,aAAW,GAAG,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;YACjC,OAAO;AACL,gBAAA,SAAS,EAAA,SAAA;AACT,gBAAA,SAAS,EAAA,SAAA;AACT,gBAAA,UAAU,EAAA,UAAA;AACV,gBAAA,WAAW,EAAA,aAAA;AACX,gBAAA,eAAe,EAAE,SAAS;aAC3B,CAAC;AACH,SAAA;AACD,QAAA,IAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QACnE,OAAO;AACL,YAAA,SAAS,EAAA,SAAA;AACT,YAAA,SAAS,EAAA,SAAA;AACT,YAAA,UAAU,EAAA,UAAA;AACV,YAAA,WAAW,EAAA,WAAA;SACZ,CAAC;KACH,CAAA;IAEO,gBAAgC,CAAA,SAAA,CAAA,gCAAA,GAAxC,UACE,SAA4D,EAC5D,OAAkC,EAClC,KAAY,EACZ,WAAuC,EACvC,IAAmC,EAAA;QAEnC,IAAI,CAAC,IAAI,CAAC,6BAA6B;YAAE,OAAO;QAChD,IAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC1D,IAAI,CAAC,6BAA6B,CAAC;AACjC,YAAA,SAAS,EAAA,SAAA;YACT,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,YAAA,OAAO,EAAA,OAAA;AACP,YAAA,IAAI,EACF,UAAU,IAAI,OAAO,CAAC,MAAM;AAC1B,kBAAE;AACE,oBAAA,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AACrB,oBAAA,KAAK,eAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAE;AAClC,oBAAA,GAAG,eAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAE;AAC9B,oBAAA,QAAQ,eAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAE;AACzC,iBAAA;AACH,kBAAE,SAAS;AACf,YAAA,eAAe,EACb,iBAAiB,IAAI,OAAO,CAAC,MAAM;AACjC,kBAAE,OAAO,CAAC,MAAM,CAAC,eAAe;AAChC,kBAAE,SAAS;AACf,YAAA,MAAM,EACJ,UAAU,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;AACpE,kBAAE;AACE,oBAAA,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AACrB,oBAAA,QAAQ,eAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAE;AACzC,iBAAA;AACH,kBAAE,SAAS;AACf,YAAA,IAAI,EAAE,IAAI;AACR,kBAAE;oBACE,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,YAAY,EAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACP,IAAI,CAAC,YAAY,KACpB,MAAM,EAAA,QAAA,CAAA,EAAA,EAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAA,EACrC,KAAK,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CACpC,EAAA,CAAA;AACD,oBAAA,KAAK,EAAO,QAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,CAAE;AACzB,iBAAA;AACH,kBAAE,SAAS;AACd,SAAA,CAAC,CAAC;KACJ,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,qCAAqC,GAA7C,UACE,OAAkC,EAClC,KAAY,EACZ,WAAuC,EAAA;QAEvC,IAAI,CAAC,IAAI,CAAC,4BAA4B;YAAE,OAAO;AAC/C,QAAA,IAAI,iBAAiB,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO;QAChD,IAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC1D,QAAA,IAAI,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE;YAChC,IAAI,CAAC,4BAA4B,CAAC;AAChC,gBAAA,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,gBAAA,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAC3B,gBAAA,OAAO,EAAA,OAAA;AACP,gBAAA,MAAM,EAAE;AACN,oBAAA,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AACrB,oBAAA,QAAQ,eAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAE;AACzC,iBAAA;AACF,aAAA,CAAC,CAAC;YACH,OAAO;AACR,SAAA;QACD,IAAI,CAAC,4BAA4B,CAAC;AAChC,YAAA,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,YAAA,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAC3B,YAAA,OAAO,EAAA,OAAA;AACP,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AACrB,gBAAA,KAAK,eAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAE;AAClC,gBAAA,GAAG,eAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAE;AAC9B,gBAAA,QAAQ,eAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAE;AACzC,aAAA;AACF,SAAA,CAAC,CAAC;KACJ,CAAA;IAEO,gBAAuB,CAAA,SAAA,CAAA,uBAAA,GAA/B,UAAgC,KAAY,EAAA;;QAC1C,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,OAAO;AACR,SAAA;QACD,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,IAAI,MAAK,qBAAqB,IAAI,IAAI,CAAC,uBAAuB,EAAE;YACvE,OAAO;AACR,SAAA;QACD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,OAAO;AACR,SAAA;AACD,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACpC,OAAO;AACR,SAAA;QACD,IACE,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;AAC7D,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;AAC7D,YAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU;AAC/D,YAAA,IAAI,CAAC,uBAAuB,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW;AACjE,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACjF;YACA,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC;AACxC,QAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,0CAAE,uBAAuB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;KACnF,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,wBAAwB,GAAhC,UAAiC,SAAiB,EAAE,KAAY,EAAA;;QAC9D,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC;QACnD,IAAI,EAAC,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAE,MAAM,CAAA;AAAE,YAAA,OAAO,IAAI,CAAC;QACnC,IAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AAC1B,QAAA,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;AACxB,QAAA,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO,CAAC,QAAQ,CAAC;AACjF,QAAA,IAAM,IAAI,GAAG;YACX,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,CAAC,EAAE,KAAK,CAAC,CAAC;AACV,YAAA,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;AACzB,YAAA,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;SAC5B,CAAC;QACF,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,oBAAoB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAG,IAAI,CAAC,CAAC;QACpD,IAAM,WAAW,GAAG,QAAQ;cACxB,IAAI,CAAC,2BAA2B,CAC9B,QAAQ,EACR,SAAS,EACT,KAAK,EACL,OAAO,CAAC,IAAI,EACZ,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAC9B;cACD,SAAS,CAAC;AACd,QAAA,IAAM,gBAAgB,GAAG,IAAI,CAAC,8BAA8B,CAC1D,CAAA,EAAA,GAAA,KAAK,CAAC,uBAAuB,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,EAAA,IAAI,CAAC,EACrC,SAAS,EACT,KAAK,EACL,OAAO,CAAC,IAAI,EACZ,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,CAC9B,CAAC;AACF,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;AACvD,YAAA,IAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChC,IAAM,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC9E,kBAAE,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,CAAC;kBAC1F,IAAI,CAAC;YACT,IAAM,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC;AAChF,kBAAE,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,CAAC;kBAC3F,IAAI,CAAC;YACT,IAAM,SAAS,GAAG,oBAAoB,KAAA,IAAA,IAApB,oBAAoB,KAApB,KAAA,CAAA,GAAA,oBAAoB,GAAI,qBAAqB,CAAC;AAChE,YAAA,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,OAAO;AACL,gBAAA,OAAO,EAAA,OAAA;gBACP,SAAS,EAAE,OAAO,CAAC,EAAE;AACrB,gBAAA,SAAS,EAAA,SAAA;gBACT,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,CAAC;AACH,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAEO,gBAA2B,CAAA,SAAA,CAAA,2BAAA,GAAnC,UACE,KAAY,EACZ,QAAwC,EACxC,gBAA8C,EAC9C,OAAyC,EACzC,SAAiB,EAAA;AAEjB,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,kBAAkB,EAAE;YAC7C,IAAM,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAChF,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;YAC3D,IAAI,MAAI,GAAoE,IAAI,CAAC;AACjF,YAAA,KAAqB,UAAO,EAAP,SAAA,GAAA,OAAO,EAAP,EAAO,GAAA,SAAA,CAAA,MAAA,EAAP,IAAO,EAAE;AAAzB,gBAAA,IAAM,MAAM,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;gBACf,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtF,gBAAA,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS;oBAAE,SAAS;AAC3C,gBAAA,IAAI,MAAI,IAAI,QAAQ,IAAI,MAAI,CAAC,QAAQ;oBAAE,SAAS;gBAChD,MAAI,GAAG,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC;AAC7B,aAAA;AACD,YAAA,IAAI,CAAC,MAAI;AAAE,gBAAA,OAAO,IAAI,CAAC;AACvB,YAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,CAAC,MAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,MAAI,CAAC,MAAM,EAAE,CAAC;AAClG,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC;AAC3B,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChF,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AAC3D,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;YACnC,IAAI,MAAI,GAAgF,IAAI,CAAC;AAC7F,YAAA,KAA0B,UAAO,EAAP,SAAA,GAAA,OAAO,EAAP,EAAO,GAAA,SAAA,CAAA,MAAA,EAAP,IAAO,EAAE;AAA9B,gBAAA,IAAM,WAAW,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;gBACpB,IAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtF,gBAAA,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS;oBAAE,SAAS;AAC3C,gBAAA,IAAI,MAAI,IAAI,QAAQ,IAAI,MAAI,CAAC,QAAQ;oBAAE,SAAS;gBAChD,MAAI,GAAG,EAAE,WAAW,EAAA,WAAA,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC;AAC1C,aAAA;YACD,OAAO,MAAI,GAAG,EAAE,WAAW,EAAE,MAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC7E,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;YACjC,IAAI,MAAI,GAA8E,IAAI,CAAC;AAC3F,YAAA,KAA0B,UAAO,EAAP,SAAA,GAAA,OAAO,EAAP,EAAO,GAAA,SAAA,CAAA,MAAA,EAAP,IAAO,EAAE;AAA9B,gBAAA,IAAM,WAAW,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;gBACpB,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,MAAM;oBAAE,SAAS;AACtB,gBAAA,IAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9E,gBAAA,IAAI,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS;oBAAE,SAAS;gBACrD,IAAI,MAAI,IAAI,SAAS,CAAC,QAAQ,IAAI,MAAI,CAAC,QAAQ;oBAAE,SAAS;AAC1D,gBAAA,MAAI,GAAG,EAAE,WAAW,EAAA,WAAA,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9D,aAAA;YACD,OAAO,MAAI,GAAG,EAAE,WAAW,EAAE,MAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC7E,SAAA;QACD,IAAI,IAAI,GAA8E,IAAI,CAAC;AAC3F,QAAA,KAA0B,UAAO,EAAP,SAAA,GAAA,OAAO,EAAP,EAAO,GAAA,SAAA,CAAA,MAAA,EAAP,IAAO,EAAE;AAA9B,YAAA,IAAM,WAAW,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;YACpB,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtF,YAAA,IAAI,QAAQ,GAAG,OAAO,CAAC,SAAS;gBAAE,SAAS;AAC3C,YAAA,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAChD,IAAI,GAAG,EAAE,WAAW,EAAA,WAAA,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC;AAC1C,SAAA;QACD,OAAO,IAAI,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;KAC7E,CAAA;IAEO,gBAA4B,CAAA,SAAA,CAAA,4BAAA,GAApC,UACE,KAAY,EACZ,QAAwC,EACxC,gBAA8C,EAC9C,OAAyC,EACzC,SAAiB,EAAA;AAEjB,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,kBAAkB,EAAE;YAC7C,IAAM,OAAO,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YAChF,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI,CAAC;YACjC,IAAI,MAAI,GAAoE,IAAI,CAAC;AACjF,YAAA,KAAqB,UAAO,EAAP,SAAA,GAAA,OAAO,EAAP,EAAO,GAAA,SAAA,CAAA,MAAA,EAAP,IAAO,EAAE;AAAzB,gBAAA,IAAM,MAAM,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;gBACf,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtF,gBAAA,IAAI,MAAI,IAAI,QAAQ,IAAI,MAAI,CAAC,QAAQ;oBAAE,SAAS;gBAChD,MAAI,GAAG,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC;AAC7B,aAAA;AACD,YAAA,IAAI,CAAC,MAAI;AAAE,gBAAA,OAAO,IAAI,CAAC;AACvB,YAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,CAAC,MAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,MAAI,CAAC,MAAM,EAAE,CAAC;AAClG,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC;AAC3B,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAChF,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC;AACjC,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE;YACnC,IAAI,MAAI,GAAgF,IAAI,CAAC;AAC7F,YAAA,KAA0B,UAAO,EAAP,SAAA,GAAA,OAAO,EAAP,EAAO,GAAA,SAAA,CAAA,MAAA,EAAP,IAAO,EAAE;AAA9B,gBAAA,IAAM,WAAW,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;gBACpB,IAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtF,gBAAA,IAAI,MAAI,IAAI,QAAQ,IAAI,MAAI,CAAC,QAAQ;oBAAE,SAAS;gBAChD,MAAI,GAAG,EAAE,WAAW,EAAA,WAAA,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC;AAC1C,aAAA;YACD,OAAO,MAAI,GAAG,EAAE,WAAW,EAAE,MAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC7E,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;YACjC,IAAI,MAAI,GAA8E,IAAI,CAAC;AAC3F,YAAA,KAA0B,UAAO,EAAP,SAAA,GAAA,OAAO,EAAP,EAAO,GAAA,SAAA,CAAA,MAAA,EAAP,IAAO,EAAE;AAA9B,gBAAA,IAAM,WAAW,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;gBACpB,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,MAAM;oBAAE,SAAS;AACtB,gBAAA,IAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9E,IAAI,MAAI,IAAI,SAAS,CAAC,QAAQ,IAAI,MAAI,CAAC,QAAQ;oBAAE,SAAS;AAC1D,gBAAA,MAAI,GAAG,EAAE,WAAW,EAAA,WAAA,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9D,aAAA;YACD,OAAO,MAAI,GAAG,EAAE,WAAW,EAAE,MAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;AAC7E,SAAA;QACD,IAAI,IAAI,GAA8E,IAAI,CAAC;AAC3F,QAAA,KAA0B,UAAO,EAAP,SAAA,GAAA,OAAO,EAAP,EAAO,GAAA,SAAA,CAAA,MAAA,EAAP,IAAO,EAAE;AAA9B,YAAA,IAAM,WAAW,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;YACpB,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtF,YAAA,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAChD,IAAI,GAAG,EAAE,WAAW,EAAA,WAAA,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC;AAC1C,SAAA;QACD,OAAO,IAAI,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;KAC7E,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,4BAA4B,GAApC,UACE,OAAyC,EACzC,QAA4B,EAC5B,SAAiB,EAAA;;AAEjB,QAAA,IAAM,MAAM,GAAG,OAAO,CAAC,UAAU,KAAK,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;QACpF,IAAI,CAAC,MAAM,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC;QAC9B,IAAM,qBAAqB,GAAG,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACrF,QAAA,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE;YACpC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,UAAC,CAAC,EAAE,KAAK,EAAK,EAAA,OAAA,KAAK,CAAA,EAAA,CAAC,CAAC,MAAM,CAAC,UAAC,KAAK,EAAA;AAC7E,gBAAA,OAAA,OAAO,CAAC,UAAU,KAAK,QAAQ,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;AAA1E,aAA0E,CAC3E,CAAC;AACH,SAAA;QACD,IAAI,EAAC,CAAA,EAAA,GAAA,OAAO,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA;AAAE,YAAA,OAAO,EAAE,CAAC;AAC9C,QAAA,OAAO,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,UAAC,WAAW,EAAA;YAC9C,OAAA,WAAW,IAAI,CAAC;gBAChB,WAAW,GAAG,MAAM,CAAC,MAAM;AAC3B,iBAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAA;AAF5E,SAE4E,CAC7E,CAAC;KACH,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,4BAA4B,GAApC,UAAqC,SAAiB,EAAE,QAA4B,EAAA;QAApF,IAmBC,KAAA,GAAA,IAAA,CAAA;AAlBC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,IAAI,GAAG,EAAU,CAAC;QACxD,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,IAAI,CAAC,SAAS,KAAK,SAAS,CAAA,EAAA,CAAC,CAAC;QAC1F,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,GAAG,EAAU,CAAC;AAC5C,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC;AAC/C,QAAA,IAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;AACnC,QAAA,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AACjB,YAAA,IAAM,KAAK,GAAG,KAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,KAAK,EAAA;AACtC,gBAAA,IACE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS;AAClD,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,EAClD;AACA,oBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrB,iBAAA;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,QAAQ,CAAC;KACjB,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,+BAA+B,GAAvC,UACE,OAAyC,EACzC,OAAqC,EAAA;;QAErC,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE;AACpC,YAAA,OAAA,aAAA,CAAA,EAAA,EAAW,OAAO,EAAE,IAAA,CAAA,CAAA;AACrB,SAAA;QACD,IAAI,EAAC,CAAA,EAAA,GAAA,OAAO,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA;AAAE,YAAA,OAAO,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC,gBAAgB;aAC5B,GAAG,CAAC,UAAC,QAAQ,EAAA,EAAK,OAAA,OAAO,CAAC,IAAI,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,eAAe,KAAK,QAAQ,GAAA,CAAC,CAA7D,EAA6D,CAAC;AAChF,aAAA,MAAM,CAAC,UAAC,MAAM,EAAA,EAA2C,OAAA,OAAO,CAAC,MAAM,CAAC,CAAA,EAAA,CAAC,CAAC;KAC9E,CAAA;IAEO,gBAA2B,CAAA,SAAA,CAAA,2BAAA,GAAnC,UACE,QAA4B,EAC5B,SAAiB,EACjB,aAAoB,EACpB,IAAuC,EACvC,YAAqB,EAAA;QAErB,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;AAC9B,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;QACD,IAAM,KAAK,GAAG,wBAAwB,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAC1E,QAAA,IAAM,MAAM,GAAG,UAAC,KAAY,EAAA,EAAK,OAAA,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA,EAAA,CAAC;AACrE,QAAA,IAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,MAAM,EAAK,EAAA,QAAC;YAClD,EAAE,EAAE,MAAM,CAAC,EAAE;AACb,YAAA,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;SAClC,EAAC,EAAA,CAAC,CAAC;QACJ,IAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAA;YACpC,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,gBAAA,KAAK,EAAA,KAAA;AACL,gBAAA,GAAG,EAAA,GAAA;AACH,gBAAA,QAAQ,EAAE;oBACR,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;oBACxB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;AACzB,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,EAAE,QAAQ,EAAA,QAAA,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;KAC5B,CAAA;IAEO,gBAA8B,CAAA,SAAA,CAAA,8BAAA,GAAtC,UACE,OAAiD,EACjD,SAAiB,EACjB,aAAoB,EACpB,IAAuC,EACvC,YAAqB,EAAA;QAErB,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,CAAA;AAAE,YAAA,OAAO,EAAE,CAAC;QAChC,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;YAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM,EAAA,EAAK,QAAC;gBAC9B,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,gBAAA,QAAQ,EAAO,QAAA,CAAA,EAAA,EAAA,MAAM,CAAC,QAAQ,CAAE;aACjC,EAAC,EAAA,CAAC,CAAC;AACL,SAAA;QACD,IAAM,KAAK,GAAG,wBAAwB,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM,EAAA,EAAK,QAAC;YAC9B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC;SACxD,EAAC,EAAA,CAAC,CAAC;KACL,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,sBAAsB,GAA9B,UACE,QAA0E,EAC1E,IAAsE,EAAA;AAEtE,QAAA,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChD,YAAA,QACE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AACxC,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAClD;AACH,SAAA;AACD,QAAA,IAAI,iBAAiB,IAAI,QAAQ,IAAI,iBAAiB,IAAI,IAAI,EAAE;AAC9D,YAAA,QACE,QAAQ,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe;AACjD,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAClD;AACH,SAAA;AACD,QAAA,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE;AAChD,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3D,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,WAAW,GAAnB,UAAoB,CAAQ,EAAE,CAAQ,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;KACnE,CAAA;IAEO,gBAAwB,CAAA,SAAA,CAAA,wBAAA,GAAhC,UAAiC,OAAkC,EAAA;AACjE,QAAA,IAAI,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE;YACvC,OAAO;gBACL,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,gBAAA,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe;gBACzC,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,gBAAA,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAC3B,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;AACrC,oBAAA,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;AAC/B,oBAAA,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;AAClC,iBAAA;AACD,gBAAA,eAAe,EAAE;AACf,oBAAA,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AACrB,oBAAA,QAAQ,eAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAE;AACzC,iBAAA;aACF,CAAC;AACH,SAAA;AACD,QAAA,IAAI,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE;YAChC,OAAO;gBACL,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,gBAAA,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAC3B,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;AACrC,oBAAA,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;AAC/B,oBAAA,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;AAClC,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,KAAK,eAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAE;AAClC,oBAAA,GAAG,eAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAE;AAC9B,oBAAA,QAAQ,eAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAE;AACxC,oBAAA,SAAS,EAAE,OAAO,CAAC,UAAU,KAAK,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS;AACjF,iBAAA;aACF,CAAC;AACH,SAAA;QACD,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,YAAA,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAC3B,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;AACrC,gBAAA,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;AAC/B,gBAAA,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;AAClC,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,eAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAE;AACzC,aAAA;SACF,CAAC;KACH,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,4BAA4B,GAApC,YAAA;;AACE,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACpC,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,sBAAsB,kDAAI,CAAC;KAC3C,CAAA;IAEO,gBAAa,CAAA,SAAA,CAAA,aAAA,GAArB,UAAsB,MAAc,EAAA;QAApC,IAgEC,KAAA,GAAA,IAAA,CAAA;;QA/DC,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAC5C,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAClD,IAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtD,QAAA,IAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC;AACxF,QAAA,IAAM,UAAU,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,QAAQ,GAAG,GAAG,CAAC;AACvD,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEvE,QAAA,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC5E,YAAA,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AACvC,SAAA;AAED,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,UAAG,QAAQ,CAAC,CAAC,EAAA,IAAA,CAAI,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,UAAG,QAAQ,CAAC,CAAC,EAAA,IAAA,CAAI,CAAC;AACrC,QAAA,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,EAAG,CAAA,MAAA,CAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,OAAI,CAAC;AACpD,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,EAAG,CAAA,MAAA,CAAA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,OAAI,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAG,CAAA,MAAA,CAAA,QAAQ,OAAI,CAAC;AACxC,QAAA,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;AACrC,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;AACjC,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;AAC1B,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC;AAC1C,QAAA,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;AAClC,QAAA,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;AACpC,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC9B,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QAE3B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAM,QAAQ,GAAG,UAAC,KAAc,EAAA;AAC9B,YAAA,IAAI,SAAS;gBAAE,OAAO;YACtB,SAAS,GAAG,IAAI,CAAC;AACjB,YAAA,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,MAAM,CAAC,MAAM,EAAE,CAAC;AAChB,YAAA,KAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;gBACnC,KAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACvC,aAAA;AACH,SAAC,CAAC;AAEF,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAC,KAAK,EAAA;YACvC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC5C,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChB,aAAA;AAAM,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;gBACjC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAM,EAAA,OAAA,QAAQ,CAAC,IAAI,CAAC,CAAd,EAAc,CAAC,CAAC;AAEtD,QAAA,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,MAAM,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;KAC1B,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,YAAA;QACE,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,uBAAuB,GAA/B,YAAA;;QACE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAC7C,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACjC,OAAO;AACR,SAAA;AACD,QAAA,IAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,IAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AACxC,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO,CAAC,QAAQ,CAAC;YAC7E,IAAI,CAAC,0BAA0B,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACjC,OAAO;AACR,SAAA;QACD,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAClC,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YACnC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;KAClC,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,0BAA0B,GAAlC,UACE,SAAiB,EACjB,QAAe,EACf,OAA4E,EAAA;;QAE5E,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;QACnD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,YAAY,EAAE;YAC7C,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAA,QAAA,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC,CAAC;YACjG,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACtE,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAxB,UAAyB,KAA6C,EAAE,KAAY,EAAA;QAClF,IAAM,OAAO,GAAG,EAAE,CAAC;AACnB,QAAA,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5B,QAAA,IAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AACvC,QAAA,IAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AACvC,QAAA,IAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAA,IAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC,QAAA,IAAM,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC;AAC1C,QAAA,IAAM,YAAY,GAAG,OAAO,GAAG,YAAY,CAAC;QAE5C,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE;AACpC,YAAA,IAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;AAC/F,YAAA,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC1D,SAAA;QAED,IAAI,CAAC,GAAG,OAAO,CAAC;QAChB,IAAI,CAAC,GAAG,OAAO,CAAC;QAChB,IAAI,KAAK,GAAG,WAAW,CAAC;QACxB,IAAI,MAAM,GAAG,YAAY,CAAC;QAE1B,QAAQ,KAAK,CAAC,MAAM;AAClB,YAAA,KAAK,IAAI;AACP,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAClD,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;gBACnD,MAAM;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACtD,gBAAA,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC;AACxB,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;gBACnD,MAAM;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACxD,gBAAA,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC;AAC1B,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;gBAClD,MAAM;AACR,YAAA,KAAK,IAAI;AACP,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACtD,gBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACxD,gBAAA,CAAC,GAAG,WAAW,GAAG,KAAK,CAAC;AACxB,gBAAA,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC;gBAC1B,MAAM;AAGT,SAAA;AAED,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,EAAA,CAAA,EAAE,KAAK,EAAA,KAAA,EAAE,MAAM,EAAA,MAAA,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACvH,QAAA,IAAM,UAAU,GAAG,MAAM,CAAC,YAAY;AACpC,cAAE;gBACE,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;gBACtC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;AACxC,aAAA;AACH,cAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAChF,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC,CAAA;IAEO,gBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAzB,UAA0B,EAAU,EAAA;QAClC,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC;AAC7D,QAAA,IAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAA8B,CAAC;AACrD,QAAA,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QAC5D,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;KACxC,CAAA;IAEO,gBAAe,CAAA,SAAA,CAAA,eAAA,GAAvB,UAAwB,EAAU,EAAA;QAChC,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,aAAa;AAAE,YAAA,OAAO,IAAI,CAAC;QAClE,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AACrC,QAAA,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KAChD,CAAA;IAEO,gBAAe,CAAA,SAAA,CAAA,eAAA,GAAvB,UAAwB,MAAiC,EAAA;AACvD,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;AAAE,YAAA,OAAO,aAAa,CAAC;AAC7D,QAAA,OAAO,aAAa,CAAC;KACtB,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,aAAa,GAArB,UAAsB,CAAQ,EAAE,CAAQ,EAAA;AACtC,QAAA,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,QAAA,OAAO,EAAE,CAAC,EAAA,CAAA,EAAE,CAAC,EAAA,CAAA,EAAE,KAAK,EAAA,KAAA,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;KAChC,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,uBAAuB,GAA/B,UAAgC,MAAe,EAAE,MAAa,EAAA;AAC5D,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QACnC,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC7C,IAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/E,YAAA,IAAI,SAAS,CAAC,QAAQ,GAAG,YAAY,EAAE;AACrC,gBAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC;gBAClC,SAAS,GAAG,CAAC,CAAC;AACd,gBAAA,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;AAC7B,aAAA;AACF,SAAA;QAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAC/C,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,qBAAqB,GAA7B,UAA8B,KAAY,EAAE,CAAQ,EAAE,CAAQ,EAAA;QAC5D,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,IAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,IAAM,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC/B,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,IAAM,UAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,KAAK,EAAO,QAAA,CAAA,EAAA,EAAA,CAAC,CAAE,EAAE,QAAQ,EAAA,UAAA,EAAE,CAAC;AACtC,SAAA;AACD,QAAA,IAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AAC/D,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAM,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,EAAE,CAAC;QACnE,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC;KACvC,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,qBAAqB,GAA7B,UACE,IAA6D,EAC7D,OAAgB,EAAA;QAFlB,IAyDC,KAAA,GAAA,IAAA,CAAA;QArDC,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,IAAM,aAAa,GAAG,UAAC,KAAY,EAAA;AACjC,YAAA,OAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBACjB,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK;AAC9B,gBAAA,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBACjB,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;AAH/B,SAG+B,CAAC;AAClC,QAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO,EAAA;;AAC7B,YAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,mCAAI,OAAO,CAAC,QAAQ,CAAC;AACrF,YAAA,IAAM,QAAQ,GAAG,KAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5D,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;YACnD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;AAC9C,gBAAA,IAAM,WAAW,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7G,gBAAA,IAAI,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;AACrC,oBAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1B,iBAAA;gBACD,OAAO;AACR,aAAA;AACD,YAAA,IAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YACtF,IAAI,qBAAqB,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;AACjF,gBAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1B,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AACvB,YAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,mCAAI,IAAI,CAAC,QAAQ,CAAC;AAC5E,YAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;AAC3B,gBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AACvB,YAAA,IAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,KAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,mCAAI,IAAI,CAAC,QAAQ,CAAC;YAC5E,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;YACpC,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;YACtC,IAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,OAAA,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;YACjE,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;AAC7D,gBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;AACrC,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,KAAK,CAAC,CAAC,CAAP,EAAO,CAAC,CAAC;AAC/C,YAAA,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,KAAK,CAAC,CAAC,CAAP,EAAO,CAAC,CAAC;AAC/C,YAAA,IAAM,QAAQ,GAAG;gBACf,CAAC,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,EAAE,CAAC;gBAClB,CAAC,EAAE,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,EAAE,CAAC;AAClB,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAA,KAAA,CAAR,IAAI,EAAQ,EAAE,CAAI,GAAA,IAAI,CAAC,GAAG,CAAA,KAAA,CAAR,IAAI,EAAQ,EAAE,CAAC;AACxC,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAA,KAAA,CAAR,IAAI,EAAQ,EAAE,CAAI,GAAA,IAAI,CAAC,GAAG,CAAA,KAAA,CAAR,IAAI,EAAQ,EAAE,CAAC;aAC1C,CAAC;AACF,YAAA,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;AAClC,gBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;KAChD,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,oBAAoB,GAA5B,UAA6B,MAAc,EAAE,WAAkB,EAAA;;QAC7D,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,WAAW,CAAC;QAC9B,IAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,WAAW,CAAC;AACjC,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,WAAW,CAAC;QACpC,IAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC;AACtF,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAmI,CAAC;QACvJ,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,cAAc,CAAC;AAEpD,QAAA,IAAI,WAAW,GAAA,QAAA,CAAA,EAAA,EAAQ,QAAQ,CAAE,CAAC;QAClC,IAAI,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,QAAQ,MAAK,YAAY,EAAE;YACpC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjC,SAAA;aAAM,IAAI,CAAA,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,QAAQ,MAAK,UAAU,EAAE;YACzC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjC,SAAA;AACD,QAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,UAAU,EAAE;AACrB,YAAA,IAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;AAChC,YAAA,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,YAAA,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,SAAA;AACD,QAAA,IAAI,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,CAAC,EAAE;AACb,YAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ;AAAE,gBAAA,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5F,YAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ;AAAE,gBAAA,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7F,SAAA;AACD,QAAA,IAAI,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,CAAC,EAAE;AACb,YAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ;AAAE,gBAAA,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5F,YAAA,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ;AAAE,gBAAA,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7F,SAAA;QACD,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,wBAAwB,GAAhC,UACE,YAAoB,EACpB,OAAc,EACd,GAAsB,EAAA;AAEtB,QAAA,IAAM,WAAW,GAAG,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,GAAG,GAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACpD,QAAA,IAAI,CAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAX,WAAW,CAAE,IAAI,MAAK,MAAM,IAAI,WAAW,CAAC,EAAE,KAAK,YAAY,EAAE;AACnE,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/F,SAAA;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;KAC3D,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,wBAAwB,GAAhC,YAAA;;QAKE,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,OAAO;AACL,gBAAA,YAAY,EAAE,IAAI,CAAC,uBAAuB,CAAC,YAAY;AACvD,gBAAA,eAAe,EAAE,IAAI,CAAC,uBAAuB,CAAC,eAAe;AAC7D,gBAAA,gBAAgB,EAAE,IAAI;aACvB,CAAC;AACH,SAAA;QACD,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,WAAW,EAAE;YACxC,OAAO;AACL,gBAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY;AACzC,gBAAA,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe;AAC/C,gBAAA,gBAAgB,EAAE,KAAK;aACxB,CAAC;AACH,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAEO,gBAAqB,CAAA,SAAA,CAAA,qBAAA,GAA7B,UAA8B,MAQ7B,EAAA;;AACC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,MAAM,CAAC,gBAAgB,EAAE;AAC3B,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACrC,SAAA;aAAM,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,WAAW,EAAE;AAC/C,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,SAAA;AACD,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,EAAE,CAAC;AAC/B,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;QACxC,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1B,IAAI,CAAC,0BAA0B,CAAC;YAC9B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,MAAM,EAAE,MAAM,CAAC,aAAa;YAC5B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,SAAS,EAAE,MAAM,CAAC,SAAS;AAC5B,SAAA,CAAC,CAAC;KACJ,CAAA;IAEO,gBAA0B,CAAA,SAAA,CAAA,0BAAA,GAAlC,UAAmC,KAOlC,EAAA;QACC,IAAI,IAAI,CAAC,wBAAwB;YAAE,OAAO;AAC1C,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACrC,IAAI;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACzC,SAAA;AAAS,gBAAA;AACR,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;AACvC,SAAA;KACF,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,mBAAmB,GAA3B,UACE,YAAoB,EACpB,eAAuB,EACvB,YAAoB,EAAA;QAEpB,IAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACnE,QAAA,IAAM,eAAe,GACnB,eAAe,KAAK,IAAI;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC;AACpC,gBAAA,YAAY,EAAA,YAAA;AACZ,gBAAA,eAAe,EAAA,eAAA;AACf,gBAAA,YAAY,EAAA,YAAA;AACZ,gBAAA,eAAe,EAAA,eAAA;gBACf,MAAM,EAAE,eAAQ;AAChB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC,CAAC;AACL,QAAA,IAAI,eAAe,IAAI,CAAC,eAAe,EAAE;YACvC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAA,YAAA,EAAE,eAAe,EAAA,eAAA,EAAE,CAAC;AAC/D,SAAA;AACD,QAAA,IAAM,aAAa,GAAG,QAAQ,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAClB,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,YAAY,EAAA,YAAA;AACZ,YAAA,YAAY,EAAA,YAAA;AACZ,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC,CAAC;QACH,OAAO,EAAE,aAAa,EAAA,aAAA,EAAE,YAAY,cAAA,EAAE,eAAe,EAAA,eAAA,EAAE,CAAC;KACzD,CAAA;IAEO,gBAAsB,CAAA,SAAA,CAAA,sBAAA,GAA9B,UACE,YAAoB,EACpB,eAAuB,EACvB,eAAuB,EACvB,UAAiB,EAAA;AAEjB,QAAA,IAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACrF,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;AAC3E,SAAA;AACD,QAAA,IAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC;AAC5D,YAAA,YAAY,EAAA,YAAA;AACZ,YAAA,eAAe,EAAA,eAAA;YACf,YAAY,EAAE,UAAU,CAAC,EAAE;AAC3B,YAAA,eAAe,EAAA,eAAA;YACf,MAAM,EAAE,eAAQ;AAChB,YAAA,SAAS,EAAE,KAAK;AACjB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,eAAe,EAAA,eAAA,EAAE,CAAC;AAC9E,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAClE,QAAA,IAAM,aAAa,GAAG,QAAQ,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAClB,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,YAAY,EAAA,YAAA;YACZ,YAAY,EAAE,UAAU,CAAC,EAAE;AAC3B,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,EAAE,aAAa,EAAA,aAAA,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,eAAe,EAAA,eAAA,EAAE,CAAC;KACxE,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,UAA0B,SAAiB,EAAE,UAAiB,EAAE,YAAoB,EAAA;;QAClF,IAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AAC1B,QAAA,IAAM,eAAe,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,OAAO,CAAC,QAAQ,CAAC;AAC3F,QAAA,IAAM,QAAQ,GAAG;AACf,YAAA,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;AACnC,YAAA,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;SACpC,CAAC;QACF,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAClD,QAAA,IAAM,mBAAmB,GACvB,CAAA,CAAA,EAAA,GAAA,OAAO,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,KAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS;AAC3E,cAAE,OAAO,CAAC,YAAY,CAAC,QAAQ;cAC7B,SAAS,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,QAAQ,EAAE;AACd,YAAA,SAAS,EAAA,SAAA;AACT,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,OAAO;AAC5B,YAAA,IAAI,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,IAAI,iBAAQ,UAAU,CAAC,IAAI,CAAG,GAAE,SAAS;AAC3D,YAAA,KAAK,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,KAAK,iBAAQ,UAAU,CAAC,KAAK,CAAG,GAAE,SAAS;AAC9D,YAAA,QAAQ,EAAE,mBAAmB,KAAnB,IAAA,IAAA,mBAAmB,KAAnB,KAAA,CAAA,GAAA,mBAAmB,GAAI,UAAU,KAAV,IAAA,IAAA,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,QAAQ;YACrD,YAAY,EAAE,CAAA,EAAA,GAAA,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAE,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;YAC9C,kBAAkB,EAAE,CAAA,EAAA,GAAA,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAE,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;AAC1D,YAAA,cAAc,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,cAAc,iBAAQ,UAAU,CAAC,cAAc,CAAG,GAAE,SAAS;AACzF,YAAA,eAAe,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,eAAe,iBAAQ,UAAU,CAAC,eAAe,CAAG,GAAE,SAAS;AAC5F,YAAA,uBAAuB,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,uBAAuB,iBAAQ,UAAU,CAAC,uBAAuB,CAAG,GAAE,SAAS;AACpH,YAAA,uBAAuB,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,uBAAuB,iBAAQ,UAAU,CAAC,uBAAuB,CAAG,GAAE,SAAS;AACpH,YAAA,aAAa,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,aAAa,iBAAQ,UAAU,CAAC,aAAa,CAAG,GAAE,SAAS;SACvF,CAAC;KACH,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,qBAAqB,GAA7B,UAA8B,SAAiB,EAAE,UAAiB,EAAE,YAAoB,EAAA;;QACtF,IAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAClD,IAAM,mBAAmB,GACvB,CAAA,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,KAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS;AAC5E,cAAE,OAAO,CAAC,YAAY,CAAC,QAAQ;cAC7B,SAAS,CAAC;QAChB,OAAO;YACL,EAAE,EAAE,mBAAoB,CAAA,MAAA,CAAA,YAAY,CAAE;AACtC,YAAA,SAAS,EAAA,SAAA;AACT,YAAA,QAAQ,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE;AAC9C,YAAA,OAAO,EAAE,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,OAAO;AAC5B,YAAA,IAAI,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,IAAI,iBAAQ,UAAU,CAAC,IAAI,CAAG,GAAE,SAAS;AAC3D,YAAA,KAAK,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,KAAK,iBAAQ,UAAU,CAAC,KAAK,CAAG,GAAE,SAAS;AAC9D,YAAA,QAAQ,EAAE,mBAAmB,KAAnB,IAAA,IAAA,mBAAmB,KAAnB,KAAA,CAAA,GAAA,mBAAmB,GAAI,UAAU,KAAV,IAAA,IAAA,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,QAAQ;YACrD,YAAY,EAAE,CAAA,EAAA,GAAA,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAE,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;YAC9C,kBAAkB,EAAE,CAAA,EAAA,GAAA,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAE,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;AAC1D,YAAA,cAAc,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,cAAc,iBAAQ,UAAU,CAAC,cAAc,CAAG,GAAE,SAAS;AACzF,YAAA,eAAe,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,eAAe,iBAAQ,UAAU,CAAC,eAAe,CAAG,GAAE,SAAS;AAC5F,YAAA,uBAAuB,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,uBAAuB,iBAAQ,UAAU,CAAC,uBAAuB,CAAG,GAAE,SAAS;AACpH,YAAA,uBAAuB,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,uBAAuB,iBAAQ,UAAU,CAAC,uBAAuB,CAAG,GAAE,SAAS;AACpH,YAAA,aAAa,EAAE,CAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,aAAa,iBAAQ,UAAU,CAAC,aAAa,CAAG,GAAE,SAAS;SACvF,CAAC;KACH,CAAA;IAEO,gBAAc,CAAA,SAAA,CAAA,cAAA,GAAtB,UAAuB,EAAU,EAAA;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAC,OAAO,EAAA,EAAK,OAAA,OAAO,CAAC,EAAE,KAAK,EAAE,CAAA,EAAA,CAAC,CAAC;KAC7E,CAAA;IAEO,gBAAW,CAAA,SAAA,CAAA,WAAA,GAAnB,UAAoB,EAAU,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,KAAK,EAAE,CAAA,EAAA,CAAC,CAAC;KACpE,CAAA;IAEO,gBAAW,CAAA,SAAA,CAAA,WAAA,GAAnB,UAAoB,EAAU,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,KAAK,EAAE,CAAA,EAAA,CAAC,CAAC;KACpE,CAAA;IAEO,gBAAW,CAAA,SAAA,CAAA,WAAA,GAAnB,UAAoB,EAAU,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,EAAE,KAAK,EAAE,CAAA,EAAA,CAAC,CAAC;KACpE,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,yBAAyB,GAAjC,UAAkC,MAAc,EAAE,gBAAuB,EAAA;;AACvE,QAAA,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,gBAAgB,CAAC;QAC3E,OAAO;AACL,YAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,YAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SACpC,CAAC;KACH,CAAA;IAEO,gBAAkB,CAAA,SAAA,CAAA,kBAAA,GAA1B,UAA2B,OAAgE,EAAA;AACzF,QAAA,IAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,KAAK,CAAC,MAAM,KAAK,UAAU,CAA3B,EAA2B,CAAC,CAAC;QAC3E,IAAI,EAAC,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,OAAO,CAAA;YAAE,OAAO;AACpC,QAAA,IAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,GAAwB,CAAC;AAC3D,QAAA,IAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAA0B,CAAC;AAC9D,QAAA,IAAI,CAAC,GAAG,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC7C,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO;AAC/E,QAAA,IAAI,CAAC,GAAG,GAAQ,QAAA,CAAA,EAAA,EAAA,GAAG,CAAE,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,mBAAmB,GAA3B,YAAA;;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,KAGrB,CAAC;QACF,CAAA,EAAA,GAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,KAAK,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,QAAA,EAAA,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,QAAA,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,QAAA,EAAG,IAAI,CAAC,GAAG,CAAC,CAAC;KAChC,CAAA;AAEO,IAAA,gBAAA,CAAA,SAAA,CAAA,cAAc,GAAtB,YAAA;;QACE,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,oBAAoB,EAAE;AACjD,YAAA,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAM,OAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,mBAAmB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,SAAS,CAAC,KAAK,CAAC;AAC1D,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,gBAAA,IAAI,CAAC,gCAAgC,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,EAAE,OAAK,EAAE,SAAS,EAAE;oBACrF,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;AACpC,oBAAA,KAAK,EAAE;wBACL,CAAC,EAAE,OAAK,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;wBAC9B,CAAC,EAAE,OAAK,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA;YACD,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,gBAAA,IAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC;AAC7C,gBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACpC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,gBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,EAAE,CAAC;AAC/B,gBAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;gBACxC,IAAI,CAAC,0BAA0B,CAAC;oBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,eAAe,EAAE,OAAO,CAAC,eAAe;AACxC,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA,CAAC,CAAC;AACJ,aAAA;YACD,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC1B,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC;AAC7C,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACpC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,YAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,EAAE,CAAC;AAC/B,YAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;YACxC,IAAI,CAAC,0BAA0B,CAAC;gBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,eAAe,EAAE,OAAO,CAAC,eAAe;AACxC,gBAAA,SAAS,EAAE,IAAI;AAChB,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC1B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;YAC1D,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,IAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;AACrC,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,0BAA0B,CAC1B,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,OAAO,KACV,SAAS,EAAE,IAAI,EAAA,CAAA,CACf,CAAC;AACJ,aAAA;YACD,OAAO;AACR,SAAA;AACD,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAM,KAAK,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,SAAS,CAAC,KAAK,CAAC;QACnD,IAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAC1B,MAAM,EAAE,SAAS,CAAC,YAAY;YAC9B,SAAS,EAAE,SAAS,CAAC,eAAe;AACpC,YAAA,OAAO,EAAE,WAAW;AACrB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,EAAE,CAAC;AAC/B,QAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,kDAAI,CAAC;QACxC,IAAI,CAAC,0BAA0B,CAAC;YAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,eAAe,EAAE,SAAS,CAAC,eAAe;AAC1C,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KAC3B,CAAA;IAEO,gBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAxB,UAAyB,MAA0B,EAAA;QACjD,IAAI,CAAC,MAAM,IAAI,EAAE,MAAM,YAAY,WAAW,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;QAC9D,IAAI,MAAM,CAAC,iBAAiB;AAAE,YAAA,OAAO,IAAI,CAAC;QAC1C,IAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzC,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ,CAAC;KAClE,CAAA;IAEO,gBAAe,CAAA,SAAA,CAAA,eAAA,GAAvB,UAAwB,KAAgC,EAAA;QACtD,QAAQ,IAAI,CAAC,MAAM;AACjB,YAAA,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,YAAA,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,YAAA,KAAK,MAAM;gBACT,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,YAAA,KAAK,SAAS,CAAC;AACf,YAAA;gBACE,OAAO,KAAK,CAAC,OAAO,CAAC;AACxB,SAAA;KACF,CAAA;IACH,OAAC,gBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC55ED,IAAM,gBAAgB,GAAG,UACvB,KAAqB,EACrB,QAA2C,EAAA;;AACL,IAAA,QAAC;QACvC,KAAK,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,QAAQ,CAAC,KAAK;QAC1C,MAAM,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,QAAQ,CAAC,MAAM;AAC9C,KAAA,EAAC;CAAA,CAAC;AAEH,IAAM,gBAAgB,GAAG,UAAC,KAA0C,EAAE,MAAe,EACnF,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAC,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,IAA2B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA,EAAA,CAAC;AAEvE,IAAM,kBAAkB,GAAG,UACzB,KAA0C,EAAA;AAE1C,IAAA,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC7C,IAAA,QAAQ,GAAc,KAAK,CAAnB,QAAA,EAAK,IAAI,GAAA,MAAA,CAAK,KAAK,EAA7B,CAAqB,UAAA,CAAA,CAAF,CAAW;IACpC,OAAO;AACL,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC;KACtD,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,qBAAqB,GAAG,YAA4B,EAAA,OAAA,UAAC,EAAoD,EAAA;QAAlD,IAAI,GAAA,EAAA,CAAA,IAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,EAAE,aAAa,GAAA,EAAA,CAAA,aAAA,EAAE,aAAa,GAAA,EAAA,CAAA,aAAA,CAAA;IAC3G,IAAM,KAAK,GAA4B,EAAE,CAAC;AAC1C,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,KAAA;AACD,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACpD,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,CAAA,EAAA,CAAC;AAEF,IAAM,uBAAuB,GAAG,YAA4B,EAAA,OAAA,UAAC,EAM5D,EAAA;;AALC,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,WAAW,GAAA,EAAA,CAAA,WAAA,CAAA;IAEX,IAAM,KAAK,GAA4B,EAAE,CAAC;AAC1C,IAAA,IAAM,UAAU,GAAG,WAAW,CAAU,cAAc,CAAC,CAAC;AACxD,IAAA,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAM,cAAc,GAClB,UAAU,KAAK,KAAK,IAAI,CAAA,EAAA,GAAA,WAAW,CAAS,QAAQ,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,cAAc,IAAI,cAAc,CAAC;IAC5F,IAAI,UAAU,KAAK,KAAK,EAAE;AACxB,QAAA,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;AAC/B,KAAA;AACD,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;AACpD,KAAA;AACD,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;AACpD,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,CAAA,EAAA,CAAC;AAEF,IAAM,wBAAwB,GAAG,YAA4B,EAAA,OAAA,UAAC,EAM7D,EAAA;;AALC,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,WAAW,GAAA,EAAA,CAAA,WAAA,CAAA;IAEX,IAAM,KAAK,GAA4B,EAAE,CAAC;AAC1C,IAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5C,IAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,IAAA,IAAM,WAAW,GAAG,WAAW,CAAU,eAAe,CAAC,CAAC;AAC1D,IAAA,IAAM,WAAW,GAAG,WAAW,CAAU,eAAe,CAAC,CAAC;IAC1D,IAAM,eAAe,GAAG,WAAW,KAAK,KAAK,IAAI,CAAA,EAAA,GAAA,WAAW,CAAS,SAAS,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,IAAI,OAAO,CAAC;IACtG,IAAM,eAAe,GAAG,WAAW,KAAK,KAAK,IAAI,CAAA,EAAA,GAAA,WAAW,CAAS,SAAS,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,IAAI,OAAO,CAAC;IACtG,IAAI,WAAW,KAAK,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,KAAA;IACD,IAAI,WAAW,KAAK,KAAK,EAAE;AACzB,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,KAAA;AACD,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC;AACrD,KAAA;AACD,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC;AACrD,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,CAAA,EAAA,CAAC;AAEF,IAAM,wBAAwB,GAAG,YAA4B,EAAA,OAAA,UAAC,EAM7D,EAAA;;AALC,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,WAAW,GAAA,EAAA,CAAA,WAAA,CAAA;IAEX,IAAM,KAAK,GAA4B,EAAE,CAAC;AAC1C,IAAA,IAAM,UAAU,GAAG,WAAW,CAAU,cAAc,CAAC,CAAC;AACxD,IAAA,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA,EAAA,GAAA,WAAW,CAAS,aAAa,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAC;IACvE,IAAI,UAAU,KAAK,KAAK,EAAE;QACxB,KAAK,CAAC,MAAM,GAAG,2BAA2B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7D,KAAA;AACD,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,KAAA;AACD,IAAA,IAAI,aAAa,EAAE;AACjB,QAAA,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AACpD,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACf,CAAC,CAAA,EAAA,CAAC;AAEF,IAAM,2BAA2B,GAAG,UAClC,IAAuC,EACvC,KAAa,EACb,YAAgB,EAAA;AAAhB,IAAA,IAAA,YAAA,KAAA,KAAA,CAAA,EAAA,EAAA,YAAgB,GAAA,CAAA,CAAA,EAAA;AAEhB,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,IAAM,WAAW,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC;IACnD,IAAM,MAAM,GAAa,EAAE,CAAC;AAC5B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;QACjC,IAAM,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,IAAM,qBAAqB,GAAG,UAC5B,KAA+B,EAC/B,KAA+B,EAC/B,GAA6B,EAAA;IAE7B,IAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,IAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,IAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACxC,IAAI,aAAa,IAAI,IAAI;AAAE,QAAA,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;AAC7D,IAAA,IAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,aAAa,CAAC;AAChF,IAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;AAClE,CAAC,CAAC;AAEF,IAAM,0BAA0B,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA;IAC1D,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC1B,IAAA,IAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,IAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;IACrC,IAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC/B,IAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAC/B,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI;AAAE,QAAA,OAAO,KAAK,CAAC;AAC7D,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC;IACnE,OAAO,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC;AACnC,CAAC,CAAC;AAEF,IAAM,0BAA0B,GAAG,UAAC,KAAY,EAAE,IAAU,EAAA;IAC1D,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACzC,IAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,IAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE;QAC9C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;AAClC,KAAA;AACD,IAAA,IAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACpD,IAAA,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,IAAM,2BAA2B,GAAG,UAClC,KAAY,EACZ,IAAU,EACV,aAAoE,EAAA;AAEpE,IAAA,IAAM,WAAW,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxG,IAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACjC,KAAA;IAED,IAAM,QAAQ,GAAoC,EAAE,CAAC;AACrD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC9C,QAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/E,KAAA;IAED,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,IAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACxB,IAAA,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AAExB,IAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACxC,IAAI,YAAY,GAAiB,IAAI,CAAC;AACtC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3C,QAAA,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChD,IAAM,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC/B,IAAM,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC/B,IAAM,KAAK,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;AACxC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI;YAAE,SAAS;AACrC,QAAA,IAAM,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACjC,QAAA,IAAM,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AACjC,QAAA,IAAM,IAAI,GAAG,CAAC,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,IAAI,KAAK,CAAC;AACnE,QAAA,IAAM,KAAK,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,WAAW,GAAG,EAAE,IAAI,KAAK,CAAC;AAC5D,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,QAAQ,EAAE;YAC5D,QAAQ,GAAG,IAAI,CAAC;AAChB,YAAA,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AACzD,SAAA;AACF,KAAA;AACD,IAAA,IAAI,YAAY;AAAE,QAAA,OAAO,YAAY,CAAC;AAEtC,IAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAA,IAAI,sBAAsB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACtD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3C,QAAA,IAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChD,IAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3D,IAAM,KAAK,GAAG,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACpC,IAAM,KAAK,GAAG,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACpC,IAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;QACtD,IAAI,eAAe,GAAG,sBAAsB,EAAE;YAC5C,sBAAsB,GAAG,eAAe,CAAC;YACzC,OAAO,GAAG,SAAS,CAAC;AACrB,SAAA;AACF,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,IAAM,eAAe,GAAG,UAAC,MAAa,EAAA;IACpC,IAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,MAAM,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC3C,IAAA,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;AACxD,CAAC,CAAC;AAEF,IAAM,YAAY,GAAG,UAAC,IAAgB,EAAA;IACpC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5C,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC3C,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,IAAM,sBAAsB,GAAG,UAAC,IAAU,EAAA;IACxC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,OAAO;AACL,QAAA,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;AACnF,QAAA,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACnG,QAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACtG,QAAA,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;KACtF,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,2BAA2B,GAAG,UAClC,eAAgC,EAChC,QAAe,EAAA,EACgB,QAAC;AAChC,IAAA,EAAE,EAAE,eAAe;AACnB,IAAA,eAAe,EAAA,eAAA;AACf,IAAA,QAAQ,EAAA,QAAA;CACT,EAAC,EAAA,CAAC;AAEH,IAAM,uBAAuB,GAAG,UAAC,IAAU,EAAA;IACzC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,OAAO;AACL,QAAA,2BAA2B,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QACtE,2BAA2B,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACrF,2BAA2B,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACvF,QAAA,2BAA2B,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,sBAAsB,GAAG,UAAC,IAAU,EAAA;IACxC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,OAAO;AACL,QAAA,2BAA2B,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;AAC3E,QAAA,2BAA2B,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAC7E,QAAA,2BAA2B,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC;AAC9E,QAAA,2BAA2B,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;KAC7E,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,6BAA6B,GAAG,UACpC,IAAU,EACV,SAAiB,EAAA;AAEjB,IAAA,IAAM,MAAM,GAAG,2BAA2B,CACxC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EACpE,SAAS,CACV,CAAC;IACF,IAAM,QAAQ,GAAY,EAAE,CAAC;AAC7B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACzC,QAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACrE,KAAA;AACD,IAAA,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,IAAM,+BAA+B,GAAG,UAAC,QAAiB,EAAA;AACxD,IAAA,IAAM,aAAa,GAAwB,QAAQ,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,KAAK,EAAK,EAAA,QAAC;QAC5E,EAAE,EAAE,GAAI,CAAA,MAAA,CAAA,KAAK,CAAE;AACf,QAAA,QAAQ,EAAA,QAAA;KACT,EAAC,EAAA,CAAC,CAAC;IACJ,IAAM,KAAK,GAAsB,aAAa,CAAC,GAAG,CAAC,UAAC,MAAM,EAAE,KAAK,EAAA;AAC/D,QAAA,IAAM,IAAI,GAAG,aAAa,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/D,QAAA,IAAM,QAAQ,GAAG;AACf,YAAA,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;AAC5C,YAAA,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;SAC7C,CAAC;QACF,OAAO;YACL,EAAE,EAAE,GAAI,CAAA,MAAA,CAAA,KAAK,CAAE;YACf,KAAK,EAAE,MAAM,CAAC,QAAQ;YACtB,GAAG,EAAE,IAAI,CAAC,QAAQ;AAClB,YAAA,QAAQ,EAAA,QAAA;SACT,CAAC;AACJ,KAAC,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;AAC5C,CAAC,CAAC;AAEF,IAAA,YAAA,kBAAA,YAAA;AAQE,IAAA,SAAA,YAAA,CAAY,EAAU,EAAE,KAA+B,EAAE,kBAAsB,EAAA;AAAtB,QAAA,IAAA,kBAAA,KAAA,KAAA,CAAA,EAAA,EAAA,kBAAsB,GAAA,CAAA,CAAA,EAAA;AAC7E,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,kBAAkB,GAAG,KAAK,CAAC,QAAQ,CAAC;KACzD;AAID,IAAA,YAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAgB,KAAY,EAAE,IAAU,EAAA;QACtC,OAAO,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;KACpD,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAkB,KAAY,EAAE,IAAU,EAAA;QACxC,OAAO,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;KACjD,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,UAAoB,KAAY,EAAE,IAAU,EAAA;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;KAC1D,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAmB,KAAW,EAAE,QAAmC,EAAA;AACjE,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;IAED,YAA0B,CAAA,SAAA,CAAA,0BAAA,GAA1B,UACE,QAAoC,EAAA;AAEpC,QAAA,OAAO,SAAS,CAAC;KAClB,CAAA;IAED,YAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,KAAW,EAAA;AAC9B,QAAA,OAAO,SAAS,CAAC;KAClB,CAAA;IAED,YAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,KAAW,EAAA;AACjC,QAAA,OAAO,SAAS,CAAC;KAClB,CAAA;IAES,YAAgB,CAAA,SAAA,CAAA,gBAAA,GAA1B,UAA2B,MAAe,EAAA;QACxC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KAC7C,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA,CAAA,CAAA;AAED,IAAA,cAAA,kBAAA,UAAA,MAAA,EAAA;IAAoC,SAAY,CAAA,cAAA,EAAA,MAAA,CAAA,CAAA;AAAhD,IAAA,SAAA,cAAA,GAAA;QAAA,IAkDC,KAAA,GAAA,MAAA,KAAA,IAAA,IAAA,MAAA,CAAA,KAAA,CAAA,IAAA,EAAA,SAAA,CAAA,IAAA,IAAA,CAAA;QAjDU,KAAW,CAAA,WAAA,GAAG,qBAAqB,EAAE,CAAC;;KAiDhD;IA/CC,cAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAA0D,EAAA;;YAAxD,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,CAAA;AAC7C,QAAA,IAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAK,SAAS,CAAC;QACrD,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAK,SAAS,CAAC;QACrD,IAAM,OAAO,GAAG,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAA8B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnG,IAAM,OAAO,GAAG,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAA8B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAK,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpG,QAAA,OAAO,IAAI,KAAK,CAAC,IAAI,CAAA,QAAA,CAAA,QAAA,CAAA,EACnB,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,OAAO,EAAA,OAAA,EACP,OAAO,EAAA,OAAA,EACP,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAA,GACvB,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAC,EAAA,EAC3B,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,aAAa,EAAE,CAAC,UAAU,EAC1B,aAAa,EAAE,CAAC,UAAU,IAC1B,CAAC;KACJ,CAAA;AAED,IAAA,cAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAmB,IAAU,EAAE,OAAkC,EAAA;AAC/D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;AAAE,YAAA,OAAO,EAAE,CAAC;QAC7C,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,OAAO;AACL,YAAA,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE;YACtD,EAAE,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE;YACpE,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YACrF,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;SACxE,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,QAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACb,MAAM,CAAA,EAAA,EACT,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,EACvD,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EACjF,CAAA,EAAA,EAAA,CAAC,CAAC;KACL,CAAA;IAED,cAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,IAAU,EAAA;AAC7B,QAAA,IAAM,QAAQ,GAAG;YACf,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AACxB,YAAA,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AACrC,YAAA,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACnD,YAAA,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;SACvC,CAAC;AACF,QAAA,OAAO,+BAA+B,CAAC,QAAQ,CAAC,CAAC;KAClD,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAlDA,CAAoC,YAAY,CAkD/C,CAAA,CAAA;AAED,IAAA,YAAA,kBAAA,UAAA,MAAA,EAAA;IAAkC,SAAY,CAAA,YAAA,EAAA,MAAA,CAAA,CAAA;AAA9C,IAAA,SAAA,YAAA,GAAA;QAAA,IAiDC,KAAA,GAAA,MAAA,KAAA,IAAA,IAAA,MAAA,CAAA,KAAA,CAAA,IAAA,EAAA,SAAA,CAAA,IAAA,IAAA,CAAA;QAhDU,KAAW,CAAA,WAAA,GAAG,wBAAwB,EAAE,CAAC;;KAgDnD;IA9CC,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAA0D,EAAA;;YAAxD,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,CAAA;AAC7C,QAAA,IAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAClE,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC/B,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,QAAA,IAAM,UAAU,GAAG,QAAO,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAA,KAAK,QAAQ,CAAC;AAC3D,QAAA,IAAM,UAAU,GAAG,QAAO,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,CAAA,KAAK,QAAQ,CAAC;QAC3D,IAAM,eAAe,GAAG,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAA8B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC;QAC/E,IAAM,eAAe,GAAG,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAA8B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,OAAO,CAAC;QAC/E,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAK,SAAS,CAAC;QACrD,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAK,SAAS,CAAC;QACrD,IAAM,OAAO,GAAG,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAA8B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,YAAY,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACrG,IAAM,OAAO,GAAG,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAA8B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,YAAY,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACrG,QAAA,OAAO,IAAI,KAAK,CAAC,OAAO,CACtB,QAAA,CAAA,QAAA,CAAA,EAAA,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,eAAe,EACxB,OAAO,SAAA,EACP,OAAO,SAAA,EACP,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAA,GACvB,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,MAC1B,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,aAAa,EAAE,CAAC,UAAU,EAC1B,aAAa,EAAE,CAAC,UAAU,EAC1B,aAAa,EAAE,CAAC,UAAU,EAC1B,aAAa,EAAE,CAAC,UAAU,IAC1B,CAAC;KACJ,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAgB,KAAY,EAAE,IAAU,EAAA;QACtC,OAAO,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;KACvD,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAkB,KAAY,EAAE,IAAU,EAAA;QACxC,OAAO,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;KACpD,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAmB,IAAU,EAAE,OAAkC,EAAA;AAC/D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;AAAE,YAAA,OAAO,EAAE,CAAC;AAC7C,QAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;KACrC,CAAA;IAED,YAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,IAAU,EAAA;AAChC,QAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;KACtC,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAjDA,CAAkC,YAAY,CAiD7C,CAAA,CAAA;AAED,IAAA,WAAA,kBAAA,UAAA,MAAA,EAAA;IAAiC,SAAY,CAAA,WAAA,EAAA,MAAA,CAAA,CAAA;AAA7C,IAAA,SAAA,WAAA,GAAA;QAAA,IAmDC,KAAA,GAAA,MAAA,KAAA,IAAA,IAAA,MAAA,CAAA,KAAA,CAAA,IAAA,EAAA,SAAA,CAAA,IAAA,IAAA,CAAA;QAlDU,KAAW,CAAA,WAAA,GAAG,uBAAuB,EAAE,CAAC;QACjD,KAAe,CAAA,eAAA,GAAG,UAAC,EAAkD,EAAA;gBAAhD,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA,CAAA;AACpC,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,SAAC,CAAC;;KA8CH;IA5CC,WAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAA0D,EAAA;;YAAxD,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,CAAA;AAC7C,QAAA,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAM,OAAO,GAAG,OAAO,CAAC,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,MAAI,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,CAAA,CAAC,CAAC;AACrD,QAAA,IAAM,SAAS,GAAG,QAAO,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAA,KAAK,QAAQ,CAAC;QACzD,IAAM,MAAM,GACV,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAA6B,MAC1C,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,mCAAI,CAAC,EAAE,MAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAK,SAAS,CAAC;QACrD,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAK,SAAS,CAAC;QACrD,IAAM,OAAO,GAAG,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAA8B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,YAAY,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5F,IAAM,OAAO,GAAG,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAA8B,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,YAAY,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5F,QAAA,OAAO,IAAI,KAAK,CAAC,MAAM,qBACrB,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,MAAM,EAAA,MAAA,EACN,OAAO,EAAA,OAAA,EACP,OAAO,SAAA,EACP,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAA,GACvB,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EAC1B,EAAA,EAAA,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,YAAY,EAAE,CAAC,SAAS,EACxB,aAAa,EAAE,CAAC,UAAU,EAC1B,aAAa,EAAE,CAAC,UAAU,IAC1B,CAAC;KACJ,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAgB,KAAY,EAAE,IAAU,EAAA;AACtC,QAAA,OAAO,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAChD,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAkB,KAAY,EAAE,IAAU,EAAA;QACxC,IAAM,SAAS,GAAG,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1D,QAAA,OAAO,0BAA0B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;KACpD,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAmB,IAAU,EAAE,OAAkC,EAAA;AAC/D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;AAAE,YAAA,OAAO,EAAE,CAAC;AAC7C,QAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;KACrC,CAAA;IAED,WAAuB,CAAA,SAAA,CAAA,uBAAA,GAAvB,UAAwB,IAAU,EAAA;AAChC,QAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;KACrC,CAAA;IACH,OAAC,WAAA,CAAA;AAAD,CAnDA,CAAiC,YAAY,CAmD5C,CAAA,CAAA;AAED,IAAA,YAAA,kBAAA,UAAA,MAAA,EAAA;IAAkC,SAAY,CAAA,YAAA,EAAA,MAAA,CAAA,CAAA;IAK5C,SACE,YAAA,CAAA,EAAU,EACV,KAA0C,EAC1C,SAAiB,EACjB,QAA2C,EAC3C,kBAAsB,EAAA;AAAtB,QAAA,IAAA,kBAAA,KAAA,KAAA,CAAA,EAAA,EAAA,kBAAsB,GAAA,CAAA,CAAA,EAAA;AALxB,QAAA,IAAA,KAAA,GAOE,kBAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,CAAC,IAGrC,IAAA,CAAA;QAdQ,KAAW,CAAA,WAAA,GAAG,wBAAwB,EAAE,CAAC;QAYhD,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACxC,QAAA,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;;KAC1B;IAED,YAAU,CAAA,SAAA,CAAA,UAAA,GAAV,UAAW,EAA0D,EAAA;;YAAxD,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,CAAA;QAC7C,IAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAK,SAAS,CAAC;QACrD,IAAM,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAK,SAAS,CAAC;QACrD,IAAM,OAAO,GAAG,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAA8B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAK,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnG,IAAM,OAAO,GAAG,CAAA,EAAA,GAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAA8B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAK,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACpG,OAAO,IAAI,KAAK,CAAC,IAAI,qBACnB,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACnB,MAAM,EAAE,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EACzD,MAAM,EAAE,IAAI,EACZ,OAAO,SAAA,EACP,OAAO,SAAA,EACP,QAAQ,EAAE,IAAI,CAAC,YAAY,EACxB,GAAC,MAAA,IAAI,CAAC,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EAC1B,EAAA,EAAA,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,YAAY,EAAE,IAAI,EAClB,aAAa,EAAE,CAAC,UAAU,EAC1B,aAAa,EAAE,CAAC,UAAU,EAC1B,WAAW,EAAE,IAAI,CAAC,SAAS,IAC3B,CAAC;KACJ,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,eAAe,GAAf,UAAgB,KAAY,EAAE,IAAU,EAAA;QAAxC,IAIC,KAAA,GAAA,IAAA,CAAA;AAHC,QAAA,OAAO,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,UAAC,IAAI,EAAA;AACnD,YAAA,OAAA,2BAA2B,CAAC,IAAI,EAAE,KAAI,CAAC,SAAS,CAAC,CAAA;AAAjD,SAAiD,CAClD,CAAC;KACH,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,UAAkB,KAAY,EAAE,IAAU,EAAA;QACxC,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpD,QAAA,OAAO,0BAA0B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;KACpD,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,kBAAkB,GAAlB,UAAmB,IAAU,EAAE,OAAkC,EAAA;AAC/D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;AAAE,YAAA,OAAO,EAAE,CAAC;QAC7C,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACnC,IAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,QAAA,OAAO,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAC,QAAQ,EAAE,KAAK,EAAA,EAAK,QAAC;YACnF,EAAE,EAAE,GAAI,CAAA,MAAA,CAAA,KAAK,CAAE;AACf,YAAA,QAAQ,EAAA,QAAA;AACR,YAAA,IAAI,EAAE,0BAA0B,CAAC,QAAQ,EAAE,IAAI,CAAC;YAChD,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;SACpE,EAAC,EAAA,CAAC,CAAC;KACL,CAAA;IAED,YAAoB,CAAA,SAAA,CAAA,oBAAA,GAApB,UAAqB,IAAU,EAAA;QAC7B,OAAO,+BAA+B,CAAC,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;KAC7F,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAnEA,CAAkC,YAAY,CAmE7C,CAAA,CAAA;AAED,IAAA,YAAA,kBAAA,UAAA,MAAA,EAAA;IAAkC,SAAY,CAAA,YAAA,EAAA,MAAA,CAAA,CAAA;IAC5C,SAAY,YAAA,CAAA,EAAU,EAAE,KAA+B,EAAA;AACrD,QAAA,OAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAA,IAAA,CAAA;KAChD;IACH,OAAC,YAAA,CAAA;AAAD,CAJA,CAAkC,YAAY,CAI7C,CAAA,CAAA;AAED,IAAA,aAAA,kBAAA,UAAA,MAAA,EAAA;IAAmC,SAAY,CAAA,aAAA,EAAA,MAAA,CAAA,CAAA;IAC7C,SAAY,aAAA,CAAA,EAAU,EAAE,KAA+B,EAAA;AACrD,QAAA,OAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAA,IAAA,CAAA;KAChD;IACH,OAAC,aAAA,CAAA;AAAD,CAJA,CAAmC,YAAY,CAI9C,CAAA,CAAA;AAED,IAAA,aAAA,kBAAA,UAAA,MAAA,EAAA;IAAmC,SAAY,CAAA,aAAA,EAAA,MAAA,CAAA,CAAA;IAC7C,SAAY,aAAA,CAAA,EAAU,EAAE,KAA+B,EAAA;AACrD,QAAA,OAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAA,IAAA,CAAA;KACjD;IACH,OAAC,aAAA,CAAA;AAAD,CAJA,CAAmC,YAAY,CAI9C,CAAA,CAAA;AAED,IAAA,YAAA,kBAAA,UAAA,MAAA,EAAA;IAAkC,SAAY,CAAA,YAAA,EAAA,MAAA,CAAA,CAAA;IAC5C,SAAY,YAAA,CAAA,EAAU,EAAE,KAA+B,EAAA;AACrD,QAAA,OAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAA,IAAA,CAAA;KACjD;IACH,OAAC,YAAA,CAAA;AAAD,CAJA,CAAkC,YAAY,CAI7C,CAAA,CAAA;AAEM,IAAM,kBAAkB,GAAG,UAAC,MAA0B,EAAA;AAC3D,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9E,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAChF,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAChF,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAClF,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAClF,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAChF,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;;ACrnBD,IAAM,QAAQ,GAAG,YAAA;;;AAEf,IAAA,IAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAoD,CAAC;AACnF,IAAA,OAAO,MAAC,MAAwC,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAK,MAA0B,CAAC;AAC1F,CAAC,CAAC;AAmEF,IAAM,YAAY,GAAG,YAAqB,EAAA,QAAC;IACzC,IAAI,EAAE,MAAM,CAAC,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC,iBAAiB;CAC/B,EAAC,EAAA,CAAC;AAEH,IAAM,YAAY,GAAG,UAAC,MAAqB,EAAE,CAAS,EAAE,CAAS,EAAA;AAC/D,IAAA,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI;AAAE,QAAA,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACrC,IAAA,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI;AAAE,QAAA,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACrC,IAAA,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI;AAAE,QAAA,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACrC,IAAA,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI;AAAE,QAAA,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,IAAM,WAAW,GAAG,UAClB,MAAqB,EACrB,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,EAAA;IAEd,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrC,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACvC,IAAA,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,IAAM,SAAS,GAAG,UAAC,MAAqB,EAAA;AACtC,IAAA,OAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5B,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5B,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5B,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5B,QAAA,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI;AAC1B,QAAA,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAA;AAL1B,CAK0B,CAAC;AAE7B,IAAM,uBAAuB,GAAG,UAAC,KAAmB,EAAA;AAClD,IAAA,IAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AAE9B,IAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,OAAO,EAAA;QAC7B,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvG,KAAC,CAAC,CAAC;AAEH,IAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AACvB,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO;AACR,SAAA;QACD,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC;QAC/C,IAAM,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5E,IAAM,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7E,QAAA,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACrD,KAAC,CAAC,CAAC;AAEH,IAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;YACxB,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,SAAC,CAAC,CAAC;AACL,KAAC,CAAC,CAAC;AAEH,IAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAA;;AACvB,QAAA,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACpD,IAAM,QAAQ,GAAU,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC;AACzF,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;QACtC,IAAM,IAAI,GAAG,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,QAAQ,GAAI,IAAI,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrE,OAAO;AACR,SAAA;QACD,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/C,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;AAC3C,CAAC,CAAC;AAEF,IAAM,0BAA0B,GAAG,UACjC,YAAoE,EAAA;IAEpE,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,QAAQ,EAAE;QAChF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;AAC1C,KAAA;AACD,IAAA,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,IAAM,WAAW,GAAG,UAAc,IAAuB,EAAE,GAAW,EAAA;IACpE,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAkB,CAAC;AAC3C,KAAA;AACD,IAAA,OAAO,IAAI,CAAC,KAAK,GAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,GAAG,SAAS,CAAC;AACrE,CAAC,CAAC;AAEF,IAAM,kBAAkB,GAAG,UAAC,IAAa,EAAE,KAA0C,EAAA;;AACnF,IAAA,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,IAAM,MAAM,GAAG,IAAyB,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO;AAC7B,IAAA,IAAM,KAAK,GAAA,QAAA,CAAA,EAAA,EAAQ,KAAK,CAAE,CAAC;AAC3B,IAAA,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE;QACtC,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,WAAW,CAAS,MAAM,EAAE,UAAU,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC;QAClE,KAAK,CAAC,QAAQ,GAAG,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;AAChD,KAAA;AACD,IAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,IAAM,oBAAoB,GAAG,UAC3B,QAAuB,EACvB,MAAiC,EACjC,MAAe,EAAA;AAEf,IAAA,IAAI,CAAC,MAAM;QAAE,OAAO;AACpB,IAAA,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA;QACnB,IAAM,QAAQ,GAAG,kBAAkB,CAAC;YAClC,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC;AACH,QAAA,IAAM,UAAU,GAAoB;YAClC,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,eAAe,EAAE,QAAQ,CAAC,eAAe;AACvC,kBAAE,UAAC,OAAO,EAAA,EAAK,OAAC,QAAQ,CAAC,eAAgE,CAAC,OAAO,CAAC,CAAA,EAAA;AAClG,kBAAE,SAAS;AACb,YAAA,eAAe,EAAE,UAAC,KAAK,EAAE,IAAI,IAAK,OAAA,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,GAAA;AACvE,YAAA,iBAAiB,EAAE,UAAC,KAAK,EAAE,IAAI,IAAK,OAAA,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAA;YAC3E,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;AAC/C,kBAAE,UAAC,KAAK,EAAE,IAAI,IAAK,OAAA,QAAQ,CAAC,mBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAA;AAC7D,kBAAE,SAAS;AACb,YAAA,kBAAkB,EAAE,UAAC,IAAI,EAAE,OAAO,IAAK,OAAA,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAA;YACjF,0BAA0B,EAAE,QAAQ,CAAC,0BAA0B;AAC7D,kBAAE,UAAC,OAAO,EAAA,EAAK,OAAA,QAAQ,CAAC,0BAA2B,CAAC,OAAO,CAAC,CAAA,EAAA;AAC5D,kBAAE,SAAS;AACb,YAAA,oBAAoB,EAAE,UAAC,IAAI,EAAA,EAAK,OAAA,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA,EAAA;AACnE,YAAA,uBAAuB,EAAE,UAAC,IAAI,EAAA,EAAK,OAAA,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAA,EAAA;YACzE,UAAU,EAAE,UAAC,KAAK,EAAA;;AAChB,gBAAA,IAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACzB,IAAM,YAAY,GAAG,MAAM;AACzB,sBAAE,CAAC,EAAA,GAAA,KAAoC,CAAC,YAAY,mCAAI,IAAI;sBAC1D,KAAK,CAAC;AACV,gBAAA,IAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC/B,oBAAA,KAAK,EAAA,KAAA;AACL,oBAAA,KAAK,EAAE,KAAuB;AAC9B,oBAAA,MAAM,EAAA,MAAA;AACN,oBAAA,YAAY,EAAA,YAAA;AACb,iBAAA,CAAC,CAAC;AACH,gBAAA,kBAAkB,CAAC,IAAI,EAAG,KAA6C,CAAC,KAAK,CAAC,CAAC;AAC/E,gBAAA,OAAO,IAAI,CAAC;aACb;SACF,CAAC;AACF,QAAA,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAChC,KAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,IAAM,mBAAmB,GAAG,UAAC,MAA2B,EAAA;;AAC7D,IAAA,IAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;AACzB,IAAA,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,QAAA,KAAK,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,mCAAI,GAAG;AAC1B,QAAA,MAAM,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,mCAAI,GAAG;AAC7B,KAAA,CAAC,CAAC;IACH,IAAM,cAAc,GAClB,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE,GAAI,KAAK,CAAC,SAAwC,CAAC;AAC9G,IAAA,IAAI,cAAc,IAAI,cAAc,CAAC,QAAQ,GAAG,CAAC,EAAE;AACjD,QAAA,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC7B,KAAA;AAED,IAAA,IAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,oBAAoB,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACjE,oBAAoB,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAE7D,IAAA,IAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,KAAK,EAAA,KAAA,EAAE,KAAK,EAAE,KAAuB,EAAE,aAAa,EAAA,aAAA,EAAE,CAAC,CAAC;AAC7F,IAAA,IAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAA,QAAA,EAAE,aAAa,EAAA,aAAA,EAAE,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,QAAQ,EAAE;QACnB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtC,KAAA;IACD,IAAI,MAAM,CAAC,WAAW,EAAE;QACtB,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5C,KAAA;IAED,IAAM,UAAU,GAAG,UAAC,IAAyB,EAAA;;AAC3C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QACvB,IAAM,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAG,IAAI,CAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;QACxE,IAAM,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAG,MAAM,CAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,SAAS,CAAC;QAC1F,IAAM,KAAK,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,GAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAwB,GAAG,SAAS,CAAC;QAC/G,IAAI,OAAO,KAAK,eAAe;YAAE,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;QAC7E,IAAI,OAAO,KAAK,aAAa;YAAE,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;QACzE,IAAI,OAAO,KAAK,qBAAqB;YAAE,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;QACzF,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;QAC3D,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;QAC3D,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;QAC3D,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;QAC3D,OAAO,EAAE,EAAE,EAAA,EAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;AACxC,KAAC,CAAC;IAEF,IAAM,cAAc,GAAG,UAAC,KAAiC,EAAA;QACvD,IAAM,IAAI,GAAG,KAAK;aACf,GAAG,CAAC,UAAC,IAAI,EAAK,EAAA,OAAA,UAAU,CAAC,IAAI,CAAC,CAAhB,EAAgB,CAAC;AAC/B,aAAA,MAAM,CAAC,UAAC,GAAG,EAAA,EAAuB,OAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAA,CAAC,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAEvD,QAAA,IAAM,QAAQ,GAAwB,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gCACxH,CAAC,EAAA;YACR,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAC,GAAG,EAAK,EAAA,OAAA,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AAClE,YAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;AAAW,gBAAA,OAAA,UAAA,CAAA;AACtC,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACtB,gBAAA,OAAA,EAAA,KAAA,EAAA,UAAU,CAAC,MAAM,CAAC,UAAC,OAAO,EAAE,OAAO,EAAA;;wBACxC,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC;wBACzC,IAAM,YAAY,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAC;wBACzC,OAAO,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC;AACzD,qBAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAA,CAAA;AAClB,aAAA;4BACM,UAAU,CAAC,CAAC,CAAC,EAAA,CAAA;;AAVtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAA;kCAAlC,CAAC,CAAA,CAAA;;;AAWT,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,KAAC,CAAC;AAEF,IAAA,IAAM,SAAS,GAAG,IAAI,cAAc,CAAC,UAAC,KAAK,EAAA;QACzC,IAAM,YAAY,GAAG,UAAC,KAA+B,EAAA;;AACnD,YAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,oBAAoB,qDAAI,CAAC;AACjD,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO,KAAK,CAAC;AAC7B,YAAA,IAAM,WAAW,GAAI,SAAqF,CAAC,KAAK,CAAC;AACjH,YAAA,IAAI,WAAW,EAAE;gBACf,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC3C,aAAA;YACD,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,SAAsC,EAAC,IAAI,kDAAI,CAAC;YAChE,IAAM,WAAW,GAAI,MAA8F,KAAA,IAAA,IAA9F,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CACvB,KAAK,CAAC;AACV,YAAA,IAAI,CAAC,WAAW;AAAE,gBAAA,OAAO,KAAK,CAAC;YAC/B,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACzC,SAAC,CAAC;AACF,QAAA,IAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACvC,IAAM,GAAG,GAAG,OAAO,KAAK,CAAC,mBAAmB,KAAK,UAAU,GAAG,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AAC3G,QAAA,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,OAAO,cAAc,CAAC,GAAqB,CAAC,CAAC;AAC9C,SAAA;QACD,IAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,UAAU,CAAwB,CAAC;AACxE,QAAA,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AAChD,KAAC,CAAC,CAAC;AAEH,IAAA,IAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,MAAM,EAAE;AAC/C,QAAA,KAAK,EAAA,KAAA;AACL,QAAA,SAAS,EAAA,SAAA;AACT,QAAA,QAAQ,EAAA,QAAA;QACR,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,QAAA,aAAa,EAAA,aAAA;QACb,kBAAkB,EAAE,MAAM,CAAC,yBAAyB;QACpD,6BAA6B,EAAE,MAAM,CAAC,qCAAqC;QAC3E,4BAA4B,EAAE,MAAM,CAAC,mCAAmC;AACzE,KAAA,CAAC,CAAC;IACH,WAAW,CAAC,IAAI,EAAE,CAAC;IAEnB,IAAI,MAAM,CAAC,YAAY,EAAE;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAClC,KAAA;IAED,OAAO;AACL,QAAA,IAAI,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,EAAA;QACnC,QAAQ,EAAE,cAAM,OAAA,MAAM,CAAC,QAAQ,EAAE,GAAA;QACjC,WAAW,EAAE,cAAM,OAAA,MAAM,CAAC,WAAW,EAAE,GAAA;AACvC,QAAA,aAAa,EAAE,UAAC,WAAW,EAAE,SAAS,IAAK,OAAA,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,GAAA;AACvF,QAAA,kBAAkB,EAAE,UAAC,MAAM,EAAA,EAAK,OAAA,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA,EAAA;AACjE,QAAA,EAAE,EAAE,UAAC,KAAK,EAAE,OAAO,IAAK,OAAA,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,GAAA;AACjD,QAAA,UAAU,EAAE,UAAC,OAAO,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA,EAAA;QACnD,aAAa,EAAE,UAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAK,OAAA,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAA;QAC3D,aAAa,EAAE,UAAC,EAAE,EAAE,KAAK,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAA;AAC7E,QAAA,gBAAgB,EAAE,UAAC,EAAE,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAA;AACrE,QAAA,aAAa,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA,EAAA;AAC/C,QAAA,gBAAgB,EAAE,UAAC,SAAS,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAA;QAC/E,UAAU,EAAE,UAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAA;AACrD,QAAA,UAAU,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA,EAAA;AACzC,QAAA,OAAO,EAAE,UAAC,IAAI,EAAA,EAAK,OAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,EAAA;AACvC,QAAA,gBAAgB,EAAE,UAAC,EAAE,EAAE,MAAM,IAAK,OAAA,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAA;AACrE,QAAA,kBAAkB,EAAE,UAAC,EAAE,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAuB,CAAC,GAAA;QACxF,eAAe,EAAE,cAAM,OAAA,MAAM,CAAC,eAAe,EAAE,GAAA;AAC/C,QAAA,YAAY,EAAE,UAAC,OAAO,EAAE,OAAO,IAAK,OAAA,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,GAAA;AACzE,QAAA,UAAU,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA,EAAA;AACzC,QAAA,OAAO,EAAE,UAAC,IAAI,EAAA,EAAK,OAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,EAAA;AACvC,QAAA,UAAU,EAAE,UAAC,EAAE,EAAE,OAAO,IAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,GAAA;QAC3D,UAAU,EAAE,UAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAA;AACrD,QAAA,UAAU,EAAE,UAAC,EAAE,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA,EAAA;AACzC,QAAA,YAAY,EAAE,UAAC,GAAG,EAAA,EAAK,OAAA,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,EAAA;AAC/C,QAAA,WAAW,EAAE,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAA;AACzD,QAAA,UAAU,EAAE,UAAC,MAAM,EAAA,EAAK,OAAA,MAAM,CAAC,UAAU,CAAC,MAAwB,CAAC,CAAA,EAAA;AACnE,QAAA,WAAW,EAAE,UAAC,OAAO,EAAA,EAAK,OAAA,MAAM,CAAC,WAAW,CAAC,OAAuB,CAAC,CAAA,EAAA;AACrE,QAAA,aAAa,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,MAAM,CAAC,aAAa,CAAC,KAAwB,CAAC,CAAA,EAAA;QACxE,MAAM,EAAE,cAAM,OAAA,MAAM,CAAC,MAAM,EAAE,GAAA;AAC7B,QAAA,iBAAiB,EAAE,UAAC,YAAY,EAAE,OAAO,IAAK,OAAA,WAAW,CAAC,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,GAAA;AAClG,QAAA,iBAAiB,EAAE,UAAC,OAAO,EAAA,EAAK,OAAA,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA,EAAA;AACtE,QAAA,kBAAkB,EAAE,UAAC,YAAY,EAAA,EAAK,OAAA,WAAW,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA,EAAA;AAClF,QAAA,qBAAqB,EAAE,UAAC,eAAe,EAAE,OAAO,IAAK,OAAA,WAAW,CAAC,qBAAqB,CAAC,eAAe,EAAE,OAAO,CAAC,GAAA;QAChH,UAAU,EAAE,cAAM,OAAA,WAAW,CAAC,UAAU,EAAE,GAAA;QAC1C,WAAW,EAAE,UAAC,OAAO,EAAA;YACnB,MAAM,CAAC,MAAM,EAAE,CAAC;AAChB,YAAA,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE;AACzC,gBAAA,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;AAChF,aAAA;YACD,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;AAC1B,aAAA;YAEO,IAAA,YAAY,GAAqB,OAAO,CAA5B,YAAA,EAAK,WAAW,GAAA,MAAA,CAAK,OAAO,EAA1C,CAAgC,cAAA,CAAA,CAAF,CAAa;YACjD,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,OAAO,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACrC,aAAA;AAED,YAAA,IAAM,OAAO,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;YACzD,IAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACrC,aAAA;AAED,YAAA,IAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;AACtC,YAAA,IAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;AACzD,YAAA,IAAM,KAAK,GAAG,WAAW,CAAC,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AACrE,YAAA,IAAM,KAAK,GAAG,WAAW,CAAC,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YACrE,IAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAC9F,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAE/F,OAAO,KAAK,CAAC,SAAS,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACjB,WAAW,CACd,EAAA,EAAA,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,KAAK,EACR,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,UAAU,EAAA,CAAA,CAClB,CAAC;SACJ;AACD,QAAA,MAAM,EAAE,UAAC,KAAK,EAAE,MAAM,EAAA;AACpB,YAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnB,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;SACjB;QACD,4BAA4B,EAAE,UAAC,QAAQ,EAAA;AACrC,YAAA,WAAW,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;SAC7C;AACD,QAAA,OAAO,EAAE,YAAA;;YACP,WAAW,CAAC,OAAO,EAAE,CAAC;AACtB,YAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,QAAA,CAAI,CAAC;YACrB,KAAK,CAAC,OAAO,EAAE,CAAC;SACjB;KACF,CAAC;AACJ;;;;","x_google_ignoreList":[1]}
|