@metadev/daga 1.5.5 → 1.5.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"metadev-daga.mjs","sources":["../../../../libs/daga/src/lib/util/svg-util.ts","../../../../libs/daga/src/lib/collapse-button/collapse-button.component.ts","../../../../libs/daga/src/lib/collapse-button/collapse-button.component.html","../../../../libs/daga/src/lib/util/line.ts","../../../../libs/daga/src/lib/util/list-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-element.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/collab/primitives.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-property.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-connection.ts","../../../../libs/daga/src/lib/util/canvas-util.ts","../../../../libs/daga/src/lib/util/shape.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-section.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-node.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-port.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-field.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-importer.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/collab/collab-action.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-action.ts","../../../../libs/daga/src/lib/util/grid.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/adjacency-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/breadth-adjacency-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/breadth-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/force-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/horizontal-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/priority-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/tree-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/vertical-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/diagram-layout.ts","../../../../libs/daga/src/lib/util/events.ts","../../../../libs/daga/src/lib/util/style.ts","../../../../libs/daga/src/lib/util/text-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/collab/collab-engine.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-model.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-exporter.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-event.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-decorator.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-object.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-model.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-canvas.ts","../../../../libs/daga/src/lib/services/canvas-provider.service.ts","../../../../libs/daga/src/lib/diagram-buttons/diagram-buttons.component.ts","../../../../libs/daga/src/lib/diagram-buttons/diagram-buttons.component.html","../../../../libs/daga/src/lib/errors/errors.component.ts","../../../../libs/daga/src/lib/errors/errors.component.html","../../../../libs/daga/src/lib/palette/palette.component.ts","../../../../libs/daga/src/lib/palette/palette.component.html","../../../../libs/daga/src/lib/property-editor/property-settings/property-settings.component.ts","../../../../libs/daga/src/lib/property-editor/property-settings/property-settings.component.html","../../../../libs/daga/src/lib/property-editor/autocomplete/autocomplete.component.ts","../../../../libs/daga/src/lib/property-editor/autocomplete/autocomplete.component.html","../../../../libs/daga/src/lib/property-editor/option-list-editor/option-list-editor.component.ts","../../../../libs/daga/src/lib/property-editor/option-list-editor/option-list-editor.component.html","../../../../libs/daga/src/lib/property-editor/text-list-editor/text-list-editor.component.ts","../../../../libs/daga/src/lib/property-editor/text-list-editor/text-list-editor.component.html","../../../../libs/daga/src/lib/property-editor/text-map-editor/text-map-editor.component.ts","../../../../libs/daga/src/lib/property-editor/text-map-editor/text-map-editor.component.html","../../../../libs/daga/src/lib/property-editor/object-editor/object-editor.component.ts","../../../../libs/daga/src/lib/property-editor/object-editor/object-editor.component.html","../../../../libs/daga/src/lib/property-editor/property-editor.component.ts","../../../../libs/daga/src/lib/property-editor/property-editor.component.html","../../../../libs/daga/src/lib/services/daga-configuration.service.ts","../../../../libs/daga/src/lib/diagram-editor/diagram-editor.component.ts","../../../../libs/daga/src/lib/diagram-editor/diagram-editor.component.html","../../../../libs/daga/src/lib/diagram/diagram.component.ts","../../../../libs/daga/src/lib/daga.module.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/collab/collab-client.ts","../../../../libs/daga/src/metadev-daga.ts"],"sourcesContent":["/**\n * An enumeration of the possible sides of a rectangle and directions parallel to the axes of coordinates.\n * @public\n */\nexport enum Side {\n /**\n * Bottom side or direction.\n * @public\n */\n Bottom = 'bottom',\n /**\n * Left side or direction.\n * @public\n */\n Left = 'left',\n /**\n * Right side or direction.\n * @public\n */\n Right = 'right',\n /**\n * Top side or direction.\n * @public\n */\n Top = 'top'\n}\n\n/**\n * An enumeration of the possible corners of a rectangle.\n * @public\n */\nexport enum Corner {\n /**\n * Bottom left corner.\n * @public\n */\n BottomLeft = 'bottom-left',\n /**\n * Bottom right corner.\n * @public\n */\n BottomRight = 'bottom-right',\n /**\n * Top left corner.\n * @public\n */\n TopLeft = 'top-left',\n /**\n * Top right corner.\n * @public\n */\n TopRight = 'top-right'\n}\n\n/**\n * An enumeration of the possible horizontal alignments within a horizontal range of coordinates.\n * @public\n */\nexport enum HorizontalAlign {\n /**\n * Start of an horizontal range of coordinates.\n * @public\n */\n Left = 'left',\n /**\n * Middle of an horizontal range of coordinates.\n * @public\n */\n Center = 'center',\n /**\n * End of an horizontal range of coordinates.\n * @public\n */\n Right = 'right'\n}\n\n/**\n * An enumeration of the possible vertical alignments within a vertical range of coordinates.\n * @public\n */\nexport enum VerticalAlign {\n /**\n * Start of a vertical range of coordinates.\n * @public\n */\n Top = 'top',\n /**\n * Middle of a vertical range of coordinates.\n * @public\n */\n Center = 'center',\n /**\n * End of a vertical range of coordinates.\n * @public\n */\n Bottom = 'bottom'\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, Input } from '@angular/core';\nimport * as d3 from 'd3';\nimport { Side } from '../util/svg-util';\n\n/**\n * Button used to collapse components that implement it.\n * @private\n */\n@Component({\n standalone: true,\n selector: 'daga-collapse-button',\n templateUrl: './collapse-button.component.html',\n imports: [CommonModule]\n})\nexport class CollapseButtonComponent {\n @Input()\n collapsableSelector!: string | ElementRef | HTMLElement;\n @Input()\n collapsableAdditionalSelector!: string;\n @Input()\n collapsed = false;\n @Input()\n disabled = false;\n @Input()\n direction = Side.Bottom;\n @Input()\n rule = 'visibility';\n @Input()\n collapsedValue = 'collapse';\n @Input()\n visibleValue = 'visible';\n\n Side = Side;\n\n toggleCollapse(): void {\n if (!this.disabled) {\n this.collapsed = !this.collapsed;\n let selection;\n if (this.collapsableSelector instanceof ElementRef) {\n selection = d3.select(this.collapsableSelector.nativeElement);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n } else if (this.collapsableSelector instanceof HTMLElement) {\n selection = d3.select(this.collapsableSelector);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n } else {\n selection = d3.select(this.collapsableSelector);\n if (this.collapsableAdditionalSelector) {\n selection = selection.select(this.collapsableAdditionalSelector);\n }\n }\n selection.style(\n this.rule,\n this.collapsed ? this.collapsedValue : this.visibleValue\n );\n }\n }\n\n getClass(): string {\n switch (this.direction) {\n case Side.Right:\n if (this.disabled) {\n return 'horizontal-none';\n } else if (this.collapsed) {\n return 'horizontal-right';\n } else {\n return 'horizontal-left';\n }\n case Side.Bottom:\n if (this.disabled) {\n return 'vertical-none';\n } else if (this.collapsed) {\n return 'vertical-down';\n } else {\n return 'vertical-up';\n }\n case Side.Left:\n if (this.disabled) {\n return 'horizontal-none';\n } else if (this.collapsed) {\n return 'horizontal-left';\n } else {\n return 'horizontal-right';\n }\n case Side.Top:\n if (this.disabled) {\n return 'vertical-none';\n } else if (this.collapsed) {\n return 'vertical-up';\n } else {\n return 'vertical-down';\n }\n }\n }\n}\n","<button class=\"collapse-button {{ direction }}\" (click)=\"toggleCollapse()\">\n <div [class]=\"getClass()\"></div>\n</button>\n","import { Point } from './canvas-util';\nimport { Side } from './svg-util';\n\n/**\n * An enumeration of the possible shapes of a line.\n * @public\n */\nexport enum LineShape {\n /**\n * A line that goes between its points taking the shortest euclidean distance.\n * @public\n */\n Straight = 'straight',\n /**\n * A line that goes between its points using bezier splines.\n * @public\n */\n Bezier = 'bezier',\n /**\n * A line that goes between its points moving parallel to the axes of coordinates.\n * @public\n */\n Square = 'square'\n}\n\n/**\n * An enumeration of the possible styles of a line.\n * @public\n */\nexport enum LineStyle {\n /**\n * A solid uninterrupted line.\n * @public\n */\n Solid = 'solid',\n /**\n * A dashed line with little separation between the dashes.\n * @public\n */\n Dashed = 'dashed',\n /**\n * A dashed line with wide gaps between the dashes.\n * @public\n */\n GappedDashes = 'gapped-dashes',\n /**\n * A dotted line.\n * @public\n */\n Dotted = 'dotted'\n}\n\n/**\n * The default minimum distance before turn used by the linePath function.\n * @private\n */\nconst MINIMUM_DISTANCE_BEFORE_TURN = 20;\n\n/**\n * Calculates the path of an SVG line with the given parameters.\n * @private\n */\nexport const linePath = (\n shape: LineShape,\n points: Point[],\n startDirection?: Side | undefined,\n endDirection?: Side | undefined,\n minimumDistanceBeforeTurn?: number\n): string => {\n if (points.length === 0) {\n return '';\n } else if (points.length === 1) {\n return `M ${points[0][0]} ${points[0][1]}`;\n } else {\n minimumDistanceBeforeTurn =\n minimumDistanceBeforeTurn || MINIMUM_DISTANCE_BEFORE_TURN;\n let result = '';\n let currentDirection: Side | undefined;\n let nextDirection: Side | undefined;\n switch (shape) {\n case LineShape.Straight:\n result += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; ++i) {\n result += ` L ${points[i][0]} ${points[i][1]}`;\n }\n break;\n case LineShape.Bezier:\n currentDirection = startDirection;\n result += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; ++i) {\n if (i + 1 >= points.length) {\n nextDirection = endDirection;\n } else {\n if (\n Math.abs(points[i][0] - points[i - 1][0]) <\n Math.abs(points[i][1] - points[i - 1][1])\n ) {\n if (points[i][1] > points[i - 1][1]) {\n nextDirection = Side.Bottom;\n } else {\n nextDirection = Side.Top;\n }\n } else {\n if (points[i][0] > points[i - 1][0]) {\n nextDirection = Side.Right;\n } else {\n nextDirection = Side.Left;\n }\n }\n }\n if (currentDirection !== undefined) {\n let controlPoint1 = '';\n let controlPoint2 = '';\n const controlPointDistance =\n (Math.abs(points[i][0] - points[i - 1][0]) +\n Math.abs(points[i][1] - points[i - 1][1])) /\n 2;\n switch (currentDirection) {\n case Side.Bottom:\n controlPoint1 = `${points[i - 1][0]} ${\n points[i - 1][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint1 = `${points[i - 1][0]} ${\n points[i - 1][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint1 = `${points[i - 1][0] + controlPointDistance} ${\n points[i - 1][1]\n }`;\n break;\n case Side.Left:\n controlPoint1 = `${points[i - 1][0] - controlPointDistance} ${\n points[i - 1][1]\n }`;\n break;\n }\n if (nextDirection !== undefined) {\n switch (nextDirection) {\n case Side.Bottom:\n controlPoint2 = `${points[i][0]} ${\n points[i][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint2 = `${points[i][0]} ${\n points[i][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint2 = `${points[i][0] + controlPointDistance} ${\n points[i][1]\n }`;\n break;\n case Side.Left:\n controlPoint2 = `${points[i][0] - controlPointDistance} ${\n points[i][1]\n }`;\n break;\n }\n result += ` C ${controlPoint1} ${controlPoint2} ${points[i][0]} ${points[i][1]}`;\n } else {\n result += ` Q ${controlPoint1} ${points[i][0]} ${points[i][1]}`;\n }\n } else {\n if (nextDirection !== undefined) {\n let controlPoint = '';\n const controlPointDistance =\n (Math.abs(points[i][0] - points[i - 1][0]) +\n Math.abs(points[i][1] - points[i - 1][1])) /\n 2;\n switch (nextDirection) {\n case Side.Bottom:\n controlPoint = `${points[i][0]} ${\n points[i][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint = `${points[i][0]} ${\n points[i][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint = `${points[i][0] + controlPointDistance} ${\n points[i][1]\n }`;\n break;\n case Side.Left:\n controlPoint = `${points[i][0] - controlPointDistance} ${\n points[i][1]\n }`;\n break;\n }\n result += ` Q ${controlPoint} ${points[i][0]} ${points[i][1]}`;\n } else {\n result += ` L ${points[i][0]} ${points[i][1]}`;\n }\n }\n currentDirection = nextDirection;\n }\n break;\n case LineShape.Square:\n result += `M ${points[0][0]} ${points[0][1]}`;\n if (startDirection) {\n switch (startDirection) {\n case Side.Bottom:\n points.splice(1, 0, [\n points[0][0],\n points[0][1] + minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Top:\n points.splice(1, 0, [\n points[0][0],\n points[0][1] - minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Right:\n points.splice(1, 0, [\n points[0][0] + minimumDistanceBeforeTurn,\n points[0][1]\n ]);\n break;\n case Side.Left:\n points.splice(1, 0, [\n points[0][0] - minimumDistanceBeforeTurn,\n points[0][1]\n ]);\n break;\n }\n }\n if (endDirection) {\n switch (endDirection) {\n case Side.Bottom:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0],\n points[points.length - 1][1] + minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Top:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0],\n points[points.length - 1][1] - minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Right:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0] + minimumDistanceBeforeTurn,\n points[points.length - 1][1]\n ]);\n break;\n case Side.Left:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0] - minimumDistanceBeforeTurn,\n points[points.length - 1][1]\n ]);\n break;\n }\n }\n for (let i = 1; i < points.length; ++i) {\n if (currentDirection !== undefined) {\n switch (currentDirection) {\n case Side.Bottom:\n if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is behind, we turn around\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Top;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is behind on the same line, we turn around\n result += ` H ${points[i][0] + minimumDistanceBeforeTurn}`;\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Left;\n } else if (\n points[i][1] === points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is perpendicular to us\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is after us, we turn and continue\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is in the same direction, we continue straight\n result += ` V ${points[i][1]}`;\n }\n break;\n case Side.Top:\n if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is behind, we turn around\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Bottom;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is behind on the same line, we turn around\n result += ` H ${points[i][0] - minimumDistanceBeforeTurn}`;\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Right;\n } else if (\n points[i][1] === points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is perpendicular to us\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is after us, we turn and continue\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is in the same direction, we continue straight\n result += ` V ${points[i][1]}`;\n }\n break;\n case Side.Right:\n if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is behind, we turn around\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Left;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is behind on the same line, we turn around\n result += ` V ${points[i][1] + minimumDistanceBeforeTurn}`;\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Top;\n } else if (\n points[i][0] === points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is perpendicular to us\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is after us, we turn and continue\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is in the same direction, we continue straight\n result += ` H ${points[i][0]}`;\n }\n break;\n case Side.Left:\n if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is behind, we turn around\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Right;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is behind on the same line, we turn around\n result += ` V ${points[i][1] - minimumDistanceBeforeTurn}`;\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Bottom;\n } else if (\n points[i][0] === points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is perpendicular to us\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is after us, we turn and continue\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is in the same direction, we continue straight\n result += ` H ${points[i][0]}`;\n }\n break;\n }\n } else {\n if (points[i][0] !== points[i - 1][0]) {\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n }\n if (points[i][1] !== points[i - 1][1]) {\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n }\n }\n }\n break;\n }\n return result;\n }\n};\n\n/**\n * Calculates the dasharray property of an SVG line corresponding to the given line style and width.\n * @private\n */\nexport const lineStyleDasharray = (style: LineStyle, width: number): string => {\n switch (style) {\n case LineStyle.Dotted:\n return `${width}`;\n case LineStyle.Dashed:\n return `${4 * width} ${width}`;\n case LineStyle.GappedDashes:\n return `${4 * width} ${4 * width}`;\n case LineStyle.Solid:\n default:\n return 'none';\n }\n};\n","/**\n * Removes the given element from the array if it exists within the array.\n * @private\n * @param arr An array.\n * @param obj An element to remove from the array.\n * @returns The given array without the given element removed if it was found; otherwise the array without modifications.\n */\nexport const removeIfExists = <T>(arr: T[], obj: T): T[] => {\n const index = arr.indexOf(obj);\n if (index >= 0) {\n arr.splice(index, 1);\n }\n return arr;\n};\n\n/**\n * Adds the given element to the array if it doesn't exist within the array.\n * @private\n * @param arr An array.\n * @param obj An element to add to the array.\n * @returns The given array with the given element added it was not found; otherwise the array without modifications.\n */\nexport const addIfNotExists = <T>(arr: T[], obj: T): T[] => {\n if (!arr.includes(obj)) {\n arr.push(obj);\n }\n return arr;\n};\n","import * as d3 from 'd3';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { CollabTimestamp } from './collab/primitives';\r\n\r\n/**\r\n * Default priority value for diagram elements.\r\n * @private\r\n */\r\nexport const DEFAULT_PRIORITY = 0;\r\n\r\n/**\r\n * Represents an object which exists as part of a diagram model.\r\n * @public\r\n * @see DiagramModel\r\n */\r\nexport interface DiagramEntity {\r\n /**\r\n * Identifier that uniquely identifies this entity within its diagram model.\r\n * @public\r\n */\r\n get id(): string;\r\n}\r\n\r\n/**\r\n * Represents an object which exists as part of a specific diagram model and has a visual representation in a diagram canvas.\r\n * @public\r\n * @see DiagramModel\r\n * @see DiagramCanvas\r\n */\r\nexport abstract class DiagramElement implements DiagramEntity {\r\n /**\r\n * Diagram model this diagram element is part of.\r\n * @private\r\n */\r\n model: DiagramModel;\r\n private _id: string;\r\n get id(): string {\r\n return this._id;\r\n }\r\n /**\r\n * Whether this diagram element is currently highlighted by the user.\r\n * @private\r\n */\r\n highlighted = false;\r\n /**\r\n * Whether this diagram element is currently selected by the user.\r\n * @private\r\n */\r\n selected = false;\r\n /**\r\n * Whether this diagram element has itself been explicitly removed.\r\n *\r\n * Override the `removed` getter so that it returns true if and only if:\r\n * - `selfRemoved` is true, or\r\n * - `removed` is true for any of this element's dependencies.\r\n *\r\n * For example, a DiagramConnection is removed if either of its ports are removed,\r\n * even if the connection's own `selfRemoved` field is false.\r\n * @private\r\n */\r\n selfRemoved = false;\r\n /**\r\n * Collaborative timestamp for selfRemoved.\r\n * @private\r\n */\r\n selfRemovedTimestamp: CollabTimestamp | null = null;\r\n\r\n constructor(model: DiagramModel, id: string) {\r\n this.model = model;\r\n this._id = id;\r\n }\r\n\r\n /**\r\n * Whether this diagram element has been removed.\r\n *\r\n * An element can be removed because it was explicitly removed, or because one of\r\n * its dependencies was removed. For example, a DiagramConnection depends on both of its ports.\r\n *\r\n * @private\r\n */\r\n abstract readonly removed: boolean;\r\n\r\n /**\r\n * Get the priority of this element to calculate whether it should be filtered out in the view or not.\r\n * @public\r\n */\r\n abstract getPriority(): number;\r\n\r\n /**\r\n * Update the view of the canvas to show the current state of this element.\r\n * @public\r\n */\r\n abstract updateInView(): void;\r\n\r\n /**\r\n * Obtain the selection of this element.\r\n * @private\r\n */\r\n select(): d3.Selection<SVGGElement, unknown, null, unknown> | undefined {\r\n return this.model.canvas?.selectCanvasView()?.select(`g#${this.id}`);\r\n }\r\n}\r\n\r\n/**\r\n * Represents a collection of diagram entities of a type that exists as part of a diagram model.\r\n * @public\r\n * @see DiagramEntity\r\n * @see DiagramModel\r\n */\r\nexport class DiagramEntitySet<E extends DiagramEntity> implements Iterable<E> {\r\n /**\r\n * The list of entities contained in this set.\r\n * @private\r\n */\r\n protected entities: E[] = [];\r\n /**\r\n * A mapping of entity ids to their corresponding entity in this set for quickly fetching entities based on their id.\r\n * @private\r\n */\r\n protected entityMap: { [id: string]: E } = {};\r\n\r\n /**\r\n * The number of entities of this set.\r\n * @public\r\n */\r\n get length(): number {\r\n return this.entities.length;\r\n }\r\n\r\n /**\r\n * Gets all of the entities of this set.\r\n * @public\r\n * @returns An array containing all of the entities of this set.\r\n */\r\n all(): E[] {\r\n return [...this.entities];\r\n }\r\n\r\n /**\r\n * Adds an entity to this set if there are no entities with the same id. Has no effect if there already exists an entity with the same id as the given entity.\r\n * For creating entities with relationships with other entities, the new() method should be used instead. The add() method adds an entity but doesn't take care of setting that entity's relationships with other entities.\r\n * @private\r\n * @param entity An entity to be added to this set.\r\n */\r\n add(entity: E): void {\r\n if (this.entityMap[entity.id] === undefined) {\r\n this.entityMap[entity.id] = entity;\r\n this.entities.push(entity);\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the entities in this set.\r\n * @public\r\n */\r\n clear() {\r\n // remove each entity individually in case classes that extend this implement their own specific cleanup\r\n while (this.entities.length > 0) {\r\n this.remove(this.entities[0].id);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if this set contains an entity with the given id.\r\n * @public\r\n * @param id An id.\r\n * @returns `true` if this set contains an entity with the given id, `false` otherwise.\r\n */\r\n contains(id: string): boolean {\r\n return this.entityMap[id] !== undefined;\r\n }\r\n\r\n /**\r\n * Gets all of the entities of this set filtered following given criteria.\r\n * @public\r\n * @returns An array containing the entities of this set that meet the given criteria.\r\n */\r\n filter(predicate: (value: E, index: number, array: E[]) => unknown): E[] {\r\n return this.entities.filter(predicate);\r\n }\r\n\r\n /**\r\n * Gets an entity of this set matching specific criteria.\r\n * @public\r\n * @returns An entity of this set.\r\n */\r\n find(\r\n predicate: (value: E, index: number, array: E[]) => unknown\r\n ): E | undefined {\r\n return this.entities.find(predicate);\r\n }\r\n\r\n /**\r\n * Gets an entity from this set.\r\n * @public\r\n * @param id An id.\r\n * @returns An entity with the given id, or `undefined` if there are no entities with the given id.\r\n */\r\n get(id: string): E | undefined {\r\n return this.entityMap[id];\r\n }\r\n\r\n /**\r\n * Attempts to find and remove an entity with the given id. Has no effect if there are no entities with the given id.\r\n * @public\r\n * @param id An id.\r\n */\r\n remove(id: string) {\r\n const entity = this.get(id);\r\n if (entity !== undefined) {\r\n delete this.entityMap[id];\r\n removeIfExists(this.entities, entity);\r\n }\r\n }\r\n\r\n /**\r\n * Iterator to iterate over the entities of this set.\r\n * @public\r\n */\r\n *[Symbol.iterator](): Iterator<E> {\r\n let counter = 0;\r\n while (counter < this.entities.length) {\r\n yield this.entities[counter];\r\n ++counter;\r\n }\r\n }\r\n}\r\n","/**\r\n * A timestamp used to break ties during collaborative editing.\r\n * If multiple users edit a property at the same time, the edit with the last timestamp \"wins\".\r\n *\r\n * Specifically, `CollabTimestamp` is a [Lamport timestamp](https://en.wikipedia.org/wiki/Lamport_timestamp),\r\n * consisting of a logical clock and a tiebreaker (`replicaId`, a UUID that is created fresh for each diagram).\r\n */\r\nexport type CollabTimestamp = [clock: number, replicaId: string];\r\n\r\n/**\r\n * Returns whether the incoming timestamp wins over the existing timestamp.\r\n *\r\n * In the DiagramModel, timestamps that have never been set are left null;\r\n * `timestampWins` treats that as an \"initial timestamp\" that loses to all LogicalTimestamps.\r\n */\r\nexport function timestampWins(\r\n incoming: CollabTimestamp,\r\n existing: CollabTimestamp | null | undefined\r\n): boolean {\r\n if (!existing) return true;\r\n if (incoming[0] > existing[0]) return true;\r\n if (incoming[0] === existing[0]) {\r\n // In case of equality, declare the incoming timestamp the \"winner\".\r\n // This occurs if a client reuses a timestamp for multiple actions in a row,\r\n // in which case the last created should win.\r\n return incoming[1] >= existing[1];\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * A nested collection of CollabTimestamps associated to a ValueSet.\r\n * @see ValueSet\r\n */\r\nexport type CollabTimestampSet = {\r\n [key: string]: CollabTimestamp | CollabTimestampSet;\r\n};\r\n","import { removeIfExists } from '../../util/list-util';\r\nimport {\r\n CollabTimestamp,\r\n CollabTimestampSet,\r\n timestampWins\r\n} from './collab/primitives';\r\n\r\n/**\r\n * A property which is part of a property set and defines what values a value in a value set can take.\r\n * @see PropertySet\r\n * @see ValueSet\r\n * @private\r\n */\r\nexport class Property {\r\n /**\r\n * The name of this property. Used to distinguish this property from others.\r\n */\r\n name: string;\r\n /**\r\n * The type of this property, which indicates the possible values that this property can have.\r\n */\r\n type: Type;\r\n /**\r\n * The default value of this property.\r\n * @default undefined\r\n */\r\n defaultValue?: unknown;\r\n /**\r\n * Whether this property should always appear in the property editor component.\r\n * @see PropertyEditorComponent\r\n */\r\n basic: boolean;\r\n /**\r\n * Whether the value of this property can be edited.\r\n */\r\n editable: boolean;\r\n /**\r\n * Which attribute of the parent component the value of this property is linked to. `undefined` if none.\r\n * @default undefined\r\n */\r\n rootAttribute?: string[] | string;\r\n /**\r\n * The list of possible values if the value of the property is chosen from a set of possible values. Undefined otherwise.\r\n * @default undefined\r\n */\r\n options?: Option<unknown>[];\r\n /**\r\n * The list of properties that are part of this property if the type of this property is `'object'`.\r\n * @default undefined\r\n */\r\n properties?: Property[];\r\n\r\n constructor(\r\n name: string,\r\n type: Type,\r\n defaultValue: unknown,\r\n basic: boolean,\r\n editable: boolean,\r\n rootAttribute?: string[] | string\r\n ) {\r\n this.name = name;\r\n this.type = type;\r\n this.defaultValue = defaultValue;\r\n this.basic = basic;\r\n this.editable = editable;\r\n this.rootAttribute = rootAttribute;\r\n this.options = undefined;\r\n this.properties = undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Each of the possible values that a property of type option can have.\r\n * @see Property\r\n * @see Type.Option\r\n */\r\nexport interface Option<T> {\r\n key: T;\r\n label: string;\r\n}\r\n\r\n/**\r\n * The type that a property can have.\r\n * @see Property\r\n * @private\r\n */\r\nexport enum Type {\r\n /**\r\n * A type whose value must be a boolean.\r\n */\r\n Boolean = 'boolean',\r\n /**\r\n * A type whose value must be a string representing a valid HTML color code.\r\n */\r\n Color = 'color',\r\n /**\r\n * A type whose value must be a date.\r\n */\r\n Date = 'date',\r\n /**\r\n * A type whose value must be a date with a time.\r\n */\r\n Datetime = 'datetime',\r\n /**\r\n * A type whose value must be a number.\r\n */\r\n Number = 'number',\r\n /**\r\n * A type whose value must be an object.\r\n */\r\n Object = 'object',\r\n /**\r\n * A type whose value must be one of a set of options.\r\n */\r\n Option = 'option',\r\n /**\r\n * A type whose value must be a list of values picked from a set of options.\r\n * @see Type.Option\r\n */\r\n OptionList = 'option-list',\r\n /**\r\n * A type whose value must be a list of values picked from a set of options without repeated values.\r\n * @see Type.Option\r\n */\r\n OptionSet = 'option-set',\r\n /**\r\n * A type whose value must be a string without newline characters.\r\n */\r\n Text = 'text',\r\n /**\r\n * A type whose value must be a string with newline characters.\r\n */\r\n TextArea = 'text-area',\r\n /**\r\n * A type whose value must be a list of strings.\r\n */\r\n TextList = 'text-list',\r\n /**\r\n * A type whose value must be a list of strings without repeated values.\r\n */\r\n TextSet = 'text-set',\r\n /**\r\n * A type whose value must be a map with string keys and values.\r\n */\r\n TextMap = 'text-map',\r\n /**\r\n * A type whose value must be a time of day.\r\n */\r\n Time = 'time',\r\n /**\r\n * A type whose value must be a valid URL.\r\n */\r\n Url = 'url'\r\n}\r\n\r\n/**\r\n * A set of properties based on which a set of values of those properties can be created.\r\n * @see Property\r\n * @see ValueSet\r\n * @private\r\n */\r\nexport class PropertySet {\r\n propertyMap: { [key: string]: Property };\r\n propertyList: Property[];\r\n\r\n constructor(properties: Property[] = []) {\r\n this.propertyList = properties;\r\n this.propertyMap = {};\r\n for (const property of this.propertyList) {\r\n this.propertyMap[property.name] = property;\r\n }\r\n }\r\n\r\n getProperty(key: string): Property {\r\n return this.propertyMap[key];\r\n }\r\n\r\n hasProperty(key: string): boolean {\r\n return this.propertyMap[key] !== undefined;\r\n }\r\n\r\n hasProperties(): boolean {\r\n return this.propertyList.length > 0;\r\n }\r\n}\r\n\r\n/**\r\n * A set of values corresponding to a set of properties.\r\n * @see PropertySet\r\n * @private\r\n */\r\nexport class ValueSet {\r\n rootElement: { [key: string]: unknown };\r\n propertySet: PropertySet;\r\n displayedProperties: Property[] = [];\r\n hiddenProperties: Property[] = [];\r\n private values: { [key: string]: unknown } = {};\r\n private valueSets: { [key: string]: ValueSet } = {};\r\n /**\r\n * Collaborative timestamps for all keys in this.values that have ever been set,\r\n * even if since they've since been set to the default value.\r\n *\r\n * Object values (in this.valueSets) store their own timestamps separately.\r\n */\r\n private ownTimestamps: { [key: string]: CollabTimestamp | undefined } = {};\r\n\r\n constructor(propertySet: PropertySet, rootElement: unknown) {\r\n this.propertySet = propertySet;\r\n this.rootElement = rootElement as { [key: string]: unknown };\r\n this.resetValues();\r\n }\r\n\r\n /**\r\n * Get the value of the root element attribute under the given keys.\r\n * If given an array of keys, the value is found under repeated lookups to enable obtaining nested values.\r\n * @private\r\n * @param rootAttribute A key or array of keys to look up in the root element.\r\n * @returns The value if it could be found, `undefined` if nothing could be found.\r\n */\r\n getRootElementValue(rootAttribute: string[] | string | null): unknown {\r\n if (typeof rootAttribute === 'string') {\r\n return this.rootElement[rootAttribute];\r\n }\r\n if (Array.isArray(rootAttribute) && rootAttribute.length > 0) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let rootSubelement: any = this.rootElement;\r\n for (const rootSubattribute of rootAttribute) {\r\n if (rootSubelement === null || rootSubelement === undefined) {\r\n return undefined;\r\n }\r\n rootSubelement = rootSubelement[rootSubattribute];\r\n }\r\n return rootSubelement;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Set the value of the root element's attribute under the given keys.\r\n * If given an array of keys, the value is found under repeated lookups to enable setting nested values.\r\n * If the root element has a function `updateInView()`, it is called upon successful setting of the value.\r\n * If the root element's attribute doesn't exist, it does nothing.\r\n * @private\r\n * @param rootAttribute A key or array of keys to look up in the root element.\r\n * @param value The value to set the root element's attribute to.\r\n */\r\n setRootElementValue(\r\n rootAttribute: string[] | string | null,\r\n value: unknown\r\n ): void {\r\n if (typeof rootAttribute === 'string') {\r\n this.rootElement[rootAttribute] = value;\r\n }\r\n if (Array.isArray(rootAttribute) && rootAttribute.length > 0) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let rootSubelement: any = this.rootElement;\r\n for (let i = 0; i < rootAttribute.length - 1; ++i) {\r\n const rootSubattribute = rootAttribute[i];\r\n if (rootSubelement === null || rootSubelement === undefined) {\r\n return;\r\n }\r\n rootSubelement = rootSubelement[rootSubattribute];\r\n }\r\n if (rootSubelement === null || rootSubelement === undefined) {\r\n return;\r\n }\r\n rootSubelement[rootAttribute[rootAttribute.length - 1]] = value;\r\n }\r\n if (typeof this.rootElement['updateInView'] === 'function') {\r\n this.rootElement['updateInView']();\r\n }\r\n }\r\n\r\n /**\r\n * Obtain the value under the given key.\r\n * @private\r\n * @param key A key.\r\n * @returns The value under the given key.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getValue(key: string): any {\r\n const rootAttribute = this.propertySet.getProperty(key)?.rootAttribute;\r\n if (rootAttribute !== undefined && rootAttribute !== null) {\r\n this.values[key] = this.getRootElementValue(rootAttribute);\r\n }\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n return this.valueSets[key].getValues();\r\n } else {\r\n return this.values[key];\r\n }\r\n }\r\n\r\n /**\r\n * Obtain all the values in the set.\r\n * @private\r\n * @returns An object containing all the values in the set.\r\n */\r\n getValues(): { [key: string]: unknown } {\r\n const result: { [key: string]: unknown } = {};\r\n for (const key in this.propertySet.propertyMap) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n result[key] = this.valueSets[key].getValues();\r\n } else {\r\n result[key] = this.getValue(key);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns the values for all keys present in the given object, including keys in sub-objects.\r\n *\r\n * @private\r\n * @param values An object containing all values for keys present in the given object.\r\n */\r\n getValuesForKeys(keys: { [key: string]: unknown }): {\r\n [key: string]: unknown;\r\n } {\r\n const result: { [key: string]: unknown } = {};\r\n for (const key in keys) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n result[key] = this.valueSets[key].getValuesForKeys(\r\n keys[key] as { [key: string]: unknown }\r\n );\r\n } else {\r\n result[key] = this.getValue(key);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Obtain all CollabTimestamps in the set, including those corresponding to nested keys.\r\n * @private\r\n * @returns An object containing all the CollabTimestamps in the set.\r\n */\r\n getTimestamps(): CollabTimestampSet {\r\n const result: CollabTimestampSet = {};\r\n for (const key in this.propertySet.propertyMap) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n result[key] = this.valueSets[key].getTimestamps();\r\n } else {\r\n const timestamp = this.ownTimestamps[key];\r\n if (timestamp) result[key] = timestamp;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Check if the value under the key is not empty.\r\n * @private\r\n * @param key A key.\r\n * @returns `true` if the value under the key is empty, `false` otherwise.\r\n */\r\n hasValue(key: string): boolean {\r\n const value = this.getValue(key);\r\n return !empty(value);\r\n }\r\n\r\n /**\r\n * Check if the value under the key is not empty or the default value.\r\n * @private\r\n * @param key A key.\r\n * @returns `true` if the value under the key is not empty or the default value, `false` otherwise.\r\n */\r\n hasSetValue(key: string): boolean {\r\n const value = this.getValue(key);\r\n const property = this.propertySet.getProperty(key);\r\n if (property && property.type === Type.Object) {\r\n return this.getSubValueSet(key).hasAnySetValue();\r\n }\r\n return !empty(value) && !equals(value, property?.defaultValue);\r\n }\r\n\r\n /**\r\n * Check if any of the values in the set are not empty or the default value.\r\n * @private\r\n * @returns `true` if any of the values in the set are not empty or the default value, `false` otherwise.\r\n */\r\n hasAnySetValue(): boolean {\r\n for (const property of this.propertySet.propertyList) {\r\n if (this.hasSetValue(property.name)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Set the value under the given key.\r\n * @private\r\n * @param key A key.\r\n * @param value A value.\r\n */\r\n setValue(key: string, value: unknown): void {\r\n const property = this.propertySet.getProperty(key);\r\n if (property) {\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].setValues(value as { [key: string]: unknown });\r\n } else {\r\n this.values[key] = value;\r\n if (!equals(value, property.defaultValue)) {\r\n this.displayProperty(property);\r\n }\r\n }\r\n const rootAttribute = property.rootAttribute;\r\n if (rootAttribute !== undefined && rootAttribute !== null) {\r\n this.setRootElementValue(rootAttribute, value);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Reset all values and then set them to the given values.\r\n * @private\r\n * @param values An object containing all values to set the values to.\r\n */\r\n setValues(values: { [key: string]: unknown }): void {\r\n this.resetValues();\r\n for (const key in values) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].setValues(\r\n values[key] as { [key: string]: unknown }\r\n );\r\n } else {\r\n this.setValue(key, values[key]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Reset all timestamps and then set them to the given timestamps.\r\n * @private\r\n * @param values An object containing all the CollabTimestamps in the set.\r\n */\r\n setTimestamps(timestamps: CollabTimestampSet): void {\r\n this.ownTimestamps = {};\r\n for (const key in timestamps) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].setTimestamps(\r\n timestamps[key] as CollabTimestampSet\r\n );\r\n } else {\r\n this.ownTimestamps[key] = timestamps[key] as CollabTimestamp;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Writes the given values over the value set's existing values without resetting the existing values.\r\n * @private\r\n * @param values An object containing all values to set the values to.\r\n */\r\n overwriteValues(values: { [key: string]: unknown }): void {\r\n for (const key in values) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].overwriteValues(\r\n values[key] as { [key: string]: unknown }\r\n );\r\n } else {\r\n this.setValue(key, values[key]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Variant of overwriteValues that applies last-writer-wins to each key, updating timestamps if appropriate.\r\n * @private\r\n * @param values An object containing all values to set the values to.\r\n */\r\n overwriteValuesLww(\r\n values: { [key: string]: unknown },\r\n timestamp: CollabTimestamp\r\n ): void {\r\n for (const key in values) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].overwriteValuesLww(\r\n values[key] as { [key: string]: unknown },\r\n timestamp\r\n );\r\n } else {\r\n if (timestampWins(timestamp, this.ownTimestamps[key])) {\r\n this.setValue(key, values[key]);\r\n this.ownTimestamps[key] = timestamp;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set all the values of this set to the defaults.\r\n * If this set has a root element and any of its properties have root attributes, the root element's attributes are also set to the property's default value if one is provided.\r\n * @private\r\n */\r\n resetValues(): void {\r\n this.displayedProperties = [];\r\n this.hiddenProperties = [];\r\n this.ownTimestamps = {};\r\n for (const key in this.propertySet.propertyMap) {\r\n const property = this.propertySet.getProperty(key);\r\n const rootAttribute = property.rootAttribute;\r\n if (property.type === Type.Object) {\r\n this.valueSets[key] = this.constructSubValueSet(key);\r\n } else {\r\n this.values[key] = structuredClone(property.defaultValue);\r\n }\r\n if (rootAttribute !== undefined && rootAttribute !== null) {\r\n if (property.defaultValue !== undefined) {\r\n this.setRootElementValue(rootAttribute, this.values[key]);\r\n } else {\r\n this.values[key] = this.getRootElementValue(rootAttribute);\r\n }\r\n }\r\n if (property.basic) {\r\n this.displayedProperties.push(property);\r\n } else {\r\n this.hiddenProperties.push(property);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Constructs a ValueSet with its corresponding PropertySet representing the values of the object.\r\n * @private\r\n * @param key Key that the ValueSet is under.\r\n * @returns The constructed ValueSet.\r\n */\r\n private constructSubValueSet(key: string): ValueSet {\r\n const property = this.propertySet.getProperty(key);\r\n const propertySet = new PropertySet(property.properties);\r\n const valueSet = new ValueSet(propertySet, this.rootElement);\r\n valueSet.overwriteValues(\r\n structuredClone(property.defaultValue) as { [key: string]: unknown }\r\n );\r\n return valueSet;\r\n }\r\n\r\n /**\r\n * Get the ValueSet under the given key when there are nested ValueSets.\r\n * @private\r\n * @param key A key.\r\n * @returns A ValueSet.\r\n */\r\n getSubValueSet(key: string): ValueSet {\r\n return this.valueSets[key];\r\n }\r\n\r\n /**\r\n * Move the given property to the list of displayed properties.\r\n * @private\r\n * @param property A property.\r\n */\r\n displayProperty(property: Property): void {\r\n if (!this.displayedProperties.includes(property)) {\r\n this.displayedProperties.push(property);\r\n removeIfExists(this.hiddenProperties, property);\r\n }\r\n }\r\n\r\n /**\r\n * Move the given property to the list of hidden properties.\r\n * @private\r\n * @param property A property.\r\n */\r\n hideProperty(property: Property): void {\r\n if (!this.hiddenProperties.includes(property)) {\r\n this.hiddenProperties.push(property);\r\n removeIfExists(this.displayedProperties, property);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Check if the given value is not empty.\r\n * @param a A value.\r\n * @returns `true` if the given value is not `undefined`, `null`, `''`, `[]` or `{}`; `false` otherwise.\r\n */\r\nexport const empty = (a: unknown): boolean => {\r\n return (\r\n a === undefined ||\r\n a === null ||\r\n a === '' ||\r\n (a instanceof Array && a.length === 0) ||\r\n (a instanceof Object && Object.keys(a).length === 0)\r\n );\r\n};\r\n\r\n/**\r\n * Check whether the given values are equal.\r\n * @param a A value.\r\n * @param b A value.\r\n * @returns `true` if the given values are equal, `false` otherwise.\r\n */\r\nexport const equals = (a: unknown, b: unknown): boolean => {\r\n return a === b || JSON.stringify(a) === JSON.stringify(b);\r\n};\r\n\r\n/**\r\n * Calculate the differences between the given objects and return two objects, each containing the keys for which the values are different in each argument, containing the different values.\r\n * @param a A dictionary.\r\n * @param b A dictionary.\r\n * @returns A tuple of two objects with each containing the keys that have a different value in the corresponding argument compared to the other argument.\r\n */\r\nexport const diff = (\r\n a: {\r\n [key: string]: unknown;\r\n },\r\n b: {\r\n [key: string]: unknown;\r\n }\r\n): [\r\n {\r\n [key: string]: unknown;\r\n },\r\n {\r\n [key: string]: unknown;\r\n }\r\n] => {\r\n const aDiff: {\r\n [key: string]: unknown;\r\n } = {};\r\n const bDiff: {\r\n [key: string]: unknown;\r\n } = {};\r\n const allKeys = [];\r\n for (const key in a) {\r\n allKeys.push(key);\r\n }\r\n for (const key in b) {\r\n if (!(key in a)) {\r\n allKeys.push(key);\r\n }\r\n }\r\n for (const key of allKeys) {\r\n if (isObject(a[key]) && isObject(b[key])) {\r\n const diffAB = diff(\r\n a[key] as { [key: string]: unknown },\r\n b[key] as { [key: string]: unknown }\r\n );\r\n // only add the key if differences are detected\r\n if (\r\n Object.keys(diffAB[0]).length > 0 &&\r\n Object.keys(diffAB[1]).length > 0\r\n ) {\r\n aDiff[key] = diffAB[0];\r\n bDiff[key] = diffAB[1];\r\n }\r\n } else {\r\n if (!equals(a[key], b[key])) {\r\n aDiff[key] = a[key];\r\n bDiff[key] = b[key];\r\n }\r\n }\r\n }\r\n return [aDiff, bDiff];\r\n};\r\n\r\nexport const isObject = (x: unknown): boolean =>\r\n x !== undefined && x !== null && x.constructor === Object;\r\n","import { Point } from '../../util/canvas-util';\r\nimport { LineShape, LineStyle } from '../../util/line';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { Side } from '../../util/svg-util';\r\nimport {\r\n ConnectionMarkerLook,\r\n ConnectionTypeConfig,\r\n FieldConfig\r\n} from './diagram-config';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntity,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { PropertySet, ValueSet } from './diagram-property';\r\n\r\n/**\r\n * Default values of the parameters of a diagram connection.\r\n * @see DiagramConnection\r\n * @private\r\n */\r\nexport const DIAGRAM_CONNECTION_TYPE_DEFAULTS = {\r\n name: '',\r\n width: 1,\r\n shape: LineShape.Straight,\r\n style: LineStyle.Solid,\r\n label: null,\r\n defaultStartMarkerLook: null,\r\n defaultEndMarkerLook: null,\r\n startTypes: [],\r\n endTypes: [],\r\n color: '#000000',\r\n selectedColor: '#000000',\r\n properties: []\r\n};\r\n\r\n// TODO: Should maybe get these variables from the diagram configuration rather than have them hardcoded\r\n/**\r\n * Whether a connection can have the same port as both its start port and its end port.\r\n */\r\nexport const CAN_A_CONNECTION_END_ON_THE_SAME_PORT_IT_STARTS = false;\r\n/**\r\n * Whether a connection can have the same ports as another connection.\r\n */\r\nexport const CAN_A_CONNECTION_HAVE_THE_SAME_PORTS_AS_ANOTHER = false;\r\n/**\r\n * Whether a port can have multiple connections.\r\n */\r\nexport const CAN_CONNECTIONS_SHARE_PORTS = true;\r\n/**\r\n * Whether tightening connections is allowed.\r\n */\r\nexport const CAN_TIGHTEN_CONNECTIONS = true;\r\n\r\n/**\r\n * A connection type, which holds properties that connections of this type share in common.\r\n * @see ConnectionTypeConfig\r\n * @public\r\n */\r\nexport class DiagramConnectionType implements DiagramEntity {\r\n id: string;\r\n name: string;\r\n width: number;\r\n shape: LineShape;\r\n style: LineStyle;\r\n label: FieldConfig | null;\r\n defaultStartMarkerLook: ConnectionMarkerLook | null;\r\n defaultEndMarkerLook: ConnectionMarkerLook | null;\r\n startTypes: string[];\r\n endTypes: string[];\r\n color: string;\r\n selectedColor: string;\r\n propertySet: PropertySet;\r\n\r\n constructor(options: ConnectionTypeConfig) {\r\n const values = {\r\n ...DIAGRAM_CONNECTION_TYPE_DEFAULTS,\r\n ...options\r\n };\r\n this.id = values.id;\r\n this.name = values.name;\r\n this.width = values.width;\r\n this.shape = values.shape;\r\n this.style = values.style;\r\n this.label = values.label;\r\n this.defaultStartMarkerLook = values.defaultStartMarkerLook;\r\n this.defaultEndMarkerLook = values.defaultEndMarkerLook;\r\n this.startTypes = values.startTypes;\r\n this.endTypes = values.endTypes;\r\n this.color = values.color;\r\n this.selectedColor = values.selectedColor;\r\n this.propertySet = new PropertySet(values.properties);\r\n }\r\n\r\n canStartFromType(type: string) {\r\n return this.startTypes.indexOf(type) >= 0;\r\n }\r\n\r\n canFinishOnType(type: string) {\r\n return this.endTypes.indexOf(type) >= 0;\r\n }\r\n}\r\n\r\n/**\r\n * A connection which goes from one port to another.\r\n * @see DiagramPort\r\n * @public\r\n */\r\nexport class DiagramConnection extends DiagramElement {\r\n type: DiagramConnectionType;\r\n /**\r\n * Additional properties of this connection.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n /**\r\n * Variable used to preserve the original data of a connection when importing from a different format.\r\n * @public\r\n */\r\n originalData: unknown;\r\n /**\r\n * Port that this connection starts from.\r\n * @public\r\n */\r\n start?: DiagramPort;\r\n /**\r\n * Direction that this connection follows at its start.\r\n * @public\r\n */\r\n startDirection?: Side;\r\n /**\r\n * Coordinates of the start point of this connection.\r\n * @public\r\n */\r\n startCoords: Point = [0, 0];\r\n /**\r\n * Look of the marker of this connection at the start, or `null` if the connection has no start marker.\r\n * @public\r\n */\r\n startMarkerLook: ConnectionMarkerLook | null;\r\n /**\r\n * Port that this connection ends at.\r\n * @public\r\n */\r\n end?: DiagramPort;\r\n /**\r\n * Direction that this connection follows at its end.\r\n * @public\r\n */\r\n endDirection?: Side;\r\n /**\r\n * Coordinates of the end point of this connection.\r\n * @public\r\n */\r\n endCoords: Point = [0, 0];\r\n /**\r\n * Look of the marker of this connection at the end, or `null` if the connection has no end marker.\r\n * @public\r\n */\r\n endMarkerLook: ConnectionMarkerLook | null;\r\n /**\r\n * Text at the start of this connection, or `''` if no text.\r\n * @public\r\n */\r\n startLabel = '';\r\n /**\r\n * Text at the middle of this connection, or `''` if no text.\r\n * @public\r\n */\r\n middleLabel = '';\r\n /**\r\n * Text at the end of this connection, or `''` if no text.\r\n * @public\r\n */\r\n endLabel = '';\r\n /**\r\n * Points that this connection passes through.\r\n * @public\r\n */\r\n points: Point[] = [];\r\n\r\n /**\r\n * Name of this connection. Alias for this connection's middle label.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.middleLabel;\r\n }\r\n set name(name: string) {\r\n this.middleLabel = name;\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n type: DiagramConnectionType,\r\n start: DiagramPort | undefined,\r\n end: DiagramPort | undefined,\r\n id: string\r\n ) {\r\n if (model.connections.get(id) !== undefined) {\r\n throw new Error(`DiagramConnection with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.type = type;\r\n this.valueSet = new ValueSet(type.propertySet, this);\r\n this.originalData = {};\r\n this.startMarkerLook = type.defaultStartMarkerLook;\r\n this.endMarkerLook = type.defaultEndMarkerLook;\r\n this.setStart(start);\r\n this.setEnd(end);\r\n }\r\n\r\n get removed() {\r\n return (\r\n this.selfRemoved ||\r\n (this.start !== undefined && this.start.removed) ||\r\n (this.end !== undefined && this.end.removed)\r\n );\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateConnectionsInView(this.id);\r\n }\r\n\r\n /**\r\n * Set the start of this connection to the given port or reset this connection's starting port if `undefined`.\r\n * Add or remove this connection from the list of outgoing connections of ports correspondingly.\r\n * @public\r\n * @param start A port.\r\n */\r\n setStart(start?: DiagramPort) {\r\n if (this.start !== start) {\r\n if (this.start !== undefined) {\r\n removeIfExists(this.start.outgoingConnections, this);\r\n }\r\n this.start = start;\r\n if (start !== undefined) {\r\n start.outgoingConnections.push(this);\r\n this.startDirection = start?.direction;\r\n this.startCoords = start?.coords || [0, 0];\r\n }\r\n } else {\r\n this.startDirection = start?.direction;\r\n this.startCoords = start?.coords || [0, 0];\r\n }\r\n this.updateInView();\r\n }\r\n\r\n /**\r\n * Set the end of this connection to the given port or reset this connection's ending port if `undefined`.\r\n * Add or remove this connection from the list of incoming connections of ports correspondingly.\r\n * @public\r\n * @param end A port.\r\n */\r\n setEnd(end?: DiagramPort) {\r\n if (this.end !== end) {\r\n if (this.end !== undefined) {\r\n removeIfExists(this.end.incomingConnections, this);\r\n }\r\n this.end = end;\r\n if (end !== undefined) {\r\n end.incomingConnections.push(this);\r\n this.endDirection = end?.direction;\r\n this.endCoords = end?.coords || [0, 0];\r\n }\r\n } else {\r\n this.endDirection = end?.direction;\r\n this.endCoords = end?.coords || [0, 0];\r\n }\r\n this.updateInView();\r\n }\r\n\r\n /**\r\n * Reassign the start and end ports of this connection to ports with less distance between them that have the same root element.\r\n * If no ports with less distance between them are found, do nothing.\r\n * @public\r\n */\r\n tighten() {\r\n if (!CAN_TIGHTEN_CONNECTIONS) {\r\n return;\r\n }\r\n if (this.start?.rootElement && this.end) {\r\n const alternativeStartPortsSortedByDistanceAscending =\r\n this.start.rootElement.ports\r\n .map<[DiagramPort, number]>((p) => [\r\n p,\r\n p.distanceTo((this.end as DiagramPort).coords)\r\n ])\r\n .sort((a, b) => a[1] - b[1])\r\n .map((a) => a[0]);\r\n checkAlternativeStartPorts: for (const alternativeStartPort of alternativeStartPortsSortedByDistanceAscending) {\r\n if (\r\n !CAN_A_CONNECTION_END_ON_THE_SAME_PORT_IT_STARTS &&\r\n alternativeStartPort === this.end\r\n ) {\r\n // alternative start port not valid, it is the same as the end port\r\n continue checkAlternativeStartPorts;\r\n }\r\n if (\r\n !CAN_CONNECTIONS_SHARE_PORTS &&\r\n ((alternativeStartPort.incomingConnections.length === 1 &&\r\n alternativeStartPort.incomingConnections[0] !== this) ||\r\n alternativeStartPort.incomingConnections.length > 1 ||\r\n (alternativeStartPort.outgoingConnections.length === 1 &&\r\n alternativeStartPort.outgoingConnections[0] !== this) ||\r\n alternativeStartPort.outgoingConnections.length > 1)\r\n ) {\r\n // alternative start port not valid, it already has other connections\r\n continue checkAlternativeStartPorts;\r\n }\r\n if (!CAN_A_CONNECTION_HAVE_THE_SAME_PORTS_AS_ANOTHER) {\r\n for (const connection of alternativeStartPort.outgoingConnections) {\r\n if (connection !== this && connection.end === this.end) {\r\n // alternative start port not valid, there is a connection whose start and end matches the alternative start port and this connection's end\r\n continue checkAlternativeStartPorts;\r\n }\r\n }\r\n for (const connection of alternativeStartPort.incomingConnections) {\r\n if (connection !== this && connection.start === this.end) {\r\n // alternative start port not valid, there is a connection whose start and end matches the alternative start port and this connection's end\r\n continue checkAlternativeStartPorts;\r\n }\r\n }\r\n }\r\n // found a valid start port\r\n if (alternativeStartPort === this.start) {\r\n break checkAlternativeStartPorts;\r\n } else {\r\n this.setStart(alternativeStartPort);\r\n break checkAlternativeStartPorts;\r\n }\r\n }\r\n }\r\n if (this.end?.rootElement && this.start) {\r\n const alternativeEndPortsSortedByDistanceAscending =\r\n this.end.rootElement.ports\r\n .map<[DiagramPort, number]>((p) => [\r\n p,\r\n p.distanceTo((this.start as DiagramPort).coords)\r\n ])\r\n .sort((a, b) => a[1] - b[1])\r\n .map((a) => a[0]);\r\n checkAlternativeEndPorts: for (const alternativeEndPort of alternativeEndPortsSortedByDistanceAscending) {\r\n if (\r\n !CAN_A_CONNECTION_END_ON_THE_SAME_PORT_IT_STARTS &&\r\n alternativeEndPort === this.start\r\n ) {\r\n // alternative start port not valid, it is the same as the end port\r\n continue checkAlternativeEndPorts;\r\n }\r\n if (\r\n !CAN_CONNECTIONS_SHARE_PORTS &&\r\n ((alternativeEndPort.outgoingConnections.length === 1 &&\r\n alternativeEndPort.outgoingConnections[0] !== this) ||\r\n alternativeEndPort.outgoingConnections.length > 1 ||\r\n (alternativeEndPort.incomingConnections.length === 1 &&\r\n alternativeEndPort.incomingConnections[0] !== this) ||\r\n alternativeEndPort.incomingConnections.length > 1)\r\n ) {\r\n // alternative start port not valid, it already has other connections\r\n continue checkAlternativeEndPorts;\r\n }\r\n if (!CAN_A_CONNECTION_HAVE_THE_SAME_PORTS_AS_ANOTHER) {\r\n for (const connection of alternativeEndPort.incomingConnections) {\r\n if (connection !== this && connection.start === this.start) {\r\n // alternative start port not valid, there is a connection whose start and end matches the alternative end port and this connection's start\r\n continue checkAlternativeEndPorts;\r\n }\r\n }\r\n for (const connection of alternativeEndPort.outgoingConnections) {\r\n if (connection !== this && connection.end === this.start) {\r\n // alternative start port not valid, there is a connection whose start and end matches the alternative end port and this connection's start\r\n continue checkAlternativeEndPorts;\r\n }\r\n }\r\n }\r\n // found a valid start port\r\n if (alternativeEndPort === this.end) {\r\n break checkAlternativeEndPorts;\r\n } else {\r\n this.setEnd(alternativeEndPort);\r\n break checkAlternativeEndPorts;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getPriority(): number {\r\n if (this.start) {\r\n if (this.end) {\r\n return Math.min(this.start.getPriority(), this.end.getPriority());\r\n } else {\r\n return this.start.getPriority();\r\n }\r\n } else {\r\n if (this.end) {\r\n return this.end.getPriority();\r\n } else {\r\n return DEFAULT_PRIORITY;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class DiagramConnectionSet extends DiagramEntitySet<DiagramConnection> {\r\n private model: DiagramModel;\r\n /**\r\n * Set of the possible types of connection that the connections of this set can have.\r\n * @public\r\n */\r\n types = new DiagramEntitySet<DiagramConnectionType>();\r\n\r\n /**\r\n * Instance a set of connections for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new connection and add it to this set.\r\n * @public\r\n * @param type The type of the connection given as either the type itself or the id of the type.\r\n * @param start The start port of the connection.\r\n * @param end The end port of the connection.\r\n * @param id The id of the connection.\r\n * @returns The instanced connection.\r\n */\r\n new(\r\n type: DiagramConnectionType | string,\r\n start: DiagramPort | undefined,\r\n end: DiagramPort | undefined,\r\n id: string\r\n ): DiagramConnection {\r\n let connectionType: DiagramConnectionType;\r\n if (type instanceof DiagramConnectionType) {\r\n connectionType = type;\r\n } else {\r\n const foundConnectionType = this.types.get(type);\r\n if (foundConnectionType === undefined) {\r\n throw new TypeError(\r\n `Connection type with id '${type}' could not be found.`\r\n );\r\n }\r\n connectionType = foundConnectionType;\r\n }\r\n const connection = new DiagramConnection(\r\n this.model,\r\n connectionType,\r\n start,\r\n end,\r\n id\r\n );\r\n super.add(connection);\r\n connection.updateInView();\r\n connection.valueSet.resetValues();\r\n return connection;\r\n }\r\n\r\n override remove(id: string) {\r\n const connection = this.get(id);\r\n if (connection) {\r\n // remove from ports\r\n removeIfExists(connection.start?.outgoingConnections || [], connection);\r\n removeIfExists(connection.end?.incomingConnections || [], connection);\r\n // remove from set of connections\r\n super.remove(id);\r\n // remove from canvas\r\n connection.updateInView();\r\n }\r\n }\r\n}\r\n","import { Side } from './svg-util';\n\n/**\n * A point on a canvas defined as its coordinates along the x and y axes.\n * @see DiagramCanvas\n * @public\n */\nexport type Point = [number, number];\n/**\n * A line on a canvas defined as its start point and end point.\n * @see DiagramCanvas\n * @public\n */\nexport type Line = [Point, Point];\n/**\n * A rectangle on a canvas defined as the points of its opposite corners.\n * @see DiagramCanvas\n * @public\n */\nexport type Rectangle = [Point, Point];\n\n/**\n * Round the coordinates of the given point to the nearest whole number.\n * @public\n * @param point A point.\n * @returns A new point with whole coordinates.\n */\nexport const roundPoint = (point: Point): Point => {\n return [Math.round(point[0]), Math.round(point[1])];\n};\n\n/**\n * Checks if the given coordinate is in the range given by an starting coordinate and an ending coordinate.\n * @public\n * @param coordinate A coordinate to check its presence in the range.\n * @param start A coordinate determining one of the extremes in the range.\n * @param end A coordinate determine one of the extremes in the range.\n * @returns `true` if the given coordinate is in the given range; `false` otherwise.\n */\nexport const between = (\n coordinate: number,\n start: number,\n end: number\n): boolean => {\n if (start < end) {\n return start <= coordinate && coordinate <= end;\n } else {\n return end <= coordinate && coordinate <= start;\n }\n};\n\n/**\n * Moves the given coordinate according to the given changes in coordinates.\n * @public\n * @param oldCoordinate A coordinate.\n * @param oldCoordinates A range of coordinates.\n * @param newCoordinates A range of coordinates.\n * @returns A new coordinate.\n */\nexport const translateCoordinate = (\n oldCoordinate: number,\n oldCoordinates: [number, number],\n newCoordinates: [number, number]\n): number => {\n return (\n ((oldCoordinate - oldCoordinates[0]) /\n (oldCoordinates[1] - oldCoordinates[0])) *\n (newCoordinates[1] - newCoordinates[0]) +\n newCoordinates[0]\n );\n};\n\n/**\n * Moves the coordinates of the given point according to the given changes in coordinates.\n * @public\n * @param oldPoint A point.\n * @param oldCoordsX A range of coordinates along the x axis.\n * @param oldCoordsY A range of coordinates along the y axis.\n * @param newCoordsX A range of coordinates along the x axis.\n * @param newCoordsY A range of coordinates along the y axis.\n * @returns A new point.\n */\nexport const translatePoint = (\n oldPoint: Point,\n oldCoordsX: [number, number],\n oldCoordsY: [number, number],\n newCoordsX: [number, number],\n newCoordsY: [number, number]\n): Point => {\n return [\n translateCoordinate(oldPoint[0], oldCoordsX, newCoordsX),\n translateCoordinate(oldPoint[1], oldCoordsY, newCoordsY)\n ];\n};\n\n/**\n * Calculates the result of moving the given point by the given distance in the given direction.\n * @public\n * @param point A point.\n * @param direction A direction.\n * @param distance A distance.\n * @returns A new point which differs from the given point by the given distance in the given direction.\n */\nexport const movePoint = (\n point: Point,\n direction: Side,\n distance: number\n): Point => {\n switch (direction) {\n case Side.Right:\n return [point[0] + distance, point[1]];\n case Side.Left:\n return [point[0] - distance, point[1]];\n case Side.Bottom:\n return [point[0], point[1] + distance];\n case Side.Top:\n return [point[0], point[1] - distance];\n }\n};\n\n/**\n * Checks whether two given points are the same point, that is, they have the same coordinates and are not NaN.\n * @public\n * @param point1 A point.\n * @param point2 A point.\n * @returns `true` if the two points have the same coordinates; `false` otherwise.\n */\nexport const equals = (point1: Point, point2: Point): boolean => {\n return point1[0] === point2[0] && point1[1] === point2[1];\n};\n\n/**\n * Calculates the euclidean distance between two points.\n * @public\n * @param point1 A point.\n * @param point2 A point.\n * @returns The euclidean distance between the given points.\n */\nexport const distanceBetweenPoints = (point1: Point, point2: Point): number => {\n return ((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2) ** 0.5;\n};\n\n/**\n * Checks whether the given point is inside the given line.\n * @public\n * @param line A line.\n * @param point A point.\n * @returns `true` if the point is contained within the line; `false` otherwise.\n */\nexport const lineContainsPoint = (line: Line, point: Point): boolean => {\n const alphaX = (point[0] - line[0][0]) / (line[1][0] - line[0][0]);\n if (alphaX < 0 || 1 < alphaX) {\n return false;\n }\n const alphaY = (point[1] - line[0][1]) / (line[1][1] - line[0][1]);\n return alphaX === alphaY;\n};\n\n/**\n * Checks whether the given point is inside the given rectaingle.\n * @public\n * @param rectangle A rectangle.\n * @param point A point.\n * @returns `true` if the point is contained within the rectangle; `false` otherwise.\n */\nexport const rectangleContainsPoint = (\n rectangle: Rectangle,\n point: Point\n): boolean => {\n return (\n between(point[0], rectangle[0][0], rectangle[1][0]) &&\n between(point[1], rectangle[0][1], rectangle[1][1])\n );\n};\n\n/**\n * Checks whether the two given lines share at least one point.\n * @public\n * @param line1 A line.\n * @param line2 A line.\n * @returns `true` if the lines intersect; `false` otherwise.\n */\nexport const linesIntersect = (line1: Line, line2: Line): boolean => {\n // if both lines are a point, they intersect if they are the same point\n if (equals(line1[0], line1[1]) && equals(line2[0], line2[1])) {\n return equals(line1[0], line2[0]);\n }\n // if one line is a point, they intersect if the other line contains the point\n if (equals(line1[0], line1[1])) {\n return lineContainsPoint(line2, line1[0]);\n }\n if (equals(line2[0], line2[1])) {\n return lineContainsPoint(line1, line2[0]);\n }\n // if the lines share endpoints, they intersect\n if (\n equals(line1[0], line2[0]) ||\n equals(line1[0], line2[1]) ||\n equals(line2[0], line1[1]) ||\n equals(line1[1], line2[1])\n ) {\n return true;\n }\n // if both lines are lines that don't share endpoints, calculate\n const dx0 = line1[1][0] - line1[0][0];\n const dx1 = line2[1][0] - line2[0][0];\n const dy0 = line1[1][1] - line1[0][1];\n const dy1 = line2[1][1] - line2[0][1];\n const p0 =\n dy1 * (line2[1][0] - line1[0][0]) - dx1 * (line2[1][1] - line1[0][1]);\n const p1 =\n dy1 * (line2[1][0] - line1[1][0]) - dx1 * (line2[1][1] - line1[1][1]);\n const p2 =\n dy0 * (line1[1][0] - line2[0][0]) - dx0 * (line1[1][1] - line2[0][1]);\n const p3 =\n dy0 * (line1[1][0] - line2[1][0]) - dx0 * (line1[1][1] - line2[1][1]);\n return p0 * p1 <= 0 && p2 * p3 <= 0;\n};\n\n/**\n * Checks whether the two given lines share at least one point and have the same slope.\n * @public\n * @param line1 A line.\n * @param line2 A line.\n * @returns `true` if the lines overlap; `false` otherwise.\n */\nexport const linesOverlap = (line1: Line, line2: Line): boolean => {\n // if both lines are a point, they overlap if they are the same point\n if (equals(line1[0], line1[1]) && equals(line2[0], line2[1])) {\n return equals(line1[0], line2[0]);\n }\n // if one line is a point, they overlap if the other line contains the point\n if (equals(line1[0], line1[1])) {\n return lineContainsPoint(line2, line1[0]);\n }\n if (equals(line2[0], line2[1])) {\n return lineContainsPoint(line1, line2[0]);\n }\n // in order for part of the lines to overlap,\n // one of the lines must include the starting point of the other and\n // one of the lines must include the ending point of the other\n return (\n (lineContainsPoint(line1, line2[0]) ||\n lineContainsPoint(line2, line1[0])) &&\n (lineContainsPoint(line1, line2[1]) || lineContainsPoint(line2, line1[1]))\n );\n};\n\n/**\n * Checks whether the given line shares at least one point with the given rectangle.\n * @public\n * @param line A line.\n * @param rectangle A rectangle.\n * @returns `true` if the line intersects with the rectangle; `false` otherwise.\n */\nexport const lineIntersectsRectangle = (\n line: Line,\n rectangle: Rectangle\n): boolean => {\n // first corner of the rectangle\n const point1: Point = rectangle[0];\n // second corner of the rectangle\n const point2: Point = [rectangle[0][0], rectangle[1][1]];\n // third corner of the rectangle\n const point3: Point = rectangle[1];\n // fourth corner of the rectangle\n const point4: Point = [rectangle[1][0], rectangle[0][1]];\n return (\n linesIntersect(line, [point1, point2]) ||\n linesIntersect(line, [point2, point3]) ||\n linesIntersect(line, [point3, point4]) ||\n linesIntersect(line, [point4, point1])\n );\n};\n","/**\n * An enumeration of possible closed shapes.\n * @public\n */\nexport enum ClosedShape {\n /**\n * An ellipse shape.\n * @public\n */\n Ellipse = 'ellipse',\n /**\n * A nonexistent shape.\n * @public\n */\n Empty = 'empty',\n /**\n * A folder-like shape.\n * @public\n */\n Folder = 'folder',\n /**\n * An hexagon shape.\n * @public\n */\n Hexagon = 'hexagon',\n /**\n * An octagon shape.\n * @public\n */\n Octagon = 'octagon',\n /**\n * A shape delimited by curves with a fixed radius, with differences in dimensions supplemented by straight lines.\n * @public\n */\n Pill = 'pill',\n /**\n * A rectangle shape.\n * @public\n */\n Rectangle = 'rectangle',\n /**\n * A rhombus shape.\n * @public\n */\n Rhombus = 'rhombus',\n /**\n * A rectangle shape with rounded corners.\n * @public\n */\n RoundedRectangle = 'rounded-rectangle',\n /**\n * A sticky note-like shape.\n * @public\n */\n StickyNote = 'sticky-note'\n}\n\n/**\n * Get the SVG path of the correspondign closed shape, starting at the given x and y coordinates, with the given width and height.\n * @private\n */\nexport const generalClosedPath = (\n shape: ClosedShape,\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n switch (shape) {\n case ClosedShape.Ellipse:\n return ellipsePath(x, y, width, height);\n case ClosedShape.Empty:\n return emptyPath();\n case ClosedShape.Folder:\n return folderPath(x, y, width, height);\n case ClosedShape.Hexagon:\n return hexagonPath(x, y, width, height);\n case ClosedShape.Octagon:\n return octagonPath(x, y, width, height);\n case ClosedShape.Pill:\n return pillPath(x, y, width, height);\n case ClosedShape.Rectangle:\n return rectanglePath(x, y, width, height);\n case ClosedShape.Rhombus:\n return rhombusPath(x, y, width, height);\n case ClosedShape.RoundedRectangle:\n return roundedRectanglePath(x, y, width, height);\n case ClosedShape.StickyNote:\n return stickyNotePath(x, y, width, height);\n default:\n return rectanglePath(x, y, width, height);\n }\n};\n\n/**\n * Generates an ellipse SVG path.\n * @see ClosedShape\n * @private\n */\nexport const ellipsePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 2} ${y} A ${width / 2} ${height / 2} 0 0 0 ${\n x + width / 2\n } ${y + height} A ${width / 2} ${height / 2} 0 1 0 ${x + width / 2} ${y} Z`;\n};\n\n/**\n * Generates an empty SVG path.\n * @see ClosedShape\n * @private\n */\nexport const emptyPath = (): string => {\n return 'Z';\n};\n\n/**\n * Generates a folder SVG path.\n * @see ClosedShape\n * @private\n */\nexport const folderPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + width / 3} ${y} L ${x + width / 2} ${\n y + height / 6\n } L ${x + width} ${y + height / 6} L ${x + width} ${y + height} L ${x} ${\n y + height\n } Z`;\n};\n\n/**\n * Generates an hexagon SVG path.\n * @see ClosedShape\n * @private\n */\nexport const hexagonPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} L ${\n x + width\n } ${y + height / 2} L ${x + (3 * width) / 4} ${y + height} L ${\n x + width / 4\n } ${y + height} L ${x} ${y + height / 2} Z`;\n};\n\n/**\n * Generates an octagon SVG path.\n * @see ClosedShape\n * @private\n */\nexport const octagonPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} L ${\n x + width\n } ${y + height / 4} L ${x + width} ${y + (3 * height) / 4} L ${\n x + (3 * width) / 4\n } ${y + height} L ${x + width / 4} ${y + height} L ${x} ${\n y + (3 * height) / 4\n } L ${x} ${y + height / 4} L ${x + width / 4} ${y} Z`;\n};\n\n/**\n * Generates a pill SVG path.\n * @see ClosedShape\n * @private\n */\nexport const pillPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n if (height < width) {\n return `M ${x + height / 2} ${y} L ${x + width - height / 2} ${y} A ${\n height / 2\n } ${height / 2} 0 0 1 ${x + width} ${y + height / 2} A ${height / 2} ${\n height / 2\n } 0 0 1 ${x + width - height / 2} ${y + height} L ${x + height / 2} ${\n y + height\n } A ${height / 2} ${height / 2} 0 0 1 ${x} ${y + height / 2} A ${\n height / 2\n } ${height / 2} 0 0 1 ${x + height / 2} ${y} Z`;\n } else if (height > width) {\n return `M ${x} ${y + width / 2} L ${x} ${y + height - width / 2} A ${\n width / 2\n } ${width / 2} 0 0 0 ${x + width / 2} ${y + height} A ${width / 2} ${\n width / 2\n } 0 0 0 ${x + width} ${y + height - width / 2} L ${x + width} ${\n y + width / 2\n } A ${width / 2} ${width / 2} 0 0 0 ${x + width / 2} ${y} A ${width / 2} ${\n width / 2\n } 0 0 0 ${x} ${y + width / 2} Z`;\n } else {\n return ellipsePath(x, y, width, height);\n }\n};\n\n/**\n * Generates a rectangle SVG path.\n * @see ClosedShape\n * @private\n */\nexport const rectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + width} ${y} L ${x + width} ${y + height} L ${x} ${\n y + height\n } Z`;\n};\n\n/**\n * Generates a rhombus SVG path.\n * @see ClosedShape\n * @private\n */\nexport const rhombusPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 2} ${y} L ${x + width} ${y + height / 2} L ${\n x + width / 2\n } ${y + height} L ${x} ${y + height / 2} Z`;\n};\n\n/**\n * Generates a rounded rectangle SVG path.\n * @see ClosedShape\n * @private\n */\nexport const roundedRectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} A ${\n width / 4\n } ${height / 4} 0 0 1 ${x + width} ${y + height / 4} L ${x + width} ${\n y + (3 * height) / 4\n } A ${width / 4} ${height / 4} 0 0 1 ${x + (3 * width) / 4} ${y + height} L ${\n x + width / 4\n } ${y + height} A ${width / 4} ${height / 4} 0 0 1 ${x} ${\n y + (3 * height) / 4\n } L ${x} ${y + height / 4} A ${width / 4} ${height / 4} 0 0 1 ${\n x + width / 4\n } ${y} Z`;\n};\n\n/**\n * Generates a sticky note SVG path.\n * @see ClosedShape\n * @private\n */\nexport const stickyNotePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + (3 * width) / 4} ${y} L ${x + (3 * width) / 4} ${\n y + height / 4\n } L ${x + (3 * width) / 4} ${y} L ${x + width} ${y + height / 4} L ${\n x + (3 * width) / 4\n } ${y + height / 4} L ${x + width} ${y + height / 4} L ${x + width} ${\n y + height\n } L ${x} ${y + height} Z`;\n};\n","import { Point, translatePoint } from '../../util/canvas-util';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { ClosedShape } from '../../util/shape';\r\nimport { Side } from '../../util/svg-util';\r\nimport { NodeShapedLook, SectionConfig } from './diagram-config';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport { DiagramDecorator } from './diagram-decorator';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramPort } from './diagram-port';\r\n\r\n/**\r\n * Default values of the look of a diagram section.\r\n * @see DIAGRAM_SECTION_DEFAULTS\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_LOOK_DEFAULTS: NodeShapedLook = {\r\n lookType: 'shaped-look',\r\n shape: ClosedShape.Rectangle,\r\n fillColor: '#FFFFFF',\r\n borderColor: '#000000',\r\n selectedFillColor: '#FFFFFF',\r\n selectedBorderColor: '#000000'\r\n};\r\n\r\n/**\r\n * Default values of the parameters of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULTS = {\r\n label: null,\r\n ports: [],\r\n look: DIAGRAM_SECTION_LOOK_DEFAULTS,\r\n priority: DEFAULT_PRIORITY\r\n};\r\n\r\n/**\r\n * Default value of the default width of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULT_WIDTH = 1;\r\n/**\r\n * Default value of the default height of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULT_HEIGHT = 1;\r\n/**\r\n * Default value of the minimum width of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_MIN_WIDTH = 1;\r\n/**\r\n * Default value of the minimum height of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_MIN_HEIGHT = 1;\r\n\r\nexport type DiagramSectionGeometry = {\r\n readonly coords: Point;\r\n readonly width: number;\r\n readonly height: number;\r\n};\r\n\r\n/**\r\n * A section of a node which can have connections and display a property of the node.\r\n * @see DiagramConnection\r\n * @see DiagramNode\r\n * @see DiagramPort\r\n * @public\r\n */\r\nexport class DiagramSection extends DiagramElement {\r\n /**\r\n * Node that this section belongs to.\r\n * @public\r\n */\r\n node?: DiagramNode;\r\n /**\r\n * X index of this section in the parent node's section array.\r\n */\r\n indexXInNode: number;\r\n /**\r\n * Y index of this section in the parent node's section array.\r\n */\r\n indexYInNode: number;\r\n /**\r\n * Label of this section.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Ports of this section.\r\n * @public\r\n */\r\n ports: DiagramPort[] = [];\r\n /**\r\n * Decorators of this section.\r\n * @public\r\n */\r\n decorators: DiagramDecorator[] = [];\r\n /**\r\n * Coordinates of the top left corner of this section.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this section along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this section along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n\r\n /**\r\n * Name of this section. Alias for this section's label's text.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.label?.text || '';\r\n }\r\n set name(name: string) {\r\n if (this.label) {\r\n this.label.text = name;\r\n }\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n node: DiagramNode | undefined,\r\n indexXInNode: number,\r\n indexYInNode: number,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n id: string\r\n ) {\r\n if (model.sections.get(id) !== undefined) {\r\n throw new Error(`DiagramSection with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.node = node;\r\n this.indexXInNode = indexXInNode;\r\n this.indexYInNode = indexYInNode;\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n }\r\n\r\n get removed() {\r\n return this.selfRemoved || (this.node !== undefined && this.node.removed);\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateSectionsInView(this.id);\r\n }\r\n\r\n getConfig(): SectionConfig | undefined {\r\n return this.node?.type?.sectionGrid?.sections?.[this.indexYInNode]?.[\r\n this.indexXInNode\r\n ];\r\n }\r\n\r\n getMinWidth(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.minWidths?.[this.indexXInNode] ||\r\n DIAGRAM_SECTION_MIN_WIDTH\r\n );\r\n }\r\n\r\n getMinHeight(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.minHeights?.[this.indexYInNode] ||\r\n DIAGRAM_SECTION_MIN_HEIGHT\r\n );\r\n }\r\n\r\n getPriority(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.sections?.[this.indexYInNode]?.[\r\n this.indexXInNode\r\n ]?.priority || DIAGRAM_SECTION_DEFAULTS.priority\r\n );\r\n }\r\n\r\n /**\r\n * Get the port of this section which is closest to the given coordinates.\r\n * @param coords A point in the diagram.\r\n * @returns The port of this section closest to the given coordinates, `undefined` if this section has no ports.\r\n */\r\n getClosestPortToPoint(coords: Point): DiagramPort | undefined {\r\n if (this.ports.length === 0) {\r\n return undefined;\r\n } else if (this.ports.length === 1) {\r\n return this.ports[1];\r\n } else {\r\n const distanceToPorts = this.ports.map((p) => p.distanceTo(coords));\r\n const indexOfClosestPort = distanceToPorts.indexOf(\r\n Math.min(...distanceToPorts)\r\n );\r\n const closestPort = this.ports[indexOfClosestPort];\r\n return closestPort;\r\n }\r\n }\r\n\r\n /**\r\n * Get all incoming connections of all ports of this section.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getIncomingConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n result.push(incomingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all outgoing connections of all ports of this section.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getOutgoingConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all connections of all ports of this section.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n result.push(incomingConnection);\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Change the coordinates of this section to the given coordinates and move its ports and labels correspondingly.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n this.setGeometry({\r\n coords,\r\n width: this.width,\r\n height: this.height\r\n });\r\n }\r\n\r\n /**\r\n * Change the dimensions of this section in the given direction by the given amount.\r\n * @public\r\n * @param direction A direction.\r\n * @param distance A distance.\r\n */\r\n stretch(direction: Side, distance: number): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n let newCoordsX: Point;\r\n let newCoordsY: Point;\r\n switch (direction) {\r\n case Side.Left:\r\n newCoordsX = [oldCoordsX[0] - distance, oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.getMinWidth()) {\r\n newCoordsX[0] = newCoordsX[1] - this.getMinWidth();\r\n }\r\n break;\r\n case Side.Top:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0] - distance, oldCoordsY[1]];\r\n if (newCoordsY[1] - newCoordsY[0] < this.getMinHeight()) {\r\n newCoordsY[0] = newCoordsY[1] - this.getMinHeight();\r\n }\r\n break;\r\n case Side.Right:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1] + distance];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.getMinWidth()) {\r\n newCoordsX[1] = newCoordsX[0] + this.getMinWidth();\r\n }\r\n break;\r\n case Side.Bottom:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1] + distance];\r\n if (newCoordsY[1] - newCoordsY[0] < this.getMinHeight()) {\r\n newCoordsY[1] = newCoordsY[0] + this.getMinHeight();\r\n }\r\n break;\r\n }\r\n\r\n this.setGeometry({\r\n coords: [newCoordsX[0], newCoordsY[0]],\r\n width: newCoordsX[1] - newCoordsX[0],\r\n height: newCoordsY[1] - newCoordsY[0]\r\n });\r\n }\r\n\r\n /**\r\n * Returns the current values of all geometric properties (coordinates and dimensions) of this section.\r\n * @public\r\n */\r\n getGeometry(): DiagramSectionGeometry {\r\n return {\r\n coords: [...this.coords],\r\n width: this.width,\r\n height: this.height\r\n };\r\n }\r\n\r\n /**\r\n * Sets all geometric properties (coordinates and dimensions) of this section.\r\n * @public\r\n */\r\n setGeometry(geometry: DiagramSectionGeometry): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n\r\n this.coords = [...geometry.coords];\r\n this.width = geometry.width;\r\n this.height = geometry.height;\r\n\r\n const newCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const newCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n\r\n // Move ports to match the new coords.\r\n for (const port of this.ports) {\r\n port.move(\r\n translatePoint(\r\n port.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n\r\n // Set label's dimensions as a function of ours.\r\n if (this.label) {\r\n this.label.coords = [\r\n this.coords[0] + (this.getConfig()?.label?.margin || 0),\r\n this.coords[1] + (this.getConfig()?.label?.margin || 0)\r\n ];\r\n (this.label.width =\r\n this.width - (this.getConfig()?.label?.margin || 0) * 2),\r\n (this.label.height =\r\n this.height - (this.getConfig()?.label?.margin || 0) * 2);\r\n this.label.updateInView();\r\n }\r\n\r\n // Move decorators to match the new coords.\r\n for (const decorator of this.decorators) {\r\n decorator.move(\r\n translatePoint(\r\n decorator.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n\r\n // Update canvas.\r\n this.getConnections().forEach((c) => c.tighten());\r\n this.updateInView();\r\n }\r\n}\r\n\r\nexport class DiagramSectionSet extends DiagramEntitySet<DiagramSection> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of sections for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new section and add it to this set. This method is normally called when instancing an element with a section and it is rarely called by itself.\r\n * @private\r\n */\r\n new(\r\n node: DiagramNode,\r\n indexXInNode: number,\r\n indexYInNode: number,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n id: string\r\n ): DiagramSection {\r\n const section = new DiagramSection(\r\n this.model,\r\n node,\r\n indexXInNode,\r\n indexYInNode,\r\n coords,\r\n width,\r\n height,\r\n id\r\n );\r\n super.add(section);\r\n section.updateInView();\r\n // add this section to its node\r\n node.sections.push(section);\r\n node.updateInView();\r\n // add section ports\r\n const sectionPorts =\r\n node.type.sectionGrid?.sections?.[indexYInNode]?.[indexXInNode]?.ports;\r\n if (sectionPorts && sectionPorts.length > 0) {\r\n for (let i = 0; i < sectionPorts.length; ++i) {\r\n const portConfig = sectionPorts[i];\r\n const port = this.model.ports.new(\r\n section,\r\n [\r\n section.coords[0] + (portConfig?.coords?.[0] || 0),\r\n section.coords[1] + (portConfig?.coords?.[1] || 0)\r\n ],\r\n portConfig?.direction,\r\n `${section.id}_${i}`\r\n );\r\n if (portConfig.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...portConfig.label\r\n };\r\n let labelCoords: Point;\r\n switch (port.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n port.coords[0] + labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = port.coords;\r\n }\r\n this.model.fields.new(\r\n port,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n }\r\n }\r\n }\r\n // add section label\r\n const sectionLabel =\r\n node.type.sectionGrid?.sections?.[indexYInNode]?.[indexXInNode]?.label;\r\n if (sectionLabel) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...sectionLabel\r\n };\r\n this.model.fields.new(\r\n section,\r\n [\r\n section.coords[0] + labelConfiguration.margin,\r\n section.coords[1] + labelConfiguration.margin\r\n ],\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n section.width - labelConfiguration.margin * 2,\r\n section.height - labelConfiguration.margin * 2,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n }\r\n return section;\r\n }\r\n\r\n override remove(id: string) {\r\n const section = this.get(id);\r\n if (section) {\r\n // remove all ports\r\n while (section.ports.length > 0) {\r\n this.model.ports.remove(section.ports[0].id);\r\n }\r\n // remove label\r\n if (section.label) {\r\n this.model.fields.remove(section.label.id);\r\n }\r\n // remove from root element\r\n if (section.node) {\r\n removeIfExists(section.node.sections, section);\r\n }\r\n // remove from set of sections\r\n super.remove(id);\r\n // remove from canvas\r\n section.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point, translatePoint } from '../../util/canvas-util';\r\nimport { ClosedShape } from '../../util/shape';\r\nimport { Side } from '../../util/svg-util';\r\nimport { CollabTimestamp } from './collab/primitives';\r\nimport {\r\n FieldConfig,\r\n NodeImageLook,\r\n NodeShapedLook,\r\n NodeStretchableImageLook,\r\n NodeTypeConfig,\r\n PortConfig,\r\n SectionGridConfig\r\n} from './diagram-config';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport { DiagramDecorator } from './diagram-decorator';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntity,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { PropertySet, ValueSet } from './diagram-property';\r\nimport {\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT,\r\n DIAGRAM_SECTION_DEFAULT_WIDTH,\r\n DiagramSection,\r\n DiagramSectionGeometry\r\n} from './diagram-section';\r\n\r\n/**\r\n * Default values of the look of a diagram node.\r\n * @see DIAGRAM_NODE_TYPE_DEFAULTS\r\n * @private\r\n */\r\nexport const DIAGRAM_NODE_LOOK_DEFAULTS: NodeShapedLook = {\r\n lookType: 'shaped-look',\r\n shape: ClosedShape.Rectangle,\r\n fillColor: '#FFFFFF',\r\n borderColor: '#000000',\r\n selectedFillColor: '#FFFFFF',\r\n selectedBorderColor: '#000000'\r\n};\r\n\r\n/**\r\n * Default values of the parameters of a diagram node.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport const DIAGRAM_NODE_TYPE_DEFAULTS = {\r\n name: '',\r\n defaultWidth: 1,\r\n defaultHeight: 1,\r\n minWidth: 1,\r\n minHeight: 1,\r\n resizableX: false,\r\n resizableY: false,\r\n label: null,\r\n ports: [],\r\n sectionGrid: null,\r\n look: DIAGRAM_NODE_LOOK_DEFAULTS,\r\n isUnique: false,\r\n priority: DEFAULT_PRIORITY,\r\n properties: []\r\n};\r\n\r\nexport type DiagramNodeGeometry = {\r\n readonly coords: Point;\r\n readonly width: number;\r\n readonly height: number;\r\n readonly sections: {\r\n [sectionId: string]: DiagramSectionGeometry;\r\n };\r\n};\r\n\r\n/**\r\n * A node type, which holds properties that nodes of this type share in common.\r\n * @see NodeTypeConfig\r\n * @public\r\n */\r\nexport class DiagramNodeType implements DiagramEntity {\r\n id: string;\r\n name: string;\r\n defaultWidth: number;\r\n defaultHeight: number;\r\n minWidth: number;\r\n minHeight: number;\r\n resizableX: boolean;\r\n resizableY: boolean;\r\n label: FieldConfig | null;\r\n ports: PortConfig[];\r\n sectionGrid: SectionGridConfig | null;\r\n look: NodeShapedLook | NodeImageLook | NodeStretchableImageLook;\r\n isUnique: boolean;\r\n priority: number;\r\n propertySet: PropertySet;\r\n\r\n constructor(options: NodeTypeConfig) {\r\n const values = {\r\n ...DIAGRAM_NODE_TYPE_DEFAULTS,\r\n ...options\r\n };\r\n this.id = values.id;\r\n this.name = values.name;\r\n this.defaultWidth = values.defaultWidth;\r\n this.defaultHeight = values.defaultHeight;\r\n this.minWidth = values.minWidth;\r\n this.minHeight = values.minHeight;\r\n this.resizableX = values.resizableX;\r\n this.resizableY = values.resizableY;\r\n this.label = values.label;\r\n this.ports = values.ports;\r\n this.sectionGrid = values.sectionGrid;\r\n this.look = values.look;\r\n this.isUnique = values.isUnique;\r\n this.priority = values.priority;\r\n this.propertySet = new PropertySet(options?.properties || []);\r\n }\r\n}\r\n\r\n/**\r\n * A node, the most basic element of a diagram, which can have connections to other nodes through its ports or be divided into sections.\r\n * @see DiagramConnection\r\n * @see DiagramPort\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramNode extends DiagramElement {\r\n type: DiagramNodeType;\r\n /**\r\n * Additional properties of this node.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n /**\r\n * Variable used to preserve the original data of a node when importing from a different format.\r\n * @public\r\n */\r\n originalData: unknown;\r\n /**\r\n * Label of this node.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Sections of this node.\r\n * @public\r\n */\r\n sections: DiagramSection[] = [];\r\n /**\r\n * Ports of this node.\r\n * @public\r\n */\r\n ports: DiagramPort[] = [];\r\n /**\r\n * Decorators of this node.\r\n * @public\r\n */\r\n decorators: DiagramDecorator[] = [];\r\n /**\r\n * Coordinates of the top left corner of this node.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Collaborative timestamp for SetGeometryCollabActions.\r\n * @public\r\n */\r\n geometryTimestamp: CollabTimestamp | null = null;\r\n /**\r\n * Dimension of this node along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this node along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n\r\n /**\r\n * Name of this node. Alias for this node's label's text.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.label?.text || '';\r\n }\r\n set name(name: string) {\r\n if (this.label) {\r\n this.label.text = name;\r\n }\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n type: DiagramNodeType,\r\n coords: Point = [0, 0],\r\n id: string\r\n ) {\r\n if (model.nodes.get(id) !== undefined) {\r\n throw new Error(`DiagramNode with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.type = type;\r\n this.valueSet = new ValueSet(type.propertySet, this);\r\n this.originalData = {};\r\n this.coords = coords;\r\n this.width = type.defaultWidth;\r\n this.height = type.defaultHeight;\r\n }\r\n\r\n get removed() {\r\n return this.selfRemoved;\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateNodesInView(this.id);\r\n }\r\n\r\n getPriority(): number {\r\n return this.type.priority;\r\n }\r\n\r\n /**\r\n * Get the port of this node which is closest to the given coordinates.\r\n * @param coords A point in the diagram.\r\n * @returns The port of this node closest to the given coordinates, `undefined` if this node has no ports.\r\n */\r\n getClosestPortToPoint(coords: Point): DiagramPort | undefined {\r\n if (this.ports.length === 0) {\r\n return undefined;\r\n } else if (this.ports.length === 1) {\r\n return this.ports[1];\r\n } else {\r\n const distanceToPorts = this.ports.map((p) => p.distanceTo(coords));\r\n const indexOfClosestPort = distanceToPorts.indexOf(\r\n Math.min(...distanceToPorts)\r\n );\r\n const closestPort = this.ports[indexOfClosestPort];\r\n return closestPort;\r\n }\r\n }\r\n\r\n /**\r\n * Get all incoming connections of all ports of this node, not including incoming connections of sections of this node.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getIncomingConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n result.push(incomingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all outgoing connections of all ports of this node, not including outgoing connections of sections of this node.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getOutgoingConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all connections of all ports of this node, not including connections of sections of this node.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getConnections(): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n result.push(incomingConnection);\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all nodes that have a direct connection to this node, not including nodes that have a direct connection to sections of this node.\r\n * @public\r\n * @returns A list of nodes.\r\n */\r\n getAdjacentNodes(): DiagramNode[] {\r\n const result: DiagramNode[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n const otherNode = incomingConnection.start?.getNode();\r\n if (otherNode) {\r\n result.push(otherNode);\r\n }\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n const otherNode = outgoingConnection.end?.getNode();\r\n if (otherNode) {\r\n result.push(otherNode);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Change the coordinates of this node to the given coordinates and move its sections, ports and labels correspondingly.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n const coordDifferences = [\r\n coords[0] - this.coords[0],\r\n coords[1] - this.coords[1]\r\n ];\r\n for (const section of this.sections) {\r\n section.move([\r\n section.coords[0] + coordDifferences[0],\r\n section.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n\r\n this.setGeometry({\r\n coords,\r\n width: this.width,\r\n height: this.height,\r\n // We already moved the sections above - skip changing them in setDimensions.\r\n sections: {}\r\n });\r\n }\r\n\r\n /**\r\n * Change the dimensions of this node in the given direction by the given amount without changing the dimensions of the sections of this node.\r\n * @public\r\n * @param direction A direction.\r\n * @param distance A distance.\r\n */\r\n stretch(direction: Side, distance: number): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n let newCoordsX: Point;\r\n let newCoordsY: Point;\r\n switch (direction) {\r\n case Side.Left:\r\n newCoordsX = [oldCoordsX[0] - distance, oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.type.minWidth) {\r\n newCoordsX[0] = newCoordsX[1] - this.type.minWidth;\r\n }\r\n break;\r\n case Side.Top:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0] - distance, oldCoordsY[1]];\r\n if (newCoordsY[1] - newCoordsY[0] < this.type.minHeight) {\r\n newCoordsY[0] = newCoordsY[1] - this.type.minHeight;\r\n }\r\n break;\r\n case Side.Right:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1] + distance];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.type.minWidth) {\r\n newCoordsX[1] = newCoordsX[0] + this.type.minWidth;\r\n }\r\n break;\r\n case Side.Bottom:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1] + distance];\r\n if (newCoordsY[1] - newCoordsY[0] < this.type.minHeight) {\r\n newCoordsY[1] = newCoordsY[0] + this.type.minHeight;\r\n }\r\n break;\r\n }\r\n\r\n this.setGeometry({\r\n coords: [newCoordsX[0], newCoordsY[0]],\r\n width: newCoordsX[1] - newCoordsX[0],\r\n height: newCoordsY[1] - newCoordsY[0],\r\n // we ignore this.sections, the stretching of a node with sections is handled in the stretchSections method\r\n sections: {}\r\n });\r\n }\r\n\r\n /**\r\n * Change the dimensions of this node and its sections in the given direction by the given amount, with the sections of the given index being stretched.\r\n * @public\r\n * @param direction A direction.\r\n * @param distance A distance.\r\n * @param indexX A section index.\r\n * @param indexY A section index.\r\n */\r\n stretchSections(\r\n direction: Side,\r\n distance: number,\r\n indexX: number,\r\n indexY: number\r\n ) {\r\n let minimumStretchableDistance = Number.NEGATIVE_INFINITY;\r\n switch (direction) {\r\n case Side.Bottom:\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinHeight() - section.height\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexYInNode > indexY) {\r\n section.move([section.coords[0], section.coords[1] + distance]);\r\n }\r\n }\r\n break;\r\n case Side.Right:\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinWidth() - section.width\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexXInNode > indexX) {\r\n section.move([section.coords[0] + distance, section.coords[1]]);\r\n }\r\n }\r\n break;\r\n case Side.Top:\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinHeight() - section.height\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexYInNode < indexY) {\r\n section.move([section.coords[0], section.coords[1] - distance]);\r\n }\r\n }\r\n break;\r\n case Side.Left:\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinWidth() - section.width\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexXInNode < indexX) {\r\n section.move([section.coords[0] - distance, section.coords[1]]);\r\n }\r\n }\r\n break;\r\n }\r\n this.stretch(direction, distance);\r\n }\r\n\r\n /**\r\n * Returns the current values of all geometric properties (coordinates and dimensions) of this node and its sections.\r\n * @public\r\n */\r\n getGeometry(): DiagramNodeGeometry {\r\n const sections: { [sectionId: string]: DiagramSectionGeometry } = {};\r\n for (const section of this.sections) {\r\n sections[section.id] = section.getGeometry();\r\n }\r\n return {\r\n coords: [...this.coords],\r\n width: this.width,\r\n height: this.height,\r\n sections\r\n };\r\n }\r\n\r\n /**\r\n * Sets all geometric properties (coordinates and dimensions) of this node and its sections.\r\n * @public\r\n */\r\n setGeometry(geometry: DiagramNodeGeometry): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n\r\n this.coords = [...geometry.coords];\r\n this.width = geometry.width;\r\n this.height = geometry.height;\r\n\r\n const newCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const newCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n\r\n // Update sections, if supplied.\r\n for (const section of this.sections) {\r\n const sectionGeometry = geometry.sections[section.id];\r\n if (sectionGeometry) {\r\n section.setGeometry(sectionGeometry);\r\n }\r\n }\r\n\r\n // Move ports to match the new coords.\r\n for (const port of this.ports) {\r\n port.move(\r\n translatePoint(\r\n port.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n\r\n // Set label's dimensions as a function of ours.\r\n if (this.label) {\r\n this.label.coords = [\r\n this.coords[0] + (this.type.label?.margin || 0),\r\n this.coords[1] + (this.type.label?.margin || 0)\r\n ];\r\n (this.label.width = this.width - (this.type.label?.margin || 0) * 2),\r\n (this.label.height = this.height - (this.type.label?.margin || 0) * 2);\r\n this.label.updateInView();\r\n }\r\n\r\n // Move decorators to match the new coords.\r\n for (const decorator of this.decorators) {\r\n decorator.move(\r\n translatePoint(\r\n decorator.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n\r\n // Update canvas.\r\n this.getConnections().forEach((c) => c.tighten());\r\n this.updateInView();\r\n }\r\n}\r\n\r\nexport class DiagramNodeSet extends DiagramEntitySet<DiagramNode> {\r\n private model: DiagramModel;\r\n /**\r\n * Set of the possible types of node that the nodes of this set can have.\r\n * @public\r\n */\r\n types = new DiagramEntitySet<DiagramNodeType>();\r\n\r\n /**\r\n * Instance a set of nodes for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new node and add it to this set.\r\n * @public\r\n * @param type The type of the node given as either the type itself or the id of the type.\r\n * @param coords The coordinates of the top left corner of the node in the diagram.\r\n * @param id The id of the node.\r\n * @returns The instanced node.\r\n */\r\n new(type: DiagramNodeType | string, coords: Point, id: string): DiagramNode {\r\n let nodeType: DiagramNodeType;\r\n if (type instanceof DiagramNodeType) {\r\n nodeType = type;\r\n } else {\r\n const foundNodeType = this.types.get(type);\r\n if (foundNodeType === undefined) {\r\n throw new TypeError(`Node type with id '${type}' could not be found.`);\r\n }\r\n nodeType = foundNodeType;\r\n }\r\n\r\n const node = new DiagramNode(this.model, nodeType, coords, id);\r\n super.add(node);\r\n node.updateInView();\r\n // add node sections\r\n if (nodeType.sectionGrid !== null) {\r\n // create sections\r\n let heightAccumulator =\r\n node.coords[1] + (nodeType.sectionGrid.margin || 0);\r\n for (let j = 0; j < nodeType.sectionGrid.sections.length; ++j) {\r\n let widthAccumulator =\r\n node.coords[0] + (nodeType.sectionGrid.margin || 0);\r\n for (let i = 0; i < nodeType.sectionGrid.sections[j].length; ++i) {\r\n this.model.sections.new(\r\n node,\r\n i,\r\n j,\r\n [widthAccumulator, heightAccumulator],\r\n nodeType.sectionGrid.defaultWidths?.[i] ||\r\n DIAGRAM_SECTION_DEFAULT_WIDTH,\r\n nodeType.sectionGrid.defaultHeights?.[j] ||\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT,\r\n `${node.id}_${j}_${i}`\r\n );\r\n widthAccumulator +=\r\n (nodeType.sectionGrid.defaultWidths?.[i] ||\r\n DIAGRAM_SECTION_DEFAULT_WIDTH) +\r\n (nodeType.sectionGrid.margin || 0);\r\n }\r\n heightAccumulator +=\r\n (nodeType.sectionGrid.defaultHeights?.[j] ||\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT) +\r\n (nodeType.sectionGrid.margin || 0);\r\n }\r\n }\r\n // add node ports\r\n if (nodeType.ports.length > 0) {\r\n for (let i = 0; i < nodeType.ports.length; ++i) {\r\n const portConfig = nodeType.ports[i];\r\n const port = this.model.ports.new(\r\n node,\r\n [\r\n node.coords[0] + portConfig.coords[0],\r\n node.coords[1] + portConfig.coords[1]\r\n ],\r\n portConfig.direction,\r\n `${node.id}_${i}`\r\n );\r\n if (portConfig.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...portConfig.label\r\n };\r\n let labelCoords: Point;\r\n switch (port.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n port.coords[0] + labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = port.coords;\r\n }\r\n this.model.fields.new(\r\n port,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n }\r\n }\r\n }\r\n // add node label\r\n if (nodeType.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...nodeType.label\r\n };\r\n this.model.fields.new(\r\n node,\r\n [\r\n node.coords[0] + labelConfiguration.margin,\r\n node.coords[1] + labelConfiguration.margin\r\n ],\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n node.width - labelConfiguration.margin * 2,\r\n node.height - labelConfiguration.margin * 2,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n }\r\n node.valueSet.resetValues();\r\n node.model.canvas?.fitNodeInView(node.id);\r\n return node;\r\n }\r\n\r\n override remove(id: string) {\r\n const node = this.get(id);\r\n if (node) {\r\n // remove all sections\r\n while (node.sections.length > 0) {\r\n this.model.sections.remove(node.sections[0].id);\r\n }\r\n // remove all ports\r\n while (node.ports.length > 0) {\r\n this.model.ports.remove(node.ports[0].id);\r\n }\r\n // remove all decorators\r\n while (node.decorators.length > 0) {\r\n this.model.decorators.remove(node.decorators[0].id);\r\n }\r\n // remove label\r\n if (node.label) {\r\n this.model.fields.remove(node.label.id);\r\n }\r\n // remove from set of nodes\r\n super.remove(id);\r\n // remove from canvas\r\n node.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point, distanceBetweenPoints } from '../../util/canvas-util';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { Side } from '../../util/svg-util';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * Default values of the parameters of a diagram port.\r\n * @see DiagramPort\r\n * @private\r\n */\r\nexport const DIAGRAM_PORT_DEFAULTS = {\r\n radius: 12,\r\n highlightedColor: 'cyan',\r\n selectedColor: 'violet'\r\n};\r\n\r\n/**\r\n * A port which is part of a node or section and at which connections can start or end.\r\n * @see DiagramConnection\r\n * @see DiagramNode\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramPort extends DiagramElement {\r\n /**\r\n * Element that this port belongs to.\r\n * @public\r\n */\r\n rootElement?: DiagramNode | DiagramSection;\r\n /**\r\n * Label of this port.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Direction of the connections of this port at the coordinates of this port.\r\n * @public\r\n */\r\n direction: Side;\r\n /**\r\n * Coordinates of this port.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Connections that start at this port.\r\n * @public\r\n */\r\n outgoingConnections: DiagramConnection[] = [];\r\n /**\r\n * Connections that end at this port.\r\n * @public\r\n */\r\n incomingConnections: DiagramConnection[] = [];\r\n\r\n constructor(\r\n model: DiagramModel,\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n direction: Side,\r\n id: string\r\n ) {\r\n if (model.ports.get(id) !== undefined) {\r\n throw new Error(`DiagramPort with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.rootElement = rootElement;\r\n this.coords = coords;\r\n this.direction = direction;\r\n }\r\n\r\n get removed() {\r\n return (\r\n this.selfRemoved ||\r\n (this.rootElement !== undefined && this.rootElement.removed)\r\n );\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updatePortsInView(this.id);\r\n }\r\n\r\n /**\r\n * Add a connection to this port's list of outgoing connections.\r\n * @public\r\n * @param connection A connection.\r\n */\r\n startConnection(connection: DiagramConnection) {\r\n this.outgoingConnections.push(connection);\r\n }\r\n\r\n /**\r\n * Add a connection to this port's list of incoming connections.\r\n * @public\r\n * @param connection A connection.\r\n */\r\n finishConnection(connection: DiagramConnection) {\r\n this.incomingConnections.push(connection);\r\n }\r\n\r\n /**\r\n * Get the root node of this port, which is either its rootElement if it's a node or it's rootElement's node if it's a section.\r\n * @public\r\n * @returns A node if it could be found, `undefined` otherwise.\r\n */\r\n getNode(): DiagramNode | undefined {\r\n if (this.rootElement instanceof DiagramNode) {\r\n return this.rootElement;\r\n } else if (this.rootElement instanceof DiagramSection) {\r\n return this.rootElement.node;\r\n }\r\n return undefined;\r\n }\r\n\r\n getPriority(): number {\r\n return this.rootElement?.getPriority() || DEFAULT_PRIORITY;\r\n }\r\n\r\n /**\r\n * Change the coordinates of this port to the given coordinates and move its labels correspondingly.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n const coordDifferences = [\r\n coords[0] - this.coords[0],\r\n coords[1] - this.coords[1]\r\n ];\r\n this.coords = coords;\r\n for (const connection of this.outgoingConnections) {\r\n connection.setStart(this);\r\n }\r\n for (const connection of this.incomingConnections) {\r\n connection.setEnd(this);\r\n }\r\n if (this.label) {\r\n this.label.move([\r\n this.label.coords[0] + coordDifferences[0],\r\n this.label.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n this.updateInView();\r\n }\r\n\r\n distanceTo(coords: Point): number {\r\n return distanceBetweenPoints(this.coords, coords);\r\n }\r\n}\r\n\r\nexport class DiagramPortSet extends DiagramEntitySet<DiagramPort> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of ports for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new port and add it to this set. This method is normally called when instancing an element with a port and it is rarely called by itself.\r\n * @private\r\n */\r\n new(\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n direction: Side,\r\n id: string\r\n ): DiagramPort {\r\n const port = new DiagramPort(\r\n this.model,\r\n rootElement,\r\n coords,\r\n direction,\r\n id\r\n );\r\n super.add(port);\r\n port.updateInView();\r\n // add this port to its root element\r\n if (rootElement !== undefined) {\r\n rootElement.ports.push(port);\r\n }\r\n return port;\r\n }\r\n\r\n override remove(id: string) {\r\n const port = this.get(id);\r\n if (port) {\r\n // remove all connections\r\n while (port.outgoingConnections.length > 0) {\r\n this.model.connections.remove(port.outgoingConnections[0].id);\r\n }\r\n while (port.incomingConnections.length > 0) {\r\n this.model.connections.remove(port.incomingConnections[0].id);\r\n }\r\n // remove label\r\n if (port.label) {\r\n this.model.fields.remove(port.label.id);\r\n }\r\n // remove from root element\r\n if (\r\n port.rootElement instanceof DiagramNode ||\r\n port.rootElement instanceof DiagramSection\r\n ) {\r\n removeIfExists(port.rootElement.ports, port);\r\n }\r\n // remove from set of ports\r\n super.remove(id);\r\n // remove from canvas\r\n port.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { HorizontalAlign, VerticalAlign } from '../../util/svg-util';\r\nimport { CollabTimestamp } from './collab/primitives';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramEntitySet\r\n} from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * Default values of the parameters of a diagram field.\r\n * @see DiagramField\r\n * @private\r\n */\r\nexport const DIAGRAM_FIELD_DEFAULTS = {\r\n editable: true,\r\n fontSize: 0,\r\n margin: 0,\r\n padding: 0,\r\n fontFamily: \"'Wonder Unit Sans', sans-serif\",\r\n color: '#000000',\r\n selectedColor: '#000000',\r\n horizontalAlign: HorizontalAlign.Center,\r\n verticalAlign: VerticalAlign.Center,\r\n fit: false\r\n};\r\n\r\n/**\r\n * A field which displays text and is part of a diagram element.\r\n * @see DiagramNode\r\n * @see DiagramPort\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramField extends DiagramElement {\r\n /**\r\n * Element that this field belongs to.\r\n * @public\r\n */\r\n rootElement?: DiagramNode | DiagramSection | DiagramPort;\r\n /**\r\n * Coordinates of this field.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this field along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this field along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n /**\r\n * Font size of this field.\r\n * @public\r\n */\r\n fontSize: number;\r\n /**\r\n * Font family of this field. `null` for the default one.\r\n * @public\r\n */\r\n fontFamily: string | null;\r\n /**\r\n * Font color of this field.\r\n * @public\r\n */\r\n color: string;\r\n /**\r\n * Font color of this field when selected.\r\n * @public\r\n */\r\n selectedColor: string;\r\n /**\r\n * Horizontal alignment of the text of this field.\r\n * @public\r\n */\r\n horizontalAlign: HorizontalAlign;\r\n /**\r\n * Vertical alignment of the text of this field.\r\n * @public\r\n */\r\n verticalAlign: VerticalAlign;\r\n private _text: string;\r\n /**\r\n * Default text that this field's text resets to when empty.\r\n * @public\r\n */\r\n defaultText: string;\r\n /**\r\n * Text contents of this field.\r\n * @public\r\n */\r\n get text(): string {\r\n return this._text;\r\n }\r\n set text(value: string) {\r\n if (value.trim() === '') {\r\n value = this.defaultText;\r\n }\r\n this._text = value;\r\n this.updateInView();\r\n if (this.fit) {\r\n this.model.canvas?.fitFieldRootInView(this.id);\r\n }\r\n }\r\n /**\r\n * Collaborative timestamp for text.\r\n * @public\r\n */\r\n textTimestamp: CollabTimestamp | null = null;\r\n /**\r\n * Whether this field's text can be edited by the user.\r\n * @public\r\n */\r\n editable: boolean;\r\n /**\r\n * Whether this field's size can adapt to the size of the text.\r\n * @public\r\n */\r\n fit: boolean;\r\n\r\n constructor(\r\n model: DiagramModel,\r\n rootElement: DiagramNode | DiagramSection | DiagramPort | undefined,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n fontSize: number,\r\n fontFamily: string | null,\r\n color: string,\r\n selectedColor: string,\r\n horizontalAlign: HorizontalAlign,\r\n verticalAlign: VerticalAlign,\r\n text: string,\r\n editable: boolean,\r\n fit: boolean\r\n ) {\r\n const id = `${rootElement?.id}_field`;\r\n if (model.fields.get(id) !== undefined) {\r\n throw new Error('DiagramField for rootElement already exists');\r\n }\r\n super(model, id);\r\n this.rootElement = rootElement;\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n this.fontSize = fontSize;\r\n this.fontFamily = fontFamily;\r\n this.color = color;\r\n this.selectedColor = selectedColor;\r\n this.horizontalAlign = horizontalAlign;\r\n this.verticalAlign = verticalAlign;\r\n this.defaultText = text;\r\n this._text = text;\r\n this.editable = editable;\r\n this.fit = fit;\r\n }\r\n\r\n override select():\r\n | d3.Selection<SVGGElement, unknown, null, unknown>\r\n | undefined {\r\n return this.model.canvas\r\n ?.selectCanvasView()\r\n ?.select(`foreignObject#${this.id}`);\r\n }\r\n\r\n get removed() {\r\n return (\r\n this.selfRemoved ||\r\n (this.rootElement !== undefined && this.rootElement.removed)\r\n );\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateFieldsInView(this.id);\r\n }\r\n\r\n /**\r\n * Change the coordinates of this field to the given coordinates.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n this.coords = coords;\r\n this.updateInView();\r\n }\r\n\r\n getPriority(): number {\r\n return this.rootElement?.getPriority() || DEFAULT_PRIORITY;\r\n }\r\n}\r\n\r\nexport class DiagramFieldSet extends DiagramEntitySet<DiagramField> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of fields for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new field and add it to this set. This method is normally called when instancing an element with a field and it is rarely called by itself.\r\n * @private\r\n */\r\n new(\r\n rootElement: DiagramNode | DiagramSection | DiagramPort | undefined,\r\n coords: Point,\r\n fontSize: number,\r\n fontFamily: string | null,\r\n color: string,\r\n selectedColor: string,\r\n width: number,\r\n height: number,\r\n horizontalAlign: HorizontalAlign,\r\n verticalAlign: VerticalAlign,\r\n text: string,\r\n editable: boolean,\r\n fit: boolean\r\n ): DiagramField {\r\n const field = new DiagramField(\r\n this.model,\r\n rootElement,\r\n coords,\r\n width,\r\n height,\r\n fontSize,\r\n fontFamily,\r\n color,\r\n selectedColor,\r\n horizontalAlign,\r\n verticalAlign,\r\n text,\r\n editable,\r\n fit\r\n );\r\n super.add(field);\r\n field.updateInView();\r\n // add this field to its root element\r\n if (rootElement !== undefined) {\r\n rootElement.label = field;\r\n }\r\n return field;\r\n }\r\n\r\n override remove(id: string) {\r\n const field = this.get(id);\r\n if (field) {\r\n // remove from root element\r\n if (\r\n field.rootElement instanceof DiagramNode ||\r\n field.rootElement instanceof DiagramSection ||\r\n field.rootElement instanceof DiagramPort\r\n ) {\r\n if (field.rootElement.label === field) {\r\n field.rootElement.label = undefined;\r\n }\r\n }\r\n // remove from set of fields\r\n super.remove(id);\r\n // remove from canvas\r\n field.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point } from '../../../util/canvas-util';\r\nimport { Side } from '../../../util/svg-util';\r\nimport { CollabTimestamp } from '../collab/primitives';\r\nimport { DiagramConnection } from '../diagram-connection';\r\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from '../diagram-field';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { DiagramPort } from '../diagram-port';\r\nimport { DiagramSection } from '../diagram-section';\r\nimport { DagaConnection, DagaModel, DagaNode } from './daga-model';\r\nimport { DiagramModelImporter } from './diagram-model-importer';\r\n\r\n/**\r\n * Importer which imports a diagram from its daga model representation.\r\n * @public\r\n */\r\nexport class DagaImporter implements DiagramModelImporter<DagaModel> {\r\n import(model: DiagramModel, data: DagaModel): DiagramModel {\r\n // clear the model beforehand\r\n model.clear();\r\n\r\n if (data.id) {\r\n model.id = data.id;\r\n }\r\n model.name = data.name;\r\n model.description = data.description;\r\n model.type = data.type;\r\n model.createdAt = new Date(data.createdAt);\r\n model.updatedAt = new Date(data.updatedAt);\r\n for (const node of data.nodes || []) {\r\n this.importNode(model, node);\r\n }\r\n for (const connection of data.connections || []) {\r\n this.importConnection(model, connection);\r\n }\r\n if (data.data) {\r\n model.valueSet.setValues(data.data);\r\n }\r\n if (data.collabMeta) {\r\n model.logicalClock = data.collabMeta.logicalClock;\r\n model.valueSet.setTimestamps(data.collabMeta.dataTimestamps);\r\n }\r\n\r\n return model;\r\n }\r\n\r\n importNode(model: DiagramModel, node: DagaNode): DiagramModel {\r\n const newNodeType = model.nodes.types.get(node.type);\r\n if (newNodeType) {\r\n const newNode = new DiagramNode(model, newNodeType, node.coords, node.id);\r\n model.nodes.add(newNode);\r\n newNode.width = node.width;\r\n newNode.height = node.height;\r\n if (node.label) {\r\n // add node label\r\n if (newNodeType.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.label\r\n };\r\n const newField = new DiagramField(\r\n model,\r\n newNode,\r\n [\r\n newNode.coords[0] + labelConfiguration.margin,\r\n newNode.coords[1] + labelConfiguration.margin\r\n ],\r\n newNode.width - labelConfiguration.margin * 2,\r\n newNode.height - labelConfiguration.margin * 2,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = node.label;\r\n newNode.label = newField;\r\n model.fields.add(newField);\r\n newField.updateInView();\r\n }\r\n }\r\n for (const section of node.sections || []) {\r\n const newSection = new DiagramSection(\r\n model,\r\n newNode,\r\n section.indexXInNode,\r\n section.indexYInNode,\r\n section.coords,\r\n section.width,\r\n section.height,\r\n section.id\r\n );\r\n newNode.sections?.push(newSection);\r\n model.sections.add(newSection);\r\n if (section.label) {\r\n // add section label\r\n if (\r\n newNodeType.sectionGrid?.sections?.[section.indexYInNode]?.[\r\n section.indexXInNode\r\n ]?.label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.sectionGrid?.sections?.[section.indexYInNode]?.[\r\n section.indexXInNode\r\n ]?.label\r\n };\r\n const newField = new DiagramField(\r\n model,\r\n newSection,\r\n [\r\n newSection.coords[0] + labelConfiguration.margin,\r\n newSection.coords[1] + labelConfiguration.margin\r\n ],\r\n newSection.width - labelConfiguration.margin * 2,\r\n newSection.height - labelConfiguration.margin * 2,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = section.label;\r\n newSection.label = newField;\r\n model.fields.add(newField);\r\n newField.updateInView();\r\n }\r\n }\r\n let portCounter = 0;\r\n for (const port of section.ports || []) {\r\n const newPort = new DiagramPort(\r\n model,\r\n newSection,\r\n port.coords,\r\n port.direction,\r\n port.id\r\n );\r\n newSection.ports.push(newPort);\r\n model.ports.add(newPort);\r\n if (port.label) {\r\n // add port label\r\n if (\r\n newNodeType.ports.length > portCounter &&\r\n newNodeType.ports[portCounter].label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.ports[portCounter].label\r\n };\r\n let labelCoords: Point;\r\n switch (newPort.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n newPort.coords[0] + labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = newPort.coords;\r\n }\r\n const newField = new DiagramField(\r\n model,\r\n newPort,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = port.label;\r\n newPort.label = newField;\r\n model.fields.add(newField);\r\n newField.updateInView();\r\n }\r\n ++portCounter;\r\n }\r\n if (port.collabMeta) {\r\n newPort.selfRemoved = port.collabMeta.selfRemoved;\r\n newPort.selfRemovedTimestamp = port.collabMeta.selfRemovedTimestamp;\r\n this.importLabelCollabMeta(newPort.label, port.collabMeta.label);\r\n }\r\n newPort.updateInView();\r\n }\r\n if (section.collabMeta) {\r\n newSection.selfRemoved = section.collabMeta.selfRemoved;\r\n newSection.selfRemovedTimestamp =\r\n section.collabMeta.selfRemovedTimestamp;\r\n this.importLabelCollabMeta(\r\n newSection.label,\r\n section.collabMeta.label\r\n );\r\n }\r\n newSection.updateInView();\r\n }\r\n let portCounter = 0;\r\n for (const port of node.ports || []) {\r\n const newPort = new DiagramPort(\r\n model,\r\n newNode,\r\n port.coords,\r\n port.direction,\r\n port.id\r\n );\r\n newNode.ports.push(newPort);\r\n model.ports.add(newPort);\r\n if (port.label) {\r\n // add port label\r\n if (\r\n newNodeType.ports.length > portCounter &&\r\n newNodeType.ports[portCounter].label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.ports[portCounter].label\r\n };\r\n let labelCoords: Point;\r\n switch (newPort.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n newPort.coords[0] + labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = newPort.coords;\r\n }\r\n const newField = new DiagramField(\r\n model,\r\n newPort,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = port.label;\r\n newPort.label = newField;\r\n model.fields.add(newField);\r\n newField.updateInView();\r\n }\r\n ++portCounter;\r\n }\r\n if (port.collabMeta) {\r\n newPort.selfRemoved = port.collabMeta.selfRemoved;\r\n newPort.selfRemovedTimestamp = port.collabMeta.selfRemovedTimestamp;\r\n this.importLabelCollabMeta(newPort.label, port.collabMeta.label);\r\n }\r\n newPort.updateInView();\r\n }\r\n if (node.data) {\r\n newNode.valueSet.setValues(node.data);\r\n }\r\n if (node.collabMeta) {\r\n newNode.selfRemoved = node.collabMeta.selfRemoved;\r\n newNode.selfRemovedTimestamp = node.collabMeta.selfRemovedTimestamp;\r\n newNode.geometryTimestamp = node.collabMeta.geometryTimestamp;\r\n this.importLabelCollabMeta(newNode.label, node.collabMeta.label);\r\n newNode.valueSet.setTimestamps(node.collabMeta.dataTimestamps);\r\n }\r\n newNode.updateInView();\r\n }\r\n return model;\r\n }\r\n\r\n importConnection(\r\n model: DiagramModel,\r\n connection: DagaConnection\r\n ): DiagramModel {\r\n const newConnectionType = model.connections.types.get(connection.type);\r\n if (newConnectionType) {\r\n const newConnection = new DiagramConnection(\r\n model,\r\n newConnectionType,\r\n connection.start ? model.ports.get(connection.start) : undefined,\r\n connection.end ? model.ports.get(connection.end) : undefined,\r\n connection.id\r\n );\r\n model.connections.add(newConnection);\r\n newConnection.startLabel = connection.startLabel;\r\n newConnection.middleLabel = connection.middleLabel;\r\n newConnection.endLabel = connection.endLabel;\r\n newConnection.points = connection.points;\r\n if (connection.data) {\r\n newConnection.valueSet.setValues(connection.data);\r\n }\r\n if (connection.collabMeta) {\r\n newConnection.selfRemoved = connection.collabMeta.selfRemoved;\r\n newConnection.selfRemovedTimestamp =\r\n connection.collabMeta.selfRemovedTimestamp;\r\n newConnection.valueSet.setTimestamps(\r\n connection.collabMeta.dataTimestamps\r\n );\r\n }\r\n newConnection.updateInView();\r\n }\r\n return model;\r\n }\r\n\r\n importLabelCollabMeta(\r\n newLabel?: DiagramField,\r\n labelCollabMeta?: {\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n textTimestamp: CollabTimestamp | null;\r\n }\r\n ): void {\r\n if (newLabel && labelCollabMeta) {\r\n newLabel.selfRemoved = labelCollabMeta.selfRemoved;\r\n newLabel.selfRemovedTimestamp = labelCollabMeta.selfRemovedTimestamp;\r\n newLabel.textTimestamp = labelCollabMeta.textTimestamp;\r\n }\r\n }\r\n}\r\n","import { Canvas } from '../../../interfaces/canvas';\r\nimport { Point } from '../../../util/canvas-util';\r\nimport { DagaImporter } from '../converters/daga-importer';\r\nimport { DagaConnection, DagaNode } from '../converters/daga-model';\r\nimport { DiagramElement } from '../diagram-element';\r\nimport { DiagramNodeGeometry } from '../diagram-node';\r\nimport { ValueSet } from '../diagram-property';\r\nimport { CollabTimestamp, timestampWins } from './primitives';\r\n\r\n/**\r\n * An action taken by a local or remote user.\r\n *\r\n * The action can performed on its creator's device, serialized\r\n * and deserialized to reach remote users' devices, and performed\r\n * on remote users' devices.\r\n * @private\r\n */\r\nexport interface CollabAction {\r\n /**\r\n * Performs this action on the diagram.\r\n *\r\n * Note: Local Actions should call `canvas.collabEngine.doCollaboratively(collabAction)`, **not** this method directly.\r\n *\r\n * CollabAction `do()` methods must follow the rules of operation-based CRDT messages:\r\n * If two users concurrently create CollabActions (possibly of different types) on the same diagram, then performing the actions on a future diagram state _in either order_ must result in the same diagram state.\r\n */\r\n do(): void;\r\n\r\n /**\r\n * Serializes this action, converting it to a JSON form.\r\n *\r\n * To deserialize, use the *static* deserialize method on the same class.\r\n */\r\n serialize(): CollabActionSerialized;\r\n\r\n // In addition to the object methods above, each implementation should\r\n // have a static method `deserialize(canvas: Canvas, serialized: (CollabActionSerialized subtype))`\r\n // that inputs a JSON value of the form output by `serialize()` and\r\n // outputs a new instance of the class.\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type CollabActionSerialized =\r\n | AddNodeSerialized\r\n | SetGeometrySerialized\r\n | AddConnectionSerialized\r\n | EditFieldSerialized\r\n | UpdateValuesSerialized\r\n | SetSelfRemovedSerialized\r\n | PasteSerialized;\r\n\r\n/**\r\n * @private\r\n */\r\nexport type AddNodeSerialized = {\r\n type: 'addNode';\r\n id: string;\r\n typeId: string;\r\n coords: Point;\r\n label?: string;\r\n values?: { [key: string]: unknown };\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of adding a node.\r\n * @see AddNodeAction\r\n * @private\r\n */\r\nexport class AddNodeCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly id: string,\r\n readonly typeId: string,\r\n readonly coords: Point,\r\n readonly label?: string,\r\n readonly values?: { [key: string]: unknown }\r\n ) {}\r\n\r\n do(): void {\r\n const node = this.canvas.model.nodes.new(this.typeId, this.coords, this.id);\r\n if (this.values !== undefined) {\r\n node.valueSet.setValues(\r\n structuredClone({\r\n ...node.valueSet.getValues(),\r\n ...this.values\r\n })\r\n );\r\n }\r\n if (node.label) {\r\n node.label.text = this.label || '';\r\n }\r\n }\r\n\r\n serialize(): AddNodeSerialized {\r\n return {\r\n type: 'addNode',\r\n id: this.id,\r\n typeId: this.typeId,\r\n coords: this.coords,\r\n label: this.label,\r\n values: this.values\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: AddNodeSerialized\r\n ): AddNodeCollabAction {\r\n return new AddNodeCollabAction(\r\n canvas,\r\n serialized.id,\r\n serialized.typeId,\r\n serialized.coords,\r\n serialized.label,\r\n serialized.values\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type SetGeometrySerialized = {\r\n type: 'setGeometry';\r\n nodeId: string;\r\n to: DiagramNodeGeometry;\r\n timestamp: CollabTimestamp;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of changing a node's geometry: moving, stretching, or stretching sections.\r\n * @see SetGeometryAction\r\n * @private\r\n */\r\nexport class SetGeometryCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly nodeId: string,\r\n readonly to: DiagramNodeGeometry,\r\n readonly timestamp: CollabTimestamp\r\n ) {}\r\n\r\n do(): void {\r\n const node = this.canvas.model.nodes.get(this.nodeId);\r\n if (node && timestampWins(this.timestamp, node.geometryTimestamp)) {\r\n node.setGeometry(this.to);\r\n // Re-fit the labels, in case their text has changed since `this.to` was measured.\r\n if (node.label?.fit) {\r\n this.canvas.fitFieldRootInView(node.label.id);\r\n }\r\n for (const section of node.sections) {\r\n if (section.label?.fit) {\r\n this.canvas.fitFieldRootInView(section.label.id);\r\n }\r\n }\r\n node.geometryTimestamp = this.timestamp;\r\n }\r\n }\r\n\r\n serialize(): SetGeometrySerialized {\r\n return {\r\n type: 'setGeometry',\r\n nodeId: this.nodeId,\r\n to: this.to,\r\n timestamp: this.timestamp\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: SetGeometrySerialized\r\n ): SetGeometryCollabAction {\r\n return new SetGeometryCollabAction(\r\n canvas,\r\n serialized.nodeId,\r\n serialized.to,\r\n serialized.timestamp\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type AddConnectionSerialized = {\r\n type: 'addConnection';\r\n id: string;\r\n typeId: string;\r\n startId: string;\r\n endId: string;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of adding a connection.\r\n * @see AddConnectionAction\r\n * @private\r\n */\r\nexport class AddConnectionCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly id: string,\r\n readonly typeId: string,\r\n readonly startId: string,\r\n readonly endId: string\r\n ) {}\r\n\r\n do(): void {\r\n const start = this.canvas.model.ports.get(this.startId);\r\n const end = this.canvas.model.ports.get(this.endId);\r\n if (start && end) {\r\n this.canvas.model.connections.new(this.typeId, start, end, this.id);\r\n }\r\n }\r\n\r\n serialize(): AddConnectionSerialized {\r\n return {\r\n type: 'addConnection',\r\n id: this.id,\r\n typeId: this.typeId,\r\n startId: this.startId,\r\n endId: this.endId\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: AddConnectionSerialized\r\n ): AddConnectionCollabAction {\r\n return new AddConnectionCollabAction(\r\n canvas,\r\n serialized.id,\r\n serialized.typeId,\r\n serialized.startId,\r\n serialized.endId\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type EditFieldSerialized = {\r\n type: 'editField';\r\n fieldId: string;\r\n to: string;\r\n timestamp: CollabTimestamp;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of editing the text of a field.\r\n * @see EditFieldAction\r\n * @private\r\n */\r\nexport class EditFieldCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly fieldId: string,\r\n readonly to: string,\r\n readonly timestamp: CollabTimestamp\r\n ) {}\r\n\r\n do(): void {\r\n const field = this.canvas.model.fields.get(this.fieldId);\r\n if (field && timestampWins(this.timestamp, field.textTimestamp)) {\r\n field.text = this.to;\r\n field.textTimestamp = this.timestamp;\r\n }\r\n }\r\n\r\n serialize(): EditFieldSerialized {\r\n return {\r\n type: 'editField',\r\n fieldId: this.fieldId,\r\n to: this.to,\r\n timestamp: this.timestamp\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: EditFieldSerialized\r\n ): EditFieldCollabAction {\r\n return new EditFieldCollabAction(\r\n canvas,\r\n serialized.fieldId,\r\n serialized.to,\r\n serialized.timestamp\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type UpdateValuesSerialized = {\r\n type: 'updateValues';\r\n id: string | undefined;\r\n to: { [key: string]: unknown };\r\n timestamp: CollabTimestamp;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of editing the values of a value set.\r\n * @see UpdateValuesAction\r\n * @private\r\n */\r\nexport class UpdateValuesCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly id: string | undefined,\r\n readonly to: { [key: string]: unknown },\r\n readonly timestamp: CollabTimestamp\r\n ) {}\r\n\r\n getValueSet(): ValueSet | undefined {\r\n if (this.id === undefined) {\r\n return this.canvas.model.valueSet;\r\n } else {\r\n return (\r\n this.canvas.model.nodes.get(this.id) ||\r\n this.canvas.model.connections.get(this.id)\r\n )?.valueSet;\r\n }\r\n }\r\n\r\n do(): void {\r\n this.getValueSet()?.overwriteValuesLww(this.to, this.timestamp);\r\n }\r\n\r\n serialize(): UpdateValuesSerialized {\r\n return {\r\n type: 'updateValues',\r\n id: this.id,\r\n to: this.to,\r\n timestamp: this.timestamp\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: UpdateValuesSerialized\r\n ): UpdateValuesCollabAction {\r\n return new UpdateValuesCollabAction(\r\n canvas,\r\n serialized.id,\r\n serialized.to,\r\n serialized.timestamp\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type SetSelfRemovedSerialized = {\r\n type: 'setSelfRemoved';\r\n nodeIds: string[];\r\n sectionIds: string[];\r\n portIds: string[];\r\n connectionIds: string[];\r\n fieldIds: string[];\r\n removed: boolean;\r\n timestamp: CollabTimestamp;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of removing or un-removing elements.\r\n *\r\n * Specifically, the action sets the `selfRemoved` field for elements that are\r\n * explicitly removed/unremoved. This causes the `removed` fields for those elements\r\n * and their transitive dependents to update automatically.\r\n * For example, self-removing a node also removes all of its sections/connections/etc.\r\n *\r\n * @see RemoveAction\r\n * @private\r\n */\r\nexport class SetSelfRemovedCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly nodeIds: string[],\r\n readonly sectionIds: string[],\r\n readonly portIds: string[],\r\n readonly connectionIds: string[],\r\n readonly fieldIds: string[],\r\n readonly selfRemoved: boolean,\r\n readonly timestamp: CollabTimestamp\r\n ) {}\r\n\r\n private doOne(elt: DiagramElement | undefined): void {\r\n if (elt && timestampWins(this.timestamp, elt.selfRemovedTimestamp)) {\r\n elt.selfRemoved = this.selfRemoved;\r\n elt.selfRemovedTimestamp = this.timestamp;\r\n }\r\n }\r\n\r\n do(): void {\r\n for (const nodeId of this.nodeIds) {\r\n this.doOne(this.canvas.model.nodes.get(nodeId));\r\n }\r\n for (const sectionId of this.sectionIds) {\r\n this.doOne(this.canvas.model.sections.get(sectionId));\r\n }\r\n for (const portId of this.portIds) {\r\n this.doOne(this.canvas.model.ports.get(portId));\r\n }\r\n for (const connectionId of this.connectionIds) {\r\n this.doOne(this.canvas.model.connections.get(connectionId));\r\n }\r\n for (const fieldId of this.fieldIds) {\r\n this.doOne(this.canvas.model.fields.get(fieldId));\r\n }\r\n // update view\r\n this.canvas.updateNodesInView(...this.nodeIds);\r\n this.canvas.updateSectionsInView(...this.sectionIds);\r\n this.canvas.updatePortsInView(...this.portIds);\r\n this.canvas.updateConnectionsInView(...this.connectionIds);\r\n this.canvas.updateFieldsInView(...this.fieldIds);\r\n // some of the nodes and sections may have decorators, so update them\r\n this.canvas.updateDecoratorsInView();\r\n }\r\n\r\n serialize(): CollabActionSerialized {\r\n return {\r\n type: 'setSelfRemoved',\r\n nodeIds: this.nodeIds,\r\n sectionIds: this.sectionIds,\r\n portIds: this.portIds,\r\n connectionIds: this.connectionIds,\r\n fieldIds: this.fieldIds,\r\n removed: this.selfRemoved,\r\n timestamp: this.timestamp\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: SetSelfRemovedSerialized\r\n ): SetSelfRemovedCollabAction {\r\n return new SetSelfRemovedCollabAction(\r\n canvas,\r\n serialized.nodeIds,\r\n serialized.sectionIds,\r\n serialized.portIds,\r\n serialized.connectionIds,\r\n serialized.fieldIds,\r\n serialized.removed,\r\n serialized.timestamp\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type PasteSerialized = {\r\n type: 'paste';\r\n readonly nodes: DagaNode[];\r\n readonly connections: DagaConnection[];\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of pasting elements from an external source into a diagram.\r\n *\r\n * @see PasteAction\r\n * @private\r\n */\r\nexport class PasteCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly nodes: DagaNode[],\r\n readonly connections: DagaConnection[]\r\n ) {}\r\n\r\n do(): void {\r\n const importer = new DagaImporter();\r\n for (const node of this.nodes) {\r\n importer.importNode(this.canvas.model, node);\r\n }\r\n for (const connection of this.connections) {\r\n importer.importConnection(this.canvas.model, connection);\r\n }\r\n }\r\n\r\n serialize(): CollabActionSerialized {\r\n return {\r\n type: 'paste',\r\n nodes: this.nodes,\r\n connections: this.connections\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: PasteSerialized\r\n ): PasteCollabAction {\r\n return new PasteCollabAction(\r\n canvas,\r\n serialized.nodes,\r\n serialized.connections\r\n );\r\n }\r\n}\r\n","import { Canvas } from '../../interfaces/canvas';\r\nimport { Point } from '../../util/canvas-util';\r\nimport {\r\n AddConnectionCollabAction,\r\n AddNodeCollabAction,\r\n EditFieldCollabAction,\r\n PasteCollabAction,\r\n SetGeometryCollabAction,\r\n SetSelfRemovedCollabAction,\r\n UpdateValuesCollabAction\r\n} from './collab/collab-action';\r\nimport { DagaConnection, DagaNode } from './converters/daga-model';\r\nimport { DiagramConnectionType } from './diagram-connection';\r\nimport { DiagramNodeGeometry, DiagramNodeType } from './diagram-node';\r\n\r\n/**\r\n * A queue of recent actions taken by the user that can be undone and redone.\r\n * @private\r\n */\r\nexport class ActionQueue {\r\n /**\r\n * Canvas that this action queue belongs to.\r\n * @private\r\n */\r\n canvas: Canvas;\r\n /**\r\n * Maximum number of actions that can be recorded simultaneously.\r\n * When new actions are added past this limit, older actions are removed.\r\n * @private\r\n */\r\n maximum: number;\r\n /**\r\n * List of recorded actions, from oldest to newest.\r\n * @private\r\n */\r\n history: DiagramAction[];\r\n /**\r\n * Index of the last action not counting undone actions. One-indexed. Zero if all actions are undone.\r\n * @private\r\n */\r\n index: number;\r\n\r\n constructor(canvas: Canvas, maximum: number) {\r\n this.canvas = canvas;\r\n this.maximum = maximum;\r\n this.history = [];\r\n this.index = 0;\r\n }\r\n\r\n /**\r\n * Adds an action to the history.\r\n * @private\r\n */\r\n add(action: DiagramAction): void {\r\n if (this.index < this.history.length) {\r\n this.history = this.history.slice(0, this.index);\r\n }\r\n if (this.history.length >= this.maximum) {\r\n this.history = this.history.slice(1, this.history.length);\r\n this.history.push(action);\r\n } else {\r\n this.history.push(action);\r\n ++this.index;\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n\r\n /**\r\n * Undoes the last action in the history, not counting undone actions.\r\n * @private\r\n */\r\n undo(): void {\r\n if (this.index > 0) {\r\n --this.index;\r\n this.history[this.index].undo();\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n\r\n /**\r\n * Redoes the last undone action in the history.\r\n * @private\r\n */\r\n redo(): void {\r\n if (this.index < this.history.length) {\r\n this.history[this.index].redo();\r\n ++this.index;\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n}\r\n\r\n/**\r\n * An action taken by the user that can be undone and redone.\r\n * @private\r\n */\r\nexport interface DiagramAction {\r\n /**\r\n * Perform this action on the diagram for the first time.\r\n * Performing the same action with the same parameters on a diagram with the same state should always result in the same changes to the state of the diagram.\r\n */\r\n do(): void;\r\n /**\r\n * Undo the changes in the diagram caused by this action.\r\n * After having called `do()` followed by `undo()`, calling `redo()` followed by `undo()` any number of times should always result in no net changes to the state of the diagram.\r\n */\r\n undo(): void;\r\n /**\r\n * Redo the changes in the diagram caused by this action.\r\n * After having called `do()`, calling `undo()` followed by `redo()` any number of times should always result in no net changes to the state of the diagram.\r\n * `redo()` is usually equivalent to `do()`, but not always.\r\n */\r\n redo(): void;\r\n}\r\n\r\n/**\r\n * Enum listing the actions that can be taken by the user.\r\n * The actions can correspond to a DiagramAction that can be recorded in the action queue of a diagram or they may not correspond to any DiagramAction implementations.\r\n * @public\r\n */\r\nexport enum DiagramActions {\r\n /**\r\n * Action that corresponds to the addition of a connection.\r\n * @see AddConnectionAction\r\n * @public\r\n */\r\n AddConnection = 'add-connection',\r\n /**\r\n * Action that corresponds to the addition of a node.\r\n * @see AddNodeAction\r\n * @public\r\n */\r\n AddNode = 'add-node',\r\n /**\r\n * Action that corresponds to copying diagram elements to the clipboard.\r\n * @public\r\n */\r\n Clipboard = 'clipboard',\r\n /**\r\n * Action that corresponds to opening the context menu.\r\n * @public\r\n */\r\n ContextMenu = 'context-menu',\r\n /**\r\n * Action that corresponds to the edition of a field's text content.\r\n * @see EditFieldAction\r\n * @public\r\n */\r\n EditField = 'edit-field',\r\n /**\r\n * Action that corresponds to moving a node.\r\n * @see SetGeometryAction\r\n * @public\r\n */\r\n MoveNode = 'move-node',\r\n /**\r\n * Action that corresponds to pasting diagram elements from the clipboard.\r\n * @see PasteAction\r\n * @public\r\n */\r\n Paste = 'paste',\r\n /**\r\n * Action that corresponds to removing elements.\r\n * @see RemoveAction\r\n * @public\r\n */\r\n Remove = 'remove',\r\n /**\r\n * Action that corresponds to altering a node's dimensions.\r\n * @see SetGeometryActionAction\r\n * @public\r\n */\r\n StretchNode = 'stretch-node',\r\n /**\r\n * Action that corresponds to altering a sections's dimensions.\r\n * @see SetGeometryAction\r\n * @public\r\n */\r\n StretchSection = 'stretch-section',\r\n /**\r\n * Action that corresponds to changing the values of a value set.\r\n * @see UpdateValuesAction\r\n * @public\r\n */\r\n UpdateValues = 'update-values',\r\n /**\r\n * Action that corresponds to changing the view point of a diagram by zooming or panning.\r\n * @public\r\n */\r\n Zoom = 'zoom'\r\n}\r\n\r\n/**\r\n * Action which consists of adding a node.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport class AddNodeAction implements DiagramAction {\r\n canvas: Canvas;\r\n type: DiagramNodeType;\r\n coords: Point;\r\n label?: string;\r\n values?: { [key: string]: unknown };\r\n id: string;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n type: DiagramNodeType,\r\n coords: Point,\r\n label?: string,\r\n values?: { [key: string]: unknown }\r\n ) {\r\n this.canvas = canvas;\r\n this.type = type;\r\n this.coords = coords;\r\n this.label = label;\r\n this.values = values;\r\n this.id = this.canvas.collabEngine.freshId();\r\n }\r\n\r\n do(): void {\r\n const collabAction = new AddNodeCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.type.id,\r\n this.coords,\r\n this.label,\r\n this.values\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n [this.id],\r\n [],\r\n [],\r\n [],\r\n [],\r\n true,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n redo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n [this.id],\r\n [],\r\n [],\r\n [],\r\n [],\r\n false,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of changing a node's geometry: moving, stretching, or stretching sections.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport class SetGeometryAction implements DiagramAction {\r\n canvas: Canvas;\r\n intent:\r\n | DiagramActions.MoveNode\r\n | DiagramActions.StretchNode\r\n | DiagramActions.StretchSection;\r\n nodeId: string;\r\n from: DiagramNodeGeometry;\r\n to: DiagramNodeGeometry;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n intent:\r\n | DiagramActions.MoveNode\r\n | DiagramActions.StretchNode\r\n | DiagramActions.StretchSection,\r\n nodeId: string,\r\n from: DiagramNodeGeometry,\r\n to: DiagramNodeGeometry\r\n ) {\r\n this.canvas = canvas;\r\n this.intent = intent;\r\n this.nodeId = nodeId;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n do(): void {\r\n const collabAction = new SetGeometryCollabAction(\r\n this.canvas,\r\n this.nodeId,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const node = this.canvas.model.nodes.get(this.nodeId);\r\n if (node) {\r\n this.to = node.getGeometry();\r\n const collabAction = new SetGeometryCollabAction(\r\n this.canvas,\r\n this.nodeId,\r\n this.from,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n\r\n redo(): void {\r\n const node = this.canvas.model.nodes.get(this.nodeId);\r\n if (node) {\r\n this.from = node.getGeometry();\r\n const collabAction = new SetGeometryCollabAction(\r\n this.canvas,\r\n this.nodeId,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of adding a connection.\r\n * @see DiagramConnection\r\n * @private\r\n */\r\nexport class AddConnectionAction implements DiagramAction {\r\n canvas: Canvas;\r\n type: DiagramConnectionType;\r\n startId: string;\r\n endId: string;\r\n id: string;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n type: DiagramConnectionType,\r\n startId: string,\r\n endId: string\r\n ) {\r\n this.canvas = canvas;\r\n this.type = type;\r\n this.startId = startId;\r\n this.endId = endId;\r\n this.id = this.canvas.collabEngine.freshId();\r\n }\r\n\r\n do(): void {\r\n const collabAction = new AddConnectionCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.type.id,\r\n this.startId,\r\n this.endId\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n [],\r\n [],\r\n [],\r\n [this.id],\r\n [],\r\n true,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n redo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n [],\r\n [],\r\n [],\r\n [this.id],\r\n [],\r\n false,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of editing the text of a field.\r\n * @see DiagramField\r\n * @private\r\n */\r\nexport class EditFieldAction implements DiagramAction {\r\n canvas: Canvas;\r\n fieldId: string;\r\n from: string;\r\n to: string;\r\n\r\n constructor(canvas: Canvas, fieldId: string, from: string, to: string) {\r\n this.canvas = canvas;\r\n this.fieldId = fieldId;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n do(): void {\r\n const collabAction = new EditFieldCollabAction(\r\n this.canvas,\r\n this.fieldId,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const field = this.canvas.model.fields.get(this.fieldId);\r\n if (field) {\r\n this.to = field.text;\r\n const collabAction = new EditFieldCollabAction(\r\n this.canvas,\r\n this.fieldId,\r\n this.from,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n\r\n redo(): void {\r\n const field = this.canvas.model.fields.get(this.fieldId);\r\n if (field) {\r\n this.from = field.text;\r\n const collabAction = new EditFieldCollabAction(\r\n this.canvas,\r\n this.fieldId,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of editing the values of a value set.\r\n * @see ValueSet\r\n * @private\r\n */\r\nexport class UpdateValuesAction implements DiagramAction {\r\n canvas: Canvas;\r\n id: string | undefined;\r\n from: { [key: string]: unknown };\r\n to: { [key: string]: unknown };\r\n\r\n constructor(\r\n canvas: Canvas,\r\n id: string | undefined,\r\n from: { [key: string]: unknown },\r\n to: { [key: string]: unknown }\r\n ) {\r\n this.canvas = canvas;\r\n this.id = id;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n do(): void {\r\n const collabAction = new UpdateValuesCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new UpdateValuesCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.from,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n const valueSet = collabAction.getValueSet();\r\n if (valueSet) {\r\n this.to = valueSet.getValuesForKeys(this.to);\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n\r\n redo(): void {\r\n const collabAction = new UpdateValuesCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n const valueSet = collabAction.getValueSet();\r\n if (valueSet) {\r\n this.from = valueSet.getValuesForKeys(this.from);\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of removing elements from a diagram.\r\n *\r\n * You should only include an element in this action if the element itself is explicitly removed.\r\n * Elements removed as a consequence of a removing another element\r\n * (e.g., removing a node removes all of its sections)\r\n * will be handled automatically, in a way that converges in the case\r\n * of concurrent collaborative actions.\r\n *\r\n * @private\r\n */\r\nexport class RemoveAction implements DiagramAction {\r\n canvas: Canvas;\r\n nodeIds: string[];\r\n sectionIds: string[];\r\n portIds: string[];\r\n connectionIds: string[];\r\n fieldIds: string[];\r\n\r\n constructor(\r\n canvas: Canvas,\r\n nodeIds: string[],\r\n sectionIds: string[],\r\n portIds: string[],\r\n connectionIds: string[],\r\n fieldIds: string[]\r\n ) {\r\n this.canvas = canvas;\r\n this.nodeIds = nodeIds;\r\n this.sectionIds = sectionIds;\r\n this.portIds = portIds;\r\n this.connectionIds = connectionIds;\r\n this.fieldIds = fieldIds;\r\n }\r\n\r\n do(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n this.nodeIds,\r\n this.sectionIds,\r\n this.portIds,\r\n this.connectionIds,\r\n this.fieldIds,\r\n true,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n this.nodeIds,\r\n this.sectionIds,\r\n this.portIds,\r\n this.connectionIds,\r\n this.fieldIds,\r\n false,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n redo(): void {\r\n this.do();\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of pasting elements from an external source into a diagram.\r\n *\r\n * @private\r\n */\r\nexport class PasteAction implements DiagramAction {\r\n canvas: Canvas;\r\n nodes: DagaNode[];\r\n connections: DagaConnection[];\r\n coords?: Point;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n nodes: DagaNode[],\r\n connections: DagaConnection[],\r\n coords?: Point\r\n ) {\r\n this.canvas = canvas;\r\n this.nodes = nodes;\r\n this.connections = connections;\r\n this.coords = coords;\r\n }\r\n\r\n do(): void {\r\n const minCoords = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY];\r\n for (const node of this.nodes) {\r\n if (node.coords[0] < minCoords[0]) {\r\n minCoords[0] = node.coords[0];\r\n }\r\n if (node.coords[1] < minCoords[1]) {\r\n minCoords[1] = node.coords[1];\r\n }\r\n }\r\n const coordsDiff =\r\n this.coords !== undefined\r\n ? [this.coords[0] - minCoords[0], this.coords[1] - minCoords[1]]\r\n : undefined;\r\n // create new unique ids for pasted elements\r\n const idRefresh: { [key: string]: string } = {};\r\n const newNodes: DagaNode[] = [];\r\n const newConnections: DagaConnection[] = [];\r\n for (const node of this.nodes) {\r\n const oldNodeId = node.id;\r\n const newNodeId = this.canvas.collabEngine.freshId();\r\n idRefresh[oldNodeId] = newNodeId;\r\n const newNode = structuredClone(node);\r\n newNode.id = newNodeId;\r\n if (coordsDiff) {\r\n newNode.coords = [\r\n newNode.coords[0] + coordsDiff[0],\r\n newNode.coords[1] + coordsDiff[1]\r\n ];\r\n }\r\n newNodes.push(newNode);\r\n if (newNode.sections) {\r\n for (const newSection of newNode.sections) {\r\n const oldSectionId = newSection.id;\r\n if (newSection.id.includes(node.id)) {\r\n newSection.id = newSection.id.replace(node.id, newNodeId);\r\n } else {\r\n newSection.id = this.canvas.collabEngine.freshId();\r\n }\r\n idRefresh[oldSectionId] = newSection.id;\r\n if (coordsDiff) {\r\n newSection.coords = [\r\n newSection.coords[0] + coordsDiff[0],\r\n newSection.coords[1] + coordsDiff[1]\r\n ];\r\n }\r\n if (newSection.ports) {\r\n for (const newPort of newSection.ports) {\r\n const oldPortId = newPort.id;\r\n if (newPort.id.includes(node.id)) {\r\n newPort.id = newPort.id.replace(node.id, newNodeId);\r\n } else {\r\n newPort.id = this.canvas.collabEngine.freshId();\r\n }\r\n idRefresh[oldPortId] = newPort.id;\r\n if (coordsDiff) {\r\n newPort.coords = [\r\n newPort.coords[0] + coordsDiff[0],\r\n newPort.coords[1] + coordsDiff[1]\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (newNode.ports) {\r\n for (const newPort of newNode.ports) {\r\n const oldPortId = newPort.id;\r\n if (newPort.id.includes(node.id)) {\r\n newPort.id = newPort.id.replace(node.id, newNodeId);\r\n } else {\r\n newPort.id = this.canvas.collabEngine.freshId();\r\n }\r\n idRefresh[oldPortId] = newPort.id;\r\n if (coordsDiff) {\r\n newPort.coords = [\r\n newPort.coords[0] + coordsDiff[0],\r\n newPort.coords[1] + coordsDiff[1]\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n for (const connection of this.connections) {\r\n const newConnectionId = this.canvas.collabEngine.freshId();\r\n idRefresh[connection.id] = newConnectionId;\r\n const newConnection = structuredClone(connection);\r\n newConnection.id = newConnectionId;\r\n // if the id of the start or end ports have changed, change it to the new one\r\n newConnection.start =\r\n idRefresh[newConnection.start] || newConnection.start;\r\n newConnection.end = idRefresh[newConnection.end] || newConnection.end;\r\n if (coordsDiff) {\r\n for (let i = 0; i < newConnection.points.length; ++i) {\r\n newConnection.points[i] = [\r\n newConnection.points[i][0] + coordsDiff[0],\r\n newConnection.points[i][1] + coordsDiff[1]\r\n ];\r\n }\r\n }\r\n newConnections.push(newConnection);\r\n }\r\n const collabAction = new PasteCollabAction(\r\n this.canvas,\r\n newNodes,\r\n newConnections\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n this.nodes.map((n) => n.id),\r\n [],\r\n [],\r\n this.connections.map((c) => c.id),\r\n [],\r\n true,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n redo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n this.nodes.map((n) => n.id),\r\n [],\r\n [],\r\n this.connections.map((c) => c.id),\r\n [],\r\n false,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n}\r\n","import { Point } from './canvas-util';\n\n/**\n * A two dimensional array of elements of the given class that can extend infinitely in any direction, both positive and negative.\n * @private\n */\nexport class Grid<T> {\n private grid: (T | undefined)[][] = [[undefined]];\n private offsetX = 0;\n private offsetY = 0;\n\n /**\n * Get the minimum x coordinate among the elements in the grid.\n */\n minX(): number {\n return -this.offsetX;\n }\n\n /**\n * Get the maximum x coordinate among the elements in the grid.\n */\n maxX(): number {\n return this.width() - 1 - this.offsetX;\n }\n\n /**\n * Get the minimum y coordinate among the elements in the grid.\n */\n minY(): number {\n return -this.offsetY;\n }\n\n /**\n * Get the maximum y coordinate among the elements in the grid.\n */\n maxY(): number {\n return this.height() - 1 - this.offsetY;\n }\n\n /**\n * Get the total extension of the grid along the x axis.\n */\n width(): number {\n return this.grid[0].length;\n }\n\n /**\n * Get the total extension of the grid along the y axis.\n */\n height(): number {\n return this.grid.length;\n }\n\n /**\n * Add a new column at the start of the x axis.\n */\n addColumnLeft() {\n for (const row of this.grid) {\n row.splice(0, 0, undefined);\n }\n this.offsetX = this.offsetX + 1;\n }\n\n /**\n * Add a new column at the end of the x axis.\n */\n addColumnRight() {\n for (const row of this.grid) {\n row.push(undefined);\n }\n }\n\n /**\n * Add a new row at the start of the y axis.\n */\n addRowTop() {\n const newRow = [];\n for (let i = 0; i < this.grid[0].length; ++i) {\n newRow.push(undefined);\n }\n this.grid.splice(0, 0, newRow);\n this.offsetY = this.offsetY + 1;\n }\n\n /**\n * Add a new row at the end of the y axis.\n */\n addRowBottom() {\n const newRow = [];\n for (let i = 0; i < this.grid[0].length; ++i) {\n newRow.push(undefined);\n }\n this.grid.push(newRow);\n }\n\n /**\n * Get the element at the given coordinates or undefined if there is no element at the given coordinates.\n */\n get(coords: Point): T | undefined {\n if (this.grid[coords[1] + this.offsetY]) {\n return this.grid[coords[1] + this.offsetY][coords[0] + this.offsetX];\n }\n return undefined;\n }\n\n /**\n * Set the element at the given coordinates to the given element.\n */\n set(coords: Point, value: T | undefined): void {\n while (coords[0] < -this.offsetX) {\n this.addColumnLeft();\n }\n while (coords[0] >= this.width() - this.offsetX) {\n this.addColumnRight();\n }\n while (coords[1] < -this.offsetY) {\n this.addRowTop();\n }\n while (coords[1] >= this.height() - this.offsetY) {\n this.addRowBottom();\n }\n this.grid[coords[1] + this.offsetY][coords[0] + this.offsetX] = value;\n }\n\n /**\n * Get the closest coordinates to the given coordinates that are not set to an element.\n */\n getClosestEmptyCoordinate(coords: Point): Point {\n if (this.get(coords) === undefined) {\n return coords;\n }\n const foundCoords: Point = [...coords];\n // go in a spiral until found the closest empty coordinate\n for (let i = 1; ; ++i) {\n const increase = i % 2 > 0 ? i : -i;\n const step = increase > 0 ? 1 : -1;\n const goalCoords = [foundCoords[0] + increase, foundCoords[1] + increase];\n for (let j = foundCoords[0]; j !== goalCoords[0] + step; j += step) {\n foundCoords[0] = j;\n if (this.get(foundCoords) === undefined) {\n return foundCoords;\n }\n }\n for (let j = foundCoords[1]; j !== goalCoords[1] + step; j += step) {\n foundCoords[1] = j;\n if (this.get(foundCoords) === undefined) {\n return foundCoords;\n }\n }\n }\n }\n}\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { Point } from '../../../util/canvas-util';\r\nimport { Grid } from '../../../util/grid';\r\nimport { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which places adjacent nodes close by, placing nodes in order according to depth first search.\r\n * @public\r\n */\r\nexport class AdjacencyLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // arrange nodes\r\n\r\n const nodeArrangement = new Grid<DiagramNode>();\r\n const nodesToBeArranged = [...model.nodes];\r\n\r\n while (nodesToBeArranged.length > 0) {\r\n arrangeNode(\r\n nodesToBeArranged[0],\r\n nodeArrangement,\r\n [0, 0],\r\n nodesToBeArranged\r\n );\r\n }\r\n\r\n // place nodes according to arrangement\r\n\r\n const maximumWidth = Math.max(...model.nodes.all().map((n) => n.width));\r\n const maximumHeight = Math.max(...model.nodes.all().map((n) => n.height));\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n for (let y = nodeArrangement.minY(); y <= nodeArrangement.maxY(); ++y) {\r\n for (let x = nodeArrangement.minX(); x <= nodeArrangement.maxX(); ++x) {\r\n const node = nodeArrangement.get([x, y]);\r\n if (node !== undefined) {\r\n node.move([\r\n x * (maximumWidth + gapSize),\r\n y * (maximumHeight + gapSize)\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n\r\nconst arrangeNode = (\r\n node: DiagramNode,\r\n nodeArrangement: Grid<DiagramNode>,\r\n coords: Point,\r\n nodesToBeArranged: DiagramNode[]\r\n): void => {\r\n const placementCoords = nodeArrangement.getClosestEmptyCoordinate(coords);\r\n nodeArrangement.set(placementCoords, node);\r\n removeIfExists(nodesToBeArranged, node);\r\n for (const adjacency of node.getAdjacentNodes()) {\r\n if (nodesToBeArranged.includes(adjacency)) {\r\n arrangeNode(\r\n adjacency,\r\n nodeArrangement,\r\n placementCoords,\r\n nodesToBeArranged\r\n );\r\n }\r\n }\r\n};\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { Point } from '../../../util/canvas-util';\r\nimport { Grid } from '../../../util/grid';\r\nimport { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which places adjacent nodes close by, placing nodes in order according to breadth first search.\r\n * @public\r\n */\r\nexport class BreadthAdjacencyLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // arrange nodes\r\n\r\n const nodeArrangement = new Grid<DiagramNode>();\r\n const nodesToBeArranged = [...model.nodes];\r\n const nodeGridIndices: { [key: string]: Point } = {};\r\n const firstNode = nodesToBeArranged[0];\r\n\r\n let currentNodeLevel = [firstNode];\r\n nodeGridIndices[firstNode.id] = [0, 0];\r\n\r\n while (nodesToBeArranged.length > 0) {\r\n const nextNodeLevel: DiagramNode[] = [];\r\n for (const nodeInThisLevel of currentNodeLevel) {\r\n nodeArrangement.set(\r\n nodeArrangement.getClosestEmptyCoordinate(\r\n nodeGridIndices[nodeInThisLevel.id]\r\n ),\r\n nodeInThisLevel\r\n );\r\n removeIfExists(nodesToBeArranged, nodeInThisLevel);\r\n const nodesAdjacentToThisNode = nodeInThisLevel.getAdjacentNodes();\r\n for (const adjacentNode of nodesAdjacentToThisNode) {\r\n if (nodesToBeArranged.includes(adjacentNode)) {\r\n nextNodeLevel.push(adjacentNode);\r\n nodeGridIndices[adjacentNode.id] =\r\n nodeGridIndices[nodeInThisLevel.id];\r\n }\r\n }\r\n }\r\n if (nextNodeLevel.length > 0) {\r\n currentNodeLevel = nextNodeLevel;\r\n } else if (nodesToBeArranged.length > 0) {\r\n const disconnectedNode = nodesToBeArranged[0];\r\n currentNodeLevel = [disconnectedNode];\r\n nodeGridIndices[disconnectedNode.id] =\r\n nodeArrangement.getClosestEmptyCoordinate([0, 0]);\r\n }\r\n }\r\n\r\n // place nodes according to arrangement\r\n\r\n const maximumWidth = Math.max(...model.nodes.all().map((n) => n.width));\r\n const maximumHeight = Math.max(...model.nodes.all().map((n) => n.height));\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n for (let y = nodeArrangement.minY(); y <= nodeArrangement.maxY(); ++y) {\r\n for (let x = nodeArrangement.minX(); x <= nodeArrangement.maxX(); ++x) {\r\n const node = nodeArrangement.get([x, y]);\r\n if (node !== undefined) {\r\n node.move([\r\n x * (maximumWidth + gapSize),\r\n y * (maximumHeight + gapSize)\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges the nodes by a breadth first search system according to their distance to the first node in the list.\r\n * @public\r\n */\r\nexport class BreadthLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n let nodesToBeArranged = [...model.nodes];\r\n\r\n // Arrange nodes by a breadth first search\r\n const firstNode = nodesToBeArranged[0];\r\n removeIfExists(nodesToBeArranged, firstNode);\r\n /*\r\n * Node arrangement is a list of lists where:\r\n * the first list is the first node in the list of nodes\r\n * the second list is the nodes connected directly to the first node\r\n * the third list is the nodes connected directly to the nodes in the second list\r\n * and so on\r\n */\r\n const nodeArrangement = [[firstNode]];\r\n while (nodesToBeArranged.length > 0) {\r\n const lastRowOfNodes = nodeArrangement[nodeArrangement.length - 1];\r\n const nodesInNextRow: DiagramNode[] = [];\r\n for (const nodeInLastRow of lastRowOfNodes) {\r\n const nodesAdjacentToThisNode = nodeInLastRow.getAdjacentNodes();\r\n for (const adjacentNode of nodesAdjacentToThisNode) {\r\n if (nodesToBeArranged.includes(adjacentNode)) {\r\n removeIfExists(nodesToBeArranged, adjacentNode);\r\n nodesInNextRow.push(adjacentNode);\r\n }\r\n }\r\n }\r\n if (nodesInNextRow.length > 0) {\r\n nodesInNextRow.sort((a, b) => b.type.priority - a.type.priority);\r\n nodeArrangement.push(nodesInNextRow);\r\n } else {\r\n // what remains in nodesToBeArranged are the nodes which aren't connected to any other node\r\n // we add them as one last line of nodes to the node arrangement\r\n nodeArrangement.push(nodesToBeArranged);\r\n nodesToBeArranged = [];\r\n }\r\n }\r\n\r\n let widthAccumulator = 0;\r\n for (const nodeArrangementRow of nodeArrangement) {\r\n let heightAccumulator = 0;\r\n for (const node of nodeArrangementRow) {\r\n node.move([widthAccumulator, heightAccumulator]);\r\n heightAccumulator += gapSize + node.height;\r\n }\r\n const maximumWidth = Math.max(...nodeArrangementRow.map((n) => n.width));\r\n widthAccumulator += gapSize + maximumWidth;\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { Point, distanceBetweenPoints } from '../../../util/canvas-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which attracts connected nodes and repels unconnected nodes.\r\n * @public\r\n */\r\nexport class ForceLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // as a starting point, we apply a simple layout\r\n new BreadthLayout().apply(model);\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n const coolingFactor = 0.99;\r\n const minimumTemperature = 1;\r\n const attractionFactor = 0.1;\r\n const repulsionFactor = 200_000;\r\n const gapRepulsionFactor = 0.5;\r\n const shiftNodeIfOverlap = 1;\r\n const gravityFactor = 0.002;\r\n let temperature = 100;\r\n\r\n while (temperature > minimumTemperature) {\r\n temperature = temperature * coolingFactor;\r\n // calculate the center of the diagram for applying gravity\r\n const diagramCenterCoords: Point = [0, 0];\r\n if (gravityFactor > 0) {\r\n for (const node of model.nodes) {\r\n diagramCenterCoords[0] =\r\n diagramCenterCoords[0] + node.coords[0] + node.width / 2;\r\n diagramCenterCoords[1] =\r\n diagramCenterCoords[1] + node.coords[1] + node.width / 2;\r\n }\r\n diagramCenterCoords[0] = diagramCenterCoords[0] / model.nodes.length;\r\n diagramCenterCoords[1] = diagramCenterCoords[1] / model.nodes.length;\r\n }\r\n\r\n for (const node1 of model.nodes) {\r\n const node1Adjacencies = node1.getAdjacentNodes();\r\n for (const node2 of model.nodes) {\r\n const node1CenterCoords: Point = [\r\n node1.coords[0] + node1.width / 2,\r\n node1.coords[1] + node1.height / 2\r\n ];\r\n const node2CenterCoords: Point = [\r\n node2.coords[0] + node2.width / 2,\r\n node2.coords[1] + node2.height / 2\r\n ];\r\n const distanceBetweenNodes = distanceBetweenPoints(\r\n node1.coords,\r\n node2.coords\r\n );\r\n const newNode2Coords: Point = [node2.coords[0], node2.coords[1]];\r\n // apply attraction forces between connected nodes\r\n if (node1Adjacencies.includes(node2)) {\r\n if (distanceBetweenNodes > 0) {\r\n if (\r\n distanceBetweenNodes >\r\n gapSize +\r\n (Math.max(node1.width, node1.height) +\r\n Math.max(node2.width, node2.height)) /\r\n 2\r\n ) {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] -\r\n (node2CenterCoords[0] - node1CenterCoords[0]) *\r\n attractionFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] -\r\n (node2CenterCoords[1] - node1CenterCoords[1]) *\r\n attractionFactor;\r\n } else {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] +\r\n (node2CenterCoords[0] - node1CenterCoords[0]) *\r\n gapRepulsionFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] +\r\n (node2CenterCoords[1] - node1CenterCoords[1]) *\r\n gapRepulsionFactor;\r\n }\r\n }\r\n }\r\n // apply repulsion forces between nodes\r\n if (distanceBetweenNodes > 0) {\r\n const force =\r\n repulsionFactor / (distanceBetweenNodes * distanceBetweenNodes);\r\n newNode2Coords[0] =\r\n newNode2Coords[0] +\r\n (force * (node2CenterCoords[0] - node1CenterCoords[0])) /\r\n distanceBetweenNodes;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] +\r\n (force * (node2CenterCoords[1] - node1CenterCoords[1])) /\r\n distanceBetweenNodes;\r\n } else {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] + shiftNodeIfOverlap * (Math.random() * 2 - 1);\r\n newNode2Coords[1] =\r\n newNode2Coords[1] + shiftNodeIfOverlap * (Math.random() * 2 - 1);\r\n }\r\n // apply gravity force\r\n if (gravityFactor > 0) {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] -\r\n (node2CenterCoords[0] - diagramCenterCoords[0]) * gravityFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] -\r\n (node2CenterCoords[1] - diagramCenterCoords[1]) * gravityFactor;\r\n }\r\n // limit force\r\n if (newNode2Coords[0] - node2.coords[0] > temperature) {\r\n newNode2Coords[0] = node2.coords[0] + temperature;\r\n } else if (newNode2Coords[0] - node2.coords[0] < -temperature) {\r\n newNode2Coords[0] = node2.coords[0] - temperature;\r\n }\r\n if (newNode2Coords[1] - node2.coords[1] > temperature) {\r\n newNode2Coords[1] = node2.coords[1] + temperature;\r\n } else if (newNode2Coords[1] - node2.coords[1] < -temperature) {\r\n newNode2Coords[1] = node2.coords[1] - temperature;\r\n }\r\n\r\n node2.move(newNode2Coords);\r\n }\r\n }\r\n }\r\n\r\n if (model.canvas && model.canvas.snapToGrid) {\r\n for (const node of model.nodes) {\r\n const snappedCoords = model.canvas.getClosestGridPoint(node.coords);\r\n node.move(snappedCoords);\r\n }\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges all the nodes in a horizontal line.\r\n * @public\r\n */\r\nexport class HorizontalLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n const nodesToBeArranged = model.nodes.all();\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n\r\n let widthAccumulator = 0;\r\n\r\n for (const node of nodesToBeArranged) {\r\n node.move([widthAccumulator, 0]);\r\n widthAccumulator += node.width + gapSize;\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges the nodes by their priority first.\r\n * @public\r\n */\r\nexport class PriorityLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const maximumPriority = Math.max(\r\n ...model.nodes.filter((n) => !n.removed).map((n) => n.getPriority())\r\n );\r\n const minimumPriority = Math.min(\r\n ...model.nodes.filter((n) => !n.removed).map((n) => n.getPriority())\r\n );\r\n if (maximumPriority === minimumPriority) {\r\n // if there's no disparity in priorities, just use breadth layout\r\n new BreadthLayout().apply(model);\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n const nodesToBeArranged = [...model.nodes];\r\n const nodeArrangement: DiagramNode[][] = [];\r\n\r\n const nodesWithMaximumPriorityToBeArranged = model.nodes.filter(\r\n (n) => !n.removed && n.getPriority() >= maximumPriority\r\n );\r\n const nodesWithMaximumPriority: DiagramNode[] = [];\r\n if (nodesWithMaximumPriorityToBeArranged.length > 1) {\r\n // use bfs to sort nodes by distance to the first node\r\n const bfsRoot = nodesWithMaximumPriorityToBeArranged[0];\r\n nodesWithMaximumPriorityToBeArranged.splice(0, 1);\r\n nodesWithMaximumPriority.push(bfsRoot);\r\n const bfsQueue = [bfsRoot];\r\n const bfsExplored = [bfsRoot];\r\n while (bfsQueue.length > 0) {\r\n const bfsNode = bfsQueue[0];\r\n bfsQueue.splice(0, 1);\r\n if (nodesWithMaximumPriorityToBeArranged.includes(bfsNode)) {\r\n nodesWithMaximumPriority.push(bfsNode);\r\n removeIfExists(nodesWithMaximumPriorityToBeArranged, bfsNode);\r\n }\r\n const bfsAdjacentNodes = bfsNode.getAdjacentNodes();\r\n for (const bfsAdjacentNode of bfsAdjacentNodes) {\r\n if (!bfsExplored.includes(bfsAdjacentNode)) {\r\n bfsQueue.push(bfsAdjacentNode);\r\n bfsExplored.push(bfsAdjacentNode);\r\n }\r\n }\r\n }\r\n // nodes that are disconnected from other nodes\r\n for (const node of nodesWithMaximumPriorityToBeArranged) {\r\n nodesWithMaximumPriority.push(node);\r\n }\r\n } else {\r\n nodesWithMaximumPriority.push(nodesWithMaximumPriorityToBeArranged[0]);\r\n }\r\n for (const node of nodesWithMaximumPriority) {\r\n removeIfExists(nodesToBeArranged, node);\r\n nodeArrangement.push([node]);\r\n }\r\n // last column, for disconnected nodes\r\n nodeArrangement.push([]);\r\n\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n while (nodesToBeArranged.length > 0) {\r\n // use bfs to find the closest high priority node\r\n const nodeToBeArranged = nodesToBeArranged[0];\r\n nodesToBeArranged.splice(0, 1);\r\n const bfsQueue = [nodeToBeArranged];\r\n const bfsExplored = [nodeToBeArranged];\r\n let bfsFound = false;\r\n while (bfsQueue.length > 0) {\r\n const bfsNode = bfsQueue[0];\r\n bfsQueue.splice(0, 1);\r\n const indexOfBfsNode = nodesWithMaximumPriority.indexOf(bfsNode);\r\n if (indexOfBfsNode >= 0) {\r\n nodeArrangement[indexOfBfsNode].push(nodeToBeArranged);\r\n bfsFound = true;\r\n break;\r\n } else {\r\n const bfsAdjacentNodes = bfsNode.getAdjacentNodes();\r\n for (const bfsAdjacentNode of bfsAdjacentNodes) {\r\n if (!bfsExplored.includes(bfsAdjacentNode)) {\r\n bfsQueue.push(bfsAdjacentNode);\r\n bfsExplored.push(bfsAdjacentNode);\r\n }\r\n }\r\n }\r\n }\r\n if (!bfsFound) {\r\n // node is disconnected from any of the high priority nodes\r\n nodeArrangement[nodeArrangement.length - 1].push(nodeToBeArranged);\r\n }\r\n }\r\n\r\n let widthAccumulator = 0;\r\n for (let i = 0; i < nodeArrangement.length; ++i) {\r\n let heightAccumulator = 0;\r\n for (let j = 0; j < nodeArrangement[i].length; ++j) {\r\n const node = nodeArrangement[i][j];\r\n node.move([widthAccumulator, heightAccumulator]);\r\n heightAccumulator += gapSize + node.height;\r\n }\r\n const maximumWidth = Math.max(...nodeArrangement[i].map((n) => n.width));\r\n widthAccumulator += gapSize + maximumWidth;\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges the nodes in trees from left to right by depth relative to the nodes with most priority.\r\n * @public\r\n */\r\nexport class TreeLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const maximumPriority = Math.max(\r\n ...model.nodes.filter((n) => !n.removed).map((n) => n.getPriority())\r\n );\r\n const minimumPriority = Math.min(\r\n ...model.nodes.filter((n) => !n.removed).map((n) => n.getPriority())\r\n );\r\n if (maximumPriority === minimumPriority) {\r\n // if there's no disparity in priorities, just use breadth layout\r\n new BreadthLayout().apply(model);\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n const nodesToBeArranged = [...model.nodes].sort(\r\n (n1, n2) => n2.getPriority() - n1.getPriority()\r\n );\r\n const branches: Branch[] = [];\r\n\r\n while (nodesToBeArranged.length > 0) {\r\n const nodeToBeArranged = nodesToBeArranged[0];\r\n nodesToBeArranged.splice(0, 1);\r\n const branch = new Branch(undefined, nodeToBeArranged);\r\n populateBranches(branch, nodesToBeArranged);\r\n branches.push(branch);\r\n }\r\n\r\n const branchArrangement: Branch[][] = [];\r\n for (const branch of branches) {\r\n branchArrangement.push([branch]);\r\n arrangeBranches(branch, branchArrangement, branchArrangement.length);\r\n }\r\n\r\n const maximumHeight = Math.max(...model.nodes.all().map((n) => n.height));\r\n let widthAccumulator = 0;\r\n for (let i = 0; i < branchArrangement.length; ++i) {\r\n let heightAccumulator = 0;\r\n for (let j = 0; j < branchArrangement[i].length; ++j) {\r\n const branch = branchArrangement[i][j];\r\n branch.node.move([widthAccumulator, heightAccumulator]);\r\n heightAccumulator +=\r\n (gapSize + maximumHeight) * branch.countBranchHeight();\r\n }\r\n const maximumWidth = Math.max(\r\n ...branchArrangement[i].map((b) => b.node.width)\r\n );\r\n widthAccumulator += gapSize + maximumWidth;\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n\r\nconst populateBranches = (branch: Branch, nodesToBeArranged: DiagramNode[]) => {\r\n for (const adjacentNode of branch.node.getAdjacentNodes()) {\r\n const indexOfAdjacentNode = nodesToBeArranged.indexOf(adjacentNode);\r\n if (indexOfAdjacentNode >= 0) {\r\n nodesToBeArranged.splice(indexOfAdjacentNode, 1);\r\n const newBranch = branch.addBranch(adjacentNode);\r\n populateBranches(newBranch, nodesToBeArranged);\r\n }\r\n }\r\n};\r\n\r\nconst arrangeBranches = (\r\n branch: Branch,\r\n branchArrangement: Branch[][],\r\n index: number\r\n) => {\r\n if (branch.branches.length > 0) {\r\n while (index >= branchArrangement.length) {\r\n branchArrangement.push([]);\r\n }\r\n for (const subbranch of branch.branches) {\r\n branchArrangement[index].push(subbranch);\r\n arrangeBranches(subbranch, branchArrangement, index + 1);\r\n }\r\n }\r\n};\r\n\r\nclass Branch {\r\n parent?: Branch;\r\n branches: Branch[];\r\n depth: number;\r\n node: DiagramNode;\r\n\r\n constructor(parent: Branch | undefined, node: DiagramNode) {\r\n this.parent = parent;\r\n this.branches = [];\r\n this.depth = 0;\r\n this.node = node;\r\n }\r\n\r\n addBranch(node: DiagramNode): Branch {\r\n const newBranch = new Branch(this, node);\r\n newBranch.depth = this.depth + 1;\r\n this.branches.push(newBranch);\r\n return newBranch;\r\n }\r\n\r\n countBranchHeight(): number {\r\n if (this.branches.length <= 0) {\r\n return 1;\r\n } else {\r\n let total = 0;\r\n for (const subbranch of this.branches) {\r\n total += subbranch.countBranchHeight();\r\n }\r\n return total;\r\n }\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges all the nodes in a vertical line.\r\n * @public\r\n */\r\nexport class VerticalLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n const nodesToBeArranged = model.nodes.all();\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n\r\n let heightAccumulator = 0;\r\n\r\n for (const node of nodesToBeArranged) {\r\n node.move([0, heightAccumulator]);\r\n heightAccumulator += node.height + gapSize;\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { AdjacencyLayout } from './adjacency-layout';\r\nimport { BreadthAdjacencyLayout } from './breadth-adjacency-layout';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { ForceLayout } from './force-layout';\r\nimport { HorizontalLayout } from './horizontal-layout';\r\nimport { PriorityLayout } from './priority-layout';\r\nimport { TreeLayout } from './tree-layout';\r\nimport { VerticalLayout } from './vertical-layout';\r\n\r\n/**\r\n * A layout algorithm that can be applied to a diagram.\r\n * @public\r\n */\r\nexport interface DiagramLayout {\r\n /**\r\n * Rearranges the diagram elements of the given model according to a layout algorithm.\r\n * @public\r\n */\r\n apply(model: DiagramModel): DiagramModel;\r\n}\r\n\r\n/**\r\n * Mapping of available layout algorithms.\r\n */\r\nexport const layouts: { [key: string]: DiagramLayout } = {\r\n adjacency: new AdjacencyLayout(),\r\n breadth: new BreadthLayout(),\r\n 'breadth-adjacency': new BreadthAdjacencyLayout(),\r\n force: new ForceLayout(),\r\n horizontal: new HorizontalLayout(),\r\n priority: new PriorityLayout(),\r\n tree: new TreeLayout(),\r\n vertical: new VerticalLayout()\r\n};\r\n","/**\r\n * User events.\r\n * @private\r\n */\r\nexport enum Events {\r\n Blur = 'blur',\r\n Change = 'change',\r\n Click = 'click',\r\n ContextMenu = 'contextmenu',\r\n DoubleClick = 'dblclick',\r\n Focus = 'focus',\r\n FocusIn = 'focusin',\r\n FocusOut = 'focusout',\r\n Input = 'input',\r\n KeyDown = 'keydown',\r\n KeyUp = 'keyup',\r\n MouseDown = 'mousedown',\r\n MouseMove = 'mousemove',\r\n MouseOut = 'mouseout',\r\n MouseOver = 'mouseover',\r\n MouseUp = 'mouseup',\r\n TouchStart = 'touchstart',\r\n TouchEnd = 'touchend',\r\n Wheel = 'wheel'\r\n}\r\n\r\n/**\r\n * Keys in keyboard events.\r\n * @private\r\n */\r\nexport enum Keys {\r\n Alt = 'Alt',\r\n AltGraph = 'AltGraph',\r\n ArrowDown = 'ArrowDown',\r\n ArrowLeft = 'ArrowLeft',\r\n ArrowRight = 'ArrowRight',\r\n ArrowUp = 'ArrowUp',\r\n Backspace = 'Backspace',\r\n Control = 'Control',\r\n Delete = 'Delete',\r\n End = 'End',\r\n Enter = 'Enter',\r\n Escape = 'Escape',\r\n Home = 'Home',\r\n OS = 'OS',\r\n PageDown = 'PageDown',\r\n PageUp = 'PageUp',\r\n Shift = 'Shift',\r\n Tab = 'Tab'\r\n}\r\n\r\n/**\r\n * Types of events used by D3's drag functionality.\r\n * @private\r\n */\r\nexport enum DragEvents {\r\n Drag = 'drag',\r\n Start = 'start',\r\n End = 'end'\r\n}\r\n\r\n/**\r\n * Types of events used by D3's zoom functionality.\r\n * @private\r\n */\r\nexport enum ZoomEvents {\r\n Zoom = 'zoom',\r\n Start = 'start',\r\n End = 'end'\r\n}\r\n","export enum CursorStyle {\r\n AllScroll = 'all-scroll',\r\n Auto = 'auto',\r\n EWResize = 'ew-resize',\r\n Grab = 'grab',\r\n Grabbing = 'grabbing',\r\n Move = 'move',\r\n NoDrop = 'no-drop',\r\n NSResize = 'ns-resize',\r\n NotAllowed = 'not-allowed',\r\n ZoomIn = 'zoom-in',\r\n ZoomOut = 'zoom-out'\r\n}\r\n","export const numberOfColumns = (s: string): number => {\n return Math.max(...s.split('\\n').map((a) => a.length));\n};\nexport const numberOfRows = (s: string): number => {\n return s.match(/\\n/g)?.length || 0;\n};\n","import { v4 as uuidv4 } from 'uuid';\r\nimport type { Canvas } from '../../../interfaces/canvas';\r\nimport {\r\n AddConnectionCollabAction,\r\n AddNodeCollabAction,\r\n CollabAction,\r\n CollabActionSerialized,\r\n EditFieldCollabAction,\r\n PasteCollabAction,\r\n SetGeometryCollabAction,\r\n SetSelfRemovedCollabAction,\r\n UpdateValuesCollabAction\r\n} from './collab-action';\r\nimport { CollabTimestamp } from './primitives';\r\n\r\n/**\r\n * A collaboration engine, which manages collaboration for a diagram.\r\n * @private\r\n */\r\nexport class CollabEngine {\r\n /**\r\n * Canvas that this collaboration engine belongs to.\r\n * @private\r\n */\r\n readonly canvas: Canvas;\r\n /**\r\n * The local replica ID.\r\n */\r\n readonly replicaId: string;\r\n /**\r\n * Event handler for when we request to send a message to the server.\r\n */\r\n onSend?: (message: CollabActionSerialized) => void;\r\n /**\r\n * Whether we have joined (or are joining) a room on the server.\r\n */\r\n isInRoom = false;\r\n\r\n constructor(canvas: Canvas) {\r\n this.canvas = canvas;\r\n this.replicaId = uuidv4();\r\n }\r\n\r\n /**\r\n * Returns a fresh timestamp, suitable for use by new CollabActions.\r\n */\r\n freshTimestamp(): CollabTimestamp {\r\n this.canvas.model.logicalClock++;\r\n return [this.canvas.model.logicalClock, this.replicaId];\r\n }\r\n\r\n /**\r\n * Returns a fresh unique ID, suitable for use by new CollabActions.\r\n */\r\n freshId(): string {\r\n // For more compressible saves, consider using a [dot ID](https://mattweidner.com/2023/09/26/crdt-survey-3.html#unique-ids-dots) instead of a new UUID each time.\r\n\r\n // Since IDs are often used in CSS query selectors, ensure that they start with\r\n // a letter instead of a number.\r\n // See https://stackoverflow.com/a/34777644/16782898\r\n return 'id' + uuidv4();\r\n }\r\n\r\n /**\r\n * Performs the action - immediately locally, and eventually for remote collaborators.\r\n */\r\n doCollaboratively(action: CollabAction): void {\r\n // Perform the action locally.\r\n // Note: if this errors, it will prevent the action from performing collaboratively.\r\n action.do();\r\n\r\n if (this.onSend) {\r\n // Send the action to the server.\r\n const serialized = action.serialize();\r\n this.onSend(serialized);\r\n }\r\n }\r\n\r\n /**\r\n * Processes a message received from the server.\r\n *\r\n * The message is assumed to be non-redundant (in particular, not one of\r\n * our own messages) and delivered after all prior messages on the server.\r\n */\r\n receive(message: CollabActionSerialized): void {\r\n // Update local logical clock.\r\n if ('timestamp' in message) {\r\n this.canvas.model.logicalClock = Math.max(\r\n this.canvas.model.logicalClock,\r\n message.timestamp[0]\r\n );\r\n }\r\n\r\n // Perform CollabAction.\r\n switch (message.type) {\r\n case 'addNode': {\r\n const action = AddNodeCollabAction.deserialize(this.canvas, message);\r\n action.do();\r\n break;\r\n }\r\n case 'setGeometry': {\r\n const action = SetGeometryCollabAction.deserialize(\r\n this.canvas,\r\n message\r\n );\r\n action.do();\r\n break;\r\n }\r\n case 'addConnection': {\r\n const action = AddConnectionCollabAction.deserialize(\r\n this.canvas,\r\n message\r\n );\r\n action.do();\r\n break;\r\n }\r\n case 'editField': {\r\n const action = EditFieldCollabAction.deserialize(this.canvas, message);\r\n action.do();\r\n break;\r\n }\r\n case 'updateValues': {\r\n const action = UpdateValuesCollabAction.deserialize(\r\n this.canvas,\r\n message\r\n );\r\n action.do();\r\n break;\r\n }\r\n case 'setSelfRemoved': {\r\n const action = SetSelfRemovedCollabAction.deserialize(\r\n this.canvas,\r\n message\r\n );\r\n action.do();\r\n break;\r\n }\r\n case 'paste': {\r\n const action = PasteCollabAction.deserialize(this.canvas, message);\r\n action.do();\r\n break;\r\n }\r\n default: {\r\n const exhaustiveMessage: never = message;\r\n console.error(\r\n 'Unknown CollabAction type, skipping:',\r\n exhaustiveMessage\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","import { Point } from '../../../util/canvas-util';\r\nimport { Side } from '../../../util/svg-util';\r\nimport { CollabTimestamp, CollabTimestampSet } from '../collab/primitives';\r\n\r\nexport const DAGA_FILE_VERSION = 1;\r\n\r\n/**\r\n * Representation of a diagram model in a serialized format.\r\n * @see DiagramModel\r\n * @public\r\n */\r\nexport interface DagaModel {\r\n id?: string;\r\n /** User version */\r\n version?: string;\r\n name: string;\r\n description?: string;\r\n type: string;\r\n /** Serialization file format version for tooling */\r\n typeVersion: number;\r\n createdAt: Date;\r\n updatedAt: Date;\r\n updatedDaysAgo?: string;\r\n nodes: DagaNode[];\r\n connections: DagaConnection[];\r\n data: { [key: string]: unknown };\r\n collabMeta?: {\r\n logicalClock: number;\r\n dataTimestamps: CollabTimestampSet;\r\n };\r\n}\r\n\r\nexport interface DagaNode {\r\n id: string;\r\n type: string;\r\n sections?: DagaSection[];\r\n ports?: DagaPort[];\r\n label: string;\r\n coords: Point;\r\n width: number;\r\n height: number;\r\n data: { [key: string]: unknown };\r\n collabMeta?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n geometryTimestamp: CollabTimestamp | null;\r\n dataTimestamps: CollabTimestampSet;\r\n label?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n textTimestamp: CollabTimestamp | null;\r\n };\r\n };\r\n}\r\n\r\nexport interface DagaSection {\r\n id: string;\r\n ports?: DagaPort[];\r\n label: string;\r\n indexXInNode: number;\r\n indexYInNode: number;\r\n coords: Point;\r\n width: number;\r\n height: number;\r\n collabMeta?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n label?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n textTimestamp: CollabTimestamp | null;\r\n };\r\n };\r\n}\r\n\r\nexport interface DagaPort {\r\n id: string;\r\n coords: Point;\r\n direction: Side;\r\n label: string;\r\n collabMeta?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n label?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n textTimestamp: CollabTimestamp | null;\r\n };\r\n };\r\n}\r\n\r\nexport interface DagaConnection {\r\n id: string;\r\n type: string;\r\n start: string;\r\n end: string;\r\n startLabel: string;\r\n middleLabel: string;\r\n endLabel: string;\r\n points: Point[];\r\n data: { [key: string]: unknown };\r\n collabMeta?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n dataTimestamps: CollabTimestampSet;\r\n };\r\n}\r\n","import { roundPoint } from '../../../util/canvas-util';\r\nimport { DiagramConnection } from '../diagram-connection';\r\nimport { DiagramField } from '../diagram-field';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport {\r\n DAGA_FILE_VERSION,\r\n DagaConnection,\r\n DagaModel,\r\n DagaNode\r\n} from './daga-model';\r\nimport { DiagramModelExporter } from './diagram-model-exporter';\r\n\r\n/**\r\n * Importer which exports a diagram to its daga model representation.\r\n * @public\r\n */\r\nexport class DagaExporter implements DiagramModelExporter<DagaModel> {\r\n export(model: DiagramModel, includeCollabMeta = false): DagaModel {\r\n const result: DagaModel = {\r\n name: model.name,\r\n type: model.type,\r\n typeVersion: DAGA_FILE_VERSION,\r\n createdAt: model.createdAt,\r\n updatedAt: model.updatedAt,\r\n nodes: [],\r\n connections: [],\r\n data: model.valueSet.getValues(),\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n logicalClock: model.logicalClock,\r\n dataTimestamps: model.valueSet.getTimestamps()\r\n }\r\n }\r\n : {})\r\n };\r\n if (model.id) {\r\n result.id = model.id;\r\n }\r\n if (model.description) {\r\n result.description = model.description;\r\n }\r\n\r\n for (const node of model.nodes) {\r\n if (!includeCollabMeta && node.removed) continue;\r\n result.nodes.push(this.exportNode(node, includeCollabMeta));\r\n }\r\n for (const connection of model.connections) {\r\n if (!includeCollabMeta && connection.removed) continue;\r\n result.connections.push(\r\n this.exportConnection(connection, includeCollabMeta)\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n exportNode(node: DiagramNode, includeCollabMeta = false): DagaNode {\r\n const sections = [];\r\n for (const section of node.sections) {\r\n const ports = [];\r\n for (const port of section.ports) {\r\n ports.push({\r\n id: port.id,\r\n coords: roundPoint(port.coords),\r\n direction: port.direction,\r\n label: port.label?.text || '',\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: port.removed,\r\n selfRemoved: port.selfRemoved,\r\n selfRemovedTimestamp: port.selfRemovedTimestamp,\r\n ...this.exportLabelCollabMeta(port)\r\n }\r\n }\r\n : {})\r\n });\r\n }\r\n sections.push({\r\n id: section.id,\r\n ports,\r\n label: section.label?.text || '',\r\n indexXInNode: section.indexXInNode,\r\n indexYInNode: section.indexYInNode,\r\n coords: roundPoint(section.coords),\r\n width: section.width,\r\n height: section.height,\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: section.removed,\r\n selfRemoved: section.selfRemoved,\r\n selfRemovedTimestamp: section.selfRemovedTimestamp,\r\n ...this.exportLabelCollabMeta(section)\r\n }\r\n }\r\n : {})\r\n });\r\n }\r\n const ports = [];\r\n for (const port of node.ports) {\r\n ports.push({\r\n id: port.id,\r\n coords: roundPoint(port.coords),\r\n direction: port.direction,\r\n label: port.label?.text || '',\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: port.removed,\r\n selfRemoved: port.selfRemoved,\r\n selfRemovedTimestamp: port.selfRemovedTimestamp,\r\n ...this.exportLabelCollabMeta(port)\r\n }\r\n }\r\n : {})\r\n });\r\n }\r\n return {\r\n id: node.id,\r\n type: node.type.id,\r\n sections,\r\n ports,\r\n label: node.label?.text || '',\r\n coords: roundPoint(node.coords),\r\n width: node.width,\r\n height: node.height,\r\n data: node.valueSet.getValues(),\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: node.removed,\r\n selfRemoved: node.selfRemoved,\r\n selfRemovedTimestamp: node.selfRemovedTimestamp,\r\n geometryTimestamp: node.geometryTimestamp,\r\n dataTimestamps: node.valueSet.getTimestamps(),\r\n ...this.exportLabelCollabMeta(node)\r\n }\r\n }\r\n : {})\r\n };\r\n }\r\n\r\n exportConnection(\r\n connection: DiagramConnection,\r\n includeCollabMeta = false\r\n ): DagaConnection {\r\n return {\r\n id: connection.id,\r\n type: connection.type.id,\r\n start: connection.start?.id || '',\r\n end: connection.end?.id || '',\r\n startLabel: connection.startLabel,\r\n middleLabel: connection.middleLabel,\r\n endLabel: connection.endLabel,\r\n points: connection.points,\r\n data: connection.valueSet.getValues(),\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: connection.removed,\r\n selfRemoved: connection.selfRemoved,\r\n selfRemovedTimestamp: connection.selfRemovedTimestamp,\r\n dataTimestamps: connection.valueSet.getTimestamps()\r\n }\r\n }\r\n : {})\r\n };\r\n }\r\n\r\n exportLabelCollabMeta({ label }: { label?: DiagramField }) {\r\n if (label) {\r\n return {\r\n label: {\r\n removed: label.removed,\r\n selfRemoved: label.selfRemoved,\r\n selfRemovedTimestamp: label.selfRemovedTimestamp,\r\n textTimestamp: label.textTimestamp\r\n }\r\n };\r\n } else return {};\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { Events } from '../../util/events';\r\nimport { DiagramElement } from './diagram-element';\r\n\r\n/**\r\n * Represents an action taken by the user on the diagram.\r\n * @public\r\n */\r\nexport class DiagramEvent {\r\n cause: Event;\r\n type: Events;\r\n target?: DiagramElement;\r\n coords?: Point;\r\n defaultPrevented: boolean;\r\n\r\n constructor(\r\n cause: Event,\r\n type: Events,\r\n target?: DiagramElement,\r\n coords?: Point\r\n ) {\r\n this.cause = cause;\r\n this.type = type;\r\n this.target = target;\r\n this.coords = coords;\r\n this.defaultPrevented = false;\r\n }\r\n\r\n preventDefault(): void {\r\n this.defaultPrevented = true;\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { DiagramElement, DiagramEntitySet } from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * A foreign object which is inserted with arbitrary html into a diagram.\r\n * Similar to a diagram object, but it's part of a node or section and it moves and stretches as its geometry changes.\r\n * Diagram decorators are not serialized with other diagram elements.\r\n * @see DiagramNode\r\n * @see DiagramObject\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramDecorator extends DiagramElement {\r\n /**\r\n * Element that this port belongs to.\r\n * @public\r\n */\r\n rootElement?: DiagramNode | DiagramSection;\r\n /**\r\n * Coordinates of this decorator.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this decorator along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this decorator along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n priority: number;\r\n html: string;\r\n\r\n constructor(\r\n model: DiagramModel,\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n priority: number,\r\n html: string,\r\n id: string\r\n ) {\r\n if (model.objects.get(id) !== undefined) {\r\n throw new Error(`DiagramObject with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.rootElement = rootElement;\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n this.priority = priority;\r\n this.html = html;\r\n }\r\n\r\n override select():\r\n | d3.Selection<SVGGElement, unknown, null, unknown>\r\n | undefined {\r\n return this.model.canvas\r\n ?.selectCanvasView()\r\n ?.select(`foreignObject#${this.id}`);\r\n }\r\n\r\n get removed() {\r\n return (\r\n this.selfRemoved ||\r\n (this.rootElement !== undefined && this.rootElement.removed)\r\n );\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateDecoratorsInView(this.id);\r\n }\r\n\r\n /**\r\n * Change the coordinates of this decorator to the given coordinates.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n this.coords = coords;\r\n this.updateInView();\r\n }\r\n\r\n getPriority(): number {\r\n return this.priority;\r\n }\r\n}\r\n\r\nexport class DiagramDecoratorSet extends DiagramEntitySet<DiagramDecorator> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of decorators for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new decorator and add it to this set.\r\n * @private\r\n */\r\n new(\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n priority: number,\r\n html: string,\r\n id: string\r\n ): DiagramDecorator {\r\n const decorator = new DiagramDecorator(\r\n this.model,\r\n rootElement,\r\n coords,\r\n width,\r\n height,\r\n priority,\r\n html,\r\n id\r\n );\r\n super.add(decorator);\r\n decorator.updateInView();\r\n // add this port to its root element\r\n if (rootElement !== undefined) {\r\n rootElement.decorators.push(decorator);\r\n }\r\n return decorator;\r\n }\r\n\r\n override remove(id: string) {\r\n const decorator = this.get(id);\r\n if (decorator) {\r\n // remove from root element\r\n if (\r\n decorator.rootElement instanceof DiagramNode ||\r\n decorator.rootElement instanceof DiagramSection\r\n ) {\r\n removeIfExists(decorator.rootElement.decorators, decorator);\r\n }\r\n // remove from set of objects\r\n super.remove(id);\r\n // remove from canvas\r\n decorator.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { DiagramElement, DiagramEntitySet } from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\n\r\n/**\r\n * A foreign object which is inserted with arbitrary html into a diagram.\r\n * Diagram objects are not serialized with other diagram elements.\r\n * @public\r\n */\r\nexport class DiagramObject extends DiagramElement {\r\n /**\r\n * Coordinates of this object.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this object along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this object along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n priority: number;\r\n html: string;\r\n\r\n constructor(\r\n model: DiagramModel,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n priority: number,\r\n html: string,\r\n id: string\r\n ) {\r\n if (model.objects.get(id) !== undefined) {\r\n throw new Error(`DiagramObject with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n this.priority = priority;\r\n this.html = html;\r\n }\r\n\r\n override select():\r\n | d3.Selection<SVGGElement, unknown, null, unknown>\r\n | undefined {\r\n return this.model.canvas\r\n ?.selectCanvasView()\r\n ?.select(`foreignObject#${this.id}`);\r\n }\r\n\r\n get removed() {\r\n return this.selfRemoved;\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateObjectsInView(this.id);\r\n }\r\n\r\n /**\r\n * Change the coordinates of this object to the given coordinates.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n this.coords = coords;\r\n this.updateInView();\r\n }\r\n\r\n getPriority(): number {\r\n return this.priority;\r\n }\r\n}\r\n\r\nexport class DiagramObjectSet extends DiagramEntitySet<DiagramObject> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of objects for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new object and add it to this set.\r\n * @private\r\n */\r\n new(\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n priority: number,\r\n html: string,\r\n id: string\r\n ): DiagramObject {\r\n const object = new DiagramObject(\r\n this.model,\r\n coords,\r\n width,\r\n height,\r\n priority,\r\n html,\r\n id\r\n );\r\n super.add(object);\r\n object.updateInView();\r\n return object;\r\n }\r\n\r\n override remove(id: string) {\r\n const object = this.get(id);\r\n if (object) {\r\n // remove from set of objects\r\n super.remove(id);\r\n // remove from canvas\r\n object.updateInView();\r\n }\r\n }\r\n}\r\n","import { Canvas } from '../../interfaces/canvas';\r\nimport { DiagramConnectionSet } from './diagram-connection';\r\nimport { DiagramDecoratorSet } from './diagram-decorator';\r\nimport { DiagramFieldSet } from './diagram-field';\r\nimport { DiagramNodeSet } from './diagram-node';\r\nimport { DiagramObjectSet } from './diagram-object';\r\nimport { DiagramPortSet } from './diagram-port';\r\nimport { Property, PropertySet, ValueSet } from './diagram-property';\r\nimport { DiagramSectionSet } from './diagram-section';\r\n\r\n/**\r\n * Stores the data of a diagram.\r\n * Represents the state of the diagram.\r\n * @public\r\n */\r\nexport class DiagramModel {\r\n /**\r\n * The canvas where this model's data is being rendered.\r\n * @private\r\n */\r\n canvas?: Canvas;\r\n /**\r\n * Nodes of this model.\r\n * @see DiagramNode\r\n * @public\r\n */\r\n nodes = new DiagramNodeSet(this);\r\n /**\r\n * Sections of this model.\r\n * @see DiagramSection\r\n * @public\r\n */\r\n sections = new DiagramSectionSet(this);\r\n /**\r\n * Ports of this model.\r\n * @see DiagramPort\r\n * @public\r\n */\r\n ports = new DiagramPortSet(this);\r\n /**\r\n * Connections of this model.\r\n * @see DiagramConnection\r\n * @public\r\n */\r\n connections = new DiagramConnectionSet(this);\r\n /**\r\n * Fields of this model.\r\n * @see DiagramField\r\n * @public\r\n */\r\n fields = new DiagramFieldSet(this);\r\n /**\r\n * Objects of this model.\r\n * @see DiagramObject\r\n * @public\r\n */\r\n objects = new DiagramObjectSet(this);\r\n /**\r\n * Decorators of this model.\r\n * @see DiagramDecorator\r\n * @public\r\n */\r\n decorators = new DiagramDecoratorSet(this);\r\n /**\r\n * Identifier of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n id: string | undefined;\r\n /**\r\n * Name of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n name: string;\r\n /**\r\n * Description of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n description?: string;\r\n /**\r\n * Type of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n type: string;\r\n /**\r\n * Date of creation of this diagram. Set at the creation of the diagram.\r\n * @public\r\n */\r\n createdAt: Date;\r\n /**\r\n * Date of last changes of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n updatedAt: Date;\r\n /**\r\n * Additional properties of this diagram.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n /**\r\n * The last-seen logical clock value, used to generate CollabTimestamps.\r\n * @public\r\n */\r\n logicalClock: number;\r\n\r\n constructor(\r\n canvas: Canvas | undefined,\r\n id: string | undefined,\r\n name: string,\r\n description: string | undefined,\r\n type: string,\r\n properties: Property[] = []\r\n ) {\r\n this.canvas = canvas;\r\n this.id = id;\r\n this.name = name;\r\n this.description = description;\r\n this.type = type;\r\n this.createdAt = new Date();\r\n this.updatedAt = new Date();\r\n this.logicalClock = 0;\r\n this.valueSet = new ValueSet(new PropertySet(properties), this);\r\n }\r\n\r\n /**\r\n * Deletes everything in this diagram.\r\n * @public\r\n */\r\n clear(): void {\r\n this.canvas?.cancelAllUserActions();\r\n this.id = undefined;\r\n this.name = '';\r\n this.description = undefined;\r\n this.createdAt = new Date();\r\n this.updatedAt = new Date();\r\n this.logicalClock = 0;\r\n this.nodes.clear();\r\n this.sections.clear();\r\n this.ports.clear();\r\n this.connections.clear();\r\n this.fields.clear();\r\n this.objects.clear();\r\n this.decorators.clear();\r\n this.valueSet.resetValues();\r\n this.canvas?.updateModelInView();\r\n }\r\n}\r\n","import * as d3 from 'd3';\r\nimport { BaseType } from 'd3';\r\nimport { Subject, debounceTime } from 'rxjs';\r\nimport { DiagramValidator } from '../../errors/diagram-validator';\r\nimport { Canvas } from '../../interfaces/canvas';\r\nimport { DiagramEditor } from '../../interfaces/diagram-editor';\r\nimport { Point } from '../../util/canvas-util';\r\nimport { DragEvents, Events, Keys, ZoomEvents } from '../../util/events';\r\nimport { LineShape, linePath, lineStyleDasharray } from '../../util/line';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { generalClosedPath, pillPath } from '../../util/shape';\r\nimport { CursorStyle } from '../../util/style';\r\nimport { HorizontalAlign, Side, VerticalAlign } from '../../util/svg-util';\r\nimport { numberOfColumns, numberOfRows } from '../../util/text-util';\r\nimport { CollabEngine } from './collab/collab-engine';\r\nimport { DagaExporter } from './converters/daga-exporter';\r\nimport { DagaConnection, DagaNode } from './converters/daga-model';\r\nimport {\r\n ActionQueue,\r\n AddConnectionAction,\r\n DiagramAction,\r\n DiagramActions,\r\n EditFieldAction,\r\n PasteAction,\r\n RemoveAction,\r\n SetGeometryAction,\r\n UpdateValuesAction\r\n} from './diagram-action';\r\nimport {\r\n DiagramConfig,\r\n NodeImageLook,\r\n NodeShapedLook,\r\n NodeStretchableImageLook\r\n} from './diagram-config';\r\nimport { DiagramConnection, DiagramConnectionType } from './diagram-connection';\r\nimport { DiagramDecorator } from './diagram-decorator';\r\nimport { DiagramElement } from './diagram-element';\r\nimport { DiagramEvent } from './diagram-event';\r\nimport { DIAGRAM_FIELD_DEFAULTS, DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode, DiagramNodeType } from './diagram-node';\r\nimport { DiagramObject } from './diagram-object';\r\nimport { DIAGRAM_PORT_DEFAULTS, DiagramPort } from './diagram-port';\r\nimport { ValueSet, diff, equals } from './diagram-property';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * Thickness of the invisible path around a connection used to make it easier to click on, in pixels.\r\n * @private\r\n */\r\nexport const CONNECTION_PATH_BOX_THICKNESS = 12;\r\n/**\r\n * Thickness of the resizer line used to resize nodes and sections on drag, in pixels.\r\n * @private\r\n */\r\nexport const RESIZER_THICKNESS = 6;\r\n\r\n/**\r\n * Text to display as the title of the property editor when editing this diagram's properties.\r\n * @see PropertyEditorComponent\r\n * @private\r\n */\r\nexport const DIAGRAM_PROPERTIES_TEXT = 'Diagram properties';\r\n\r\n/**\r\n * Maximum number of user actions that can be recorded in the user action queue.\r\n * @see ActionQueue\r\n * @private\r\n */\r\nexport const ACTION_QUEUE_SIZE = 25;\r\n\r\nconst UNFINISHED_CONNECTION_ID = 'diagram-connection-unfinished';\r\n\r\nconst MAX_DISTANCE_TO_PORT = 100;\r\n\r\n// Context menu constants\r\nconst CONTEXT_MENU_MENU_RADIUS = 96;\r\nconst CONTEXT_MENU_BUTTON_RADIUS = 32;\r\nconst CONTEXT_MENU_TOTAL_RADIUS =\r\n CONTEXT_MENU_MENU_RADIUS + CONTEXT_MENU_BUTTON_RADIUS;\r\nconst CONTEXT_MENU_BUTTON_PADDING_RADIANS = Math.PI / 4;\r\nconst CONTEXT_MENU_ANIMATION_DURATION_MS = 100;\r\n\r\nexport class DiagramCanvas implements Canvas {\r\n parentComponent!: DiagramEditor;\r\n diagramRoot!: HTMLElement;\r\n\r\n model: DiagramModel;\r\n backgroundColor: string;\r\n gridSize: number;\r\n snapToGrid: boolean;\r\n guessConnectionType: boolean;\r\n connectionType?: DiagramConnectionType;\r\n validators: DiagramValidator[];\r\n layoutFormat?: string;\r\n userActions: { [key in DiagramActions]?: boolean };\r\n actionQueue: ActionQueue;\r\n collabEngine: CollabEngine;\r\n\r\n private static canvasCount = 0;\r\n private backgroundPatternId = `daga-background-pattern-id-${DiagramCanvas.canvasCount++}`;\r\n\r\n private zoomBehavior!: d3.ZoomBehavior<SVGRectElement, unknown>;\r\n private zoomTransform: d3.ZoomTransform = d3.zoomIdentity;\r\n private priorityThreshold?: number;\r\n private priorityThresholds: number[];\r\n private mainUserHighlight?: DiagramElement = undefined;\r\n private userHighlight: DiagramElement[] = [];\r\n /**\r\n * Elements selected by the user. Only nodes and connections should be selected.\r\n */\r\n private userSelection: DiagramElement[] = [];\r\n private propertyEditorSelection?: { valueSet: ValueSet } & (\r\n | DiagramElement\r\n | DiagramModel\r\n );\r\n private propertyEditorValues?: { [key: string]: unknown };\r\n private unfinishedConnection?: DiagramConnection;\r\n /**\r\n * Invisible path followed by an unfinished connection. Used for making unfinished connections stop before the cursor rather than stopping right at the cursor.\r\n */\r\n private unfinishedConnectionTracer?: d3.Selection<\r\n SVGPathElement,\r\n unknown,\r\n null,\r\n unknown\r\n >;\r\n private inputFieldContainer?: d3.Selection<\r\n SVGForeignObjectElement,\r\n unknown,\r\n null,\r\n unknown\r\n >;\r\n private contextMenuContainer?: d3.Selection<\r\n SVGForeignObjectElement,\r\n unknown,\r\n null,\r\n unknown\r\n >;\r\n // used to distinguish drags from clicks when dragging elements\r\n private draggingFrom: Point = [0, 0];\r\n // current action that started but hasn't finished yet\r\n private currentAction?: DiagramAction;\r\n\r\n viewInitialized$ = new Subject<void>();\r\n validatorChanges$ = new Subject<void>();\r\n diagramChanges$ = new Subject<void>();\r\n diagramImportantChanges$ = new Subject<void>();\r\n propertyEditorChanges$ = new Subject<void>();\r\n\r\n constructor(parentComponent: DiagramEditor, config: DiagramConfig) {\r\n this.parentComponent = parentComponent;\r\n\r\n this.model = new DiagramModel(\r\n this,\r\n undefined,\r\n config.name || 'unnamed',\r\n '',\r\n config.type || '',\r\n config.properties || []\r\n );\r\n this.backgroundColor = config.backgroundColor || '#FFFFFF';\r\n this.gridSize = config.gridSize || 0;\r\n this.snapToGrid = config.snapToGrid || false;\r\n this.guessConnectionType = config.guessConnectionType || false;\r\n this.priorityThresholds = config.priorityThresholds || [];\r\n this.priorityThreshold = this.priorityThresholds\r\n ? this.priorityThresholds[0]\r\n : undefined;\r\n this.layoutFormat = config.layoutFormat;\r\n this.userActions = config.userActions || {};\r\n this.validators = [];\r\n this.actionQueue = new ActionQueue(this, ACTION_QUEUE_SIZE);\r\n this.collabEngine = new CollabEngine(this);\r\n\r\n // load node types\r\n if (config.nodeTypes) {\r\n for (const nodeTypeConfig of config.nodeTypes) {\r\n const nodeType = new DiagramNodeType({\r\n ...config.nodeTypeDefaults,\r\n ...nodeTypeConfig\r\n });\r\n this.model.nodes.types.add(nodeType);\r\n }\r\n }\r\n // load connection types\r\n if (config.connectionTypes) {\r\n for (const connectionTypeConfig of config.connectionTypes) {\r\n const connectionType = new DiagramConnectionType({\r\n ...config.connectionTypeDefaults,\r\n ...connectionTypeConfig\r\n });\r\n this.model.connections.types.add(connectionType);\r\n }\r\n this.connectionType =\r\n config.defaultConnection !== undefined\r\n ? this.model.connections.types.get(config.defaultConnection)\r\n : undefined;\r\n }\r\n this.propertyEditorChanges$.pipe(debounceTime(2_000)).subscribe(() => {\r\n this.makeUpdateValuesAction();\r\n });\r\n }\r\n\r\n addValidator(validator: DiagramValidator) {\r\n this.validators.push(validator);\r\n this.validatorChanges$.next();\r\n }\r\n\r\n removeValidator(validator: DiagramValidator) {\r\n removeIfExists(this.validators, validator);\r\n this.validatorChanges$.next();\r\n }\r\n\r\n getPriorityThresholdOptions(): number[] | undefined {\r\n return this.priorityThresholds;\r\n }\r\n\r\n getPriorityThreshold(): number | undefined {\r\n return this.priorityThreshold;\r\n }\r\n\r\n setPriorityThreshold(priority: number) {\r\n this.priorityThreshold = priority;\r\n this.updateModelInView();\r\n for (const node of this.model.nodes) {\r\n this.fitNodeInView(node.id);\r\n }\r\n this.parentComponent.palette?.refreshPalette();\r\n }\r\n\r\n // View methods\r\n\r\n initView(appendTo: HTMLElement): void {\r\n this.diagramRoot = d3.select(appendTo).append('div').node() as HTMLElement;\r\n\r\n d3.select(this.diagramRoot)\r\n .attr('tabindex', 0) // make element focusable\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .append('svg')\r\n .style('width', '100%')\r\n .style('height', '100%');\r\n\r\n d3.select(this.diagramRoot)\r\n .on(Events.Click, () => {\r\n // focus on the diagram when clicking so that we can focus on the diagram\r\n // keyboard events only work if we're focusing on the diagram\r\n d3.select(this.diagramRoot).node()?.focus();\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent) => {\r\n const diagramEvent = new DiagramEvent(\r\n event,\r\n Events.ContextMenu,\r\n undefined\r\n );\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event) => {\r\n const diagramEvent = new DiagramEvent(\r\n event,\r\n Events.DoubleClick,\r\n undefined\r\n );\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n })\r\n .on(Events.KeyDown, (event: KeyboardEvent) => {\r\n if (\r\n !event.ctrlKey &&\r\n (event.key === Keys.Delete || event.key === Keys.Backspace) &&\r\n this.canUserPerformAction(DiagramActions.Remove)\r\n ) {\r\n this.deleteUserSelection();\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'a') {\r\n event.preventDefault();\r\n // select all\r\n for (const node of this.model.nodes.filter((n) => !n.removed)) {\r\n this.addToUserSelection(node);\r\n }\r\n for (const connection of this.model.connections.filter(\r\n (c) => !c.removed\r\n )) {\r\n this.addToUserSelection(connection);\r\n }\r\n }\r\n if (event.ctrlKey && event.key === 'i') {\r\n event.preventDefault();\r\n // invert selection\r\n for (const node of this.model.nodes.filter((n) => !n.removed)) {\r\n this.toggleUserSelection(node);\r\n }\r\n for (const connection of this.model.connections.filter(\r\n (c) => !c.removed\r\n )) {\r\n this.toggleUserSelection(connection);\r\n }\r\n }\r\n if (event.ctrlKey && event.key === 'c') {\r\n event.preventDefault();\r\n // copy\r\n this.copyUserSelectionToClipboard();\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'x') {\r\n event.preventDefault();\r\n // cut\r\n this.deleteUserSelection();\r\n this.copyUserSelectionToClipboard();\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'v') {\r\n event.preventDefault();\r\n // paste\r\n const coordinateRange = this.getCoordinatesOnScreen();\r\n this.pasteUserSelectionFromClipboard(\r\n this.getClosestGridPoint([\r\n (coordinateRange[0][0] + coordinateRange[1][0]) / 2,\r\n (coordinateRange[0][1] + coordinateRange[1][1]) / 2\r\n ])\r\n );\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'y') {\r\n // redo\r\n this.actionQueue.redo();\r\n }\r\n if (event.ctrlKey && event.key === 'z') {\r\n // undo\r\n this.actionQueue.undo();\r\n }\r\n });\r\n\r\n const canvasView = this.selectRoot()\r\n .append('g')\r\n .attr('class', 'canvas-view')\r\n .attr('width', `100%`)\r\n .attr('height', `100%`);\r\n\r\n const canvasBackground = canvasView\r\n .append('rect')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', `100%`)\r\n .attr('height', `100%`)\r\n .attr('fill', this.backgroundColor)\r\n .attr('stroke-width', '0')\r\n .on(Events.MouseMove, (event: MouseEvent) => {\r\n if (this.unfinishedConnection !== undefined) {\r\n const pointerCoords = this.getPointerLocationRelativeToCanvas(event);\r\n this.unfinishedConnection.endCoords = pointerCoords;\r\n }\r\n })\r\n .on(Events.MouseOver, () => {\r\n this.unhighlight();\r\n })\r\n .on(Events.Click, () => {\r\n this.unhighlight();\r\n this.closeContextMenu();\r\n this.clearUserSelection();\r\n this.setPropertyEditorSelection(this.model);\r\n })\r\n .call(\r\n (this.zoomBehavior = d3\r\n .zoom<SVGRectElement, unknown>()\r\n .on(\r\n ZoomEvents.Zoom,\r\n (event: d3.D3ZoomEvent<SVGRectElement, unknown>) => {\r\n if (event.sourceEvent) {\r\n // zoom event was triggered by user\r\n if (!this.canUserPerformAction(DiagramActions.Zoom)) {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n return;\r\n }\r\n if (\r\n event.sourceEvent.type === Events.Wheel &&\r\n event.sourceEvent.wheelDelta !== undefined\r\n ) {\r\n if (event.sourceEvent.wheelDelta > 0) {\r\n cursorStyle(CursorStyle.ZoomIn);\r\n }\r\n if (event.sourceEvent.wheelDelta < 0) {\r\n cursorStyle(CursorStyle.ZoomOut);\r\n }\r\n } else if (event.sourceEvent.type === Events.MouseMove) {\r\n cursorStyle(CursorStyle.AllScroll);\r\n }\r\n }\r\n this.zoomTransform = event.transform;\r\n const transformAttribute = event.transform.toString();\r\n this.selectCanvasElements().attr('transform', transformAttribute);\r\n d3.select(`#${this.backgroundPatternId}`).attr(\r\n 'patternTransform',\r\n transformAttribute\r\n );\r\n this.closeContextMenu();\r\n }\r\n )\r\n .on(ZoomEvents.End, () => {\r\n cursorStyle();\r\n }))\r\n );\r\n\r\n const canvasDefs = canvasView.append('defs');\r\n\r\n if (this.gridSize > 0) {\r\n const canvasBackgroundPattern = canvasDefs\r\n .append('pattern')\r\n .attr('id', this.backgroundPatternId)\r\n .attr('x', -this.gridSize / 2)\r\n .attr('y', -this.gridSize / 2)\r\n .attr('width', this.gridSize)\r\n .attr('height', this.gridSize)\r\n .attr('patternUnits', 'userSpaceOnUse');\r\n canvasBackgroundPattern\r\n .append('rect')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', this.gridSize)\r\n .attr('height', this.gridSize)\r\n .attr('fill', this.backgroundColor);\r\n canvasBackgroundPattern\r\n .append('circle')\r\n .attr('cx', this.gridSize / 2)\r\n .attr('cy', this.gridSize / 2)\r\n .attr('r', this.gridSize / 16)\r\n .attr('fill', 'black')\r\n .attr('fill-opacity', 0.1);\r\n canvasBackground.attr('fill', `url(#${this.backgroundPatternId})`);\r\n }\r\n\r\n const canvasElements = canvasView\r\n .append('g')\r\n .attr('class', 'canvas-elements');\r\n canvasElements.append('g').attr('class', 'canvas-nodes');\r\n canvasElements.append('g').attr('class', 'canvas-sections');\r\n canvasElements.append('g').attr('class', 'canvas-ports');\r\n canvasElements.append('g').attr('class', 'canvas-connections');\r\n canvasElements.append('g').attr('class', 'canvas-fields');\r\n canvasElements.append('g').attr('class', 'canvas-objects');\r\n canvasElements.append('g').attr('class', 'canvas-decorators');\r\n\r\n this.viewInitialized$.next();\r\n }\r\n\r\n zoomBy(zoom: number): void {\r\n if (!isNaN(zoom)) {\r\n this.zoomBehavior.scaleBy(this.selectCanvasView().select('rect'), zoom);\r\n }\r\n }\r\n\r\n zoomTo(zoom: number): void {\r\n if (!isNaN(zoom)) {\r\n this.zoomBehavior.scaleTo(this.selectCanvasView().select('rect'), zoom);\r\n }\r\n }\r\n\r\n translateBy(x: number, y: number): void {\r\n if (!isNaN(x) && !isNaN(y)) {\r\n this.zoomBehavior.translateBy(\r\n this.selectCanvasView().select('rect'),\r\n x,\r\n y\r\n );\r\n }\r\n }\r\n\r\n translateTo(x: number, y: number): void {\r\n if (!isNaN(x) && !isNaN(y)) {\r\n this.zoomBehavior.translateTo(\r\n this.selectCanvasView().select('rect'),\r\n x,\r\n y\r\n );\r\n }\r\n }\r\n\r\n center() {\r\n // if there are no nodes, we have nothing to do here\r\n if (this.model.nodes.length > 0) {\r\n const canvasViewBoundingBox = (\r\n this.selectCanvasView().select('rect').node() as SVGGraphicsElement\r\n ).getBBox();\r\n const minimumX = Math.min(\r\n ...this.model.nodes.all().map((n) => n.coords[0])\r\n );\r\n const maximumX = Math.max(\r\n ...this.model.nodes.all().map((n) => n.coords[0] + n.width)\r\n );\r\n const averageX = (minimumX + maximumX) / 2;\r\n const rangeX = maximumX - minimumX;\r\n const windowRangeX = canvasViewBoundingBox.width;\r\n const minimumY = Math.min(\r\n ...this.model.nodes.all().map((n) => n.coords[1])\r\n );\r\n const maximumY = Math.max(\r\n ...this.model.nodes.all().map((n) => n.coords[1] + n.height)\r\n );\r\n const averageY = (minimumY + maximumY) / 2;\r\n const rangeY = maximumY - minimumY;\r\n const windowRangeY = canvasViewBoundingBox.height;\r\n /*\r\n * (windowRangeX / rangeX) is the zoom level to fit everything horizontally\r\n * (windowRangeY / rangeY) is the zoom level to fit everything vertically\r\n * the minimum between them is the zoom to fit everything in the screen both horizontally and vertically\r\n * we also add 1 to the list so that if the zoom exceeds 1 it is set to 1\r\n * a zoom bigger than 1 means zooming in instead of out, and we don't want to zoom in if it's not necessary\r\n */\r\n const zoom = Math.min(windowRangeX / rangeX, windowRangeY / rangeY, 1);\r\n this.translateTo(averageX, averageY);\r\n this.zoomTo(zoom);\r\n }\r\n }\r\n\r\n getClosestGridPoint(point: Point): Point {\r\n if (\r\n this.gridSize === 0 ||\r\n isNaN(this.gridSize) ||\r\n !isFinite(this.gridSize)\r\n ) {\r\n return point;\r\n } else {\r\n return [\r\n Math.round(point[0] / this.gridSize) * this.gridSize,\r\n Math.round(point[1] / this.gridSize) * this.gridSize\r\n ];\r\n }\r\n }\r\n\r\n getCoordinatesOnScreen(): [Point, Point] {\r\n const rootBoundingClientRect = this.selectRoot()\r\n .node()\r\n ?.getBoundingClientRect();\r\n const rootDimensions = [\r\n rootBoundingClientRect?.width || 0,\r\n rootBoundingClientRect?.height || 0\r\n ];\r\n return [\r\n [\r\n -this.zoomTransform.x / this.zoomTransform.k,\r\n -this.zoomTransform.y / this.zoomTransform.k\r\n ],\r\n [\r\n (rootDimensions[0] - this.zoomTransform.x) / this.zoomTransform.k,\r\n (rootDimensions[1] - this.zoomTransform.y) / this.zoomTransform.k\r\n ]\r\n ];\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private getEventHoldingCoordinates(event: MouseEvent): any {\r\n if (\r\n event.type === 'drag' ||\r\n event.type === 'start' ||\r\n event.type === 'end'\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const sourceEvent = (event as any).sourceEvent;\r\n if (\r\n sourceEvent &&\r\n (sourceEvent.type === 'touchmove' ||\r\n sourceEvent.type === 'touchstart' ||\r\n sourceEvent.type === 'touchend')\r\n ) {\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (event as any).sourceEvent.touches[0] ||\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (event as any).sourceEvent.changedTouches[0]\r\n );\r\n }\r\n }\r\n return event;\r\n }\r\n\r\n getPointerLocationRelativeToCanvas(event: MouseEvent): Point {\r\n return d3.pointer(\r\n this.getEventHoldingCoordinates(event),\r\n this.selectCanvasElements().node()\r\n );\r\n }\r\n\r\n getPointerLocationRelativeToRoot(event: MouseEvent): Point {\r\n return d3.pointer(\r\n this.getEventHoldingCoordinates(event),\r\n this.selectRoot().node()\r\n );\r\n }\r\n\r\n getPointerLocationRelativeToBody(event: MouseEvent): Point {\r\n return d3.pointer(\r\n this.getEventHoldingCoordinates(event),\r\n d3.select('body').node()\r\n );\r\n }\r\n\r\n getPointerLocationRelativeToScreen(event: MouseEvent): Point {\r\n const pointerLocationRelativeToBody =\r\n this.getPointerLocationRelativeToBody(event);\r\n return [\r\n pointerLocationRelativeToBody[0] - window.scrollX,\r\n pointerLocationRelativeToBody[1] - window.scrollY\r\n ];\r\n }\r\n\r\n updateModelInView(): void {\r\n this.updateNodesInView();\r\n this.updateSectionsInView();\r\n this.updatePortsInView();\r\n this.updateConnectionsInView();\r\n this.updateFieldsInView();\r\n this.updateObjectsInView();\r\n this.updateDecoratorsInView();\r\n }\r\n\r\n updateNodesInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramNode,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasNodes()\r\n .selectAll<SVGGElement, DiagramNode>('g.diagram-node')\r\n .data(\r\n this.model.nodes.filter(\r\n (e) =>\r\n !e.removed &&\r\n (this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true)\r\n ),\r\n (d: DiagramNode) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr(\r\n 'class',\r\n (d) =>\r\n `diagram-node${d.type.resizableX ? ' resizable-x' : ''}${\r\n d.type.resizableY ? ' resizable-y' : ''\r\n } ${d.type.look.lookType}`\r\n );\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramNode) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramNode) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d);\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramNode) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.highlight(d);\r\n this.addToUserSelection(d);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramNode) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.MoveNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n const newNodeCoords: Point = [\r\n event.x - d.width / 2,\r\n event.y - d.height / 2\r\n ];\r\n d.move(newNodeCoords);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.MoveNode\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - d.width / 2,\r\n event.y - d.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n d.move(newNodeCoords);\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection.filter('.shaped-look').append('path');\r\n enterSelection\r\n .filter('.image-look')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'center-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'left-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Left, d.coords[0] - pointerCoords[0]);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchNode\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Left, d.coords[0] - pointerCoords[0]);\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'top-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Top, d.coords[1] - pointerCoords[1]);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchNode\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Top, d.coords[1] - pointerCoords[1]);\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'right-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Right, pointerCoords[0] - (d.coords[0] + d.width));\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchNode\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Right, pointerCoords[0] - (d.coords[0] + d.width));\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'bottom-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height)\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchNode\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height)\r\n );\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n\r\n mergeSelection\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1));\r\n\r\n mergeSelection\r\n .filter('.shaped-look')\r\n .select('path')\r\n .attr('d', (d) =>\r\n generalClosedPath(\r\n (d.type.look as NodeShapedLook).shape,\r\n 0,\r\n 0,\r\n d.width,\r\n d.height\r\n )\r\n )\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeShapedLook).selectedFillColor\r\n : (d.type.look as NodeShapedLook).fillColor\r\n )\r\n .attr('stroke', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeShapedLook).selectedBorderColor\r\n : (d.type.look as NodeShapedLook).borderColor\r\n )\r\n .attr('stroke-width', (d) => `${d.highlighted ? 3 : 1}px`);\r\n mergeSelection\r\n .filter('.image-look')\r\n .select('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => d.width)\r\n .attr('height', (d) => d.height)\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeImageLook).selectedBackgroundImage\r\n : (d.type.look as NodeImageLook).backgroundImage\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-left-image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTopLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook).selectedBackgroundImageTop\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTop\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTopRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.left-image')\r\n .attr('x', 0)\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.center-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageCenter\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageCenter\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottomLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottom\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottom\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottomRight\r\n );\r\n\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.left-resizer')\r\n .attr('x1', RESIZER_THICKNESS / 2)\r\n .attr('x2', RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.top-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', RESIZER_THICKNESS / 2)\r\n .attr('y2', RESIZER_THICKNESS / 2);\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.right-resizer')\r\n .attr('x1', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('x2', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.bottom-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', (d) => d.height - RESIZER_THICKNESS / 2)\r\n .attr('y2', (d) => d.height - RESIZER_THICKNESS / 2);\r\n }\r\n\r\n updateSectionsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramSection,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasSections()\r\n .selectAll<SVGGElement, DiagramSection>('g.diagram-section')\r\n .data(\r\n this.model.sections.filter(\r\n (e) =>\r\n !e.removed &&\r\n (this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true)\r\n ),\r\n (d: DiagramSection) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr(\r\n 'class',\r\n (d) =>\r\n `diagram-section${d.node?.type?.resizableX ? ' resizable-x' : ''}${\r\n d.node?.type?.resizableY ? ' resizable-y' : ''\r\n } ${d.getConfig()?.look?.lookType}`\r\n );\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramSection) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramSection) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(getRelatedNodeOrItself(d));\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramSection) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n const elementToSelect = getRelatedNodeOrItself(d);\r\n this.highlight(elementToSelect);\r\n this.addToUserSelection(elementToSelect);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramSection) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n const node = d.node as DiagramNode;\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.MoveNode,\r\n node.id,\r\n node.getGeometry(),\r\n node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n const node = d.node as DiagramNode;\r\n const newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n node.move(newNodeCoords);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n const node = d.node as DiagramNode;\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.MoveNode\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n node.move(newNodeCoords);\r\n this.currentAction.to = node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection.filter('.shaped-look').append('path');\r\n enterSelection\r\n .filter('.image-look')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'center-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'left-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchSection,\r\n d.node.id,\r\n d.node.getGeometry(),\r\n d.node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Left,\r\n d.coords[0] - pointerCoords[0],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchSection\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Left,\r\n d.coords[0] - pointerCoords[0],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n this.currentAction.to = d.node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'top-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchSection,\r\n d.node.id,\r\n d.node.getGeometry(),\r\n d.node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Top,\r\n d.coords[1] - pointerCoords[1],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchSection\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Top,\r\n d.coords[1] - pointerCoords[1],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n this.currentAction.to = d.node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'right-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchSection,\r\n d.node.id,\r\n d.node.getGeometry(),\r\n d.node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Right,\r\n pointerCoords[0] - (d.coords[0] + d.width),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchSection\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Right,\r\n pointerCoords[0] - (d.coords[0] + d.width),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n this.currentAction.to = d.node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'bottom-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchSection,\r\n d.node.id,\r\n d.node.getGeometry(),\r\n d.node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchSection\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n this.currentAction.to = d.node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n\r\n mergeSelection\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1));\r\n\r\n mergeSelection\r\n .filter('.shaped-look')\r\n .select('path')\r\n .attr('d', (d) =>\r\n generalClosedPath(\r\n (d.getConfig()?.look as NodeShapedLook).shape,\r\n 0,\r\n 0,\r\n d.width,\r\n d.height\r\n )\r\n )\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeShapedLook).selectedFillColor\r\n : (d.getConfig()?.look as NodeShapedLook).fillColor\r\n )\r\n .attr('stroke', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeShapedLook).selectedBorderColor\r\n : (d.getConfig()?.look as NodeShapedLook).borderColor\r\n )\r\n .attr('stroke-width', (d) => `${d.highlighted ? 3 : 1}px`);\r\n mergeSelection\r\n .filter('.image-look')\r\n .select('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => d.width)\r\n .attr('height', (d) => d.height)\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeImageLook).selectedBackgroundImage\r\n : (d.getConfig()?.look as NodeImageLook).backgroundImage\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-left-image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageTopLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTop\r\n : (d.getConfig()?.look as NodeStretchableImageLook).backgroundImageTop\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageTopRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.center-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageCenter\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageCenter\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottomLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottom\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottom\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottomRight\r\n );\r\n\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.left-resizer')\r\n .attr('x1', RESIZER_THICKNESS / 2)\r\n .attr('x2', RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.top-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', RESIZER_THICKNESS / 2)\r\n .attr('y2', RESIZER_THICKNESS / 2);\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.right-resizer')\r\n .attr('x1', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('x2', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.bottom-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', (d) => d.height - RESIZER_THICKNESS / 2)\r\n .attr('y2', (d) => d.height - RESIZER_THICKNESS / 2);\r\n }\r\n\r\n updatePortsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramPort,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasPorts()\r\n .selectAll<SVGGElement, DiagramPort>('g.diagram-port')\r\n .data(\r\n this.model.ports.filter(\r\n (e) =>\r\n !e.removed &&\r\n (this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true)\r\n ),\r\n (d: DiagramPort) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-port');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramPort) => {\r\n if (!this.unfinishedConnection) {\r\n // if there is an unfinished connection, the port will be highlighted automatically if the pointer is close\r\n this.highlight(d);\r\n }\r\n if (this.unfinishedConnection) {\r\n const canConnectionFinishAtThisPort =\r\n (this.unfinishedConnection.type.canStartFromType(\r\n this.unfinishedConnection.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n d.getNode()?.type?.id || ''\r\n )) ||\r\n (this.unfinishedConnection.type.canStartFromType(\r\n d.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n this.unfinishedConnection.start?.getNode()?.type?.id || ''\r\n ));\r\n if (!canConnectionFinishAtThisPort) {\r\n cursorStyle(CursorStyle.NoDrop);\r\n }\r\n }\r\n })\r\n .on(Events.MouseOut, () => {\r\n if (this.unfinishedConnection) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramPort) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(getRelatedNodeOrItself(d));\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramPort) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n const elementToSelect = getRelatedNodeOrItself(d);\r\n this.highlight(elementToSelect);\r\n this.addToUserSelection(elementToSelect);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramPort) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramPort, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramPort) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.AddConnection) &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.startConnection(d);\r\n // should be true after having called this.startConnection()\r\n if (this.unfinishedConnection) {\r\n this.unfinishedConnectionTracer = this.selectCanvasElements()\r\n .append('path')\r\n .attr('stroke', 'none')\r\n .attr('fill', 'none');\r\n }\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramPort) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.AddConnection) &&\r\n !d.removed\r\n ) {\r\n if (this.unfinishedConnection !== undefined) {\r\n const endCoords: Point = [event.x, event.y];\r\n this.unfinishedConnectionTracer?.attr(\r\n 'd',\r\n getConnectionPath(\r\n this.unfinishedConnection.type.shape,\r\n this.unfinishedConnection.startCoords,\r\n endCoords,\r\n this.unfinishedConnection.startDirection,\r\n this.unfinishedConnection.endDirection,\r\n this.unfinishedConnection.type.width,\r\n this.unfinishedConnection.startMarkerLook?.markerWidth,\r\n this.unfinishedConnection.endMarkerLook?.markerWidth\r\n )\r\n );\r\n const unfinishedConnectionGhostNode =\r\n this.unfinishedConnectionTracer?.node();\r\n if (unfinishedConnectionGhostNode) {\r\n let margin = 2;\r\n const unfinishedConnectionTotalLength =\r\n unfinishedConnectionGhostNode.getTotalLength();\r\n if (unfinishedConnectionTotalLength < margin) {\r\n margin = 0;\r\n }\r\n const beforeUnfinishedConnectionEnd =\r\n unfinishedConnectionGhostNode.getPointAtLength(\r\n unfinishedConnectionTotalLength - margin\r\n );\r\n this.unfinishedConnection.endCoords = [\r\n beforeUnfinishedConnectionEnd.x,\r\n beforeUnfinishedConnectionEnd.y\r\n ];\r\n } else {\r\n // if it fails, just use the event coordinates\r\n this.unfinishedConnection.endCoords = endCoords;\r\n }\r\n this.updateConnectionsInView(UNFINISHED_CONNECTION_ID);\r\n // highlight closest target port\r\n if (this.model.ports.length > 0) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n let minDistanceFound = Number.POSITIVE_INFINITY;\r\n let closestPortFound = undefined;\r\n for (const port of this.model.ports.filter(\r\n (p) => !p.removed\r\n )) {\r\n const distance = port.distanceTo(pointerCoords);\r\n if (distance < minDistanceFound) {\r\n minDistanceFound = distance;\r\n closestPortFound = port;\r\n }\r\n }\r\n if (\r\n closestPortFound &&\r\n minDistanceFound < MAX_DISTANCE_TO_PORT\r\n ) {\r\n this.highlight(closestPortFound);\r\n } else {\r\n this.unhighlight();\r\n }\r\n }\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramPort) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.AddConnection) &&\r\n !d.removed\r\n ) {\r\n this.unfinishedConnectionTracer?.remove();\r\n if (this.mainUserHighlight instanceof DiagramPort) {\r\n this.finishConnection(this.mainUserHighlight);\r\n } else if (\r\n this.mainUserHighlight instanceof DiagramNode ||\r\n this.mainUserHighlight instanceof DiagramSection ||\r\n this.mainUserHighlight instanceof DiagramField\r\n ) {\r\n let targetRootElement: DiagramNode | DiagramSection;\r\n if (\r\n this.mainUserHighlight instanceof DiagramNode ||\r\n this.mainUserHighlight instanceof DiagramSection\r\n ) {\r\n targetRootElement = this.mainUserHighlight;\r\n } else if (\r\n this.mainUserHighlight.rootElement instanceof DiagramNode ||\r\n this.mainUserHighlight.rootElement instanceof DiagramSection\r\n ) {\r\n targetRootElement = this.mainUserHighlight.rootElement;\r\n } else {\r\n this.dropConnection();\r\n return;\r\n }\r\n const closestPort = targetRootElement.getClosestPortToPoint([\r\n event.x,\r\n event.y\r\n ]);\r\n if (closestPort !== undefined) {\r\n this.finishConnection(closestPort);\r\n } else {\r\n this.dropConnection();\r\n }\r\n } else {\r\n this.dropConnection();\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection.append('circle');\r\n\r\n mergeSelection\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1))\r\n .select('circle')\r\n .attr('cx', 0)\r\n .attr('cy', 0)\r\n .attr('r', DIAGRAM_PORT_DEFAULTS.radius)\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? DIAGRAM_PORT_DEFAULTS.selectedColor\r\n : DIAGRAM_PORT_DEFAULTS.highlightedColor\r\n )\r\n .attr('opacity', (d) => (d.highlighted || d.selected ? 0.5 : 0));\r\n }\r\n\r\n updateConnectionsInView(...ids: string[]): void {\r\n const connectionList = this.model.connections.filter(\r\n (e) =>\r\n !e.removed &&\r\n (this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true)\r\n );\r\n if (this.unfinishedConnection) {\r\n connectionList.push(this.unfinishedConnection);\r\n }\r\n\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramConnection,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasConnections()\r\n .selectAll<SVGGElement, DiagramConnection>('g.diagram-connection')\r\n .data(connectionList, (d: DiagramConnection) => d.id);\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-connection');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramConnection) => {\r\n if (d.end !== undefined) {\r\n this.highlight(d);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramConnection) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d);\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramConnection) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.highlight(d);\r\n this.addToUserSelection(d);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramConnection) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n });\r\n\r\n enterSelection.append('path').attr('class', 'diagram-connection-path');\r\n enterSelection.append('path').attr('class', 'diagram-connection-path-box');\r\n enterSelection\r\n .append('marker')\r\n .attr('id', (d) => `${d.id}-start-marker`)\r\n .attr('class', 'diagram-connection-start-marker')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .append('marker')\r\n .attr('id', (d) => `${d.id}-end-marker`)\r\n .attr('class', 'diagram-connection-end-marker')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-start-label');\r\n enterSelection.select('g.diagram-connection-start-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-start-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-middle-label');\r\n enterSelection.select('g.diagram-connection-middle-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-middle-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-end-label');\r\n enterSelection.select('g.diagram-connection-end-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-end-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n\r\n mergeSelection\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1))\r\n .select('path.diagram-connection-path')\r\n .attr('d', (d) =>\r\n getConnectionPath(\r\n d.type.shape,\r\n d.startCoords,\r\n d.endCoords,\r\n d.startDirection,\r\n d.endDirection,\r\n d.type.width,\r\n d.startMarkerLook?.markerWidth,\r\n d.endMarkerLook?.markerWidth\r\n )\r\n )\r\n .attr('marker-start', (d) => `url(#${d.id}-start-marker)`)\r\n .attr('marker-end', (d) => `url(#${d.id}-end-marker)`)\r\n .attr('stroke', (d) => (d.selected ? d.type.selectedColor : d.type.color))\r\n .attr(\r\n 'stroke-width',\r\n (d) => `${d.highlighted ? d.type.width + 1 : d.type.width}px`\r\n )\r\n .attr('stroke-dasharray', (d) =>\r\n lineStyleDasharray(d.type.style, d.type.width)\r\n )\r\n .attr('fill', 'none');\r\n mergeSelection\r\n .select('path.diagram-connection-path-box')\r\n .attr('d', (d) =>\r\n getConnectionPath(\r\n d.type.shape,\r\n d.startCoords,\r\n d.endCoords,\r\n d.startDirection,\r\n d.endDirection,\r\n d.type.width,\r\n d.startMarkerLook?.markerWidth,\r\n d.endMarkerLook?.markerWidth\r\n )\r\n )\r\n .attr('stroke', 'transparent')\r\n // allow generating pointer events even when it is transparent\r\n .attr('pointer-events', 'stroke')\r\n .attr(\r\n 'stroke-width',\r\n (d) => `${d.type.width + CONNECTION_PATH_BOX_THICKNESS}px`\r\n )\r\n .attr('stroke-dasharray', (d) =>\r\n lineStyleDasharray(d.type.style, d.type.width)\r\n )\r\n .attr('fill', 'none');\r\n\r\n mergeSelection.data().forEach((connection) => {\r\n this.updateConnectionLabelsInView(connection);\r\n this.updateConnectionMarkersInView(connection);\r\n });\r\n }\r\n\r\n updateFieldsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGForeignObjectElement,\r\n DiagramField,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasFields()\r\n .selectAll<SVGForeignObjectElement, DiagramField>(\r\n 'foreignObject.diagram-field'\r\n )\r\n .data(\r\n this.model.fields.filter(\r\n (e) =>\r\n !e.removed &&\r\n (this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true)\r\n ),\r\n (d: DiagramField) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('foreignObject')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-field');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .style('box-sizing', 'border-box')\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramField) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramField) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(getRelatedNodeOrItself(d));\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramField) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n const elementToSelect = getRelatedNodeOrItself(d);\r\n this.highlight(elementToSelect);\r\n this.addToUserSelection(elementToSelect);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramField) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.EditField) &&\r\n d.editable &&\r\n !d.removed\r\n ) {\r\n this.currentAction = new EditFieldAction(this, d.id, d.text, '');\r\n this.createInputField(\r\n d.text,\r\n d.coords,\r\n d.width,\r\n d.height,\r\n d.fontSize,\r\n d.fontFamily || DIAGRAM_FIELD_DEFAULTS.fontFamily,\r\n (text) => {\r\n d.text = text;\r\n },\r\n (text) => {\r\n d.text = text;\r\n if (this.currentAction instanceof EditFieldAction) {\r\n this.currentAction.to = text;\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n );\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGForeignObjectElement, DiagramField, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramField) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.MoveNode,\r\n node.id,\r\n node.getGeometry(),\r\n node.getGeometry()\r\n );\r\n }\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramField) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n const newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n node.move(newNodeCoords);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramField) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.MoveNode\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n node.move(newNodeCoords);\r\n this.currentAction.to = node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n )\r\n .append('xhtml:div')\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .style('display', 'flex')\r\n .append('xhtml:p')\r\n .style('box-sizing', 'border-box')\r\n .style('outline', 0)\r\n .style('margin', 0)\r\n .style('border', 0)\r\n .style('padding', 0)\r\n .style('user-select', 'none')\r\n .style('font-kerning', 'none')\r\n .style('white-space', 'nowrap');\r\n\r\n mergeSelection\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => `${d.width}px`)\r\n .attr('height', (d) => `${d.height}px`)\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1))\r\n .select('div')\r\n .style('justify-content', (d) =>\r\n d.horizontalAlign === HorizontalAlign.Center\r\n ? 'center'\r\n : d.horizontalAlign === HorizontalAlign.Right\r\n ? 'flex-end'\r\n : 'flex-start'\r\n )\r\n .style('align-items', (d) =>\r\n d.verticalAlign === VerticalAlign.Center\r\n ? 'center'\r\n : d.verticalAlign === VerticalAlign.Bottom\r\n ? 'end'\r\n : 'start'\r\n )\r\n .select('p')\r\n .style('max-width', (d) => (d.fit ? 'default' : '100%'))\r\n .style('max-height', (d) => (d.fit ? 'default' : '100%'))\r\n .style('overflow', (d) => (d.fit ? 'default' : 'hidden'))\r\n .style('text-overflow', (d) => (d.fit ? 'default' : 'ellipsis'))\r\n .style('text-align', (d) =>\r\n d.horizontalAlign === HorizontalAlign.Center\r\n ? 'center'\r\n : d.horizontalAlign === HorizontalAlign.Right\r\n ? 'end'\r\n : 'start'\r\n )\r\n .style('font-size', (d) => `${d.fontSize}px`)\r\n .style(\r\n 'font-family',\r\n (d) => d.fontFamily || \"'Wonder Unit Sans', sans-serif\"\r\n )\r\n .style('font-weight', (d) => (d.highlighted ? 600 : 400))\r\n .style('color', (d) =>\r\n d.selected ? d.selectedColor || '#000000' : d.color || '#000000'\r\n )\r\n .html((d) =>\r\n d.text\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\\n/g, '<br/>')\r\n );\r\n }\r\n\r\n updateObjectsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGForeignObjectElement,\r\n DiagramObject,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasObjects()\r\n .selectAll<SVGForeignObjectElement, DiagramObject>(\r\n 'foreignObject.diagram-object'\r\n )\r\n .data(\r\n this.model.objects.filter(\r\n (e) =>\r\n !e.removed &&\r\n (this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true)\r\n ),\r\n (d: DiagramObject) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('foreignObject')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-object');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n mergeSelection\r\n .attr('width', (d) => `${d.width}px`)\r\n .attr('height', (d) => `${d.height}px`)\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .html((d) => d.html);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.ContextMenu, (event: MouseEvent) => {\r\n const diagramEvent = new DiagramEvent(\r\n event,\r\n Events.ContextMenu,\r\n undefined\r\n );\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramObject) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n });\r\n }\r\n\r\n updateDecoratorsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGForeignObjectElement,\r\n DiagramDecorator,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasDecorators()\r\n .selectAll<SVGForeignObjectElement, DiagramDecorator>(\r\n 'foreignObject.diagram-decorator'\r\n )\r\n .data(\r\n this.model.decorators.filter(\r\n (e) =>\r\n !e.removed &&\r\n (this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true)\r\n ),\r\n (d: DiagramDecorator) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('foreignObject')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-decorator');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n mergeSelection\r\n .attr('width', (d) => `${d.width}px`)\r\n .attr('height', (d) => `${d.height}px`)\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .html((d) => d.html);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.ContextMenu, (event: MouseEvent) => {\r\n const diagramEvent = new DiagramEvent(\r\n event,\r\n Events.ContextMenu,\r\n undefined\r\n );\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramDecorator) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n });\r\n }\r\n\r\n updateConnectionLabelsInView(connection: DiagramConnection) {\r\n const connectionSelection: d3.Selection<\r\n SVGGElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = this.selectCanvasView().select(`g.diagram-connection#${connection.id}`);\r\n const pathSelection: d3.Selection<SVGPathElement, unknown, null, unknown> =\r\n connectionSelection.select('path');\r\n const pathNode = pathSelection.node();\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...connection.type.label\r\n };\r\n if (pathNode) {\r\n const pathLength = pathNode.getTotalLength();\r\n\r\n // bind start labels\r\n connectionSelection\r\n .select('g.diagram-connection-start-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.startLabel);\r\n const startLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-start-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (startLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.startLabel\r\n ? 0\r\n : startLabelBoundingRect.width / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const boundingHeight = !connection.startLabel\r\n ? 0\r\n : startLabelBoundingRect.height / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const pathStartLabelPoint = pathNode.getPointAtLength(\r\n labelConfiguration.margin +\r\n Math.max(boundingWidth / 2, boundingHeight / 2)\r\n );\r\n connectionSelection\r\n .select('g.diagram-connection-start-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-start-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathStartLabelPoint.x},${pathStartLabelPoint.y})`\r\n );\r\n }\r\n\r\n // bind middle labels\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.middleLabel);\r\n const middleLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-middle-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (middleLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.middleLabel\r\n ? 0\r\n : middleLabelBoundingRect.width / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const boundingHeight = !connection.middleLabel\r\n ? 0\r\n : middleLabelBoundingRect.height / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const pathMiddleLabelPoint = pathNode.getPointAtLength(pathLength / 2);\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathMiddleLabelPoint.x},${pathMiddleLabelPoint.y})`\r\n );\r\n }\r\n\r\n // bind end labels\r\n connectionSelection\r\n .select('g.diagram-connection-end-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.endLabel);\r\n const endLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-end-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (endLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.endLabel\r\n ? 0\r\n : endLabelBoundingRect.width / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const boundingHeight = !connection.endLabel\r\n ? 0\r\n : endLabelBoundingRect.height / this.zoomTransform.k +\r\n labelConfiguration.padding * 2;\r\n const pathEndLabelPoint = pathNode.getPointAtLength(\r\n pathLength -\r\n labelConfiguration.margin -\r\n Math.max(boundingWidth / 2, boundingHeight / 2)\r\n );\r\n connectionSelection\r\n .select('g.diagram-connection-end-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-end-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathEndLabelPoint.x},${pathEndLabelPoint.y})`\r\n );\r\n }\r\n }\r\n }\r\n\r\n updateConnectionMarkersInView(connection: DiagramConnection) {\r\n const connectionSelection: d3.Selection<\r\n SVGGElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = this.selectCanvasView().select(`g.diagram-connection#${connection.id}`);\r\n const startMarkerSelection: d3.Selection<\r\n SVGMarkerElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = connectionSelection.select('marker.diagram-connection-start-marker');\r\n const endMarkerSelection: d3.Selection<\r\n SVGMarkerElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = connectionSelection.select('marker.diagram-connection-end-marker');\r\n\r\n if (connection.startMarkerLook !== null) {\r\n startMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', connection.startMarkerLook.markerWidth)\r\n .attr('markerHeight', connection.startMarkerLook.markerHeight)\r\n .attr('refX', connection.startMarkerLook.markerRefX)\r\n .attr('refY', connection.startMarkerLook.markerRefY)\r\n .select('image')\r\n .attr(\r\n 'href',\r\n connection.selected\r\n ? connection.startMarkerLook.selectedImage\r\n : connection.startMarkerLook.image\r\n )\r\n .attr('width', connection.startMarkerLook.markerWidth)\r\n .attr('height', connection.startMarkerLook.markerHeight);\r\n } else {\r\n startMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', 0)\r\n .attr('markerHeight', 0);\r\n }\r\n\r\n if (connection.endMarkerLook !== null) {\r\n endMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', connection.endMarkerLook.markerWidth)\r\n .attr('markerHeight', connection.endMarkerLook.markerHeight)\r\n .attr('refX', connection.endMarkerLook.markerRefX)\r\n .attr('refY', connection.endMarkerLook.markerRefY)\r\n .select('image')\r\n .attr(\r\n 'href',\r\n connection.selected\r\n ? connection.endMarkerLook.selectedImage\r\n : connection.endMarkerLook.image\r\n )\r\n .attr('width', connection.endMarkerLook.markerWidth)\r\n .attr('height', connection.endMarkerLook.markerHeight);\r\n } else {\r\n endMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', 0)\r\n .attr('markerHeight', 0);\r\n }\r\n }\r\n\r\n fitFieldRootInView(id: string) {\r\n const field = this.model.fields.get(id);\r\n if (!field) {\r\n return;\r\n }\r\n if (field.rootElement instanceof DiagramNode && field.fit) {\r\n const fieldDimensions = this.minimumSizeOfField(field);\r\n let stretchX =\r\n fieldDimensions[0] +\r\n 2 * (field.rootElement.type.label?.margin || 0) -\r\n field.rootElement.width;\r\n let stretchY =\r\n fieldDimensions[1] +\r\n 2 * (field.rootElement.type.label?.margin || 0) -\r\n field.rootElement.height;\r\n if (this.snapToGrid) {\r\n stretchX = Math.ceil(stretchX / this.gridSize) * this.gridSize;\r\n stretchY = Math.ceil(stretchY / this.gridSize) * this.gridSize;\r\n }\r\n // ensure node is not stretched under its minimum dimensions\r\n if (\r\n field.rootElement.width + stretchX <\r\n field.rootElement.type.minWidth\r\n ) {\r\n stretchX = field.rootElement.type.minWidth - field.rootElement.width;\r\n }\r\n if (\r\n field.rootElement.height + stretchY <\r\n field.rootElement.type.minHeight\r\n ) {\r\n stretchY = field.rootElement.type.minHeight - field.rootElement.height;\r\n }\r\n field.rootElement.stretch(Side.Right, stretchX);\r\n field.rootElement.stretch(Side.Bottom, stretchY);\r\n }\r\n if (field.rootElement instanceof DiagramSection && field.fit) {\r\n const fieldDimensions = this.minimumSizeOfField(field);\r\n let minimumFieldWidth = fieldDimensions[0];\r\n let minimumFieldHeight = fieldDimensions[1];\r\n for (const section of field.rootElement.node?.sections || []) {\r\n if (section.label) {\r\n if (\r\n section.indexXInNode === field.rootElement.indexXInNode &&\r\n section.indexYInNode !== field.rootElement.indexYInNode\r\n ) {\r\n minimumFieldWidth = Math.max(\r\n minimumFieldWidth,\r\n this.minimumSizeOfField(section.label)[0]\r\n );\r\n } else if (\r\n section.indexXInNode !== field.rootElement.indexXInNode &&\r\n section.indexYInNode === field.rootElement.indexYInNode\r\n ) {\r\n minimumFieldHeight = Math.max(\r\n minimumFieldHeight,\r\n this.minimumSizeOfField(section.label)[1]\r\n );\r\n }\r\n }\r\n }\r\n if (fieldDimensions[0] < minimumFieldWidth) {\r\n fieldDimensions[0] = minimumFieldWidth;\r\n }\r\n if (fieldDimensions[1] < minimumFieldHeight) {\r\n fieldDimensions[1] = minimumFieldHeight;\r\n }\r\n let stretchX =\r\n fieldDimensions[0] +\r\n 2 * (field.rootElement?.getConfig()?.label?.margin || 0) -\r\n field.rootElement.width;\r\n let stretchY =\r\n fieldDimensions[1] +\r\n 2 * (field.rootElement?.getConfig()?.label?.margin || 0) -\r\n field.rootElement.height;\r\n if (this.snapToGrid) {\r\n stretchX = Math.ceil(stretchX / this.gridSize) * this.gridSize;\r\n stretchY = Math.ceil(stretchY / this.gridSize) * this.gridSize;\r\n }\r\n // ensure section is not stretched under its minimum dimensions\r\n if (\r\n field.rootElement.width + stretchX <\r\n (field.rootElement.getMinWidth() || 0)\r\n ) {\r\n stretchX =\r\n (field.rootElement.getMinWidth() || 0) - field.rootElement.width;\r\n }\r\n if (\r\n field.rootElement.height + stretchY <\r\n (field.rootElement.getMinHeight() || 0)\r\n ) {\r\n stretchY =\r\n (field.rootElement.getMinHeight() || 0) - field.rootElement.height;\r\n }\r\n field.rootElement.node?.stretchSections(\r\n Side.Right,\r\n stretchX,\r\n field.rootElement.indexXInNode,\r\n field.rootElement.indexYInNode\r\n );\r\n field.rootElement.node?.stretchSections(\r\n Side.Bottom,\r\n stretchY,\r\n field.rootElement.indexXInNode,\r\n field.rootElement.indexYInNode\r\n );\r\n }\r\n }\r\n\r\n fitNodeInView(id: string) {\r\n const node = this.model.nodes.get(id);\r\n if (!node) {\r\n return;\r\n }\r\n if (node.sections.length > 0 && this.priorityThreshold) {\r\n let newNodeWidth = 0;\r\n let newNodeHeight = 0;\r\n // calculate newNodeWidth, newNodeHeight as the rightmost and bottommost points of any of the sections of the node\r\n for (const section of node.sections) {\r\n if (section.getPriority() >= this.priorityThreshold) {\r\n const sectionLastXCoordRelativeToNode =\r\n section.coords[0] + section.width - node.coords[0];\r\n const sectionLastYCoordRelativeToNode =\r\n section.coords[1] + section.height - node.coords[1];\r\n newNodeWidth = Math.max(\r\n newNodeWidth,\r\n sectionLastXCoordRelativeToNode\r\n );\r\n newNodeHeight = Math.max(\r\n newNodeHeight,\r\n sectionLastYCoordRelativeToNode\r\n );\r\n }\r\n }\r\n // add the margin that goes between the rightmost and bottommost points of the sections and the edge of the node\r\n newNodeWidth += node.type.sectionGrid?.margin || 0;\r\n newNodeHeight += node.type.sectionGrid?.margin || 0;\r\n node.stretch(Side.Right, newNodeWidth - node.width);\r\n node.stretch(Side.Bottom, newNodeHeight - node.height);\r\n }\r\n }\r\n\r\n selectRoot(): d3.Selection<SVGElement, unknown, null, unknown> {\r\n return d3.select(this.diagramRoot).select('svg');\r\n }\r\n\r\n selectCanvasView(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-view`);\r\n }\r\n\r\n selectCanvasElements(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-elements`);\r\n }\r\n\r\n selectCanvasNodes(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-nodes`);\r\n }\r\n\r\n selectCanvasSections(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-sections`);\r\n }\r\n\r\n selectCanvasPorts(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-ports`);\r\n }\r\n\r\n selectCanvasConnections(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-connections`);\r\n }\r\n\r\n selectCanvasFields(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-fields`);\r\n }\r\n\r\n selectCanvasObjects(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-objects`);\r\n }\r\n\r\n selectCanvasDecorators(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.canvas-decorators`);\r\n }\r\n\r\n // User actions\r\n\r\n startConnection(port: DiagramPort) {\r\n if (\r\n this.connectionType &&\r\n (this.connectionType.canStartFromType(port.getNode()?.type?.id || '') ||\r\n this.connectionType.canFinishOnType(port.getNode()?.type?.id || ''))\r\n ) {\r\n this.unfinishedConnection = new DiagramConnection(\r\n this.model,\r\n this.connectionType,\r\n port,\r\n undefined,\r\n UNFINISHED_CONNECTION_ID\r\n );\r\n } else {\r\n if (this.guessConnectionType) {\r\n let differentConnectionType = this.model.connections.types\r\n .all()\r\n .find((t) => t.canStartFromType(port.getNode()?.type?.id || ''));\r\n if (differentConnectionType === undefined) {\r\n differentConnectionType = this.model.connections.types\r\n .all()\r\n .find((t) => t.canFinishOnType(port.getNode()?.type?.id || ''));\r\n }\r\n if (differentConnectionType !== undefined) {\r\n this.unfinishedConnection = new DiagramConnection(\r\n this.model,\r\n differentConnectionType,\r\n port,\r\n undefined,\r\n UNFINISHED_CONNECTION_ID\r\n );\r\n } else {\r\n // error: connection source of wrong type and no allowed type can be found\r\n }\r\n } else {\r\n // error: connection source of wrong type and can't guess for a different type\r\n }\r\n }\r\n }\r\n\r\n finishConnection(port: DiagramPort) {\r\n this.unhighlight();\r\n if (this.unfinishedConnection !== undefined) {\r\n if (this.unfinishedConnection.start !== port) {\r\n if (\r\n this.unfinishedConnection.type.canStartFromType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n port.getNode()?.type?.id || ''\r\n )\r\n ) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n this.unfinishedConnection.type,\r\n this.unfinishedConnection.start?.id as string,\r\n port.id\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.do();\r\n this.actionQueue.add(addConnectionAction);\r\n } else if (\r\n this.unfinishedConnection.type.canFinishOnType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canStartFromType(\r\n port.getNode()?.type?.id || ''\r\n )\r\n ) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n this.unfinishedConnection.type,\r\n port.id,\r\n this.unfinishedConnection.start?.id as string\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.do();\r\n this.actionQueue.add(addConnectionAction);\r\n } else {\r\n if (this.guessConnectionType) {\r\n let differentConnectionType = this.model.connections.types\r\n .all()\r\n .find(\r\n (t) =>\r\n t.canStartFromType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) && t.canFinishOnType(port.getNode()?.type?.id || '')\r\n );\r\n let invertConnection = false;\r\n if (differentConnectionType === undefined) {\r\n differentConnectionType = this.model.connections.types\r\n .all()\r\n .find(\r\n (t) =>\r\n t.canFinishOnType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id ||\r\n ''\r\n ) && t.canStartFromType(port.getNode()?.type?.id || '')\r\n );\r\n invertConnection = true;\r\n }\r\n if (differentConnectionType !== undefined) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n differentConnectionType,\r\n invertConnection\r\n ? port.id\r\n : (this.unfinishedConnection.start?.id as string),\r\n invertConnection\r\n ? (this.unfinishedConnection.start?.id as string)\r\n : port.id\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.do();\r\n this.actionQueue.add(addConnectionAction);\r\n } else {\r\n // error: connection target of wrong type and no allowed type can be found\r\n this.dropConnection();\r\n }\r\n } else {\r\n // error: connection target of wrong type and can't guess for a different type\r\n this.dropConnection();\r\n }\r\n }\r\n } else {\r\n // error: start port of a connection can't also be the end port\r\n this.dropConnection();\r\n }\r\n }\r\n }\r\n\r\n dropConnection() {\r\n this.unfinishedConnection?.setStart(undefined);\r\n this.unfinishedConnection?.setEnd(undefined);\r\n this.unfinishedConnection?.select()?.remove();\r\n this.unfinishedConnection = undefined;\r\n }\r\n\r\n highlight(element: DiagramElement): void {\r\n this.unhighlight();\r\n element.highlighted = true;\r\n this.mainUserHighlight = element;\r\n this.userHighlight.push(element);\r\n if (element instanceof DiagramNode) {\r\n for (const port of element.ports) {\r\n port.highlighted = true;\r\n this.userHighlight.push(port);\r\n this.updatePortsInView(port.id);\r\n }\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updateNodesInView(element.id);\r\n } else if (element instanceof DiagramSection) {\r\n for (const port of element.ports) {\r\n port.highlighted = true;\r\n this.userHighlight.push(port);\r\n this.updatePortsInView(port.id);\r\n }\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updateSectionsInView(element.id);\r\n } else if (element instanceof DiagramPort) {\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updatePortsInView(element.id);\r\n } else if (element instanceof DiagramConnection) {\r\n this.updateConnectionsInView(element.id);\r\n } else if (element instanceof DiagramField && element.rootElement) {\r\n this.highlight(element.rootElement);\r\n }\r\n }\r\n\r\n unhighlight(): void {\r\n for (const element of this.userHighlight) {\r\n element.highlighted = false;\r\n element.updateInView();\r\n }\r\n this.mainUserHighlight = undefined;\r\n this.userHighlight = [];\r\n }\r\n\r\n setPropertyEditorSelection(\r\n selection?: { valueSet: ValueSet } & (DiagramElement | DiagramModel)\r\n ): void {\r\n this.makeUpdateValuesAction();\r\n\r\n const propertyEditor = this.parentComponent.propertyEditor;\r\n const selectedValueSet = selection?.valueSet;\r\n if (selectedValueSet) {\r\n this.propertyEditorSelection = selection;\r\n this.propertyEditorValues = structuredClone(selectedValueSet.getValues());\r\n if (propertyEditor) {\r\n if (\r\n selection instanceof DiagramNode ||\r\n selection instanceof DiagramConnection\r\n ) {\r\n if (selection instanceof DiagramNode) {\r\n if (selection.name) {\r\n propertyEditor.title = `${selection.type.name}: ${selection.name}`;\r\n } else {\r\n propertyEditor.title = selection.type.name;\r\n }\r\n } else if (selection instanceof DiagramConnection) {\r\n propertyEditor.title = selection.type.name;\r\n }\r\n // force the update of the valueSet\r\n propertyEditor.valueSet = undefined;\r\n propertyEditor.valueSet = selectedValueSet;\r\n } else {\r\n propertyEditor.title = DIAGRAM_PROPERTIES_TEXT;\r\n // force the update of the valueSet\r\n propertyEditor.valueSet = undefined;\r\n propertyEditor.valueSet = selectedValueSet;\r\n }\r\n }\r\n } else {\r\n this.propertyEditorSelection = undefined;\r\n this.propertyEditorValues = undefined;\r\n if (propertyEditor) {\r\n propertyEditor.title = '';\r\n propertyEditor.valueSet = undefined;\r\n }\r\n }\r\n }\r\n\r\n private makeUpdateValuesAction() {\r\n if (\r\n this.propertyEditorSelection === undefined ||\r\n this.propertyEditorValues === undefined\r\n ) {\r\n return;\r\n }\r\n const previousSelectionId =\r\n this.propertyEditorSelection instanceof DiagramModel\r\n ? undefined\r\n : (this.propertyEditorSelection as DiagramElement).id;\r\n // check if there have been changes in the previously selected ValueSet,\r\n // and create an UpdateValuesAction if there have\r\n if (\r\n equals(\r\n this.propertyEditorValues,\r\n this.propertyEditorSelection?.valueSet.getValues()\r\n )\r\n ) {\r\n return;\r\n }\r\n const from = this.propertyEditorValues;\r\n const to = structuredClone(\r\n this.propertyEditorSelection?.valueSet.getValues()\r\n );\r\n const [fromDiff, toDiff] = diff(from, to);\r\n const currentAction = new UpdateValuesAction(\r\n this,\r\n previousSelectionId,\r\n fromDiff,\r\n toDiff\r\n );\r\n currentAction.do();\r\n this.actionQueue.add(currentAction);\r\n this.propertyEditorValues = to;\r\n }\r\n\r\n isInUserSelection(selection: DiagramElement): boolean {\r\n return this.userSelection.indexOf(selection) >= 0;\r\n }\r\n\r\n addToUserSelection(selection: DiagramElement): void {\r\n if (\r\n this.propertyEditorSelection === undefined &&\r\n (selection instanceof DiagramNode ||\r\n selection instanceof DiagramConnection)\r\n ) {\r\n this.setPropertyEditorSelection(selection);\r\n } else if (\r\n this.propertyEditorSelection === undefined &&\r\n selection instanceof DiagramSection\r\n ) {\r\n this.setPropertyEditorSelection(selection.node);\r\n } else {\r\n this.setPropertyEditorSelection(undefined);\r\n }\r\n this.userSelection.push(selection);\r\n selection.selected = true;\r\n selection.updateInView();\r\n // if selection is a node with sections, select the sections too so that sections show up as selected in the view\r\n if (selection instanceof DiagramNode && selection.sections) {\r\n for (const section of selection.sections) {\r\n this.addToUserSelection(section);\r\n }\r\n }\r\n }\r\n\r\n removeFromUserSelection(selection: DiagramElement): void {\r\n if (this.propertyEditorSelection === selection) {\r\n this.setPropertyEditorSelection(undefined);\r\n }\r\n this.userSelection.splice(this.userSelection.indexOf(selection), 1);\r\n selection.selected = false;\r\n selection.updateInView();\r\n // if selection is a node with sections, deselect the sections too so that sections don't show up as selected in the view\r\n if (selection instanceof DiagramNode && selection.sections) {\r\n for (const section of selection.sections) {\r\n this.removeFromUserSelection(section);\r\n }\r\n }\r\n }\r\n\r\n toggleUserSelection(selection: DiagramElement): void {\r\n if (this.isInUserSelection(selection)) {\r\n this.removeFromUserSelection(selection);\r\n } else {\r\n this.addToUserSelection(selection);\r\n }\r\n }\r\n\r\n clearUserSelection(): void {\r\n this.setPropertyEditorSelection(undefined);\r\n for (const userSelectionElement of this.userSelection) {\r\n userSelectionElement.selected = false;\r\n userSelectionElement.updateInView();\r\n }\r\n this.userSelection = [];\r\n }\r\n\r\n deleteUserSelection(): void {\r\n if (this.userSelection.length > 0) {\r\n const nodeIdsToBeDeleted: string[] = [];\r\n const sectionIdsToBeDeleted: string[] = [];\r\n const portIdsToBeDeleted: string[] = [];\r\n const connectionIdsToBeDeleted: string[] = [];\r\n const fieldIdsToBeDeleted: string[] = [];\r\n for (const userSelectionElement of this.userSelection) {\r\n if (userSelectionElement instanceof DiagramNode) {\r\n nodeIdsToBeDeleted.push(userSelectionElement.id);\r\n } else if (userSelectionElement instanceof DiagramSection) {\r\n sectionIdsToBeDeleted.push(userSelectionElement.id);\r\n } else if (userSelectionElement instanceof DiagramPort) {\r\n portIdsToBeDeleted.push(userSelectionElement.id);\r\n } else if (userSelectionElement instanceof DiagramConnection) {\r\n connectionIdsToBeDeleted.push(userSelectionElement.id);\r\n } else if (userSelectionElement instanceof DiagramField) {\r\n fieldIdsToBeDeleted.push(userSelectionElement.id);\r\n }\r\n }\r\n const removeAction = new RemoveAction(\r\n this,\r\n nodeIdsToBeDeleted,\r\n sectionIdsToBeDeleted,\r\n portIdsToBeDeleted,\r\n connectionIdsToBeDeleted,\r\n fieldIdsToBeDeleted\r\n );\r\n removeAction.do();\r\n this.actionQueue.add(removeAction);\r\n }\r\n }\r\n\r\n copyUserSelectionToClipboard(): void {\r\n const userSelection: {\r\n type: 'daga-user-selection';\r\n nodes: DagaNode[];\r\n connections: DagaConnection[];\r\n } = { type: 'daga-user-selection', nodes: [], connections: [] };\r\n const exporter = new DagaExporter();\r\n for (const element of this.userSelection) {\r\n if (element instanceof DiagramNode) {\r\n userSelection.nodes.push(exporter.exportNode(element, false));\r\n }\r\n if (element instanceof DiagramConnection) {\r\n userSelection.connections.push(\r\n exporter.exportConnection(element, false)\r\n );\r\n }\r\n }\r\n navigator.clipboard.writeText(JSON.stringify(userSelection));\r\n }\r\n\r\n pasteUserSelectionFromClipboard(coords?: Point): void {\r\n navigator.clipboard.readText().then((text) => {\r\n try {\r\n const userSelection = JSON.parse(text);\r\n if (userSelection.type !== 'daga-user-selection') {\r\n return;\r\n }\r\n const action = new PasteAction(\r\n this,\r\n userSelection.nodes,\r\n userSelection.connections,\r\n coords\r\n );\r\n this.actionQueue.add(action);\r\n action.do();\r\n } catch {\r\n return;\r\n }\r\n });\r\n }\r\n\r\n openContextMenu(event: MouseEvent): void {\r\n this.closeContextMenu();\r\n\r\n const coordsRelativeToRoot = this.getPointerLocationRelativeToRoot(event);\r\n const coordsRelativeToCanvas =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n\r\n // append to the root (svg) element so the context menu is not affected by zoom transforms on the canvas view\r\n const contextMenuContainer = this.selectRoot()\r\n .append('foreignObject')\r\n .attr('class', 'context-menu')\r\n .attr('x', `${coordsRelativeToRoot[0] - CONTEXT_MENU_TOTAL_RADIUS}px`)\r\n .attr('y', `${coordsRelativeToRoot[1] - CONTEXT_MENU_TOTAL_RADIUS}px`)\r\n .attr('width', `${2 * CONTEXT_MENU_TOTAL_RADIUS}px`)\r\n .attr('height', `${2 * CONTEXT_MENU_TOTAL_RADIUS}px`)\r\n .style('pointer-events', 'none')\r\n .on(Events.ContextMenu, (newEvent: MouseEvent) => {\r\n if (this.canUserPerformAction(DiagramActions.ContextMenu)) {\r\n event.preventDefault();\r\n this.openContextMenu(newEvent);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent) => {\r\n event.preventDefault();\r\n this.closeContextMenu();\r\n });\r\n this.contextMenuContainer = contextMenuContainer;\r\n const buttons: {\r\n name: string;\r\n imageClass: string;\r\n onPress?: (buttonPressEvent: UIEvent) => void;\r\n }[] = [];\r\n if (\r\n this.userSelection.length > 0 &&\r\n this.canUserPerformAction(DiagramActions.Clipboard) &&\r\n this.canUserPerformAction(DiagramActions.Remove)\r\n ) {\r\n buttons.push({\r\n name: 'CUT',\r\n imageClass: 'cut',\r\n onPress: (buttonPressEvent: UIEvent) => {\r\n buttonPressEvent.preventDefault();\r\n this.copyUserSelectionToClipboard();\r\n this.deleteUserSelection();\r\n this.cancelAllUserActions();\r\n }\r\n });\r\n }\r\n if (\r\n this.userSelection.length > 0 &&\r\n this.canUserPerformAction(DiagramActions.Clipboard)\r\n ) {\r\n buttons.push({\r\n name: 'COPY',\r\n imageClass: 'copy',\r\n onPress: (buttonPressEvent: UIEvent) => {\r\n buttonPressEvent.preventDefault();\r\n this.copyUserSelectionToClipboard();\r\n this.cancelAllUserActions();\r\n }\r\n });\r\n }\r\n if (this.canUserPerformAction(DiagramActions.Paste)) {\r\n buttons.push({\r\n name: 'PASTE',\r\n imageClass: 'paste',\r\n onPress: (buttonPressEvent: UIEvent) => {\r\n buttonPressEvent.preventDefault();\r\n this.pasteUserSelectionFromClipboard(\r\n this.getClosestGridPoint(coordsRelativeToCanvas)\r\n );\r\n this.cancelAllUserActions();\r\n }\r\n });\r\n }\r\n if (\r\n this.userSelection.length > 0 &&\r\n this.canUserPerformAction(DiagramActions.Remove)\r\n ) {\r\n buttons.push({\r\n name: 'DELETE',\r\n imageClass: 'delete',\r\n onPress: (buttonPressEvent: UIEvent) => {\r\n buttonPressEvent.preventDefault();\r\n this.deleteUserSelection();\r\n this.cancelAllUserActions();\r\n }\r\n });\r\n }\r\n // show something if there are no options available\r\n if (buttons.length === 0) {\r\n buttons.push({\r\n name: 'NONE',\r\n imageClass: 'cross',\r\n onPress: undefined\r\n });\r\n }\r\n\r\n for (let i = 0; i < buttons.length; ++i) {\r\n const button = buttons[i];\r\n const buttonOnPress = button.onPress;\r\n const angle =\r\n (i + 0.5 - buttons.length / 2) * CONTEXT_MENU_BUTTON_PADDING_RADIANS;\r\n const buttonContainer = contextMenuContainer\r\n .append('xhtml:div')\r\n .attr(\r\n 'class',\r\n `context-menu-button ${button.imageClass}-button${button.onPress != undefined ? ' clickable' : ''}`\r\n )\r\n .attr('tabindex', 0)\r\n .style('position', 'absolute')\r\n .style('box-sizing', 'border-box')\r\n .style('width', `${2 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('height', `${2 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('border-radius', `${CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('pointer-events', 'auto')\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n .on(Events.Click, (event: MouseEvent) => {\r\n if (buttonOnPress) {\r\n buttonOnPress(event);\r\n }\r\n })\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n .on(Events.KeyDown, (event: KeyboardEvent) => {\r\n if (buttonOnPress && event.key === Keys.Enter) {\r\n buttonOnPress(event);\r\n }\r\n });\r\n buttonContainer\r\n .append('xhtml:div')\r\n .style('position', 'absolute')\r\n .style('left', `${0.75 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('top', `${0.5 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('width', `${0.5 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('height', `${0.5 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('background-size', 'contain')\r\n .style('background-repeat', 'no-repeat')\r\n .attr('class', button.imageClass);\r\n buttonContainer\r\n .append('xhtml:span')\r\n .style('position', 'absolute')\r\n .style('left', `${0.2 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('top', `${1.1 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('text-align', 'center')\r\n .style('width', `${1.6 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('height', `${0.35 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('margin', '0')\r\n .style('font-size', `${0.35 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('font-weight', '700')\r\n .style('user-select', 'none')\r\n .text(button.name);\r\n buttonContainer\r\n .transition()\r\n .ease(d3.easeLinear)\r\n .duration(CONTEXT_MENU_ANIMATION_DURATION_MS)\r\n .tween('progress', () => {\r\n return (value: number) => {\r\n const currentAngle = angle * value;\r\n return buttonContainer\r\n .style(\r\n 'left',\r\n `${Math.sin(currentAngle) * CONTEXT_MENU_MENU_RADIUS - CONTEXT_MENU_BUTTON_RADIUS + CONTEXT_MENU_TOTAL_RADIUS}px`\r\n )\r\n .style(\r\n 'top',\r\n `${-Math.cos(currentAngle) * CONTEXT_MENU_MENU_RADIUS - CONTEXT_MENU_BUTTON_RADIUS + CONTEXT_MENU_TOTAL_RADIUS}px`\r\n );\r\n };\r\n });\r\n }\r\n }\r\n\r\n closeContextMenu(): void {\r\n this.contextMenuContainer?.remove();\r\n this.contextMenuContainer = undefined;\r\n }\r\n\r\n cancelAllUserActions(): void {\r\n this.currentAction = undefined;\r\n this.dropConnection();\r\n this.removeInputField();\r\n this.closeContextMenu();\r\n this.clearUserSelection();\r\n }\r\n\r\n canUserPerformAction(action: DiagramActions): boolean {\r\n return this.userActions[action] !== false;\r\n }\r\n\r\n private createInputField(\r\n text: string,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n fontSize: number,\r\n fontFamily: string,\r\n changeCallback?: (text: string) => void,\r\n finishCallback?: (text: string) => void\r\n ): void {\r\n // if we have a text input open, close it before creating a new one\r\n this.removeInputField();\r\n const inputFieldContainer = this.selectCanvasElements()\r\n .append('foreignObject')\r\n .attr('x', `${coords[0]}px`)\r\n .attr('y', `${coords[1]}px`)\r\n .attr('width', `${width}px`)\r\n .attr('height', `${height}px`)\r\n .style('box-sizing', 'border-box')\r\n .style('border', '1px solid');\r\n this.inputFieldContainer = inputFieldContainer;\r\n const inputField = inputFieldContainer.append('xhtml:textarea');\r\n let inputFieldWidth: number;\r\n let inputFieldHeight: number;\r\n inputField\r\n .text(text)\r\n .style('box-sizing', 'border-box')\r\n .style('width', `${width}px`)\r\n .style('height', `${height}px`)\r\n .style('font-size', `${fontSize}px`)\r\n .style('font-family', fontFamily)\r\n .style('resize', 'none')\r\n .style('outline', 0)\r\n .style('border', 0)\r\n .style('margin', 0)\r\n .style('padding', 0)\r\n .on(Events.KeyDown, (event: KeyboardEvent) => {\r\n event.stopPropagation();\r\n })\r\n .on(Events.KeyUp, (event: KeyboardEvent) => {\r\n event.stopPropagation();\r\n if (event.key === Keys.Escape) {\r\n const value = inputField.property('value');\r\n this.removeInputField();\r\n if (finishCallback) {\r\n finishCallback(value);\r\n }\r\n }\r\n })\r\n .on(Events.Input, () => {\r\n const value = inputField.property('value');\r\n inputField.attr('cols', numberOfColumns(value) + 1);\r\n inputField.attr('rows', numberOfRows(value) + 1);\r\n // reset width and height so that later the scrollWidth and scrollHeight are fit to the size of the text\r\n inputField.style('width', '');\r\n inputField.style('height', '');\r\n // add one pixel of margin of error\r\n inputFieldWidth = inputField.property('scrollWidth') + 1;\r\n inputFieldHeight = inputField.property('scrollHeight') + 1;\r\n // keep the field from shrinking below its original size\r\n const newWidth = Math.max(inputFieldWidth, width);\r\n const newHeight = Math.max(inputFieldHeight, height);\r\n inputFieldContainer?.attr('width', `${newWidth}px`);\r\n inputField.style('width', `${newWidth}px`);\r\n inputFieldContainer?.attr('height', `${newHeight}px`);\r\n inputField.style('height', `${newHeight}px`);\r\n if (changeCallback) {\r\n changeCallback(value);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent) => {\r\n event.stopPropagation();\r\n })\r\n .on(Events.FocusOut, () => {\r\n const value = inputField.property('value');\r\n this.removeInputField();\r\n if (finishCallback) {\r\n finishCallback(value);\r\n }\r\n });\r\n const htmlInput = inputField.node() as HTMLInputElement;\r\n htmlInput.focus();\r\n htmlInput.select();\r\n }\r\n\r\n private removeInputField(): void {\r\n // when removing an element, a blur event is emitted\r\n // we remove the listener for blur so that it doesn't shoot again on element removal\r\n this.inputFieldContainer?.select('input')?.on(Events.Blur, null);\r\n this.inputFieldContainer?.remove();\r\n this.inputFieldContainer = undefined;\r\n }\r\n\r\n private minimumSizeOfField(field: DiagramField): Point {\r\n const pNode = field.select()?.select('p')?.node() as HTMLParagraphElement;\r\n if (!pNode) {\r\n // happens when a field has been created but not updated in view yet\r\n return [0, 0];\r\n }\r\n const pBoundingBox = pNode.getBoundingClientRect();\r\n return [\r\n pBoundingBox.width / this.zoomTransform.k,\r\n pBoundingBox.height / this.zoomTransform.k\r\n ];\r\n }\r\n}\r\n\r\n/**\r\n * Get the SVG path of a diagram connection.\r\n * @see linePath\r\n * @private\r\n */\r\nconst getConnectionPath = (\r\n shape: LineShape,\r\n startCoords: Point,\r\n endCoords: Point,\r\n startDirection: Side | undefined,\r\n endDirection: Side | undefined,\r\n width: number,\r\n startMarkerWidth: number | undefined,\r\n endMarkerWidth: number | undefined\r\n): string => {\r\n return linePath(\r\n shape,\r\n [startCoords, endCoords],\r\n startDirection,\r\n endDirection,\r\n Math.max(\r\n // reasonable value for the minimumDistanceBeforeTurn relative to the line width\r\n 10,\r\n startMarkerWidth || 0,\r\n endMarkerWidth || 0\r\n ) * width\r\n );\r\n};\r\n\r\nexport const cursorStyle = (style?: CursorStyle) => {\r\n if (!style) {\r\n d3.select('body').style('cursor', CursorStyle.Auto);\r\n } else {\r\n d3.select('body').style('cursor', style);\r\n }\r\n};\r\n\r\nconst getRelatedNodeOrItself = (\r\n element: DiagramNode | DiagramSection | DiagramPort | DiagramField\r\n): DiagramNode | DiagramSection | DiagramPort | DiagramField => {\r\n if (element instanceof DiagramNode) {\r\n return element;\r\n }\r\n if (element instanceof DiagramSection) {\r\n return element.node || element;\r\n }\r\n return element.rootElement !== undefined\r\n ? getRelatedNodeOrItself(element.rootElement)\r\n : element;\r\n};\r\n","import { Injectable } from '@angular/core';\nimport { DiagramCanvas } from '../diagram-editor/diagram/diagram-canvas';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\nimport { Canvas } from '../interfaces/canvas';\nimport { DiagramEditor } from '../interfaces/diagram-editor';\n\n/**\n * A provider for the {@link Canvas} associated with a {@link DiagramComponent} context.\n * @public\n */\n@Injectable()\nexport class CanvasProviderService {\n private _canvas!: Canvas;\n\n /**\n * Initialize the diagram canvas object of this context.\n * @private\n * @param parentComponent A diagram editor.\n * @param config A diagram configuration.\n */\n initCanvas(parentComponent: DiagramEditor, config: DiagramConfig) {\n this._canvas = new DiagramCanvas(parentComponent, config);\n }\n\n /**\n * Attach the canvas of this context to an HTML Element to render it there.\n * @private\n * @param appendTo An HTML Element.\n */\n initCanvasView(appendTo: HTMLElement) {\n this._canvas.initView(appendTo);\n }\n\n /**\n * Get the diagram canvas of this context. Should only be called after the view of the {@link DiagramComponent} context has been initialized.\n * @public\n * @returns A diagram canvas.\n */\n getCanvas(): Canvas {\n return this._canvas;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n ViewChild\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { DiagramActions } from '../diagram-editor/diagram/diagram-action';\r\nimport { layouts } from '../diagram-editor/diagram/layout/diagram-layout';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { DiagramButtons } from '../interfaces/diagram-buttons';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Corner, Side } from '../util/svg-util';\r\n\r\n/**\r\n * Buttons used to trigger diagram functionalities by the user.\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram-buttons',\r\n templateUrl: './diagram-buttons.component.html',\r\n imports: [CommonModule]\r\n})\r\nexport class DiagramButtonsComponent implements AfterViewInit, DiagramButtons {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('collapsableButtons')\r\n collapsableButtons!: ElementRef<HTMLDivElement>;\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n enableFilter = true;\r\n @Input()\r\n enableLayout = true;\r\n @Input()\r\n enableUndoRedo = true;\r\n @Input()\r\n enableZoom = true;\r\n @Input()\r\n zoomRate = 2;\r\n\r\n filterOn = false;\r\n collapsed = true;\r\n animationOngoing = false;\r\n private sizeAttribute!: string;\r\n private transformFunction!: string;\r\n private transformOrigin!: string;\r\n private marginSide!: string;\r\n private collapsableButtonsSize!: string;\r\n\r\n DiagramActions = DiagramActions;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterViewInit() {\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'top';\r\n this.marginSide = 'bottom';\r\n break;\r\n case Side.Top:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'bottom';\r\n this.marginSide = 'top';\r\n break;\r\n case Side.Left:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'right';\r\n this.marginSide = 'left';\r\n break;\r\n case Side.Right:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'left';\r\n this.marginSide = 'right';\r\n break;\r\n }\r\n const numberOfCollapsableButtons = d3\r\n .select(this.collapsableButtons.nativeElement)\r\n .selectChildren()\r\n .size();\r\n this.collapsableButtonsSize = `${4 * numberOfCollapsableButtons}rem`;\r\n d3.select(this.collapsableButtons.nativeElement)\r\n .style(`margin-${this.marginSide}`, '-1rem')\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`)\r\n .style('transform-origin', this.transformOrigin);\r\n }\r\n\r\n // Collapse functions\r\n\r\n async toggleCollapse() {\r\n if (!this.animationOngoing) {\r\n const duration = 500;\r\n const collapsableButtons = d3.select(\r\n this.collapsableButtons.nativeElement\r\n );\r\n if (this.collapsed) {\r\n this.collapsed = false;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, this.collapsableButtonsSize)\r\n .style('transform', `${this.transformFunction}(1)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n } else {\r\n this.collapsed = true;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n }\r\n }\r\n }\r\n\r\n // Button functions\r\n\r\n zoomIn(): void {\r\n this.canvas.zoomBy(this.zoomRate);\r\n }\r\n\r\n zoomOut(): void {\r\n this.canvas.zoomBy(1 / this.zoomRate);\r\n }\r\n\r\n center(): void {\r\n this.canvas.center();\r\n }\r\n\r\n layout(): void {\r\n if (this.canvas.layoutFormat && this.canvas.layoutFormat in layouts) {\r\n layouts[this.canvas.layoutFormat].apply(this.canvas.model);\r\n }\r\n }\r\n\r\n filter(): void {\r\n this.filterOn = !this.filterOn;\r\n const priorityThresholds = this.canvas.getPriorityThresholdOptions();\r\n if (priorityThresholds && priorityThresholds.length >= 2) {\r\n this.canvas.setPriorityThreshold(\r\n priorityThresholds[this.filterOn ? 1 : 0]\r\n );\r\n }\r\n }\r\n\r\n undo(): void {\r\n this.canvas.actionQueue.undo();\r\n }\r\n\r\n redo(): void {\r\n this.canvas.actionQueue.redo();\r\n }\r\n}\r\n","<div class=\"diagram-buttons {{ location }} {{ direction }}\">\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"zoom-in\"\r\n (click)=\"zoomIn()\"\r\n >\r\n <span class=\"tooltip\">Zoom in</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"zoom-out\"\r\n (click)=\"zoomOut()\"\r\n >\r\n <span class=\"tooltip\">Zoom out</span>\r\n </button>\r\n <div #collapsableButtons class=\"collapsable-buttons collapsed\">\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"center\"\r\n (click)=\"center()\"\r\n >\r\n <span class=\"tooltip\">Fit diagram to screen</span>\r\n </button>\r\n <button *ngIf=\"enableUndoRedo\" class=\"undo\" (click)=\"undo()\">\r\n <span class=\"tooltip\">Undo</span>\r\n </button>\r\n <button *ngIf=\"enableUndoRedo\" class=\"redo\" (click)=\"redo()\">\r\n <span class=\"tooltip\">Redo</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableLayout && canvas.layoutFormat\"\r\n class=\"layout\"\r\n (click)=\"layout()\"\r\n >\r\n <span class=\"tooltip\">Apply layout</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableFilter\"\r\n class=\"filter\"\r\n [class]=\"filterOn ? 'on' : 'off'\"\r\n (click)=\"filter()\"\r\n >\r\n <span class=\"tooltip\">Apply filter</span>\r\n </button>\r\n </div>\r\n <button class=\"more-options\" (click)=\"toggleCollapse()\">\r\n <span *ngIf=\"!collapsed\" class=\"tooltip\">Less options</span>\r\n <span *ngIf=\"collapsed\" class=\"tooltip\">More options</span>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { merge, delay, map } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Side } from '../util/svg-util';\r\nimport { DiagramError } from './diagram-error';\r\n\r\n/**\r\n * Displays the errors detected by a diagram's validators.\r\n * @see DiagramValidator\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-errors',\r\n templateUrl: './errors.component.html',\r\n imports: [CommonModule, CollapseButtonComponent]\r\n})\r\nexport class ErrorsComponent implements AfterViewInit {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('errors') errorsContainer!: ElementRef<HTMLDivElement>;\r\n\r\n errors: DiagramError[] = [];\r\n\r\n Side = Side;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterViewInit(): void {\r\n merge(this.canvas.validatorChanges$, this.canvas.diagramChanges$)\r\n .pipe(\r\n // delay to avoid errors of variables changing right after checking\r\n delay(1),\r\n map(() => this.validate())\r\n )\r\n .subscribe();\r\n }\r\n\r\n selectPanel(): d3.Selection<d3.BaseType, unknown, null, unknown> {\r\n return d3.select(this.errorsContainer.nativeElement).select('.error-panel');\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n for (const validator of this.canvas.validators) {\r\n const newErrors = validator.validate(this.canvas.model);\r\n this.errors = [...this.errors, ...newErrors];\r\n }\r\n }\r\n\r\n showError(error: DiagramError): void {\r\n if (error.elementId && error.propertyNames) {\r\n this.canvas.setPropertyEditorSelection(\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId)\r\n );\r\n this.canvas.parentComponent.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n } else if (!error.elementId && error.propertyNames) {\r\n this.canvas.setPropertyEditorSelection();\r\n this.canvas.parentComponent.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n }\r\n // TODO: IF ERROR IS IN AN ELEMENT BUT NOT IN A SPECIFIC PROPERTY, WE COULD HIGHLIGHT THE ELEMENT\r\n }\r\n}\r\n","<div #errorsContainer class=\"errors\">\n <div\n *ngIf=\"errors.length === 0\"\n class=\"errors-summary no-errors prevent-user-select\"\n >\n <span>No errors found</span>\n </div>\n <div\n *ngIf=\"errors.length > 0\"\n class=\"errors-summary with-errors prevent-user-select\"\n >\n <span>{{ errors.length }} errors found</span>\n <div class=\"collapse-button-container\">\n <daga-collapse-button\n [collapsableSelector]=\"errorsContainer\"\n [collapsableAdditionalSelector]=\"'.error-panel'\"\n [direction]=\"Side.Top\"\n [rule]=\"'display'\"\n [collapsedValue]=\"'none'\"\n [visibleValue]=\"'block'\"\n />\n </div>\n </div>\n <div *ngIf=\"errors.length > 0\" class=\"error-panel\">\n <ol>\n <li\n *ngFor=\"let error of errors; index as i\"\n (click)=\"showError(error)\"\n [innerHTML]=\"error.message\"\n ></li>\n </ol>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n ViewChild\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport {\r\n AddNodeAction,\r\n DiagramActions\r\n} from '../diagram-editor/diagram/diagram-action';\r\nimport {\r\n ConnectionTemplateConfig,\r\n NodeTemplateConfig,\r\n PaletteSectionConfig\r\n} from '../diagram-editor/diagram/diagram-config';\r\nimport { DiagramConnectionType } from '../diagram-editor/diagram/diagram-connection';\r\nimport { DIAGRAM_FIELD_DEFAULTS } from '../diagram-editor/diagram/diagram-field';\r\nimport { DiagramNodeType } from '../diagram-editor/diagram/diagram-node';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { Palette } from '../interfaces/palette';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Point } from '../util/canvas-util';\r\nimport { DragEvents, Events } from '../util/events';\r\nimport { ClosedShape, generalClosedPath } from '../util/shape';\r\nimport { Corner, Side } from '../util/svg-util';\r\nimport { cursorStyle } from '../diagram-editor/diagram/diagram-canvas';\r\nimport { CursorStyle } from '../util/style';\r\n\r\n/**\r\n * Palette that the user can drag and drop nodes from.\r\n * @see DiagramConfig\r\n * @see DiagramNode\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-palette',\r\n templateUrl: './palette.component.html',\r\n imports: [CommonModule, CollapseButtonComponent]\r\n})\r\nexport class PaletteComponent\r\n implements AfterContentInit, AfterViewInit, Palette\r\n{\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n @Input()\r\n palettes!: PaletteSectionConfig[];\r\n @Input()\r\n currentPalette!: PaletteSectionConfig;\r\n @Input()\r\n currentCategory = '';\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n width!: string;\r\n\r\n private priorityThreshold?: number;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterContentInit(): void {\r\n // we initialize the currentPalette variable if it hasn't been initalized with a proper value\r\n // doing this in ngAfterViewInit() would cause an ExpressionChangedAfterItHasBeenCheckedError\r\n this.currentPalette = this.currentPalette || this.palettes[0];\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.refreshPalette();\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel().style('width', this.width);\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel().style('height', this.width);\r\n break;\r\n }\r\n }\r\n\r\n refreshPalette(): void {\r\n this.switchPalette(this.currentPalette);\r\n }\r\n\r\n switchPalette(palette: PaletteSectionConfig): void {\r\n this.currentPalette = palette;\r\n\r\n this.selectPalette().selectAll('*').remove();\r\n this.priorityThreshold = this.canvas.getPriorityThreshold();\r\n\r\n if (palette.categories) {\r\n this.appendCategories(palette.categories);\r\n }\r\n if (palette.templates) {\r\n for (const template of palette.templates) {\r\n this.appendTemplate(template);\r\n }\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n selectPalette(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return this.selectPanel().select('.palette-view');\r\n }\r\n\r\n private appendCategories(categories: {\r\n [key: string]: (NodeTemplateConfig | ConnectionTemplateConfig)[];\r\n }): void {\r\n const thisComponent = this.selectPalette()\r\n .append('select')\r\n .style('width', '100%')\r\n .style('height', '2rem')\r\n .style('padding', '0.5rem')\r\n .style('border-radius', '0.25rem')\r\n .style('background-color', '#f7f8fc')\r\n .style('border', `1px solid #e6e6e6`);\r\n thisComponent.append('option').attr('value', '').text('(None selected)');\r\n for (const categoryKey in categories) {\r\n thisComponent\r\n .append('option')\r\n .attr('value', categoryKey)\r\n .text(categoryKey);\r\n }\r\n thisComponent.on(Events.Change, () => {\r\n if (this.currentCategory) {\r\n this.selectPalette()\r\n .selectAll(`.template-container.in-category`)\r\n .remove();\r\n }\r\n\r\n const selectedKey = thisComponent.property('value');\r\n this.currentCategory = selectedKey;\r\n const templatesInCategory = categories[selectedKey] || [];\r\n for (const template of templatesInCategory) {\r\n this.appendTemplate(template, 'in-category');\r\n }\r\n });\r\n if (this.currentCategory) {\r\n // if we had a category already selected, re-select it\r\n thisComponent.property('value', this.currentCategory);\r\n thisComponent.dispatch(Events.Change);\r\n }\r\n }\r\n\r\n private appendTemplate(\r\n template: NodeTemplateConfig | ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (template.templateType === 'node') {\r\n const nodeType = this.canvas.model.nodes.types.get(template.type);\r\n if (nodeType) {\r\n this.appendNodeTemplate(nodeType, template, classes);\r\n } else {\r\n console.error(`Could not find a node type called '${template.type}'`);\r\n }\r\n } else if (template.templateType === 'connection') {\r\n {\r\n const connectionType = this.canvas.model.connections.types.get(\r\n template.type\r\n );\r\n if (connectionType) {\r\n this.appendConnectionTemplate(connectionType, template, classes);\r\n } else {\r\n console.error(\r\n `Could not find a connection type called '${template.type}'`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private appendNodeTemplate(\r\n type: DiagramNodeType,\r\n templateConfig: NodeTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (\r\n this.priorityThreshold !== undefined &&\r\n type.priority < this.priorityThreshold\r\n ) {\r\n return;\r\n }\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${type.defaultWidth}px`)\r\n .style('height', `${type.defaultHeight}px`)\r\n .call(\r\n d3\r\n .drag<HTMLDivElement, unknown, HTMLElement>()\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n thisComponent\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - type.defaultWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - type.defaultHeight / 2}px`)\r\n .style('z-index', 1);\r\n }\r\n })\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n thisComponent\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - type.defaultWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - type.defaultHeight / 2}px`)\r\n .style('z-index', 1);\r\n // when trying to place a unique node in a diagram that already has a node of that type, set cursor style to not allowed\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(\r\n (n) => !n.removed && n.type.id === type.id\r\n ) !== undefined\r\n ) {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n // take node back to its original position\r\n cursorStyle(CursorStyle.Auto);\r\n thisComponent\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('z-index', 'auto');\r\n // try to place node\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(\r\n (n) => !n.removed && n.type.id === type.id\r\n ) !== undefined\r\n ) {\r\n // can't place, it's unique and that node is already in the model\r\n return;\r\n }\r\n const pointerCoordsRelativeToScreen =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoordsRelativeToScreen.length < 2 ||\r\n isNaN(pointerCoordsRelativeToScreen[0]) ||\r\n isNaN(pointerCoordsRelativeToScreen[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n\r\n const element = document.elementFromPoint(\r\n pointerCoordsRelativeToScreen[0],\r\n pointerCoordsRelativeToScreen[1]\r\n );\r\n if (\r\n element &&\r\n !this.canvas.selectCanvasView().node()?.contains(element)\r\n ) {\r\n // can't place, node hasn't been dropped on the canvas\r\n return;\r\n }\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToCanvas(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n let newNodeCoords: Point = [\r\n pointerCoords[0] - type.defaultWidth / 2,\r\n pointerCoords[1] - type.defaultHeight / 2\r\n ];\r\n if (this.canvas.snapToGrid) {\r\n newNodeCoords = this.canvas.getClosestGridPoint(newNodeCoords);\r\n }\r\n const addNodeAction = new AddNodeAction(\r\n this.canvas,\r\n type,\r\n newNodeCoords,\r\n templateConfig.label,\r\n templateConfig.values\r\n );\r\n addNodeAction.do();\r\n this.canvas.actionQueue.add(addNodeAction);\r\n // reset cursor\r\n cursorStyle();\r\n }\r\n })\r\n )\r\n .append('svg')\r\n .attr('class', `palette-node ${type.id}`)\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', '100%')\r\n .style('height', '100%');\r\n\r\n switch (type.look.lookType) {\r\n case 'shaped-look':\r\n thisComponent\r\n .append('path')\r\n .attr(\r\n 'd',\r\n generalClosedPath(\r\n type.look.shape,\r\n 0,\r\n 0,\r\n type.defaultWidth,\r\n type.defaultHeight\r\n )\r\n )\r\n .attr('fill', type.look.fillColor)\r\n .attr('stroke', type.look.borderColor)\r\n .attr('stroke-width', '1px');\r\n break;\r\n case 'image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', type.defaultWidth)\r\n .attr('height', type.defaultHeight)\r\n .attr('href', type.look.backgroundImage)\r\n .attr('preserveAspectRatio', 'none');\r\n break;\r\n case 'stretchable-image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', type.look.leftMargin)\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTopLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTop)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', 0)\r\n .attr('width', type.look.rightMargin)\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTopRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', type.look.topMargin)\r\n .attr('width', type.look.leftMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', type.look.topMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageCenter)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', type.look.topMargin)\r\n .attr('width', type.look.rightMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr('width', type.look.leftMargin)\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottomLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottom)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr('width', type.look.rightMargin)\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottomRight)\r\n .attr('preserveAspectRatio', 'none');\r\n }\r\n\r\n if (templateConfig.label) {\r\n const labelConfig = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...type.label,\r\n ...templateConfig.labelLook\r\n };\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${type.defaultWidth / 2},${type.defaultHeight / 2 + 5})`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', `${labelConfig.fontSize}px`)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfig.fontFamily)\r\n .attr('font-weight', 400)\r\n .attr('fill', labelConfig.color)\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n\r\n private appendConnectionTemplate(\r\n type: DiagramConnectionType,\r\n templateConfig: ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${templateConfig.width}px`)\r\n .style('height', `${templateConfig.height}px`)\r\n .append('svg')\r\n .attr('class', `palette-button ${type.id}`)\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .on('click', () => {\r\n this.canvas.connectionType = type;\r\n });\r\n\r\n thisComponent\r\n .append('path')\r\n .attr(\r\n 'd',\r\n generalClosedPath(\r\n ClosedShape.Rectangle,\r\n 0,\r\n 0,\r\n templateConfig.width,\r\n templateConfig.height\r\n )\r\n )\r\n .attr('fill', templateConfig.backgroundColor)\r\n .attr('stroke', 'black')\r\n .attr('stroke-width', '1px');\r\n\r\n if (templateConfig.icon !== '') {\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.icon);\r\n }\r\n\r\n if (templateConfig.label !== '') {\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${templateConfig.width / 2},${\r\n templateConfig.height / 2 + 5\r\n })`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', '20px')\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\r\n .attr('font-weight', 400)\r\n .attr('fill', '#000000')\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n}\r\n","<div #panel class=\"panel {{ location }} {{ direction }}\">\n <daga-collapse-button\n #collapseButton\n [direction]=\"direction\"\n [collapsableSelector]=\"panel\"\n collapsableAdditionalSelector=\".panel-content\"\n rule=\"display\"\n collapsedValue=\"none\"\n visibleValue=\"block\"\n />\n <div class=\"panel-content\">\n <div *ngIf=\"palettes.length > 1\" class=\"panel-tabs\">\n <div\n *ngFor=\"let palette of palettes\"\n class=\"panel-tab\"\n [class]=\"palette === currentPalette ? 'current-tab' : ''\"\n (click)=\"switchPalette(palette)\"\n >\n {{ palette.name }}\n </div>\n </div>\n <div class=\"palette-view\"></div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n Input\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport * as d3 from 'd3';\r\nimport { cursorStyle } from '../../diagram-editor/diagram/diagram-canvas';\r\nimport {\r\n Property,\r\n Type,\r\n ValueSet,\r\n isObject\r\n} from '../../diagram-editor/diagram/diagram-property';\r\nimport { Canvas } from '../../interfaces/canvas';\r\nimport { CanvasProviderService } from '../../services/canvas-provider.service';\r\nimport { Point, distanceBetweenPoints } from '../../util/canvas-util';\r\nimport { DragEvents } from '../../util/events';\r\nimport { CursorStyle } from '../../util/style';\r\nimport { getStyleClassName } from '../property-editor.component';\r\n\r\n/**\r\n * Editor of the settings of a property editor, such as what properties are displayed and hidden and in what order.\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-property-settings',\r\n templateUrl: './property-settings.component.html',\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class PropertySettingsComponent implements AfterViewInit {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n /** How many property-settings elements are parents of this property-settings element. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n getStyleClassName = getStyleClassName;\r\n asString = asString;\r\n\r\n constructor(\r\n private element: ElementRef,\r\n private cdr: ChangeDetectorRef,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.addListeners();\r\n }\r\n\r\n private addListeners() {\r\n for (const property of this.valueSet?.displayedProperties || []) {\r\n let propertyElementWidth = 0;\r\n let propertyElementHeight = 0;\r\n let closestDropbarIndex = 0;\r\n const propertyElement = d3\r\n .select(this.element.nativeElement)\r\n .select<HTMLDivElement>(\r\n `.property.${getStyleClassName(property.name)}.depth-${this.depth}`\r\n );\r\n propertyElement.select<HTMLButtonElement>('button.move-button').call(\r\n d3\r\n .drag<HTMLButtonElement, unknown, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n cursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n const boundingRect = propertyElement\r\n .node()\r\n ?.getBoundingClientRect();\r\n propertyElementWidth = boundingRect?.width || 0;\r\n propertyElementHeight = boundingRect?.height || 0;\r\n propertyElement\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - propertyElementWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - propertyElementHeight / 2}px`)\r\n .style('width', `${propertyElementWidth}px`)\r\n .style('height', `${propertyElementHeight}px`)\r\n .style('z-index', 1);\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n cursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n propertyElement\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - propertyElementWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - propertyElementHeight / 2}px`)\r\n .style('width', `${propertyElementWidth}px`)\r\n .style('height', `${propertyElementHeight}px`)\r\n .style('z-index', 1);\r\n d3.select(this.element.nativeElement)\r\n .select(\r\n `.dropbar.index-${closestDropbarIndex}.depth-${this.depth}`\r\n )\r\n .style('visibility', 'hidden')\r\n .style('height', 0);\r\n closestDropbarIndex = this.getClosestDropbarIndex(pointerCoords);\r\n d3.select(this.element.nativeElement)\r\n .select(\r\n `.dropbar.index-${closestDropbarIndex}.depth-${this.depth}`\r\n )\r\n .style('visibility', 'visible')\r\n .style('height', '0.25rem');\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n cursorStyle(CursorStyle.Auto);\r\n propertyElement\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('z-index', 0)\r\n .style('width', 'unset')\r\n .style('height', 'unset');\r\n d3.select(this.element.nativeElement)\r\n .select(\r\n `.dropbar.index-${closestDropbarIndex}.depth-${this.depth}`\r\n )\r\n .style('visibility', 'hidden')\r\n .style('height', 0);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n closestDropbarIndex = this.getClosestDropbarIndex(pointerCoords);\r\n this.valueSet?.displayedProperties?.splice(\r\n this.valueSet.displayedProperties.indexOf(property),\r\n 1\r\n );\r\n this.valueSet?.displayedProperties?.splice(\r\n closestDropbarIndex,\r\n 0,\r\n property\r\n );\r\n })\r\n );\r\n }\r\n }\r\n\r\n getClosestDropbarIndex(pointerCoords: Point): number {\r\n const propertyList = this.valueSet?.propertySet.propertyList || [];\r\n // note that this is <= and not < as we are counting the index after the last element as well\r\n const coordsList: Point[] = [];\r\n for (let i = 0; i <= propertyList.length; ++i) {\r\n const boundingRect = d3\r\n .select(this.element.nativeElement)\r\n .select<HTMLDivElement>(`.dropbar.index-${i}.depth-${this.depth}`)\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (boundingRect) {\r\n coordsList.push([\r\n boundingRect.x + boundingRect.width / 2,\r\n boundingRect.y + boundingRect.height / 2\r\n ]);\r\n }\r\n }\r\n if (coordsList.length > 0) {\r\n const distanceToDropbars = coordsList.map((p) =>\r\n distanceBetweenPoints(pointerCoords, p)\r\n );\r\n const indexOfClosestDropbar = distanceToDropbars.indexOf(\r\n Math.min(...distanceToDropbars)\r\n );\r\n return indexOfClosestDropbar;\r\n }\r\n return 0;\r\n }\r\n\r\n displayProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.displayProperty(selectedProperty);\r\n }\r\n this.cdr.detectChanges();\r\n this.addListeners();\r\n }\r\n\r\n hideProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.hideProperty(selectedProperty);\r\n }\r\n this.cdr.detectChanges();\r\n this.addListeners();\r\n }\r\n}\r\n\r\nexport const asString = (value: unknown): string => {\r\n if (Array.isArray(value)) {\r\n return value.join(', ');\r\n }\r\n if (isObject(value)) {\r\n return Object.entries(value as object)\r\n .map((pair) => pair.map((p) => JSON.stringify(p)).join(': '))\r\n .join(', ');\r\n }\r\n if (value instanceof Date) {\r\n return value.toLocaleString();\r\n }\r\n if (value === undefined || value === null) {\r\n return '';\r\n }\r\n return '' + value;\r\n};\r\n","<div class=\"dropbar\" [class]=\"'index-' + 0 + ' depth-' + depth\"></div>\r\n<div\r\n *ngFor=\"let property of valueSet?.displayedProperties || []; index as i\"\r\n class=\"property-and-dropbar\"\r\n [class]=\"getStyleClassName(property.name) + ' depth-' + depth\"\r\n>\r\n <div\r\n class=\"property\"\r\n [class]=\"getStyleClassName(property.name) + ' depth-' + depth\"\r\n >\r\n <div class=\"property-name\">\r\n <span>{{ property.name }}</span>\r\n <div class=\"buttons\">\r\n <button class=\"property-button move-button\">\r\n <div class=\"icon move-icon\"></div>\r\n </button>\r\n <button\r\n class=\"property-button hide-button\"\r\n (click)=\"hideProperty(property.name)\"\r\n >\r\n <div class=\"icon hide-icon\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"property.type !== Type.Object\" class=\"property-value\">\r\n {{ asString(valueSet?.getValue(property.name)) }}\r\n </div>\r\n <div *ngIf=\"property.type === Type.Object\">\r\n <daga-property-settings\r\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\r\n [depth]=\"depth + 1\"\r\n ></daga-property-settings>\r\n </div>\r\n </div>\r\n <div class=\"dropbar\" [class]=\"'index-' + (i + 1) + ' depth-' + depth\"></div>\r\n</div>\r\n<div class=\"property\" *ngIf=\"valueSet && valueSet.hiddenProperties.length > 0\">\r\n <p class=\"property-name\">Add property:</p>\r\n <select (change)=\"displayProperty($event)\">\r\n <option value=\"\">Select a property</option>\r\n <option\r\n *ngFor=\"let property of valueSet?.hiddenProperties || []\"\r\n [value]=\"property.name\"\r\n >\r\n {{ property.name }}\r\n </option>\r\n </select>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Option, equals } from '../../diagram-editor/diagram/diagram-property';\r\nimport { Keys } from '../../util/events';\r\nimport { asString } from '../property-settings/property-settings.component';\r\n\r\nexport const LOST_FOCUS_TIME_WINDOW_MS = 200;\r\n\r\n/**\r\n * Combobox with autocomplete.\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-autocomplete',\r\n templateUrl: './autocomplete.component.html',\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class AutocompleteComponent {\r\n @ViewChild('main', { static: true }) mainElement!: ElementRef;\r\n\r\n private _value: unknown;\r\n @Input()\r\n set value(value: unknown) {\r\n if (equals(value, this._value)) {\r\n return;\r\n }\r\n this._value = value;\r\n this.valueInput = this.getLabelOfValue(value);\r\n }\r\n get value(): unknown {\r\n return this._value;\r\n }\r\n @Input() valueInput = '';\r\n focusIndex?: number;\r\n @Input() options!: Option<unknown>[];\r\n currentOptions!: Option<unknown>[];\r\n currentLabelStarts!: string[];\r\n currentLabelMatches!: string[];\r\n currentLabelEnds!: string[];\r\n\r\n @Input() disabled = false;\r\n showOptions = false;\r\n\r\n @Output() valueChange = new EventEmitter<unknown>();\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n getLabelOfValue(value: unknown): string {\r\n for (const option of this.options) {\r\n if (equals(option.key, value)) {\r\n return option.label;\r\n }\r\n }\r\n return asString(value);\r\n }\r\n\r\n onKeyup(event: KeyboardEvent): void {\r\n if (!this.disabled) {\r\n switch (event.key) {\r\n case Keys.PageDown:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(0);\r\n this.scrollToOption(0);\r\n } else {\r\n this.focusOnOption(this.focusIndex + 5);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.ArrowDown:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(0);\r\n this.scrollToOption(0);\r\n } else {\r\n this.focusOnOption(this.focusIndex + 1);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.PageUp:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(this.options.length - 1);\r\n this.scrollToOption(this.options.length - 1);\r\n } else {\r\n this.focusOnOption(this.focusIndex - 5);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.ArrowUp:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(this.options.length - 1);\r\n this.scrollToOption(this.options.length - 1);\r\n } else {\r\n this.focusOnOption(this.focusIndex - 1);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.Escape:\r\n this.closeOptions();\r\n event.preventDefault();\r\n break;\r\n case Keys.Enter:\r\n this.complete(this.options[this.focusIndex || 0]);\r\n event.preventDefault();\r\n break;\r\n default:\r\n this.openOptions();\r\n }\r\n }\r\n }\r\n\r\n openOptions(): void {\r\n if (!this.disabled) {\r\n const mustContain = normalizeString(this.valueInput.trim());\r\n this.currentOptions = [];\r\n this.currentLabelStarts = [];\r\n this.currentLabelMatches = [];\r\n this.currentLabelEnds = [];\r\n for (const option of this.options) {\r\n const normalizedLabel = normalizeString(option.label);\r\n const position = normalizedLabel.indexOf(mustContain);\r\n if (position >= 0) {\r\n const labelStart = option.label.substring(0, position);\r\n const labelMatch = option.label.substring(\r\n position,\r\n position + mustContain.length\r\n );\r\n const labelEnd = option.label.substring(\r\n position + mustContain.length\r\n );\r\n this.currentOptions.push(option);\r\n this.currentLabelStarts.push(labelStart);\r\n this.currentLabelMatches.push(labelMatch);\r\n this.currentLabelEnds.push(labelEnd);\r\n }\r\n }\r\n this.showOptions = true;\r\n }\r\n }\r\n\r\n closeOptions(): void {\r\n this.showOptions = false;\r\n }\r\n\r\n focusOnOption(index: number | undefined) {\r\n if (!this.disabled) {\r\n this.focusIndex = index;\r\n if (index === undefined) {\r\n return;\r\n }\r\n if (index < 0) {\r\n this.focusIndex = 0;\r\n }\r\n if (index >= this.options.length) {\r\n this.focusIndex = this.options.length - 1;\r\n }\r\n }\r\n }\r\n\r\n onLostFocus(): void {\r\n setTimeout(() => {\r\n this.closeOptions();\r\n }, LOST_FOCUS_TIME_WINDOW_MS);\r\n }\r\n\r\n scrollToOption(index: number) {\r\n const target = this.mainElement.nativeElement.querySelectorAll('li')[index];\r\n if (target) {\r\n target.scrollIntoView({ block: 'center' });\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n if (!this.disabled) {\r\n this.value = undefined;\r\n this.valueInput = '';\r\n this.showOptions = false;\r\n this.focusIndex = undefined;\r\n }\r\n }\r\n\r\n complete(option: Option<unknown>): void {\r\n if (!this.disabled) {\r\n this.value = option;\r\n this.valueInput = option.label;\r\n this.showOptions = false;\r\n this.focusIndex = undefined;\r\n this.valueChange.emit(option.key);\r\n }\r\n }\r\n}\r\n\r\nconst normalizeString = (a: string): string =>\r\n (a || '')\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '');\r\n","<div\r\n #main\r\n class=\"autocomplete\"\r\n [class]=\"showOptions ? 'showing-options' : ''\"\r\n (blur)=\"closeOptions()\"\r\n>\r\n <div class=\"autocomplete-input\">\r\n <input\r\n [(ngModel)]=\"valueInput\"\r\n [disabled]=\"disabled\"\r\n (keyup)=\"onKeyup($event)\"\r\n (focus)=\"openOptions()\"\r\n (blur)=\"onLostFocus()\"\r\n />\r\n <button\r\n *ngIf=\"valueInput !== ''\"\r\n class=\"clear\"\r\n (click)=\"clearInput()\"\r\n ></button>\r\n </div>\r\n <div class=\"autocomplete-options\">\r\n <ul class=\"autocomplete-option-list\">\r\n <li\r\n *ngIf=\"(currentOptions?.length || 0) === 0\"\r\n class=\"autocomplete-option no-options\"\r\n >\r\n (No options)\r\n </li>\r\n <li\r\n *ngFor=\"let option of currentOptions; let index = index\"\r\n class=\"autocomplete-option\"\r\n [class]=\"index === focusIndex ? 'focused' : ''\"\r\n (mousemove)=\"focusOnOption(index)\"\r\n (click)=\"complete(option)\"\r\n >\r\n <span>{{ currentLabelStarts[index] }}</span>\r\n <span class=\"match\">{{ currentLabelMatches[index] }}</span>\r\n <span>{{ currentLabelEnds[index] }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Option } from '../../diagram-editor/diagram/diagram-property';\r\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\r\n\r\n/**\r\n * Editor of a property of text list type within a property editor.\r\n * @see Type.TextList\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-option-list-editor',\r\n templateUrl: './option-list-editor.component.html',\r\n imports: [AutocompleteComponent, CommonModule, FormsModule]\r\n})\r\nexport class OptionListEditorComponent {\r\n private _value: unknown[] = [];\r\n @Input()\r\n set value(value: unknown[]) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty = value.length === 0 && this._value.length === 0;\r\n this._value = value;\r\n this.labelsOfValue = [];\r\n for (const key of this._value) {\r\n this.labelsOfValue.push(this.getLabelOfValue(key));\r\n }\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n this.updateOptionsNotPresentInValue();\r\n }\r\n get value(): unknown[] {\r\n return this._value;\r\n }\r\n labelsOfValue: string[] = [];\r\n\r\n @Input() options: Option<unknown>[] = [];\r\n\r\n @Input() valueInput?: unknown = undefined;\r\n\r\n @Input() allowRepeats = true;\r\n\r\n @Input() optionsNotPresentInValue: Option<unknown>[] = [];\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<unknown[]>();\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n getLabelOfValue(value: unknown): string {\r\n for (const option of this.options) {\r\n if (option.key === value) {\r\n return option.label;\r\n }\r\n }\r\n return `${value}`;\r\n }\r\n\r\n hasValue(value: unknown): boolean {\r\n for (const item of this._value || []) {\r\n if (item === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n removeFromValue(index: number): void {\r\n if (this._value.length > index) {\r\n this._value.splice(index, 1);\r\n this.labelsOfValue.splice(index, 1);\r\n this.valueChange.emit(this._value);\r\n this.updateOptionsNotPresentInValue();\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n if (\r\n this.valueInput !== undefined &&\r\n (this.allowRepeats ? true : !this.hasValue(this.valueInput))\r\n ) {\r\n this._value.push(this.valueInput);\r\n this.labelsOfValue.push(this.getLabelOfValue(this.valueInput));\r\n this.valueChange.emit(this._value);\r\n this.clearInput();\r\n this.updateOptionsNotPresentInValue();\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n updateOptionsNotPresentInValue(): void {\r\n if (!this.allowRepeats) {\r\n const optionsNotPresentInValue = [];\r\n for (const option of this.options) {\r\n if (!this.hasValue(option.key)) {\r\n optionsNotPresentInValue.push(option);\r\n }\r\n }\r\n this.optionsNotPresentInValue = optionsNotPresentInValue;\r\n }\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","<div *ngFor=\"let item of value; let index = index\" class=\"value-item-element\">\r\n <span class=\"input\">{{ labelsOfValue[index] }}</span>\r\n <button\r\n *ngIf=\"!disabled\"\r\n class=\"property-button\"\r\n (click)=\"removeFromValue(index)\"\r\n >\r\n <div class=\"icon close-icon\"></div>\r\n </button>\r\n</div>\r\n<div *ngIf=\"!disabled\" class=\"value-item-input\">\r\n <div class=\"input relatively-positioned\">\r\n <daga-autocomplete\r\n [disabled]=\"disabled\"\r\n [options]=\"allowRepeats ? options || [] : optionsNotPresentInValue || []\"\r\n [(value)]=\"valueInput\"\r\n />\r\n </div>\r\n <button class=\"property-button\" (click)=\"addToValue()\">\r\n <div class=\"icon add-icon\"></div>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Editor of a property of text list type within a property editor.\r\n * @see Type.TextList\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-text-list-editor',\r\n templateUrl: './text-list-editor.component.html',\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class TextListEditorComponent {\r\n private _value: string[] = [];\r\n @Input()\r\n set value(value: string[]) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty = value.length === 0 && this._value.length === 0;\r\n this._value = value;\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n get value(): string[] {\r\n return this._value;\r\n }\r\n @Input() valueInput = '';\r\n\r\n @Input() allowRepeats = true;\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<string[]>();\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n getValueFromEvent(event: Event): string {\r\n return (event.target as HTMLInputElement).value;\r\n }\r\n\r\n hasValue(value: string): boolean {\r\n for (const item of this._value || []) {\r\n if (item === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n removeFromValue(index: number): void {\r\n if (this._value.length > index) {\r\n this._value.splice(index, 1);\r\n this.valueChange.emit(this._value);\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n editFromValue(item: string, index: number): void {\r\n item = item.trim();\r\n if (this._value.length > index && item !== '') {\r\n this._value.splice(index, 1, item);\r\n this.valueChange.emit(this._value);\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n const valueInput = this.valueInput.trim();\r\n if (\r\n valueInput !== '' &&\r\n (this.allowRepeats ? true : !this.hasValue(valueInput))\r\n ) {\r\n this._value.push(valueInput);\r\n this.valueChange.emit(this._value);\r\n this.clearInput();\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","<div *ngFor=\"let item of value; let index = index\" class=\"value-item-element\">\r\n <input\r\n class=\"input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item\"\r\n (focusout)=\"editFromValue(getValueFromEvent($event), index)\"\r\n />\r\n <button\r\n *ngIf=\"!disabled\"\r\n class=\"property-button\"\r\n (click)=\"removeFromValue(index)\"\r\n >\r\n <div class=\"icon close-icon\"></div>\r\n </button>\r\n</div>\r\n<div *ngIf=\"!disabled\" class=\"value-item-input\">\r\n <div class=\"input relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"valueInput\" />\r\n <button\r\n *ngIf=\"valueInput !== ''\"\r\n class=\"clear\"\r\n (click)=\"clearInput()\"\r\n ></button>\r\n </div>\r\n <button class=\"property-button\" (click)=\"addToValue()\">\r\n <div class=\"icon add-icon\"></div>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Editor of a property of text map type within a property editor.\r\n * @see Type.TextMap\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-text-map-editor',\r\n templateUrl: './text-map-editor.component.html',\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class TextMapEditorComponent {\r\n private _value: { [name: string]: string } = {};\r\n\r\n @Input()\r\n set value(value: { [name: string]: string }) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty =\r\n Object.keys(value).length === 0 && Object.keys(this._value).length === 0;\r\n this._value = value;\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n get value(): { [name: string]: string } {\r\n return this._value;\r\n }\r\n @Input() keyInput = '';\r\n @Input() valueInput = '';\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<{ [name: string]: string }>();\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n getValueFromEvent(event: Event): string {\r\n return (event.target as HTMLInputElement).value;\r\n }\r\n\r\n removeFromValue(key: string): void {\r\n delete this._value[key];\r\n this.cdr.detectChanges();\r\n }\r\n\r\n editKey(oldKey: string, newKey: string): void {\r\n newKey = newKey.trim();\r\n if (oldKey !== newKey && newKey !== '') {\r\n this._value[newKey] = this._value[oldKey];\r\n delete this._value[oldKey];\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n editValue(key: string, value: string): void {\r\n value = value.trim();\r\n if (value !== '') {\r\n this._value[key] = value;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n const keyInput = this.keyInput.trim();\r\n const valueInput = this.valueInput.trim();\r\n if (keyInput !== '' && valueInput !== '') {\r\n this._value[keyInput] = valueInput;\r\n this.valueChange.emit(this._value);\r\n this.clearKeyInput();\r\n this.clearValueInput();\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearKeyInput(): void {\r\n this.keyInput = '';\r\n }\r\n\r\n clearValueInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","<div *ngFor=\"let item of value | keyvalue\" class=\"value-item-element\">\r\n <input\r\n class=\"input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item.key\"\r\n (focusout)=\"editKey(item.key, getValueFromEvent($event))\"\r\n />\r\n <input\r\n class=\"input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item.value\"\r\n (focusout)=\"editValue(item.key, getValueFromEvent($event))\"\r\n />\r\n <button\r\n *ngIf=\"!disabled\"\r\n class=\"property-button\"\r\n (click)=\"removeFromValue(item.key)\"\r\n >\r\n <div class=\"icon close-icon\"></div>\r\n </button>\r\n</div>\r\n<div *ngIf=\"!disabled\" class=\"value-item-input\">\r\n <div class=\"input relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"keyInput\" />\r\n <button\r\n *ngIf=\"keyInput !== ''\"\r\n class=\"clear\"\r\n (click)=\"clearKeyInput()\"\r\n ></button>\r\n </div>\r\n <div class=\"input relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"valueInput\" />\r\n <button\r\n *ngIf=\"valueInput !== ''\"\r\n class=\"clear\"\r\n (click)=\"clearValueInput()\"\r\n ></button>\r\n </div>\r\n <button class=\"property-button\" (click)=\"addToValue()\">\r\n <div class=\"icon add-icon\"></div>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DiagramActions } from '../../diagram-editor/diagram/diagram-action';\r\nimport {\r\n Property,\r\n Type,\r\n ValueSet,\r\n equals\r\n} from '../../diagram-editor/diagram/diagram-property';\r\nimport { Canvas } from '../../interfaces/canvas';\r\nimport { CanvasProviderService } from '../../services/canvas-provider.service';\r\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\r\nimport { OptionListEditorComponent } from '../option-list-editor/option-list-editor.component';\r\nimport { TextListEditorComponent } from '../text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from '../text-map-editor/text-map-editor.component';\r\nimport { getStyleClassName } from '../property-editor.component';\r\n\r\n/**\r\n * Editor of a value set within a property editor.\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-object-editor',\r\n templateUrl: './object-editor.component.html',\r\n imports: [\r\n AutocompleteComponent,\r\n CommonModule,\r\n FormsModule,\r\n OptionListEditorComponent,\r\n TextListEditorComponent,\r\n TextMapEditorComponent\r\n ]\r\n})\r\nexport class ObjectEditorComponent {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n get userCanEdit(): boolean {\r\n return (\r\n this.canvas.canUserPerformAction(DiagramActions.UpdateValues) &&\r\n this.valueSet?.rootElement?.['removed'] !== true\r\n );\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n /** How many object-editor elements are parents of this object-editor element. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n getStyleClassName = getStyleClassName;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n setValue(property: Property, value: unknown) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n if (property.editable) {\r\n if (!equals(this.valueSet.getValue(property.name), value)) {\r\n this.valueSet.setValue(property.name, value);\r\n // register a diagram change when editing a value\r\n this.canvas.diagramChanges$?.next();\r\n this.canvas.propertyEditorChanges$?.next();\r\n }\r\n }\r\n }\r\n\r\n dateToLocalDatetimeString(\r\n date: string | number | Date | null | undefined\r\n ): string {\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n if (date === null || date === undefined || isNaN(date.valueOf())) {\r\n return '';\r\n }\r\n const offsetDate = new Date(date);\r\n const timezoneOffset = offsetDate.getTimezoneOffset();\r\n offsetDate.setMinutes(offsetDate.getMinutes() - timezoneOffset);\r\n return offsetDate.toISOString().substring(0, 19); // for user friendliness, we trim off the milliseconds\r\n }\r\n\r\n localDatetimeStringToDate(string: string): Date {\r\n // with no timezone specified, the local time is assumed\r\n return new Date(string);\r\n }\r\n}\r\n","<div\r\n *ngFor=\"let property of valueSet?.displayedProperties || []\"\r\n class=\"property\"\r\n [class]=\"getStyleClassName(property.name) + ' depth-' + depth\"\r\n>\r\n <p class=\"property-name\">\r\n {{ property.name }}\r\n </p>\r\n\r\n <input\r\n *ngIf=\"property.type === Type.Text\"\r\n type=\"text\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <textarea\r\n *ngIf=\"property.type === Type.TextArea\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n ></textarea>\r\n <input\r\n *ngIf=\"property.type === Type.Number\"\r\n type=\"number\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Color\"\r\n type=\"text\"\r\n pattern=\"#\\d{6}\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Datetime\"\r\n type=\"datetime-local\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"dateToLocalDatetimeString(valueSet?.getValue(property.name))\"\r\n (ngModelChange)=\"setValue(property, localDatetimeStringToDate($event))\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Date\"\r\n type=\"date\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Time\"\r\n type=\"time\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Url\"\r\n type=\"url\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <div class=\"radio\" *ngIf=\"property.type === Type.Boolean\">\r\n <label class=\"radio-item radio-start\">\r\n <input\r\n type=\"radio\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [name]=\"property.name\"\r\n value=\"false\"\r\n [checked]=\"valueSet?.getValue(property.name) === false\"\r\n (change)=\"setValue(property, false)\"\r\n />\r\n No\r\n </label>\r\n <label class=\"radio-item radio-end\">\r\n <input\r\n type=\"radio\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [name]=\"property.name\"\r\n value=\"true\"\r\n [checked]=\"valueSet?.getValue(property.name) === true\"\r\n (change)=\"setValue(property, true)\"\r\n />\r\n Yes\r\n </label>\r\n </div>\r\n <div class=\"relatively-positioned\" *ngIf=\"property.type === Type.Option\">\r\n <daga-autocomplete\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [options]=\"property.options || []\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n />\r\n </div>\r\n <daga-option-list-editor\r\n *ngIf=\"\r\n property.type === Type.OptionList || property.type === Type.OptionSet\r\n \"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [allowRepeats]=\"property.type === Type.OptionList\"\r\n [options]=\"property.options || []\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-option-list-editor>\r\n <daga-text-list-editor\r\n *ngIf=\"property.type === Type.TextList || property.type === Type.TextSet\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [allowRepeats]=\"property.type === Type.TextList\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-text-list-editor>\r\n <daga-text-map-editor\r\n *ngIf=\"property.type === Type.TextMap\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-text-map-editor>\r\n <div *ngIf=\"property.type === Type.Object\" class=\"left-bar\">\r\n <daga-object-editor\r\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\r\n [depth]=\"depth + 1\"\r\n ></daga-object-editor>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n Input,\r\n ViewChild\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { ValueSet } from '../diagram-editor/diagram/diagram-property';\r\nimport { PropertyEditor } from '../interfaces/property-editor';\r\nimport { Corner, Side } from '../util/svg-util';\r\nimport { ObjectEditorComponent } from './object-editor/object-editor.component';\r\nimport { PropertySettingsComponent } from './property-settings/property-settings.component';\r\n\r\n/**\r\n * Editor of the values of a value set.\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-property-editor',\r\n templateUrl: './property-editor.component.html',\r\n imports: [\r\n CommonModule,\r\n CollapseButtonComponent,\r\n ObjectEditorComponent,\r\n PropertySettingsComponent\r\n ]\r\n})\r\nexport class PropertyEditorComponent implements AfterViewInit, PropertyEditor {\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n width!: string;\r\n\r\n title?: string;\r\n _valueSet!: ValueSet | undefined;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n this.settings = undefined;\r\n // force value change detection\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n settings?: boolean;\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n ngAfterViewInit(): void {\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel().style('width', this.width);\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel().style('height', this.width);\r\n break;\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n highlightProperty(...propertyNames: string[]): void {\r\n let selector = '';\r\n let depth = 0;\r\n for (const propertyName of propertyNames) {\r\n selector += ` .property.${getStyleClassName(propertyName)}.depth-${depth}`;\r\n ++depth;\r\n }\r\n if (this.valueSet) {\r\n d3.select(this.panel.nativeElement)\r\n .select(selector)\r\n .transition()\r\n .duration(1000)\r\n .ease(d3.easeLinear)\r\n .styleTween('background-color', () => {\r\n const interpolator = d3.interpolate(\r\n 'rgba(255, 0, 0, 0)',\r\n 'rgba(255, 0, 0, 0.4)'\r\n );\r\n return (t: number) => interpolator(t > 0.5 ? 1 - t : t);\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const getStyleClassName = (s: string): string => {\r\n return 'property-name-' + s.replace(/\\s/g, '');\r\n};\r\n","<div #panel class=\"panel bottom {{ location }} {{ direction }}\">\r\n <daga-collapse-button\r\n #collapse\r\n [disabled]=\"\r\n !valueSet ||\r\n !valueSet.propertySet ||\r\n !valueSet.propertySet.hasProperties()\r\n \"\r\n [direction]=\"direction\"\r\n [collapsableSelector]=\"panel\"\r\n collapsableAdditionalSelector=\".panel-content\"\r\n rule=\"display\"\r\n collapsedValue=\"none\"\r\n visibleValue=\"block\"\r\n />\r\n <div\r\n *ngIf=\"\r\n valueSet &&\r\n valueSet.propertySet &&\r\n valueSet.propertySet.hasProperties() &&\r\n !collapse.collapsed\r\n \"\r\n class=\"panel-content\"\r\n >\r\n <p *ngIf=\"title\" class=\"title\">\r\n {{ title }}\r\n <button class=\"property-button\" (click)=\"settings = !settings\">\r\n <div\r\n class=\"icon settings-icon\"\r\n [class]=\"\r\n settings === undefined ? '' : settings ? 'unrotate' : 'rotate'\r\n \"\r\n ></div>\r\n </button>\r\n </p>\r\n <daga-object-editor *ngIf=\"!settings\" [valueSet]=\"valueSet\" />\r\n <daga-property-settings *ngIf=\"settings\" [valueSet]=\"valueSet\" />\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\n\n/**\n * A provider for the {@link DiagramConfig} associated with a {@link DiagramComponent} context.\n * @public\n */\n@Injectable()\nexport class DagaConfigurationService {\n private _config!: DiagramConfig;\n\n /**\n * Set the diagram configuration of this context.\n * @private\n * @param config A diagram configuration.\n */\n init(config: DiagramConfig) {\n this._config = config;\n }\n\n /**\n * Get the diagram configuration of this context. Should only be called after the {@link DiagramComponent} context has been initialized.\n * @public\n * @returns A diagram configuration.\n */\n getConfig(): DiagramConfig {\n return this._config;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n OnInit,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { DiagramButtonsComponent } from '../diagram-buttons/diagram-buttons.component';\r\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\r\nimport { ErrorsComponent } from '../errors/errors.component';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { DiagramEditor } from '../interfaces/diagram-editor';\r\nimport { PaletteComponent } from '../palette/palette.component';\r\nimport { PropertyEditorComponent } from '../property-editor/property-editor.component';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\nimport { Corner, Side } from '../util/svg-util';\r\nimport { DiagramEvent } from './diagram/diagram-event';\r\n\r\n/**\r\n * A diagram's user interface editor.\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram-editor',\r\n templateUrl: './diagram-editor.component.html',\r\n imports: [\r\n CommonModule,\r\n DiagramButtonsComponent,\r\n PaletteComponent,\r\n PropertyEditorComponent,\r\n ErrorsComponent\r\n ]\r\n})\r\nexport class DiagramEditorComponent\r\n implements AfterViewInit, DiagramEditor, OnInit\r\n{\r\n @ViewChild('appendTo') appendTo!: ElementRef<HTMLDivElement>;\r\n @ViewChild('diagramButtons') diagramButtons!: DiagramButtonsComponent;\r\n @ViewChild('palette') palette!: PaletteComponent;\r\n @ViewChild('propertyEditor') propertyEditor!: PropertyEditorComponent;\r\n\r\n /**\r\n * Output for user events on the diagram's model.\r\n * @public\r\n */\r\n @Output()\r\n modelEvent = new EventEmitter<DiagramEvent>();\r\n\r\n get config(): DiagramConfig {\r\n return this.configurationService.getConfig();\r\n }\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n Corner = Corner;\r\n Side = Side;\r\n\r\n constructor(\r\n private configurationService: DagaConfigurationService,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.canvasProvider.initCanvas(this, this.config);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.canvasProvider.initCanvasView(this.appendTo.nativeElement);\r\n }\r\n}\r\n","<div class=\"append-to\" #appendTo></div>\n<daga-diagram-buttons\n *ngIf=\"config.components?.buttons?.exists !== false\"\n #diagramButtons\n [location]=\"config.components?.buttons?.location || Corner.BottomRight\"\n [direction]=\"config.components?.buttons?.direction || Side.Top\"\n [enableFilter]=\"config.components?.buttons?.enableFilter !== false\"\n [enableLayout]=\"config.components?.buttons?.enableLayout !== false\"\n [enableUndoRedo]=\"config.components?.buttons?.enableUndoRedo !== false\"\n [enableZoom]=\"config.components?.buttons?.enableZoom !== false\"\n [zoomRate]=\"config.components?.buttons?.zoomRate || 2\"\n/>\n<daga-palette\n *ngIf=\"\n config.components?.palette?.exists !== false &&\n config.components?.palette?.sections &&\n (config.components?.palette?.sections?.length || 0) > 0\n \"\n #palette\n [location]=\"config.components?.palette?.location || Corner.TopLeft\"\n [direction]=\"config.components?.palette?.direction || Side.Bottom\"\n [width]=\"config.components?.palette?.width || '12rem'\"\n [palettes]=\"config.components?.palette?.sections || []\"\n/>\n<daga-property-editor\n *ngIf=\"config.components?.propertyEditor?.exists !== false\"\n #propertyEditor\n [location]=\"config.components?.propertyEditor?.location || Corner.TopRight\"\n [direction]=\"config.components?.propertyEditor?.direction || Side.Bottom\"\n [width]=\"config.components?.propertyEditor?.width || '24rem'\"\n/>\n<daga-errors *ngIf=\"config.components?.errors?.exists !== false\" />\n","import {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport { delay } from 'rxjs';\r\nimport { DagaExporter } from '../diagram-editor/diagram/converters/daga-exporter';\r\nimport { DagaImporter } from '../diagram-editor/diagram/converters/daga-importer';\r\nimport { DagaModel } from '../diagram-editor/diagram/converters/daga-model';\r\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * The context of a diagram. Every separate diagram must be contained within its own {@link DiagramComponent} and every {@link DiagramComponent} must contain its own {@link DiagramEditorComponent}.\r\n * This component defines a {@link DagaConfigurationService} and a {@link CanvasProviderService}, which is shared by all the components within and allows accessing the configuration and the canvas of this component's diagram, respectively.\r\n * @public\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram',\r\n template: `<ng-content />`,\r\n providers: [CanvasProviderService, DagaConfigurationService]\r\n})\r\nexport class DiagramComponent\r\n implements AfterContentInit, AfterViewInit, OnInit\r\n{\r\n /**\r\n * Configuration for the diagram.\r\n * @public\r\n */\r\n @Input()\r\n config!: DiagramConfig;\r\n private importer = new DagaImporter();\r\n private exporter = new DagaExporter();\r\n private _model!: DagaModel;\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n get model(): DagaModel {\r\n return this._model;\r\n }\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n @Input()\r\n set model(model: DagaModel) {\r\n if (this._model !== model) {\r\n this._model = model;\r\n const canvas = this.canvasProvider.getCanvas();\r\n if (canvas) {\r\n this.importer.import(this.canvasProvider.getCanvas().model, model);\r\n }\r\n }\r\n }\r\n /**\r\n * Output for changes to the diagram's model.\r\n * @public\r\n */\r\n @Output()\r\n modelChange = new EventEmitter<DagaModel>();\r\n\r\n constructor(\r\n private configurationService: DagaConfigurationService,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.configurationService.init(this.config);\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.canvasProvider\r\n .getCanvas()\r\n .viewInitialized$.pipe(delay(1))\r\n .subscribe(() => {\r\n if (this.model) {\r\n this.importer.import(\r\n this.canvasProvider.getCanvas().model,\r\n this.model\r\n );\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.canvasProvider.getCanvas().diagramChanges$.subscribe(() => {\r\n const exportedModel = this.exporter.export(\r\n this.canvasProvider.getCanvas().model\r\n );\r\n this._model = exportedModel;\r\n this.modelChange.emit(exportedModel);\r\n });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { CollapseButtonComponent } from './collapse-button/collapse-button.component';\r\nimport { DiagramButtonsComponent } from './diagram-buttons/diagram-buttons.component';\r\nimport { DiagramEditorComponent } from './diagram-editor/diagram-editor.component';\r\nimport { DiagramComponent } from './diagram/diagram.component';\r\nimport { ErrorsComponent } from './errors/errors.component';\r\nimport { ObjectEditorComponent } from './property-editor/object-editor/object-editor.component';\r\nimport { PaletteComponent } from './palette/palette.component';\r\nimport { PropertyEditorComponent } from './property-editor/property-editor.component';\r\nimport { CanvasProviderService } from './services/canvas-provider.service';\r\nimport { DagaConfigurationService } from './services/daga-configuration.service';\r\nimport { TextListEditorComponent } from './property-editor/text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from './property-editor/text-map-editor/text-map-editor.component';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CollapseButtonComponent,\r\n DiagramButtonsComponent,\r\n DiagramComponent,\r\n DiagramEditorComponent,\r\n ErrorsComponent,\r\n ObjectEditorComponent,\r\n PaletteComponent,\r\n TextListEditorComponent,\r\n TextMapEditorComponent,\r\n PropertyEditorComponent,\r\n CommonModule,\r\n FormsModule\r\n ],\r\n exports: [DiagramComponent, DiagramEditorComponent],\r\n providers: [DagaConfigurationService, CanvasProviderService]\r\n})\r\nexport class DagaModule {}\r\n","import { Canvas } from '../../../interfaces/canvas';\r\nimport { DagaExporter } from '../converters/daga-exporter';\r\nimport { DagaImporter } from '../converters/daga-importer';\r\nimport { DagaModel } from '../converters/daga-model';\r\nimport { CollabActionSerialized } from './collab-action';\r\nimport { AddMessage, Message } from './message-types';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst VERSION = '0.0.1';\r\n\r\ntype Session = {\r\n readonly canvas: Canvas;\r\n locator: string | null;\r\n createRoomResolve?: (locator: string) => void;\r\n joinRoomResolve?: () => void;\r\n /**\r\n * AddMessages that we queue after creating a room but before learning its locator.\r\n */\r\n addQueue: Omit<AddMessage, 'locator'>[];\r\n};\r\n\r\n/**\r\n * The client that communicates with the daga-server over WebSockets.\r\n *\r\n * Use this to create and join rooms.\r\n * @public\r\n */\r\nexport class CollabClient {\r\n /**\r\n * The WebSocket URL of the daga-server.\r\n */\r\n readonly dagaServer: string;\r\n readonly userId: string;\r\n readonly clientId: string;\r\n\r\n private readonly ws: WebSocket;\r\n private sendQueue: string[] = [];\r\n\r\n /**\r\n * Joined sessions by locator.\r\n */\r\n private sessions = new Map<string, Session>();\r\n /**\r\n * Created but unacked sessions by refId.\r\n */\r\n private pendingSessions = new Map<string, Session>();\r\n\r\n constructor(dagaServer: string, userId: string) {\r\n this.dagaServer = dagaServer;\r\n this.userId = userId;\r\n\r\n this.clientId = uuidv4();\r\n\r\n this.ws = new WebSocket(this.dagaServer, 'esgrima');\r\n this.ws.addEventListener('open', this.onOpen.bind(this));\r\n this.ws.addEventListener('message', this.onMessage.bind(this));\r\n this.ws.addEventListener('close', this.onClose.bind(this));\r\n this.ws.addEventListener('error', this.onError.bind(this));\r\n\r\n this.send({\r\n type: 'HELO',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n version: VERSION,\r\n ts: now()\r\n });\r\n }\r\n\r\n private onOpen(): void {\r\n // Send queued messages.\r\n for (const serialized of this.sendQueue) {\r\n this.ws.send(serialized);\r\n }\r\n this.sendQueue = [];\r\n }\r\n\r\n private onMessage(e: MessageEvent<string>): void {\r\n const serialized = e.data;\r\n const message = JSON.parse(serialized) as Message;\r\n this.receive(message);\r\n }\r\n\r\n private onClose(e: CloseEvent): void {\r\n console.error('WebSocket closed', e);\r\n }\r\n\r\n private onError(e: Event): void {\r\n console.error('WebSocket error', e);\r\n }\r\n\r\n /**\r\n * Internal send method. Use instead of calling ws.send directly.\r\n */\r\n private send(message: Message): void {\r\n const serialized = JSON.stringify(message);\r\n if (this.ws.readyState === WebSocket.OPEN) {\r\n this.ws.send(serialized);\r\n } else {\r\n // Queue until after we connect.\r\n this.sendQueue.push(serialized);\r\n }\r\n }\r\n\r\n /**\r\n * Internal receive method. Use instead of handling ws receive events directly.\r\n */\r\n private receive(message: Message): void {\r\n switch (message.type) {\r\n case 'EACK': {\r\n const session = this.sessions.get(message.locator);\r\n if (session === undefined) {\r\n throw new Error(`EACK for unknown locator: \"${message.locator}\"`);\r\n }\r\n\r\n const initialModel = message.initialModel as DagaModel;\r\n new DagaImporter().import(session.canvas.model, initialModel);\r\n this.startSyncing(session);\r\n session.joinRoomResolve?.();\r\n session.joinRoomResolve = undefined;\r\n break;\r\n }\r\n case 'ADD': {\r\n const session = this.sessions.get(message.locator);\r\n if (session === undefined) {\r\n throw new Error(`ADD for unknown locator: \"${message.locator}\"`);\r\n }\r\n\r\n const action = message.payload as CollabActionSerialized;\r\n session.canvas.collabEngine.receive(action);\r\n break;\r\n }\r\n case 'CACK': {\r\n const session = this.pendingSessions.get(message.refId);\r\n if (session === undefined) {\r\n throw new Error(`CACK for unknown refId: \"${message.refId}\"`);\r\n }\r\n\r\n session.locator = message.locator;\r\n this.pendingSessions.delete(message.refId);\r\n this.sessions.set(session.locator, session);\r\n session.createRoomResolve?.(session.locator);\r\n session.createRoomResolve = undefined;\r\n\r\n // Deliver queued AddMessages now that we have a locator.\r\n for (const message of session.addQueue) {\r\n this.send({ ...message, locator: session.locator });\r\n }\r\n session.addQueue = [];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Creates and joins a room. The given canvas becomes collaborative, starting\r\n * with its current model.\r\n *\r\n * Returns a Promise that resolves with the new room's locator once joined.\r\n * @public\r\n */\r\n createAndJoinRoom(canvas: Canvas): Promise<string> {\r\n if (canvas.collabEngine.isInRoom) {\r\n throw new Error('Canvas is already in a room');\r\n }\r\n canvas.collabEngine.isInRoom = true;\r\n\r\n const refId = uuidv4();\r\n const initialModel = new DagaExporter().export(canvas.model, true);\r\n this.send({\r\n type: 'CREA',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n refId,\r\n initialModel,\r\n ts: now()\r\n });\r\n\r\n const session: Session = {\r\n canvas,\r\n locator: null,\r\n addQueue: []\r\n };\r\n this.pendingSessions.set(refId, session);\r\n\r\n // We need to start queuing local AddMessages immediately, in case the user edits\r\n // the diagram while the CREA message is in-flight.\r\n this.startSyncing(session);\r\n\r\n return new Promise((resolve) => {\r\n session.createRoomResolve = resolve;\r\n });\r\n }\r\n\r\n /**\r\n * Joins the room with the given locator. The given canvas becomes collaborative,\r\n * **replacing** its current model with the room's model.\r\n *\r\n * Returns a Promise that resolves once the room has been joined and loaded into\r\n * the canvas. You should hide or lock the canvas until it resolves, since any\r\n * user inputs before then will be overwritten.\r\n * @public\r\n */\r\n joinRoom(canvas: Canvas, locator: string): Promise<void> {\r\n if (canvas.collabEngine.isInRoom) {\r\n throw new Error('Canvas is already in a room');\r\n }\r\n canvas.collabEngine.isInRoom = true;\r\n\r\n this.send({\r\n type: 'ENRO',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n locator,\r\n ts: now()\r\n });\r\n\r\n const session: Session = {\r\n canvas,\r\n locator,\r\n addQueue: []\r\n };\r\n this.sessions.set(locator, session);\r\n\r\n return new Promise((resolve) => {\r\n session.joinRoomResolve = resolve;\r\n });\r\n }\r\n\r\n private startSyncing(session: Session): void {\r\n // Sync AddMessages from us to the server.\r\n session.canvas.collabEngine.onSend = (action) => {\r\n if (session.locator === null) {\r\n // Queue until we receive the locator in the CACK message.\r\n session.addQueue.push({\r\n type: 'ADD',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n payload: action,\r\n ts: now()\r\n });\r\n } else {\r\n this.send({\r\n type: 'ADD',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n locator: session.locator,\r\n payload: action,\r\n ts: now()\r\n });\r\n }\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Returns the current timestamp for a message's ts field.\r\n */\r\nfunction now(): string {\r\n return new Date().toISOString();\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["equals","uuidv4","i1.CanvasProviderService","i2","i3","i1.DagaConfigurationService","i2.CanvasProviderService"],"mappings":"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"}
1
+ {"version":3,"file":"metadev-daga.mjs","sources":["../../../../libs/daga/src/lib/util/svg-util.ts","../../../../libs/daga/src/lib/collapse-button/collapse-button.component.ts","../../../../libs/daga/src/lib/collapse-button/collapse-button.component.html","../../../../libs/daga/src/lib/util/line.ts","../../../../libs/daga/src/lib/util/list-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-entity.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-element.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/collab/primitives.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-property.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-connection.ts","../../../../libs/daga/src/lib/util/canvas-util.ts","../../../../libs/daga/src/lib/util/shape.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-section.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-node.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-port.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-field.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-importer.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/collab/collab-action.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-action.ts","../../../../libs/daga/src/lib/util/grid.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/adjacency-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/breadth-adjacency-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/breadth-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/force-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/horizontal-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/priority-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/tree-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/vertical-layout.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/layout/diagram-layout.ts","../../../../libs/daga/src/lib/util/events.ts","../../../../libs/daga/src/lib/util/style.ts","../../../../libs/daga/src/lib/util/text-util.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/collab/collab-engine.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-model.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/converters/daga-exporter.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-event.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-decorator.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-object.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-model.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/diagram-canvas.ts","../../../../libs/daga/src/lib/services/canvas-provider.service.ts","../../../../libs/daga/src/lib/diagram-buttons/diagram-buttons.component.ts","../../../../libs/daga/src/lib/diagram-buttons/diagram-buttons.component.html","../../../../libs/daga/src/lib/errors/errors.component.ts","../../../../libs/daga/src/lib/errors/errors.component.html","../../../../libs/daga/src/lib/palette/palette.component.ts","../../../../libs/daga/src/lib/palette/palette.component.html","../../../../libs/daga/src/lib/property-editor/property-settings/property-settings.component.ts","../../../../libs/daga/src/lib/property-editor/property-settings/property-settings.component.html","../../../../libs/daga/src/lib/property-editor/autocomplete/autocomplete.component.ts","../../../../libs/daga/src/lib/property-editor/autocomplete/autocomplete.component.html","../../../../libs/daga/src/lib/property-editor/option-list-editor/option-list-editor.component.ts","../../../../libs/daga/src/lib/property-editor/option-list-editor/option-list-editor.component.html","../../../../libs/daga/src/lib/property-editor/text-list-editor/text-list-editor.component.ts","../../../../libs/daga/src/lib/property-editor/text-list-editor/text-list-editor.component.html","../../../../libs/daga/src/lib/property-editor/text-map-editor/text-map-editor.component.ts","../../../../libs/daga/src/lib/property-editor/text-map-editor/text-map-editor.component.html","../../../../libs/daga/src/lib/property-editor/object-editor/object-editor.component.ts","../../../../libs/daga/src/lib/property-editor/object-editor/object-editor.component.html","../../../../libs/daga/src/lib/property-editor/property-editor.component.ts","../../../../libs/daga/src/lib/property-editor/property-editor.component.html","../../../../libs/daga/src/lib/services/daga-configuration.service.ts","../../../../libs/daga/src/lib/diagram-editor/diagram-editor.component.ts","../../../../libs/daga/src/lib/diagram-editor/diagram-editor.component.html","../../../../libs/daga/src/lib/diagram/diagram.component.ts","../../../../libs/daga/src/lib/daga.module.ts","../../../../libs/daga/src/lib/diagram-editor/diagram/collab/collab-client.ts","../../../../libs/daga/src/metadev-daga.ts"],"sourcesContent":["/**\n * An enumeration of the possible sides of a rectangle and directions parallel to the axes of coordinates.\n * @public\n */\nexport enum Side {\n /**\n * Bottom side or direction.\n * @public\n */\n Bottom = 'bottom',\n /**\n * Left side or direction.\n * @public\n */\n Left = 'left',\n /**\n * Right side or direction.\n * @public\n */\n Right = 'right',\n /**\n * Top side or direction.\n * @public\n */\n Top = 'top'\n}\n\n/**\n * An enumeration of the possible corners of a rectangle.\n * @public\n */\nexport enum Corner {\n /**\n * Bottom left corner.\n * @public\n */\n BottomLeft = 'bottom-left',\n /**\n * Bottom right corner.\n * @public\n */\n BottomRight = 'bottom-right',\n /**\n * Top left corner.\n * @public\n */\n TopLeft = 'top-left',\n /**\n * Top right corner.\n * @public\n */\n TopRight = 'top-right'\n}\n\n/**\n * An enumeration of the possible horizontal alignments within a horizontal range of coordinates.\n * @public\n */\nexport enum HorizontalAlign {\n /**\n * Start of an horizontal range of coordinates.\n * @public\n */\n Left = 'left',\n /**\n * Middle of an horizontal range of coordinates.\n * @public\n */\n Center = 'center',\n /**\n * End of an horizontal range of coordinates.\n * @public\n */\n Right = 'right'\n}\n\n/**\n * An enumeration of the possible vertical alignments within a vertical range of coordinates.\n * @public\n */\nexport enum VerticalAlign {\n /**\n * Start of a vertical range of coordinates.\n * @public\n */\n Top = 'top',\n /**\n * Middle of a vertical range of coordinates.\n * @public\n */\n Center = 'center',\n /**\n * End of a vertical range of coordinates.\n * @public\n */\n Bottom = 'bottom'\n}\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, Input } from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { Side } from '../util/svg-util';\r\n\r\n/**\r\n * Button used to collapse components that implement it.\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-collapse-button',\r\n templateUrl: './collapse-button.component.html',\r\n imports: [CommonModule]\r\n})\r\nexport class CollapseButtonComponent {\r\n @Input()\r\n collapsableSelector!: string | ElementRef | HTMLElement;\r\n @Input()\r\n collapsableAdditionalSelector!: string;\r\n @Input()\r\n collapsed = false;\r\n @Input()\r\n disabled = false;\r\n @Input()\r\n direction = Side.Bottom;\r\n @Input()\r\n rule = 'visibility';\r\n @Input()\r\n collapsedValue = 'collapse';\r\n @Input()\r\n visibleValue = 'visible';\r\n\r\n Side = Side;\r\n\r\n toggleCollapse(): void {\r\n if (!this.disabled) {\r\n this.collapsed = !this.collapsed;\r\n let selection;\r\n if (this.collapsableSelector instanceof ElementRef) {\r\n selection = d3.select(this.collapsableSelector.nativeElement);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n } else if (this.collapsableSelector instanceof HTMLElement) {\r\n selection = d3.select(this.collapsableSelector);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n } else {\r\n selection = d3.select(this.collapsableSelector);\r\n if (this.collapsableAdditionalSelector) {\r\n selection = selection.select(this.collapsableAdditionalSelector);\r\n }\r\n }\r\n selection.style(\r\n this.rule,\r\n this.collapsed ? this.collapsedValue : this.visibleValue\r\n );\r\n }\r\n }\r\n\r\n getClass(): string {\r\n switch (this.direction) {\r\n case Side.Right:\r\n if (this.disabled) {\r\n return 'daga-horizontal-none';\r\n } else if (this.collapsed) {\r\n return 'daga-horizontal-right';\r\n } else {\r\n return 'daga-horizontal-left';\r\n }\r\n case Side.Bottom:\r\n if (this.disabled) {\r\n return 'daga-vertical-none';\r\n } else if (this.collapsed) {\r\n return 'daga-vertical-down';\r\n } else {\r\n return 'daga-vertical-up';\r\n }\r\n case Side.Left:\r\n if (this.disabled) {\r\n return 'daga-horizontal-none';\r\n } else if (this.collapsed) {\r\n return 'daga-horizontal-left';\r\n } else {\r\n return 'daga-horizontal-right';\r\n }\r\n case Side.Top:\r\n if (this.disabled) {\r\n return 'daga-vertical-none';\r\n } else if (this.collapsed) {\r\n return 'daga-vertical-up';\r\n } else {\r\n return 'daga-vertical-down';\r\n }\r\n }\r\n }\r\n}\r\n","<button\r\n class=\"daga-collapse-button daga-{{ direction }}\"\r\n (click)=\"toggleCollapse()\"\r\n>\r\n <div [class]=\"getClass()\"></div>\r\n</button>\r\n","import { Point } from './canvas-util';\nimport { Side } from './svg-util';\n\n/**\n * An enumeration of the possible shapes of a line.\n * @public\n */\nexport enum LineShape {\n /**\n * A line that goes between its points taking the shortest euclidean distance.\n * @public\n */\n Straight = 'straight',\n /**\n * A line that goes between its points using bezier splines.\n * @public\n */\n Bezier = 'bezier',\n /**\n * A line that goes between its points moving parallel to the axes of coordinates.\n * @public\n */\n Square = 'square'\n}\n\n/**\n * An enumeration of the possible styles of a line.\n * @public\n */\nexport enum LineStyle {\n /**\n * A solid uninterrupted line.\n * @public\n */\n Solid = 'solid',\n /**\n * A dashed line with little separation between the dashes.\n * @public\n */\n Dashed = 'dashed',\n /**\n * A dashed line with wide gaps between the dashes.\n * @public\n */\n GappedDashes = 'gapped-dashes',\n /**\n * A dotted line.\n * @public\n */\n Dotted = 'dotted'\n}\n\n/**\n * The default minimum distance before turn used by the linePath function.\n * @private\n */\nconst MINIMUM_DISTANCE_BEFORE_TURN = 20;\n\n/**\n * Calculates the path of an SVG line with the given parameters.\n * @private\n */\nexport const linePath = (\n shape: LineShape,\n points: Point[],\n startDirection?: Side | undefined,\n endDirection?: Side | undefined,\n minimumDistanceBeforeTurn?: number\n): string => {\n if (points.length === 0) {\n return '';\n } else if (points.length === 1) {\n return `M ${points[0][0]} ${points[0][1]}`;\n } else {\n minimumDistanceBeforeTurn =\n minimumDistanceBeforeTurn || MINIMUM_DISTANCE_BEFORE_TURN;\n let result = '';\n let currentDirection: Side | undefined;\n let nextDirection: Side | undefined;\n switch (shape) {\n case LineShape.Straight:\n result += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; ++i) {\n result += ` L ${points[i][0]} ${points[i][1]}`;\n }\n break;\n case LineShape.Bezier:\n currentDirection = startDirection;\n result += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; ++i) {\n if (i + 1 >= points.length) {\n nextDirection = endDirection;\n } else {\n if (\n Math.abs(points[i][0] - points[i - 1][0]) <\n Math.abs(points[i][1] - points[i - 1][1])\n ) {\n if (points[i][1] > points[i - 1][1]) {\n nextDirection = Side.Bottom;\n } else {\n nextDirection = Side.Top;\n }\n } else {\n if (points[i][0] > points[i - 1][0]) {\n nextDirection = Side.Right;\n } else {\n nextDirection = Side.Left;\n }\n }\n }\n if (currentDirection !== undefined) {\n let controlPoint1 = '';\n let controlPoint2 = '';\n const controlPointDistance =\n (Math.abs(points[i][0] - points[i - 1][0]) +\n Math.abs(points[i][1] - points[i - 1][1])) /\n 2;\n switch (currentDirection) {\n case Side.Bottom:\n controlPoint1 = `${points[i - 1][0]} ${\n points[i - 1][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint1 = `${points[i - 1][0]} ${\n points[i - 1][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint1 = `${points[i - 1][0] + controlPointDistance} ${\n points[i - 1][1]\n }`;\n break;\n case Side.Left:\n controlPoint1 = `${points[i - 1][0] - controlPointDistance} ${\n points[i - 1][1]\n }`;\n break;\n }\n if (nextDirection !== undefined) {\n switch (nextDirection) {\n case Side.Bottom:\n controlPoint2 = `${points[i][0]} ${\n points[i][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint2 = `${points[i][0]} ${\n points[i][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint2 = `${points[i][0] + controlPointDistance} ${\n points[i][1]\n }`;\n break;\n case Side.Left:\n controlPoint2 = `${points[i][0] - controlPointDistance} ${\n points[i][1]\n }`;\n break;\n }\n result += ` C ${controlPoint1} ${controlPoint2} ${points[i][0]} ${points[i][1]}`;\n } else {\n result += ` Q ${controlPoint1} ${points[i][0]} ${points[i][1]}`;\n }\n } else {\n if (nextDirection !== undefined) {\n let controlPoint = '';\n const controlPointDistance =\n (Math.abs(points[i][0] - points[i - 1][0]) +\n Math.abs(points[i][1] - points[i - 1][1])) /\n 2;\n switch (nextDirection) {\n case Side.Bottom:\n controlPoint = `${points[i][0]} ${\n points[i][1] + controlPointDistance\n }`;\n break;\n case Side.Top:\n controlPoint = `${points[i][0]} ${\n points[i][1] - controlPointDistance\n }`;\n break;\n case Side.Right:\n controlPoint = `${points[i][0] + controlPointDistance} ${\n points[i][1]\n }`;\n break;\n case Side.Left:\n controlPoint = `${points[i][0] - controlPointDistance} ${\n points[i][1]\n }`;\n break;\n }\n result += ` Q ${controlPoint} ${points[i][0]} ${points[i][1]}`;\n } else {\n result += ` L ${points[i][0]} ${points[i][1]}`;\n }\n }\n currentDirection = nextDirection;\n }\n break;\n case LineShape.Square:\n result += `M ${points[0][0]} ${points[0][1]}`;\n if (startDirection) {\n switch (startDirection) {\n case Side.Bottom:\n points.splice(1, 0, [\n points[0][0],\n points[0][1] + minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Top:\n points.splice(1, 0, [\n points[0][0],\n points[0][1] - minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Right:\n points.splice(1, 0, [\n points[0][0] + minimumDistanceBeforeTurn,\n points[0][1]\n ]);\n break;\n case Side.Left:\n points.splice(1, 0, [\n points[0][0] - minimumDistanceBeforeTurn,\n points[0][1]\n ]);\n break;\n }\n }\n if (endDirection) {\n switch (endDirection) {\n case Side.Bottom:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0],\n points[points.length - 1][1] + minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Top:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0],\n points[points.length - 1][1] - minimumDistanceBeforeTurn\n ]);\n break;\n case Side.Right:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0] + minimumDistanceBeforeTurn,\n points[points.length - 1][1]\n ]);\n break;\n case Side.Left:\n points.splice(points.length - 1, 0, [\n points[points.length - 1][0] - minimumDistanceBeforeTurn,\n points[points.length - 1][1]\n ]);\n break;\n }\n }\n for (let i = 1; i < points.length; ++i) {\n if (currentDirection !== undefined) {\n switch (currentDirection) {\n case Side.Bottom:\n if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is behind, we turn around\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Top;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is behind on the same line, we turn around\n result += ` H ${points[i][0] + minimumDistanceBeforeTurn}`;\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Left;\n } else if (\n points[i][1] === points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is perpendicular to us\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is after us, we turn and continue\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is in the same direction, we continue straight\n result += ` V ${points[i][1]}`;\n }\n break;\n case Side.Top:\n if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is behind, we turn around\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Bottom;\n } else if (\n points[i][1] > points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is behind on the same line, we turn around\n result += ` H ${points[i][0] - minimumDistanceBeforeTurn}`;\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Right;\n } else if (\n points[i][1] === points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is perpendicular to us\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] !== points[i - 1][0]\n ) {\n // next point is after us, we turn and continue\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n } else if (\n points[i][1] < points[i - 1][1] &&\n points[i][0] === points[i - 1][0]\n ) {\n // next point is in the same direction, we continue straight\n result += ` V ${points[i][1]}`;\n }\n break;\n case Side.Right:\n if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is behind, we turn around\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Left;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is behind on the same line, we turn around\n result += ` V ${points[i][1] + minimumDistanceBeforeTurn}`;\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Top;\n } else if (\n points[i][0] === points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is perpendicular to us\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is after us, we turn and continue\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is in the same direction, we continue straight\n result += ` H ${points[i][0]}`;\n }\n break;\n case Side.Left:\n if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is behind, we turn around\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n currentDirection = Side.Right;\n } else if (\n points[i][0] > points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is behind on the same line, we turn around\n result += ` V ${points[i][1] - minimumDistanceBeforeTurn}`;\n result += ` H ${points[i][0]}`;\n result += ` V ${points[i][1]}`;\n currentDirection = Side.Bottom;\n } else if (\n points[i][0] === points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is perpendicular to us\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] !== points[i - 1][1]\n ) {\n // next point is after us, we turn and continue\n result += ` V ${points[i][1]}`;\n result += ` H ${points[i][0]}`;\n } else if (\n points[i][0] < points[i - 1][0] &&\n points[i][1] === points[i - 1][1]\n ) {\n // next point is in the same direction, we continue straight\n result += ` H ${points[i][0]}`;\n }\n break;\n }\n } else {\n if (points[i][0] !== points[i - 1][0]) {\n result += ` H ${points[i][0]}`;\n currentDirection =\n points[i][0] > points[i - 1][0] ? Side.Right : Side.Left;\n }\n if (points[i][1] !== points[i - 1][1]) {\n result += ` V ${points[i][1]}`;\n currentDirection =\n points[i][1] > points[i - 1][1] ? Side.Bottom : Side.Top;\n }\n }\n }\n break;\n }\n return result;\n }\n};\n\n/**\n * Calculates the dasharray property of an SVG line corresponding to the given line style and width.\n * @private\n */\nexport const lineStyleDasharray = (style: LineStyle, width: number): string => {\n switch (style) {\n case LineStyle.Dotted:\n return `${width}`;\n case LineStyle.Dashed:\n return `${4 * width} ${width}`;\n case LineStyle.GappedDashes:\n return `${4 * width} ${4 * width}`;\n case LineStyle.Solid:\n default:\n return 'none';\n }\n};\n","/**\n * Removes the given element from the array if it exists within the array.\n * @private\n * @param arr An array.\n * @param obj An element to remove from the array.\n * @returns The given array without the given element removed if it was found; otherwise the array without modifications.\n */\nexport const removeIfExists = <T>(arr: T[], obj: T): T[] => {\n const index = arr.indexOf(obj);\n if (index >= 0) {\n arr.splice(index, 1);\n }\n return arr;\n};\n\n/**\n * Adds the given element to the array if it doesn't exist within the array.\n * @private\n * @param arr An array.\n * @param obj An element to add to the array.\n * @returns The given array with the given element added it was not found; otherwise the array without modifications.\n */\nexport const addIfNotExists = <T>(arr: T[], obj: T): T[] => {\n if (!arr.includes(obj)) {\n arr.push(obj);\n }\n return arr;\n};\n","import { removeIfExists } from '../../util/list-util';\r\n\r\n/**\r\n * Represents an object which exists as part of a diagram model.\r\n * @public\r\n * @see DiagramModel\r\n */\r\nexport interface DiagramEntity {\r\n /**\r\n * Identifier that uniquely identifies this entity within its diagram model.\r\n * @public\r\n */\r\n get id(): string;\r\n}\r\n\r\n/**\r\n * Represents a collection of diagram entities of a type that exists as part of a diagram model.\r\n * @public\r\n * @see DiagramEntity\r\n * @see DiagramModel\r\n */\r\nexport class DiagramEntitySet<E extends DiagramEntity> implements Iterable<E> {\r\n /**\r\n * The list of entities contained in this set.\r\n * @private\r\n */\r\n protected entities: E[] = [];\r\n /**\r\n * A mapping of entity ids to their corresponding entity in this set for quickly fetching entities based on their id.\r\n * @private\r\n */\r\n protected entityMap: { [id: string]: E } = {};\r\n\r\n /**\r\n * The number of entities in this set.\r\n * @public\r\n */\r\n get length(): number {\r\n return this.size();\r\n }\r\n\r\n /**\r\n * Gets all of the entities of this set.\r\n * @public\r\n * @returns An array containing all of the entities of this set.\r\n */\r\n all(): E[] {\r\n return [...this.entities];\r\n }\r\n\r\n /**\r\n * Adds an entity to this set if there are no entities with the same id. Has no effect if there already exists an entity with the same id as the given entity.\r\n * For creating entities with relationships with other entities, the new() method should be used instead. The add() method adds an entity but doesn't take care of setting that entity's relationships with other entities.\r\n * @private\r\n * @param entity An entity to be added to this set.\r\n */\r\n add(entity: E): void {\r\n if (this.entityMap[entity.id] === undefined) {\r\n this.entityMap[entity.id] = entity;\r\n this.entities.push(entity);\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the entities in this set.\r\n * @public\r\n */\r\n clear() {\r\n // remove each entity individually in case classes that extend this implement their own specific cleanup\r\n while (this.entities.length > 0) {\r\n this.remove(this.entities[0].id);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if this set contains an entity with the given id.\r\n * @public\r\n * @param id An id.\r\n * @returns `true` if this set contains an entity with the given id, `false` otherwise.\r\n */\r\n contains(id: string): boolean {\r\n return this.entityMap[id] !== undefined;\r\n }\r\n\r\n /**\r\n * Counts the number of entities of this set following the given criteria.\r\n * @public\r\n * @returns The number of entities of this set following the given criteria.\r\n */\r\n count(predicate: (value: E, index: number, array: E[]) => unknown): number {\r\n return this.entities.filter(predicate).length;\r\n }\r\n\r\n /**\r\n * Gets all of the entities of this set filtered following given criteria.\r\n * @public\r\n * @returns An array containing the entities of this set that meet the given criteria.\r\n */\r\n filter(predicate: (value: E, index: number, array: E[]) => unknown): E[] {\r\n return this.entities.filter(predicate);\r\n }\r\n\r\n /**\r\n * Gets an entity of this set matching specific criteria.\r\n * @public\r\n * @returns An entity of this set.\r\n */\r\n find(\r\n predicate: (value: E, index: number, array: E[]) => unknown\r\n ): E | undefined {\r\n return this.entities.find(predicate);\r\n }\r\n\r\n /**\r\n * Gets an entity from this set.\r\n * @public\r\n * @param id An id.\r\n * @returns An entity with the given id, or `undefined` if there are no entities with the given id.\r\n */\r\n get(id: string): E | undefined {\r\n return this.entityMap[id];\r\n }\r\n\r\n /**\r\n * Gets all of the entities of this set mapped to the result of the given function applied to them.\r\n * @public\r\n * @returns An array containing the entities of this set that meet the given criteria.\r\n */\r\n map<R>(callback: (value: E, index: number, array: E[]) => R): R[] {\r\n return this.entities.map(callback);\r\n }\r\n\r\n /**\r\n * Attempts to find and remove an entity with the given id. Has no effect if there are no entities with the given id.\r\n * @public\r\n * @param id An id.\r\n */\r\n remove(id: string) {\r\n const entity = this.get(id);\r\n if (entity !== undefined) {\r\n delete this.entityMap[id];\r\n removeIfExists(this.entities, entity);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the number of entities in this set.\r\n * @public\r\n */\r\n size(): number {\r\n return this.entities.length;\r\n }\r\n\r\n /**\r\n * Iterator to iterate over the entities of this set.\r\n * @public\r\n */\r\n *[Symbol.iterator](): Iterator<E> {\r\n for (const entity of this.entities) {\r\n yield entity;\r\n }\r\n }\r\n}\r\n","import * as d3 from 'd3';\r\nimport { CollabTimestamp } from './collab/primitives';\r\nimport { DiagramEntity, DiagramEntitySet } from './diagram-entity';\r\nimport { DiagramModel } from './diagram-model';\r\n\r\n/**\r\n * Default priority value for diagram elements.\r\n * @private\r\n */\r\nexport const DEFAULT_PRIORITY = 0;\r\n\r\n/**\r\n * Represents an object which exists as part of a specific diagram model and has a visual representation in a diagram canvas.\r\n * @public\r\n * @see DiagramModel\r\n * @see DiagramCanvas\r\n */\r\nexport abstract class DiagramElement implements DiagramEntity {\r\n /**\r\n * Diagram model this diagram element is part of.\r\n * @private\r\n */\r\n model: DiagramModel;\r\n private _id: string;\r\n get id(): string {\r\n return this._id;\r\n }\r\n /**\r\n * Whether this diagram element is currently highlighted by the user.\r\n * @private\r\n */\r\n highlighted = false;\r\n /**\r\n * Whether this diagram element is currently selected by the user.\r\n * @private\r\n */\r\n selected = false;\r\n /**\r\n * Whether this diagram element has itself been explicitly removed.\r\n *\r\n * Override the `removed` getter so that it returns true if and only if:\r\n * - `selfRemoved` is true, or\r\n * - `removed` is true for any of this element's dependencies.\r\n *\r\n * For example, a DiagramConnection is removed if either of its ports are removed,\r\n * even if the connection's own `selfRemoved` field is false.\r\n * @private\r\n */\r\n selfRemoved = false;\r\n /**\r\n * Collaborative timestamp for selfRemoved.\r\n * @private\r\n */\r\n selfRemovedTimestamp: CollabTimestamp | null = null;\r\n\r\n constructor(model: DiagramModel, id: string) {\r\n this.model = model;\r\n this._id = id;\r\n }\r\n\r\n /**\r\n * Whether this diagram element has been soft removed, that is,\r\n * it has been marked as removed but the data is still in the model.\r\n *\r\n * An element can be removed because it was explicitly removed, or because one of\r\n * its dependencies was removed. For example, a DiagramConnection depends on both of its ports.\r\n *\r\n * @private\r\n */\r\n abstract readonly removed: boolean;\r\n\r\n /**\r\n * Get the priority of this element to calculate whether it should be filtered out in the view or not.\r\n * @public\r\n */\r\n abstract getPriority(): number;\r\n\r\n /**\r\n * Update the view of the canvas to show the current state of this element.\r\n * @public\r\n */\r\n abstract updateInView(): void;\r\n\r\n /**\r\n * Obtain the selection of this element.\r\n * @private\r\n */\r\n select(): d3.Selection<SVGGElement, unknown, null, unknown> | undefined {\r\n return this.model.canvas?.selectCanvasView()?.select(`g#${this.id}`);\r\n }\r\n}\r\n\r\nexport class DiagramElementSet<\r\n E extends DiagramElement\r\n> extends DiagramEntitySet<E> {\r\n override all(includeRemoved = false): E[] {\r\n if (includeRemoved) {\r\n return super.all();\r\n } else {\r\n return super.filter((e) => !e.removed);\r\n }\r\n }\r\n\r\n override contains(id: string, includeRemoved = false): boolean {\r\n if (includeRemoved) {\r\n return super.contains(id);\r\n } else {\r\n return super.contains(id) && !this.entityMap[id].removed;\r\n }\r\n }\r\n\r\n override count(\r\n predicate: (value: E, index: number, array: E[]) => unknown,\r\n includeRemoved = false\r\n ): number {\r\n if (includeRemoved) {\r\n return super.count(predicate);\r\n } else {\r\n return super.count((e, i, a) => predicate(e, i, a) && !e.removed);\r\n }\r\n }\r\n\r\n override filter(\r\n predicate: (value: E, index: number, array: E[]) => unknown,\r\n includeRemoved = false\r\n ): E[] {\r\n if (includeRemoved) {\r\n return super.filter(predicate);\r\n } else {\r\n return super.filter((e, i, a) => predicate(e, i, a) && !e.removed);\r\n }\r\n }\r\n\r\n override find(\r\n predicate: (value: E, index: number, array: E[]) => unknown,\r\n includeRemoved = false\r\n ): E | undefined {\r\n if (includeRemoved) {\r\n return super.find(predicate);\r\n } else {\r\n return super.find((e, i, a) => predicate(e, i, a) && !e.removed);\r\n }\r\n }\r\n\r\n override get(id: string, includeRemoved = false): E | undefined {\r\n if (includeRemoved) {\r\n return super.get(id);\r\n } else {\r\n return super.contains(id) && !this.entityMap[id].removed\r\n ? super.get(id)\r\n : undefined;\r\n }\r\n }\r\n\r\n override map<R>(\r\n callback: (value: E, index: number, array: E[]) => R,\r\n includeRemoved = false\r\n ): R[] {\r\n if (includeRemoved) {\r\n return super.map(callback);\r\n } else {\r\n return super.filter((e) => !e.removed).map(callback);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the number of entities in this set.\r\n * @public\r\n */\r\n override size(includeRemoved = false): number {\r\n if (includeRemoved) {\r\n return super.size();\r\n } else {\r\n return super.filter((e) => !e.removed).length;\r\n }\r\n }\r\n\r\n override *[Symbol.iterator](includeRemoved = false): Iterator<E> {\r\n if (includeRemoved) {\r\n for (const entity of this.entities) {\r\n yield entity;\r\n }\r\n } else {\r\n for (const entity of this.entities.filter((e) => !e.removed)) {\r\n yield entity;\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * A timestamp used to break ties during collaborative editing.\r\n * If multiple users edit a property at the same time, the edit with the last timestamp \"wins\".\r\n *\r\n * Specifically, `CollabTimestamp` is a [Lamport timestamp](https://en.wikipedia.org/wiki/Lamport_timestamp),\r\n * consisting of a logical clock and a tiebreaker (`replicaId`, a UUID that is created fresh for each diagram).\r\n */\r\nexport type CollabTimestamp = [clock: number, replicaId: string];\r\n\r\n/**\r\n * Returns whether the incoming timestamp wins over the existing timestamp.\r\n *\r\n * In the DiagramModel, timestamps that have never been set are left null;\r\n * `timestampWins` treats that as an \"initial timestamp\" that loses to all LogicalTimestamps.\r\n */\r\nexport function timestampWins(\r\n incoming: CollabTimestamp,\r\n existing: CollabTimestamp | null | undefined\r\n): boolean {\r\n if (!existing) return true;\r\n if (incoming[0] > existing[0]) return true;\r\n if (incoming[0] === existing[0]) {\r\n // In case of equality, declare the incoming timestamp the \"winner\".\r\n // This occurs if a client reuses a timestamp for multiple actions in a row,\r\n // in which case the last created should win.\r\n return incoming[1] >= existing[1];\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * A nested collection of CollabTimestamps associated to a ValueSet.\r\n * @see ValueSet\r\n */\r\nexport type CollabTimestampSet = {\r\n [key: string]: CollabTimestamp | CollabTimestampSet;\r\n};\r\n","import { removeIfExists } from '../../util/list-util';\r\nimport {\r\n CollabTimestamp,\r\n CollabTimestampSet,\r\n timestampWins\r\n} from './collab/primitives';\r\n\r\n/**\r\n * A property which is part of a property set and defines what values a value in a value set can take.\r\n * @see PropertySet\r\n * @see ValueSet\r\n * @private\r\n */\r\nexport class Property {\r\n /**\r\n * The name of this property. Used to distinguish this property from others.\r\n */\r\n name: string;\r\n /**\r\n * The type of this property, which indicates the possible values that this property can have.\r\n */\r\n type: Type;\r\n /**\r\n * The default value of this property.\r\n * @default undefined\r\n */\r\n defaultValue?: unknown;\r\n /**\r\n * Whether this property should always appear in the property editor component.\r\n * @see PropertyEditorComponent\r\n */\r\n basic: boolean;\r\n /**\r\n * Whether the value of this property can be edited.\r\n */\r\n editable: boolean;\r\n /**\r\n * Which attribute of the parent component the value of this property is linked to. `undefined` if none.\r\n * @default undefined\r\n */\r\n rootAttribute?: string[] | string;\r\n /**\r\n * The list of possible values if the value of the property is chosen from a set of possible values. Undefined otherwise.\r\n * @default undefined\r\n */\r\n options?: Option<unknown>[];\r\n /**\r\n * The list of properties that are part of this property if the type of this property is `'object'`.\r\n * @default undefined\r\n */\r\n properties?: Property[];\r\n\r\n constructor(\r\n name: string,\r\n type: Type,\r\n defaultValue: unknown,\r\n basic: boolean,\r\n editable: boolean,\r\n rootAttribute?: string[] | string\r\n ) {\r\n this.name = name;\r\n this.type = type;\r\n this.defaultValue = defaultValue;\r\n this.basic = basic;\r\n this.editable = editable;\r\n this.rootAttribute = rootAttribute;\r\n this.options = undefined;\r\n this.properties = undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Each of the possible values that a property of type option can have.\r\n * @see Property\r\n * @see Type.Option\r\n */\r\nexport interface Option<T> {\r\n key: T;\r\n label: string;\r\n}\r\n\r\n/**\r\n * The type that a property can have.\r\n * @see Property\r\n * @private\r\n */\r\nexport enum Type {\r\n /**\r\n * A type whose value must be a boolean.\r\n */\r\n Boolean = 'boolean',\r\n /**\r\n * A type whose value must be a string representing a valid HTML color code.\r\n */\r\n Color = 'color',\r\n /**\r\n * A type whose value must be a date.\r\n */\r\n Date = 'date',\r\n /**\r\n * A type whose value must be a date with a time.\r\n */\r\n Datetime = 'datetime',\r\n /**\r\n * A type whose value must be a number.\r\n */\r\n Number = 'number',\r\n /**\r\n * A type whose value must be an object.\r\n */\r\n Object = 'object',\r\n /**\r\n * A type whose value must be one of a set of options.\r\n */\r\n Option = 'option',\r\n /**\r\n * A type whose value must be a list of values picked from a set of options.\r\n * @see Type.Option\r\n */\r\n OptionList = 'option-list',\r\n /**\r\n * A type whose value must be a list of values picked from a set of options without repeated values.\r\n * @see Type.Option\r\n */\r\n OptionSet = 'option-set',\r\n /**\r\n * A type whose value must be a string without newline characters.\r\n */\r\n Text = 'text',\r\n /**\r\n * A type whose value must be a string with newline characters.\r\n */\r\n TextArea = 'text-area',\r\n /**\r\n * A type whose value must be a list of strings.\r\n */\r\n TextList = 'text-list',\r\n /**\r\n * A type whose value must be a list of strings without repeated values.\r\n */\r\n TextSet = 'text-set',\r\n /**\r\n * A type whose value must be a map with string keys and values.\r\n */\r\n TextMap = 'text-map',\r\n /**\r\n * A type whose value must be a time of day.\r\n */\r\n Time = 'time',\r\n /**\r\n * A type whose value must be a valid URL.\r\n */\r\n Url = 'url'\r\n}\r\n\r\n/**\r\n * A set of properties based on which a set of values of those properties can be created.\r\n * @see Property\r\n * @see ValueSet\r\n * @private\r\n */\r\nexport class PropertySet {\r\n propertyMap: { [key: string]: Property };\r\n propertyList: Property[];\r\n\r\n constructor(properties: Property[] = []) {\r\n this.propertyList = properties;\r\n this.propertyMap = {};\r\n for (const property of this.propertyList) {\r\n this.propertyMap[property.name] = property;\r\n }\r\n }\r\n\r\n getProperty(key: string): Property {\r\n return this.propertyMap[key];\r\n }\r\n\r\n hasProperty(key: string): boolean {\r\n return this.propertyMap[key] !== undefined;\r\n }\r\n\r\n hasProperties(): boolean {\r\n return this.propertyList.length > 0;\r\n }\r\n}\r\n\r\n/**\r\n * A set of values corresponding to a set of properties.\r\n * @see PropertySet\r\n * @private\r\n */\r\nexport class ValueSet {\r\n rootElement: { [key: string]: unknown };\r\n propertySet: PropertySet;\r\n displayedProperties: Property[] = [];\r\n hiddenProperties: Property[] = [];\r\n private values: { [key: string]: unknown } = {};\r\n private valueSets: { [key: string]: ValueSet } = {};\r\n /**\r\n * Collaborative timestamps for all keys in this.values that have ever been set,\r\n * even if since they've since been set to the default value.\r\n *\r\n * Object values (in this.valueSets) store their own timestamps separately.\r\n */\r\n private ownTimestamps: { [key: string]: CollabTimestamp | undefined } = {};\r\n\r\n constructor(propertySet: PropertySet, rootElement: unknown) {\r\n this.propertySet = propertySet;\r\n this.rootElement = rootElement as { [key: string]: unknown };\r\n this.resetValues();\r\n }\r\n\r\n /**\r\n * Get the value of the root element attribute under the given keys.\r\n * If given an array of keys, the value is found under repeated lookups to enable obtaining nested values.\r\n * @private\r\n * @param rootAttribute A key or array of keys to look up in the root element.\r\n * @returns The value if it could be found, `undefined` if nothing could be found.\r\n */\r\n getRootElementValue(rootAttribute: string[] | string | null): unknown {\r\n if (typeof rootAttribute === 'string') {\r\n return this.rootElement[rootAttribute];\r\n }\r\n if (Array.isArray(rootAttribute) && rootAttribute.length > 0) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let rootSubelement: any = this.rootElement;\r\n for (const rootSubattribute of rootAttribute) {\r\n if (rootSubelement === null || rootSubelement === undefined) {\r\n return undefined;\r\n }\r\n rootSubelement = rootSubelement[rootSubattribute];\r\n }\r\n return rootSubelement;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Set the value of the root element's attribute under the given keys.\r\n * If given an array of keys, the value is found under repeated lookups to enable setting nested values.\r\n * If the root element has a function `updateInView()`, it is called upon successful setting of the value.\r\n * If the root element's attribute doesn't exist, it does nothing.\r\n * @private\r\n * @param rootAttribute A key or array of keys to look up in the root element.\r\n * @param value The value to set the root element's attribute to.\r\n */\r\n setRootElementValue(\r\n rootAttribute: string[] | string | null,\r\n value: unknown\r\n ): void {\r\n if (typeof rootAttribute === 'string') {\r\n this.rootElement[rootAttribute] = value;\r\n }\r\n if (Array.isArray(rootAttribute) && rootAttribute.length > 0) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n let rootSubelement: any = this.rootElement;\r\n for (let i = 0; i < rootAttribute.length - 1; ++i) {\r\n const rootSubattribute = rootAttribute[i];\r\n if (rootSubelement === null || rootSubelement === undefined) {\r\n return;\r\n }\r\n rootSubelement = rootSubelement[rootSubattribute];\r\n }\r\n if (rootSubelement === null || rootSubelement === undefined) {\r\n return;\r\n }\r\n rootSubelement[rootAttribute[rootAttribute.length - 1]] = value;\r\n }\r\n if (typeof this.rootElement['updateInView'] === 'function') {\r\n this.rootElement['updateInView']();\r\n }\r\n }\r\n\r\n /**\r\n * Obtain the value under the given key.\r\n * @private\r\n * @param key A key.\r\n * @returns The value under the given key.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getValue(key: string): any {\r\n const rootAttribute = this.propertySet.getProperty(key)?.rootAttribute;\r\n if (rootAttribute !== undefined && rootAttribute !== null) {\r\n this.values[key] = this.getRootElementValue(rootAttribute);\r\n }\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n return this.valueSets[key].getValues();\r\n } else {\r\n return this.values[key];\r\n }\r\n }\r\n\r\n /**\r\n * Obtain all the values in the set.\r\n * @private\r\n * @returns An object containing all the values in the set.\r\n */\r\n getValues(): { [key: string]: unknown } {\r\n const result: { [key: string]: unknown } = {};\r\n for (const key in this.propertySet.propertyMap) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n result[key] = this.valueSets[key].getValues();\r\n } else {\r\n result[key] = this.getValue(key);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns the values for all keys present in the given object, including keys in sub-objects.\r\n *\r\n * @private\r\n * @param values An object containing all values for keys present in the given object.\r\n */\r\n getValuesForKeys(keys: { [key: string]: unknown }): {\r\n [key: string]: unknown;\r\n } {\r\n const result: { [key: string]: unknown } = {};\r\n for (const key in keys) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n result[key] = this.valueSets[key].getValuesForKeys(\r\n keys[key] as { [key: string]: unknown }\r\n );\r\n } else {\r\n result[key] = this.getValue(key);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Obtain all CollabTimestamps in the set, including those corresponding to nested keys.\r\n * @private\r\n * @returns An object containing all the CollabTimestamps in the set.\r\n */\r\n getTimestamps(): CollabTimestampSet {\r\n const result: CollabTimestampSet = {};\r\n for (const key in this.propertySet.propertyMap) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n result[key] = this.valueSets[key].getTimestamps();\r\n } else {\r\n const timestamp = this.ownTimestamps[key];\r\n if (timestamp) result[key] = timestamp;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Check if the value under the key is not empty.\r\n * @private\r\n * @param key A key.\r\n * @returns `true` if the value under the key is empty, `false` otherwise.\r\n */\r\n hasValue(key: string): boolean {\r\n const value = this.getValue(key);\r\n return !empty(value);\r\n }\r\n\r\n /**\r\n * Check if the value under the key is not empty or the default value.\r\n * @private\r\n * @param key A key.\r\n * @returns `true` if the value under the key is not empty or the default value, `false` otherwise.\r\n */\r\n hasSetValue(key: string): boolean {\r\n const value = this.getValue(key);\r\n const property = this.propertySet.getProperty(key);\r\n if (property && property.type === Type.Object) {\r\n return this.getSubValueSet(key).hasAnySetValue();\r\n }\r\n return !empty(value) && !equals(value, property?.defaultValue);\r\n }\r\n\r\n /**\r\n * Check if any of the values in the set are not empty or the default value.\r\n * @private\r\n * @returns `true` if any of the values in the set are not empty or the default value, `false` otherwise.\r\n */\r\n hasAnySetValue(): boolean {\r\n for (const property of this.propertySet.propertyList) {\r\n if (this.hasSetValue(property.name)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Set the value under the given key.\r\n * @private\r\n * @param key A key.\r\n * @param value A value.\r\n */\r\n setValue(key: string, value: unknown): void {\r\n const property = this.propertySet.getProperty(key);\r\n if (property) {\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].setValues(value as { [key: string]: unknown });\r\n } else {\r\n this.values[key] = value;\r\n if (!equals(value, property.defaultValue)) {\r\n this.displayProperty(property);\r\n }\r\n }\r\n const rootAttribute = property.rootAttribute;\r\n if (rootAttribute !== undefined && rootAttribute !== null) {\r\n this.setRootElementValue(rootAttribute, value);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Reset all values and then set them to the given values.\r\n * @private\r\n * @param values An object containing all values to set the values to.\r\n */\r\n setValues(values: { [key: string]: unknown }): void {\r\n this.resetValues();\r\n for (const key in values) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].setValues(\r\n values[key] as { [key: string]: unknown }\r\n );\r\n } else {\r\n this.setValue(key, values[key]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Reset all timestamps and then set them to the given timestamps.\r\n * @private\r\n * @param values An object containing all the CollabTimestamps in the set.\r\n */\r\n setTimestamps(timestamps: CollabTimestampSet): void {\r\n this.ownTimestamps = {};\r\n for (const key in timestamps) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].setTimestamps(\r\n timestamps[key] as CollabTimestampSet\r\n );\r\n } else {\r\n this.ownTimestamps[key] = timestamps[key] as CollabTimestamp;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Writes the given values over the value set's existing values without resetting the existing values.\r\n * @private\r\n * @param values An object containing all values to set the values to.\r\n */\r\n overwriteValues(values: { [key: string]: unknown }): void {\r\n for (const key in values) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].overwriteValues(\r\n values[key] as { [key: string]: unknown }\r\n );\r\n } else {\r\n this.setValue(key, values[key]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Variant of overwriteValues that applies last-writer-wins to each key, updating timestamps if appropriate.\r\n * @private\r\n * @param values An object containing all values to set the values to.\r\n */\r\n overwriteValuesLww(\r\n values: { [key: string]: unknown },\r\n timestamp: CollabTimestamp\r\n ): void {\r\n for (const key in values) {\r\n const property = this.propertySet.getProperty(key);\r\n if (property.type === Type.Object) {\r\n this.valueSets[key].overwriteValuesLww(\r\n values[key] as { [key: string]: unknown },\r\n timestamp\r\n );\r\n } else {\r\n if (timestampWins(timestamp, this.ownTimestamps[key])) {\r\n this.setValue(key, values[key]);\r\n this.ownTimestamps[key] = timestamp;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set all the values of this set to the defaults.\r\n * If this set has a root element and any of its properties have root attributes, the root element's attributes are also set to the property's default value if one is provided.\r\n * @private\r\n */\r\n resetValues(): void {\r\n this.displayedProperties = [];\r\n this.hiddenProperties = [];\r\n this.ownTimestamps = {};\r\n for (const key in this.propertySet.propertyMap) {\r\n const property = this.propertySet.getProperty(key);\r\n const rootAttribute = property.rootAttribute;\r\n if (property.type === Type.Object) {\r\n this.valueSets[key] = this.constructSubValueSet(key);\r\n } else {\r\n this.values[key] = structuredClone(property.defaultValue);\r\n }\r\n if (rootAttribute !== undefined && rootAttribute !== null) {\r\n if (property.defaultValue !== undefined) {\r\n this.setRootElementValue(rootAttribute, this.values[key]);\r\n } else {\r\n this.values[key] = this.getRootElementValue(rootAttribute);\r\n }\r\n }\r\n if (property.basic) {\r\n this.displayedProperties.push(property);\r\n } else {\r\n this.hiddenProperties.push(property);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Constructs a ValueSet with its corresponding PropertySet representing the values of the object.\r\n * @private\r\n * @param key Key that the ValueSet is under.\r\n * @returns The constructed ValueSet.\r\n */\r\n private constructSubValueSet(key: string): ValueSet {\r\n const property = this.propertySet.getProperty(key);\r\n const propertySet = new PropertySet(property.properties);\r\n const valueSet = new ValueSet(propertySet, this.rootElement);\r\n valueSet.overwriteValues(\r\n structuredClone(property.defaultValue) as { [key: string]: unknown }\r\n );\r\n return valueSet;\r\n }\r\n\r\n /**\r\n * Get the ValueSet under the given key when there are nested ValueSets.\r\n * @private\r\n * @param key A key.\r\n * @returns A ValueSet.\r\n */\r\n getSubValueSet(key: string): ValueSet {\r\n return this.valueSets[key];\r\n }\r\n\r\n /**\r\n * Move the given property to the list of displayed properties.\r\n * @private\r\n * @param property A property.\r\n */\r\n displayProperty(property: Property): void {\r\n if (!this.displayedProperties.includes(property)) {\r\n this.displayedProperties.push(property);\r\n removeIfExists(this.hiddenProperties, property);\r\n }\r\n }\r\n\r\n /**\r\n * Move the given property to the list of hidden properties.\r\n * @private\r\n * @param property A property.\r\n */\r\n hideProperty(property: Property): void {\r\n if (!this.hiddenProperties.includes(property)) {\r\n this.hiddenProperties.push(property);\r\n removeIfExists(this.displayedProperties, property);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Check if the given value is not empty.\r\n * @param a A value.\r\n * @returns `true` if the given value is not `undefined`, `null`, `''`, `[]` or `{}`; `false` otherwise.\r\n */\r\nexport const empty = (a: unknown): boolean => {\r\n return (\r\n a === undefined ||\r\n a === null ||\r\n a === '' ||\r\n (a instanceof Array && a.length === 0) ||\r\n (a instanceof Object && Object.keys(a).length === 0)\r\n );\r\n};\r\n\r\n/**\r\n * Check whether the given values are equal.\r\n * @param a A value.\r\n * @param b A value.\r\n * @returns `true` if the given values are equal, `false` otherwise.\r\n */\r\nexport const equals = (a: unknown, b: unknown): boolean => {\r\n return a === b || JSON.stringify(a) === JSON.stringify(b);\r\n};\r\n\r\n/**\r\n * Calculate the differences between the given objects and return two objects, each containing the keys for which the values are different in each argument, containing the different values.\r\n * @param a A dictionary.\r\n * @param b A dictionary.\r\n * @returns A tuple of two objects with each containing the keys that have a different value in the corresponding argument compared to the other argument.\r\n */\r\nexport const diff = (\r\n a: {\r\n [key: string]: unknown;\r\n },\r\n b: {\r\n [key: string]: unknown;\r\n }\r\n): [\r\n {\r\n [key: string]: unknown;\r\n },\r\n {\r\n [key: string]: unknown;\r\n }\r\n] => {\r\n const aDiff: {\r\n [key: string]: unknown;\r\n } = {};\r\n const bDiff: {\r\n [key: string]: unknown;\r\n } = {};\r\n const allKeys = [];\r\n for (const key in a) {\r\n allKeys.push(key);\r\n }\r\n for (const key in b) {\r\n if (!(key in a)) {\r\n allKeys.push(key);\r\n }\r\n }\r\n for (const key of allKeys) {\r\n if (isObject(a[key]) && isObject(b[key])) {\r\n const diffAB = diff(\r\n a[key] as { [key: string]: unknown },\r\n b[key] as { [key: string]: unknown }\r\n );\r\n // only add the key if differences are detected\r\n if (\r\n Object.keys(diffAB[0]).length > 0 &&\r\n Object.keys(diffAB[1]).length > 0\r\n ) {\r\n aDiff[key] = diffAB[0];\r\n bDiff[key] = diffAB[1];\r\n }\r\n } else {\r\n if (!equals(a[key], b[key])) {\r\n aDiff[key] = a[key];\r\n bDiff[key] = b[key];\r\n }\r\n }\r\n }\r\n return [aDiff, bDiff];\r\n};\r\n\r\nexport const isObject = (x: unknown): boolean =>\r\n x !== undefined && x !== null && x.constructor === Object;\r\n","import { Point } from '../../util/canvas-util';\r\nimport { LineShape, LineStyle } from '../../util/line';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { Side } from '../../util/svg-util';\r\nimport {\r\n ConnectionMarkerLook,\r\n ConnectionTypeConfig,\r\n FieldConfig\r\n} from './diagram-config';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramElementSet\r\n} from './diagram-element';\r\nimport { DiagramEntity, DiagramEntitySet } from './diagram-entity';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { PropertySet, ValueSet } from './diagram-property';\r\n\r\n/**\r\n * Default values of the parameters of a diagram connection.\r\n * @see DiagramConnection\r\n * @private\r\n */\r\nexport const DIAGRAM_CONNECTION_TYPE_DEFAULTS = {\r\n name: '',\r\n width: 1,\r\n shape: LineShape.Straight,\r\n style: LineStyle.Solid,\r\n label: null,\r\n defaultStartMarkerLook: null,\r\n defaultEndMarkerLook: null,\r\n startTypes: [],\r\n endTypes: [],\r\n color: '#000000',\r\n selectedColor: '#000000',\r\n properties: []\r\n};\r\n\r\n// TODO: Should maybe get these variables from the diagram configuration rather than have them hardcoded\r\n/**\r\n * Whether a connection can have the same port as both its start port and its end port.\r\n */\r\nexport const CAN_A_CONNECTION_END_ON_THE_SAME_PORT_IT_STARTS = false;\r\n/**\r\n * Whether a connection can have the same ports as another connection.\r\n */\r\nexport const CAN_A_CONNECTION_HAVE_THE_SAME_PORTS_AS_ANOTHER = false;\r\n/**\r\n * Whether a port can have multiple connections.\r\n */\r\nexport const CAN_CONNECTIONS_SHARE_PORTS = true;\r\n/**\r\n * Whether tightening connections is allowed.\r\n */\r\nexport const CAN_TIGHTEN_CONNECTIONS = true;\r\n\r\n/**\r\n * A connection type, which holds properties that connections of this type share in common.\r\n * @see ConnectionTypeConfig\r\n * @public\r\n */\r\nexport class DiagramConnectionType implements DiagramEntity {\r\n id: string;\r\n name: string;\r\n width: number;\r\n shape: LineShape;\r\n style: LineStyle;\r\n label: FieldConfig | null;\r\n defaultStartMarkerLook: ConnectionMarkerLook | null;\r\n defaultEndMarkerLook: ConnectionMarkerLook | null;\r\n startTypes: string[];\r\n endTypes: string[];\r\n color: string;\r\n selectedColor: string;\r\n propertySet: PropertySet;\r\n\r\n constructor(options: ConnectionTypeConfig) {\r\n const values = {\r\n ...DIAGRAM_CONNECTION_TYPE_DEFAULTS,\r\n ...options\r\n };\r\n this.id = values.id;\r\n this.name = values.name;\r\n this.width = values.width;\r\n this.shape = values.shape;\r\n this.style = values.style;\r\n this.label = values.label;\r\n this.defaultStartMarkerLook = values.defaultStartMarkerLook;\r\n this.defaultEndMarkerLook = values.defaultEndMarkerLook;\r\n this.startTypes = values.startTypes;\r\n this.endTypes = values.endTypes;\r\n this.color = values.color;\r\n this.selectedColor = values.selectedColor;\r\n this.propertySet = new PropertySet(values.properties);\r\n }\r\n\r\n canStartFromType(type: string) {\r\n return this.startTypes.indexOf(type) >= 0;\r\n }\r\n\r\n canFinishOnType(type: string) {\r\n return this.endTypes.indexOf(type) >= 0;\r\n }\r\n}\r\n\r\n/**\r\n * A connection which goes from one port to another.\r\n * @see DiagramPort\r\n * @public\r\n */\r\nexport class DiagramConnection extends DiagramElement {\r\n type: DiagramConnectionType;\r\n /**\r\n * Additional properties of this connection.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n /**\r\n * Variable used to preserve the original data of a connection when importing from a different format.\r\n * @public\r\n */\r\n originalData: unknown;\r\n /**\r\n * Port that this connection starts from.\r\n * @public\r\n */\r\n start?: DiagramPort;\r\n /**\r\n * Direction that this connection follows at its start.\r\n * @public\r\n */\r\n startDirection?: Side;\r\n /**\r\n * Coordinates of the start point of this connection.\r\n * @public\r\n */\r\n startCoords: Point = [0, 0];\r\n /**\r\n * Look of the marker of this connection at the start, or `null` if the connection has no start marker.\r\n * @public\r\n */\r\n startMarkerLook: ConnectionMarkerLook | null;\r\n /**\r\n * Port that this connection ends at.\r\n * @public\r\n */\r\n end?: DiagramPort;\r\n /**\r\n * Direction that this connection follows at its end.\r\n * @public\r\n */\r\n endDirection?: Side;\r\n /**\r\n * Coordinates of the end point of this connection.\r\n * @public\r\n */\r\n endCoords: Point = [0, 0];\r\n /**\r\n * Look of the marker of this connection at the end, or `null` if the connection has no end marker.\r\n * @public\r\n */\r\n endMarkerLook: ConnectionMarkerLook | null;\r\n /**\r\n * Text at the start of this connection, or `''` if no text.\r\n * @public\r\n */\r\n startLabel = '';\r\n /**\r\n * Text at the middle of this connection, or `''` if no text.\r\n * @public\r\n */\r\n middleLabel = '';\r\n /**\r\n * Text at the end of this connection, or `''` if no text.\r\n * @public\r\n */\r\n endLabel = '';\r\n /**\r\n * Points that this connection passes through.\r\n * @public\r\n */\r\n points: Point[] = [];\r\n\r\n /**\r\n * Name of this connection. Alias for this connection's middle label.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.middleLabel;\r\n }\r\n set name(name: string) {\r\n this.middleLabel = name;\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n type: DiagramConnectionType,\r\n start: DiagramPort | undefined,\r\n end: DiagramPort | undefined,\r\n id: string\r\n ) {\r\n if (model.connections.get(id) !== undefined) {\r\n throw new Error(`DiagramConnection with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.type = type;\r\n this.valueSet = new ValueSet(type.propertySet, this);\r\n this.originalData = {};\r\n this.startMarkerLook = type.defaultStartMarkerLook;\r\n this.endMarkerLook = type.defaultEndMarkerLook;\r\n this.setStart(start);\r\n this.setEnd(end);\r\n }\r\n\r\n get removed() {\r\n return (\r\n this.selfRemoved ||\r\n (this.start !== undefined && this.start.removed) ||\r\n (this.end !== undefined && this.end.removed)\r\n );\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateConnectionsInView(this.id);\r\n }\r\n\r\n /**\r\n * Set the start of this connection to the given port or reset this connection's starting port if `undefined`.\r\n * Add or remove this connection from the list of outgoing connections of ports correspondingly.\r\n * @public\r\n * @param start A port.\r\n */\r\n setStart(start?: DiagramPort) {\r\n if (this.start !== start) {\r\n if (this.start !== undefined) {\r\n removeIfExists(this.start.outgoingConnections, this);\r\n }\r\n this.start = start;\r\n if (start !== undefined) {\r\n start.outgoingConnections.push(this);\r\n this.startDirection = start?.direction;\r\n this.startCoords = start?.coords || [0, 0];\r\n }\r\n } else {\r\n this.startDirection = start?.direction;\r\n this.startCoords = start?.coords || [0, 0];\r\n }\r\n this.updateInView();\r\n }\r\n\r\n /**\r\n * Set the end of this connection to the given port or reset this connection's ending port if `undefined`.\r\n * Add or remove this connection from the list of incoming connections of ports correspondingly.\r\n * @public\r\n * @param end A port.\r\n */\r\n setEnd(end?: DiagramPort) {\r\n if (this.end !== end) {\r\n if (this.end !== undefined) {\r\n removeIfExists(this.end.incomingConnections, this);\r\n }\r\n this.end = end;\r\n if (end !== undefined) {\r\n end.incomingConnections.push(this);\r\n this.endDirection = end?.direction;\r\n this.endCoords = end?.coords || [0, 0];\r\n }\r\n } else {\r\n this.endDirection = end?.direction;\r\n this.endCoords = end?.coords || [0, 0];\r\n }\r\n this.updateInView();\r\n }\r\n\r\n /**\r\n * Reassign the start and end ports of this connection to ports with less distance between them that have the same root element.\r\n * If no ports with less distance between them are found, do nothing.\r\n * @public\r\n */\r\n tighten() {\r\n if (!CAN_TIGHTEN_CONNECTIONS) {\r\n return;\r\n }\r\n if (this.start?.rootElement && this.end) {\r\n const alternativeStartPortsSortedByDistanceAscending =\r\n this.start.rootElement.ports\r\n .map<[DiagramPort, number]>((p) => [\r\n p,\r\n p.distanceTo((this.end as DiagramPort).coords)\r\n ])\r\n .sort((a, b) => a[1] - b[1])\r\n .map((a) => a[0]);\r\n checkAlternativeStartPorts: for (const alternativeStartPort of alternativeStartPortsSortedByDistanceAscending) {\r\n if (\r\n !CAN_A_CONNECTION_END_ON_THE_SAME_PORT_IT_STARTS &&\r\n alternativeStartPort === this.end\r\n ) {\r\n // alternative start port not valid, it is the same as the end port\r\n continue checkAlternativeStartPorts;\r\n }\r\n if (\r\n !CAN_CONNECTIONS_SHARE_PORTS &&\r\n ((alternativeStartPort.incomingConnections.length === 1 &&\r\n alternativeStartPort.incomingConnections[0] !== this) ||\r\n alternativeStartPort.incomingConnections.length > 1 ||\r\n (alternativeStartPort.outgoingConnections.length === 1 &&\r\n alternativeStartPort.outgoingConnections[0] !== this) ||\r\n alternativeStartPort.outgoingConnections.length > 1)\r\n ) {\r\n // alternative start port not valid, it already has other connections\r\n continue checkAlternativeStartPorts;\r\n }\r\n if (!CAN_A_CONNECTION_HAVE_THE_SAME_PORTS_AS_ANOTHER) {\r\n for (const connection of alternativeStartPort.outgoingConnections) {\r\n if (connection !== this && connection.end === this.end) {\r\n // alternative start port not valid, there is a connection whose start and end matches the alternative start port and this connection's end\r\n continue checkAlternativeStartPorts;\r\n }\r\n }\r\n for (const connection of alternativeStartPort.incomingConnections) {\r\n if (connection !== this && connection.start === this.end) {\r\n // alternative start port not valid, there is a connection whose start and end matches the alternative start port and this connection's end\r\n continue checkAlternativeStartPorts;\r\n }\r\n }\r\n }\r\n // found a valid start port\r\n if (alternativeStartPort === this.start) {\r\n break checkAlternativeStartPorts;\r\n } else {\r\n this.setStart(alternativeStartPort);\r\n break checkAlternativeStartPorts;\r\n }\r\n }\r\n }\r\n if (this.end?.rootElement && this.start) {\r\n const alternativeEndPortsSortedByDistanceAscending =\r\n this.end.rootElement.ports\r\n .map<[DiagramPort, number]>((p) => [\r\n p,\r\n p.distanceTo((this.start as DiagramPort).coords)\r\n ])\r\n .sort((a, b) => a[1] - b[1])\r\n .map((a) => a[0]);\r\n checkAlternativeEndPorts: for (const alternativeEndPort of alternativeEndPortsSortedByDistanceAscending) {\r\n if (\r\n !CAN_A_CONNECTION_END_ON_THE_SAME_PORT_IT_STARTS &&\r\n alternativeEndPort === this.start\r\n ) {\r\n // alternative start port not valid, it is the same as the end port\r\n continue checkAlternativeEndPorts;\r\n }\r\n if (\r\n !CAN_CONNECTIONS_SHARE_PORTS &&\r\n ((alternativeEndPort.outgoingConnections.length === 1 &&\r\n alternativeEndPort.outgoingConnections[0] !== this) ||\r\n alternativeEndPort.outgoingConnections.length > 1 ||\r\n (alternativeEndPort.incomingConnections.length === 1 &&\r\n alternativeEndPort.incomingConnections[0] !== this) ||\r\n alternativeEndPort.incomingConnections.length > 1)\r\n ) {\r\n // alternative start port not valid, it already has other connections\r\n continue checkAlternativeEndPorts;\r\n }\r\n if (!CAN_A_CONNECTION_HAVE_THE_SAME_PORTS_AS_ANOTHER) {\r\n for (const connection of alternativeEndPort.incomingConnections) {\r\n if (connection !== this && connection.start === this.start) {\r\n // alternative start port not valid, there is a connection whose start and end matches the alternative end port and this connection's start\r\n continue checkAlternativeEndPorts;\r\n }\r\n }\r\n for (const connection of alternativeEndPort.outgoingConnections) {\r\n if (connection !== this && connection.end === this.start) {\r\n // alternative start port not valid, there is a connection whose start and end matches the alternative end port and this connection's start\r\n continue checkAlternativeEndPorts;\r\n }\r\n }\r\n }\r\n // found a valid start port\r\n if (alternativeEndPort === this.end) {\r\n break checkAlternativeEndPorts;\r\n } else {\r\n this.setEnd(alternativeEndPort);\r\n break checkAlternativeEndPorts;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getPriority(): number {\r\n if (this.start) {\r\n if (this.end) {\r\n return Math.min(this.start.getPriority(), this.end.getPriority());\r\n } else {\r\n return this.start.getPriority();\r\n }\r\n } else {\r\n if (this.end) {\r\n return this.end.getPriority();\r\n } else {\r\n return DEFAULT_PRIORITY;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class DiagramConnectionSet extends DiagramElementSet<DiagramConnection> {\r\n private model: DiagramModel;\r\n /**\r\n * Set of the possible types of connection that the connections of this set can have.\r\n * @public\r\n */\r\n types = new DiagramEntitySet<DiagramConnectionType>();\r\n\r\n /**\r\n * Instance a set of connections for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new connection and add it to this set.\r\n * @public\r\n * @param type The type of the connection given as either the type itself or the id of the type.\r\n * @param start The start port of the connection.\r\n * @param end The end port of the connection.\r\n * @param id The id of the connection.\r\n * @returns The instanced connection.\r\n */\r\n new(\r\n type: DiagramConnectionType | string,\r\n start: DiagramPort | undefined,\r\n end: DiagramPort | undefined,\r\n id: string\r\n ): DiagramConnection {\r\n let connectionType: DiagramConnectionType;\r\n if (type instanceof DiagramConnectionType) {\r\n connectionType = type;\r\n } else {\r\n const foundConnectionType = this.types.get(type);\r\n if (foundConnectionType === undefined) {\r\n throw new TypeError(\r\n `Connection type with id '${type}' could not be found.`\r\n );\r\n }\r\n connectionType = foundConnectionType;\r\n }\r\n const connection = new DiagramConnection(\r\n this.model,\r\n connectionType,\r\n start,\r\n end,\r\n id\r\n );\r\n super.add(connection);\r\n connection.updateInView();\r\n connection.valueSet.resetValues();\r\n return connection;\r\n }\r\n\r\n override remove(id: string) {\r\n const connection = this.get(id);\r\n if (connection) {\r\n // remove from ports\r\n removeIfExists(connection.start?.outgoingConnections || [], connection);\r\n removeIfExists(connection.end?.incomingConnections || [], connection);\r\n // remove from set of connections\r\n super.remove(id);\r\n // remove from canvas\r\n connection.updateInView();\r\n }\r\n }\r\n}\r\n","import { Side } from './svg-util';\n\n/**\n * A point on a canvas defined as its coordinates along the x and y axes.\n * @see DiagramCanvas\n * @public\n */\nexport type Point = [number, number];\n/**\n * A line on a canvas defined as its start point and end point.\n * @see DiagramCanvas\n * @public\n */\nexport type Line = [Point, Point];\n/**\n * A rectangle on a canvas defined as the points of its opposite corners.\n * @see DiagramCanvas\n * @public\n */\nexport type Rectangle = [Point, Point];\n\n/**\n * Round the coordinates of the given point to the nearest whole number.\n * @public\n * @param point A point.\n * @returns A new point with whole coordinates.\n */\nexport const roundPoint = (point: Point): Point => {\n return [Math.round(point[0]), Math.round(point[1])];\n};\n\n/**\n * Checks if the given coordinate is in the range given by an starting coordinate and an ending coordinate.\n * @public\n * @param coordinate A coordinate to check its presence in the range.\n * @param start A coordinate determining one of the extremes in the range.\n * @param end A coordinate determine one of the extremes in the range.\n * @returns `true` if the given coordinate is in the given range; `false` otherwise.\n */\nexport const between = (\n coordinate: number,\n start: number,\n end: number\n): boolean => {\n if (start < end) {\n return start <= coordinate && coordinate <= end;\n } else {\n return end <= coordinate && coordinate <= start;\n }\n};\n\n/**\n * Moves the given coordinate according to the given changes in coordinates.\n * @public\n * @param oldCoordinate A coordinate.\n * @param oldCoordinates A range of coordinates.\n * @param newCoordinates A range of coordinates.\n * @returns A new coordinate.\n */\nexport const translateCoordinate = (\n oldCoordinate: number,\n oldCoordinates: [number, number],\n newCoordinates: [number, number]\n): number => {\n return (\n ((oldCoordinate - oldCoordinates[0]) /\n (oldCoordinates[1] - oldCoordinates[0])) *\n (newCoordinates[1] - newCoordinates[0]) +\n newCoordinates[0]\n );\n};\n\n/**\n * Moves the coordinates of the given point according to the given changes in coordinates.\n * @public\n * @param oldPoint A point.\n * @param oldCoordsX A range of coordinates along the x axis.\n * @param oldCoordsY A range of coordinates along the y axis.\n * @param newCoordsX A range of coordinates along the x axis.\n * @param newCoordsY A range of coordinates along the y axis.\n * @returns A new point.\n */\nexport const translatePoint = (\n oldPoint: Point,\n oldCoordsX: [number, number],\n oldCoordsY: [number, number],\n newCoordsX: [number, number],\n newCoordsY: [number, number]\n): Point => {\n return [\n translateCoordinate(oldPoint[0], oldCoordsX, newCoordsX),\n translateCoordinate(oldPoint[1], oldCoordsY, newCoordsY)\n ];\n};\n\n/**\n * Calculates the result of moving the given point by the given distance in the given direction.\n * @public\n * @param point A point.\n * @param direction A direction.\n * @param distance A distance.\n * @returns A new point which differs from the given point by the given distance in the given direction.\n */\nexport const movePoint = (\n point: Point,\n direction: Side,\n distance: number\n): Point => {\n switch (direction) {\n case Side.Right:\n return [point[0] + distance, point[1]];\n case Side.Left:\n return [point[0] - distance, point[1]];\n case Side.Bottom:\n return [point[0], point[1] + distance];\n case Side.Top:\n return [point[0], point[1] - distance];\n }\n};\n\n/**\n * Checks whether two given points are the same point, that is, they have the same coordinates and are not NaN.\n * @public\n * @param point1 A point.\n * @param point2 A point.\n * @returns `true` if the two points have the same coordinates; `false` otherwise.\n */\nexport const equals = (point1: Point, point2: Point): boolean => {\n return point1[0] === point2[0] && point1[1] === point2[1];\n};\n\n/**\n * Calculates the euclidean distance between two points.\n * @public\n * @param point1 A point.\n * @param point2 A point.\n * @returns The euclidean distance between the given points.\n */\nexport const distanceBetweenPoints = (point1: Point, point2: Point): number => {\n return ((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2) ** 0.5;\n};\n\n/**\n * Checks whether the given point is inside the given line.\n * @public\n * @param line A line.\n * @param point A point.\n * @returns `true` if the point is contained within the line; `false` otherwise.\n */\nexport const lineContainsPoint = (line: Line, point: Point): boolean => {\n const alphaX = (point[0] - line[0][0]) / (line[1][0] - line[0][0]);\n if (alphaX < 0 || 1 < alphaX) {\n return false;\n }\n const alphaY = (point[1] - line[0][1]) / (line[1][1] - line[0][1]);\n return alphaX === alphaY;\n};\n\n/**\n * Checks whether the given point is inside the given rectaingle.\n * @public\n * @param rectangle A rectangle.\n * @param point A point.\n * @returns `true` if the point is contained within the rectangle; `false` otherwise.\n */\nexport const rectangleContainsPoint = (\n rectangle: Rectangle,\n point: Point\n): boolean => {\n return (\n between(point[0], rectangle[0][0], rectangle[1][0]) &&\n between(point[1], rectangle[0][1], rectangle[1][1])\n );\n};\n\n/**\n * Checks whether the two given lines share at least one point.\n * @public\n * @param line1 A line.\n * @param line2 A line.\n * @returns `true` if the lines intersect; `false` otherwise.\n */\nexport const linesIntersect = (line1: Line, line2: Line): boolean => {\n // if both lines are a point, they intersect if they are the same point\n if (equals(line1[0], line1[1]) && equals(line2[0], line2[1])) {\n return equals(line1[0], line2[0]);\n }\n // if one line is a point, they intersect if the other line contains the point\n if (equals(line1[0], line1[1])) {\n return lineContainsPoint(line2, line1[0]);\n }\n if (equals(line2[0], line2[1])) {\n return lineContainsPoint(line1, line2[0]);\n }\n // if the lines share endpoints, they intersect\n if (\n equals(line1[0], line2[0]) ||\n equals(line1[0], line2[1]) ||\n equals(line2[0], line1[1]) ||\n equals(line1[1], line2[1])\n ) {\n return true;\n }\n // if both lines are lines that don't share endpoints, calculate\n const dx0 = line1[1][0] - line1[0][0];\n const dx1 = line2[1][0] - line2[0][0];\n const dy0 = line1[1][1] - line1[0][1];\n const dy1 = line2[1][1] - line2[0][1];\n const p0 =\n dy1 * (line2[1][0] - line1[0][0]) - dx1 * (line2[1][1] - line1[0][1]);\n const p1 =\n dy1 * (line2[1][0] - line1[1][0]) - dx1 * (line2[1][1] - line1[1][1]);\n const p2 =\n dy0 * (line1[1][0] - line2[0][0]) - dx0 * (line1[1][1] - line2[0][1]);\n const p3 =\n dy0 * (line1[1][0] - line2[1][0]) - dx0 * (line1[1][1] - line2[1][1]);\n return p0 * p1 <= 0 && p2 * p3 <= 0;\n};\n\n/**\n * Checks whether the two given lines share at least one point and have the same slope.\n * @public\n * @param line1 A line.\n * @param line2 A line.\n * @returns `true` if the lines overlap; `false` otherwise.\n */\nexport const linesOverlap = (line1: Line, line2: Line): boolean => {\n // if both lines are a point, they overlap if they are the same point\n if (equals(line1[0], line1[1]) && equals(line2[0], line2[1])) {\n return equals(line1[0], line2[0]);\n }\n // if one line is a point, they overlap if the other line contains the point\n if (equals(line1[0], line1[1])) {\n return lineContainsPoint(line2, line1[0]);\n }\n if (equals(line2[0], line2[1])) {\n return lineContainsPoint(line1, line2[0]);\n }\n // in order for part of the lines to overlap,\n // one of the lines must include the starting point of the other and\n // one of the lines must include the ending point of the other\n return (\n (lineContainsPoint(line1, line2[0]) ||\n lineContainsPoint(line2, line1[0])) &&\n (lineContainsPoint(line1, line2[1]) || lineContainsPoint(line2, line1[1]))\n );\n};\n\n/**\n * Checks whether the given line shares at least one point with the given rectangle.\n * @public\n * @param line A line.\n * @param rectangle A rectangle.\n * @returns `true` if the line intersects with the rectangle; `false` otherwise.\n */\nexport const lineIntersectsRectangle = (\n line: Line,\n rectangle: Rectangle\n): boolean => {\n // first corner of the rectangle\n const point1: Point = rectangle[0];\n // second corner of the rectangle\n const point2: Point = [rectangle[0][0], rectangle[1][1]];\n // third corner of the rectangle\n const point3: Point = rectangle[1];\n // fourth corner of the rectangle\n const point4: Point = [rectangle[1][0], rectangle[0][1]];\n return (\n linesIntersect(line, [point1, point2]) ||\n linesIntersect(line, [point2, point3]) ||\n linesIntersect(line, [point3, point4]) ||\n linesIntersect(line, [point4, point1])\n );\n};\n","/**\n * An enumeration of possible closed shapes.\n * @public\n */\nexport enum ClosedShape {\n /**\n * An ellipse shape.\n * @public\n */\n Ellipse = 'ellipse',\n /**\n * A nonexistent shape.\n * @public\n */\n Empty = 'empty',\n /**\n * A folder-like shape.\n * @public\n */\n Folder = 'folder',\n /**\n * An hexagon shape.\n * @public\n */\n Hexagon = 'hexagon',\n /**\n * An octagon shape.\n * @public\n */\n Octagon = 'octagon',\n /**\n * A shape delimited by curves with a fixed radius, with differences in dimensions supplemented by straight lines.\n * @public\n */\n Pill = 'pill',\n /**\n * A rectangle shape.\n * @public\n */\n Rectangle = 'rectangle',\n /**\n * A rhombus shape.\n * @public\n */\n Rhombus = 'rhombus',\n /**\n * A rectangle shape with rounded corners.\n * @public\n */\n RoundedRectangle = 'rounded-rectangle',\n /**\n * A sticky note-like shape.\n * @public\n */\n StickyNote = 'sticky-note'\n}\n\n/**\n * Get the SVG path of the correspondign closed shape, starting at the given x and y coordinates, with the given width and height.\n * @private\n */\nexport const generalClosedPath = (\n shape: ClosedShape,\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n switch (shape) {\n case ClosedShape.Ellipse:\n return ellipsePath(x, y, width, height);\n case ClosedShape.Empty:\n return emptyPath();\n case ClosedShape.Folder:\n return folderPath(x, y, width, height);\n case ClosedShape.Hexagon:\n return hexagonPath(x, y, width, height);\n case ClosedShape.Octagon:\n return octagonPath(x, y, width, height);\n case ClosedShape.Pill:\n return pillPath(x, y, width, height);\n case ClosedShape.Rectangle:\n return rectanglePath(x, y, width, height);\n case ClosedShape.Rhombus:\n return rhombusPath(x, y, width, height);\n case ClosedShape.RoundedRectangle:\n return roundedRectanglePath(x, y, width, height);\n case ClosedShape.StickyNote:\n return stickyNotePath(x, y, width, height);\n default:\n return rectanglePath(x, y, width, height);\n }\n};\n\n/**\n * Generates an ellipse SVG path.\n * @see ClosedShape\n * @private\n */\nexport const ellipsePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 2} ${y} A ${width / 2} ${height / 2} 0 0 0 ${\n x + width / 2\n } ${y + height} A ${width / 2} ${height / 2} 0 1 0 ${x + width / 2} ${y} Z`;\n};\n\n/**\n * Generates an empty SVG path.\n * @see ClosedShape\n * @private\n */\nexport const emptyPath = (): string => {\n return 'Z';\n};\n\n/**\n * Generates a folder SVG path.\n * @see ClosedShape\n * @private\n */\nexport const folderPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + width / 3} ${y} L ${x + width / 2} ${\n y + height / 6\n } L ${x + width} ${y + height / 6} L ${x + width} ${y + height} L ${x} ${\n y + height\n } Z`;\n};\n\n/**\n * Generates an hexagon SVG path.\n * @see ClosedShape\n * @private\n */\nexport const hexagonPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} L ${\n x + width\n } ${y + height / 2} L ${x + (3 * width) / 4} ${y + height} L ${\n x + width / 4\n } ${y + height} L ${x} ${y + height / 2} Z`;\n};\n\n/**\n * Generates an octagon SVG path.\n * @see ClosedShape\n * @private\n */\nexport const octagonPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} L ${\n x + width\n } ${y + height / 4} L ${x + width} ${y + (3 * height) / 4} L ${\n x + (3 * width) / 4\n } ${y + height} L ${x + width / 4} ${y + height} L ${x} ${\n y + (3 * height) / 4\n } L ${x} ${y + height / 4} L ${x + width / 4} ${y} Z`;\n};\n\n/**\n * Generates a pill SVG path.\n * @see ClosedShape\n * @private\n */\nexport const pillPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n if (height < width) {\n return `M ${x + height / 2} ${y} L ${x + width - height / 2} ${y} A ${\n height / 2\n } ${height / 2} 0 0 1 ${x + width} ${y + height / 2} A ${height / 2} ${\n height / 2\n } 0 0 1 ${x + width - height / 2} ${y + height} L ${x + height / 2} ${\n y + height\n } A ${height / 2} ${height / 2} 0 0 1 ${x} ${y + height / 2} A ${\n height / 2\n } ${height / 2} 0 0 1 ${x + height / 2} ${y} Z`;\n } else if (height > width) {\n return `M ${x} ${y + width / 2} L ${x} ${y + height - width / 2} A ${\n width / 2\n } ${width / 2} 0 0 0 ${x + width / 2} ${y + height} A ${width / 2} ${\n width / 2\n } 0 0 0 ${x + width} ${y + height - width / 2} L ${x + width} ${\n y + width / 2\n } A ${width / 2} ${width / 2} 0 0 0 ${x + width / 2} ${y} A ${width / 2} ${\n width / 2\n } 0 0 0 ${x} ${y + width / 2} Z`;\n } else {\n return ellipsePath(x, y, width, height);\n }\n};\n\n/**\n * Generates a rectangle SVG path.\n * @see ClosedShape\n * @private\n */\nexport const rectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + width} ${y} L ${x + width} ${y + height} L ${x} ${\n y + height\n } Z`;\n};\n\n/**\n * Generates a rhombus SVG path.\n * @see ClosedShape\n * @private\n */\nexport const rhombusPath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 2} ${y} L ${x + width} ${y + height / 2} L ${\n x + width / 2\n } ${y + height} L ${x} ${y + height / 2} Z`;\n};\n\n/**\n * Generates a rounded rectangle SVG path.\n * @see ClosedShape\n * @private\n */\nexport const roundedRectanglePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x + width / 4} ${y} L ${x + (3 * width) / 4} ${y} A ${\n width / 4\n } ${height / 4} 0 0 1 ${x + width} ${y + height / 4} L ${x + width} ${\n y + (3 * height) / 4\n } A ${width / 4} ${height / 4} 0 0 1 ${x + (3 * width) / 4} ${y + height} L ${\n x + width / 4\n } ${y + height} A ${width / 4} ${height / 4} 0 0 1 ${x} ${\n y + (3 * height) / 4\n } L ${x} ${y + height / 4} A ${width / 4} ${height / 4} 0 0 1 ${\n x + width / 4\n } ${y} Z`;\n};\n\n/**\n * Generates a sticky note SVG path.\n * @see ClosedShape\n * @private\n */\nexport const stickyNotePath = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n return `M ${x} ${y} L ${x + (3 * width) / 4} ${y} L ${x + (3 * width) / 4} ${\n y + height / 4\n } L ${x + (3 * width) / 4} ${y} L ${x + width} ${y + height / 4} L ${\n x + (3 * width) / 4\n } ${y + height / 4} L ${x + width} ${y + height / 4} L ${x + width} ${\n y + height\n } L ${x} ${y + height} Z`;\n};\n","import { Point, translatePoint } from '../../util/canvas-util';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { ClosedShape } from '../../util/shape';\r\nimport { Side } from '../../util/svg-util';\r\nimport { NodeShapedLook, SectionConfig } from './diagram-config';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport { DiagramDecorator } from './diagram-decorator';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramElementSet\r\n} from './diagram-element';\r\nimport {\r\n DIAGRAM_FIELD_DEFAULTS,\r\n DiagramField,\r\n getBottomMargin,\r\n getLeftMargin,\r\n getRightMargin,\r\n getTopMargin\r\n} from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramPort } from './diagram-port';\r\n\r\n/**\r\n * Default values of the look of a diagram section.\r\n * @see DIAGRAM_SECTION_DEFAULTS\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_LOOK_DEFAULTS: NodeShapedLook = {\r\n lookType: 'shaped-look',\r\n shape: ClosedShape.Rectangle,\r\n fillColor: '#FFFFFF',\r\n borderColor: '#000000',\r\n selectedFillColor: '#FFFFFF',\r\n selectedBorderColor: '#000000'\r\n};\r\n\r\n/**\r\n * Default values of the parameters of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULTS = {\r\n label: null,\r\n ports: [],\r\n look: DIAGRAM_SECTION_LOOK_DEFAULTS,\r\n priority: DEFAULT_PRIORITY\r\n};\r\n\r\n/**\r\n * Default value of the default width of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULT_WIDTH = 1;\r\n/**\r\n * Default value of the default height of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_DEFAULT_HEIGHT = 1;\r\n/**\r\n * Default value of the minimum width of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_MIN_WIDTH = 1;\r\n/**\r\n * Default value of the minimum height of a diagram section.\r\n * @see DiagramSection\r\n * @private\r\n */\r\nexport const DIAGRAM_SECTION_MIN_HEIGHT = 1;\r\n\r\nexport type DiagramSectionGeometry = {\r\n readonly coords: Point;\r\n readonly width: number;\r\n readonly height: number;\r\n};\r\n\r\n/**\r\n * A section of a node which can have connections and display a property of the node.\r\n * @see DiagramConnection\r\n * @see DiagramNode\r\n * @see DiagramPort\r\n * @public\r\n */\r\nexport class DiagramSection extends DiagramElement {\r\n /**\r\n * Node that this section belongs to.\r\n * @public\r\n */\r\n node?: DiagramNode;\r\n /**\r\n * X index of this section in the parent node's section array.\r\n */\r\n indexXInNode: number;\r\n /**\r\n * Y index of this section in the parent node's section array.\r\n */\r\n indexYInNode: number;\r\n /**\r\n * Label of this section.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Ports of this section.\r\n * @public\r\n */\r\n ports: DiagramPort[] = [];\r\n /**\r\n * Decorators of this section.\r\n * @public\r\n */\r\n decorators: DiagramDecorator[] = [];\r\n /**\r\n * Coordinates of the top left corner of this section.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this section along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this section along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n\r\n /**\r\n * Name of this section. Alias for this section's label's text.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.label?.text || '';\r\n }\r\n set name(name: string) {\r\n if (this.label) {\r\n this.label.text = name;\r\n }\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n node: DiagramNode | undefined,\r\n indexXInNode: number,\r\n indexYInNode: number,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n id: string\r\n ) {\r\n if (model.sections.get(id) !== undefined) {\r\n throw new Error(`DiagramSection with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.node = node;\r\n this.indexXInNode = indexXInNode;\r\n this.indexYInNode = indexYInNode;\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n }\r\n\r\n get removed() {\r\n return this.selfRemoved || (this.node !== undefined && this.node.removed);\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateSectionsInView(this.id);\r\n }\r\n\r\n getConfig(): SectionConfig | undefined {\r\n return this.node?.type?.sectionGrid?.sections?.[this.indexYInNode]?.[\r\n this.indexXInNode\r\n ];\r\n }\r\n\r\n getMinWidth(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.minWidths?.[this.indexXInNode] ||\r\n DIAGRAM_SECTION_MIN_WIDTH\r\n );\r\n }\r\n\r\n getMinHeight(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.minHeights?.[this.indexYInNode] ||\r\n DIAGRAM_SECTION_MIN_HEIGHT\r\n );\r\n }\r\n\r\n getPriority(): number {\r\n return (\r\n this.node?.type?.sectionGrid?.sections?.[this.indexYInNode]?.[\r\n this.indexXInNode\r\n ]?.priority || DIAGRAM_SECTION_DEFAULTS.priority\r\n );\r\n }\r\n\r\n /**\r\n * Get the port of this section which is closest to the given coordinates.\r\n * @param coords A point in the diagram.\r\n * @returns The port of this section closest to the given coordinates, `undefined` if this section has no ports.\r\n */\r\n getClosestPortToPoint(coords: Point): DiagramPort | undefined {\r\n if (this.ports.length === 0) {\r\n return undefined;\r\n } else if (this.ports.length === 1) {\r\n return this.ports[1];\r\n } else {\r\n const distanceToPorts = this.ports.map((p) => p.distanceTo(coords));\r\n const indexOfClosestPort = distanceToPorts.indexOf(\r\n Math.min(...distanceToPorts)\r\n );\r\n const closestPort = this.ports[indexOfClosestPort];\r\n return closestPort;\r\n }\r\n }\r\n\r\n /**\r\n * Get all incoming connections of all ports of this section.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getIncomingConnections(includeRemoved = false): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n if (!includeRemoved && incomingConnection.removed) {\r\n continue;\r\n }\r\n result.push(incomingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all outgoing connections of all ports of this section.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getOutgoingConnections(includeRemoved = false): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n if (!includeRemoved && outgoingConnection.removed) {\r\n continue;\r\n }\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all connections of all ports of this section.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getConnections(includeRemoved = false): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n if (!includeRemoved && incomingConnection.removed) {\r\n continue;\r\n }\r\n result.push(incomingConnection);\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n if (!includeRemoved && outgoingConnection.removed) {\r\n continue;\r\n }\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Change the coordinates of this section to the given coordinates and move its ports and labels correspondingly.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n this.setGeometry({\r\n coords,\r\n width: this.width,\r\n height: this.height\r\n });\r\n }\r\n\r\n /**\r\n * Change the dimensions of this section in the given direction by the given amount.\r\n * @public\r\n * @param direction A direction.\r\n * @param distance A distance.\r\n */\r\n stretch(direction: Side, distance: number): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n let newCoordsX: Point;\r\n let newCoordsY: Point;\r\n switch (direction) {\r\n case Side.Left:\r\n newCoordsX = [oldCoordsX[0] - distance, oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.getMinWidth()) {\r\n newCoordsX[0] = newCoordsX[1] - this.getMinWidth();\r\n }\r\n break;\r\n case Side.Top:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0] - distance, oldCoordsY[1]];\r\n if (newCoordsY[1] - newCoordsY[0] < this.getMinHeight()) {\r\n newCoordsY[0] = newCoordsY[1] - this.getMinHeight();\r\n }\r\n break;\r\n case Side.Right:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1] + distance];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.getMinWidth()) {\r\n newCoordsX[1] = newCoordsX[0] + this.getMinWidth();\r\n }\r\n break;\r\n case Side.Bottom:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1] + distance];\r\n if (newCoordsY[1] - newCoordsY[0] < this.getMinHeight()) {\r\n newCoordsY[1] = newCoordsY[0] + this.getMinHeight();\r\n }\r\n break;\r\n }\r\n\r\n this.setGeometry({\r\n coords: [newCoordsX[0], newCoordsY[0]],\r\n width: newCoordsX[1] - newCoordsX[0],\r\n height: newCoordsY[1] - newCoordsY[0]\r\n });\r\n }\r\n\r\n /**\r\n * Returns the current values of all geometric properties (coordinates and dimensions) of this section.\r\n * @public\r\n */\r\n getGeometry(): DiagramSectionGeometry {\r\n return {\r\n coords: [...this.coords],\r\n width: this.width,\r\n height: this.height\r\n };\r\n }\r\n\r\n /**\r\n * Sets all geometric properties (coordinates and dimensions) of this section.\r\n * @public\r\n */\r\n setGeometry(geometry: DiagramSectionGeometry): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n\r\n this.coords = [...geometry.coords];\r\n this.width = geometry.width;\r\n this.height = geometry.height;\r\n\r\n const newCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const newCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n\r\n // Move ports to match the new coords.\r\n for (const port of this.ports) {\r\n port.move(\r\n translatePoint(\r\n port.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n\r\n // Set label's dimensions as a function of ours.\r\n if (this.label) {\r\n this.label.coords = [\r\n this.coords[0] + getLeftMargin(this.getConfig()?.label),\r\n this.coords[1] + getTopMargin(this.getConfig()?.label)\r\n ];\r\n this.label.width =\r\n this.width -\r\n getLeftMargin(this.getConfig()?.label) -\r\n getRightMargin(this.getConfig()?.label);\r\n this.label.height =\r\n this.height -\r\n getTopMargin(this.getConfig()?.label) -\r\n getBottomMargin(this.getConfig()?.label);\r\n this.label.updateInView();\r\n }\r\n\r\n // Move decorators to match the new coords.\r\n for (const decorator of this.decorators) {\r\n decorator.move(\r\n translatePoint(\r\n decorator.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n\r\n // Update canvas.\r\n this.getConnections().forEach((c) => c.tighten());\r\n this.updateInView();\r\n }\r\n}\r\n\r\nexport class DiagramSectionSet extends DiagramElementSet<DiagramSection> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of sections for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new section and add it to this set. This method is normally called when instancing an element with a section and it is rarely called by itself.\r\n * @private\r\n */\r\n new(\r\n node: DiagramNode,\r\n indexXInNode: number,\r\n indexYInNode: number,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n id: string\r\n ): DiagramSection {\r\n const section = new DiagramSection(\r\n this.model,\r\n node,\r\n indexXInNode,\r\n indexYInNode,\r\n coords,\r\n width,\r\n height,\r\n id\r\n );\r\n super.add(section);\r\n section.updateInView();\r\n // add this section to its node\r\n node.sections.push(section);\r\n node.updateInView();\r\n // add section ports\r\n const sectionPorts =\r\n node.type.sectionGrid?.sections?.[indexYInNode]?.[indexXInNode]?.ports;\r\n if (sectionPorts && sectionPorts.length > 0) {\r\n for (let i = 0; i < sectionPorts.length; ++i) {\r\n const portConfig = sectionPorts[i];\r\n const port = this.model.ports.new(\r\n section,\r\n [\r\n section.coords[0] + (portConfig?.coords?.[0] || 0),\r\n section.coords[1] + (portConfig?.coords?.[1] || 0)\r\n ],\r\n portConfig?.direction,\r\n `${section.id}_${i}`\r\n );\r\n if (portConfig.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...portConfig.label\r\n };\r\n let labelCoords: Point;\r\n switch (port.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n port.coords[0] + labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = port.coords;\r\n }\r\n this.model.fields.new(\r\n port,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n }\r\n }\r\n }\r\n // add section label\r\n const sectionLabel =\r\n node.type.sectionGrid?.sections?.[indexYInNode]?.[indexXInNode]?.label;\r\n if (sectionLabel) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...sectionLabel\r\n };\r\n this.model.fields.new(\r\n section,\r\n [\r\n section.coords[0] + getLeftMargin(labelConfiguration),\r\n section.coords[1] + getTopMargin(labelConfiguration)\r\n ],\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n section.width -\r\n getLeftMargin(labelConfiguration) -\r\n getRightMargin(labelConfiguration),\r\n section.height -\r\n getTopMargin(labelConfiguration) -\r\n getBottomMargin(labelConfiguration),\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n }\r\n return section;\r\n }\r\n\r\n override remove(id: string) {\r\n const section = this.get(id);\r\n if (section) {\r\n // remove all ports\r\n while (section.ports.length > 0) {\r\n this.model.ports.remove(section.ports[0].id);\r\n }\r\n // remove label\r\n if (section.label) {\r\n this.model.fields.remove(section.label.id);\r\n }\r\n // remove from root element\r\n if (section.node) {\r\n removeIfExists(section.node.sections, section);\r\n }\r\n // remove from set of sections\r\n super.remove(id);\r\n // remove from canvas\r\n section.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point, translatePoint } from '../../util/canvas-util';\r\nimport { ClosedShape } from '../../util/shape';\r\nimport { Side } from '../../util/svg-util';\r\nimport { CollabTimestamp } from './collab/primitives';\r\nimport {\r\n FieldConfig,\r\n NodeImageLook,\r\n NodeShapedLook,\r\n NodeStretchableImageLook,\r\n NodeTypeConfig,\r\n PortConfig,\r\n SectionGridConfig\r\n} from './diagram-config';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport { DiagramDecorator } from './diagram-decorator';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramElementSet\r\n} from './diagram-element';\r\nimport { DiagramEntity, DiagramEntitySet } from './diagram-entity';\r\nimport {\r\n DIAGRAM_FIELD_DEFAULTS,\r\n DiagramField,\r\n getBottomMargin,\r\n getLeftMargin,\r\n getRightMargin,\r\n getTopMargin\r\n} from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { PropertySet, ValueSet } from './diagram-property';\r\nimport {\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT,\r\n DIAGRAM_SECTION_DEFAULT_WIDTH,\r\n DiagramSection,\r\n DiagramSectionGeometry\r\n} from './diagram-section';\r\n\r\n/**\r\n * Default values of the look of a diagram node.\r\n * @see DIAGRAM_NODE_TYPE_DEFAULTS\r\n * @private\r\n */\r\nexport const DIAGRAM_NODE_LOOK_DEFAULTS: NodeShapedLook = {\r\n lookType: 'shaped-look',\r\n shape: ClosedShape.Rectangle,\r\n fillColor: '#FFFFFF',\r\n borderColor: '#000000',\r\n selectedFillColor: '#FFFFFF',\r\n selectedBorderColor: '#000000'\r\n};\r\n\r\n/**\r\n * Default values of the parameters of a diagram node.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport const DIAGRAM_NODE_TYPE_DEFAULTS = {\r\n name: '',\r\n defaultWidth: 1,\r\n defaultHeight: 1,\r\n minWidth: 1,\r\n minHeight: 1,\r\n resizableX: false,\r\n resizableY: false,\r\n label: null,\r\n ports: [],\r\n sectionGrid: null,\r\n look: DIAGRAM_NODE_LOOK_DEFAULTS,\r\n isUnique: false,\r\n priority: DEFAULT_PRIORITY,\r\n properties: []\r\n};\r\n\r\nexport type DiagramNodeGeometry = {\r\n readonly coords: Point;\r\n readonly width: number;\r\n readonly height: number;\r\n readonly sections: {\r\n [sectionId: string]: DiagramSectionGeometry;\r\n };\r\n};\r\n\r\n/**\r\n * A node type, which holds properties that nodes of this type share in common.\r\n * @see NodeTypeConfig\r\n * @public\r\n */\r\nexport class DiagramNodeType implements DiagramEntity {\r\n id: string;\r\n name: string;\r\n defaultWidth: number;\r\n defaultHeight: number;\r\n minWidth: number;\r\n minHeight: number;\r\n resizableX: boolean;\r\n resizableY: boolean;\r\n label: FieldConfig | null;\r\n ports: PortConfig[];\r\n sectionGrid: SectionGridConfig | null;\r\n look: NodeShapedLook | NodeImageLook | NodeStretchableImageLook;\r\n isUnique: boolean;\r\n priority: number;\r\n propertySet: PropertySet;\r\n\r\n constructor(options: NodeTypeConfig) {\r\n const values = {\r\n ...DIAGRAM_NODE_TYPE_DEFAULTS,\r\n ...options\r\n };\r\n this.id = values.id;\r\n this.name = values.name;\r\n this.defaultWidth = values.defaultWidth;\r\n this.defaultHeight = values.defaultHeight;\r\n this.minWidth = values.minWidth;\r\n this.minHeight = values.minHeight;\r\n this.resizableX = values.resizableX;\r\n this.resizableY = values.resizableY;\r\n this.label = values.label;\r\n this.ports = values.ports;\r\n this.sectionGrid = values.sectionGrid;\r\n this.look = values.look;\r\n this.isUnique = values.isUnique;\r\n this.priority = values.priority;\r\n this.propertySet = new PropertySet(options?.properties || []);\r\n }\r\n}\r\n\r\n/**\r\n * A node, the most basic element of a diagram, which can have connections to other nodes through its ports or be divided into sections.\r\n * @see DiagramConnection\r\n * @see DiagramPort\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramNode extends DiagramElement {\r\n type: DiagramNodeType;\r\n /**\r\n * Additional properties of this node.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n /**\r\n * Variable used to preserve the original data of a node when importing from a different format.\r\n * @public\r\n */\r\n originalData: unknown;\r\n /**\r\n * Label of this node.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Sections of this node.\r\n * @public\r\n */\r\n sections: DiagramSection[] = [];\r\n /**\r\n * Ports of this node.\r\n * @public\r\n */\r\n ports: DiagramPort[] = [];\r\n /**\r\n * Decorators of this node.\r\n * @public\r\n */\r\n decorators: DiagramDecorator[] = [];\r\n /**\r\n * Coordinates of the top left corner of this node.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Collaborative timestamp for SetGeometryCollabActions.\r\n * @public\r\n */\r\n geometryTimestamp: CollabTimestamp | null = null;\r\n /**\r\n * Dimension of this node along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this node along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n\r\n /**\r\n * Name of this node. Alias for this node's label's text.\r\n * @public\r\n */\r\n get name(): string {\r\n return this.label?.text || '';\r\n }\r\n set name(name: string) {\r\n if (this.label) {\r\n this.label.text = name;\r\n }\r\n }\r\n\r\n constructor(\r\n model: DiagramModel,\r\n type: DiagramNodeType,\r\n coords: Point = [0, 0],\r\n id: string\r\n ) {\r\n if (model.nodes.get(id) !== undefined) {\r\n throw new Error(`DiagramNode with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.type = type;\r\n this.valueSet = new ValueSet(type.propertySet, this);\r\n this.originalData = {};\r\n this.coords = coords;\r\n this.width = type.defaultWidth;\r\n this.height = type.defaultHeight;\r\n }\r\n\r\n get removed() {\r\n return this.selfRemoved;\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateNodesInView(this.id);\r\n }\r\n\r\n getPriority(): number {\r\n return this.type.priority;\r\n }\r\n\r\n /**\r\n * Get the port of this node which is closest to the given coordinates.\r\n * @param coords A point in the diagram.\r\n * @returns The port of this node closest to the given coordinates, `undefined` if this node has no ports.\r\n */\r\n getClosestPortToPoint(coords: Point): DiagramPort | undefined {\r\n if (this.ports.length === 0) {\r\n return undefined;\r\n } else if (this.ports.length === 1) {\r\n return this.ports[1];\r\n } else {\r\n const distanceToPorts = this.ports.map((p) => p.distanceTo(coords));\r\n const indexOfClosestPort = distanceToPorts.indexOf(\r\n Math.min(...distanceToPorts)\r\n );\r\n const closestPort = this.ports[indexOfClosestPort];\r\n return closestPort;\r\n }\r\n }\r\n\r\n /**\r\n * Get all incoming connections of all ports of this node, not including incoming connections of sections of this node.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getIncomingConnections(includeRemoved = false): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n if (!includeRemoved && incomingConnection.removed) {\r\n continue;\r\n }\r\n result.push(incomingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all outgoing connections of all ports of this node, not including outgoing connections of sections of this node.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getOutgoingConnections(includeRemoved = false): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n if (!includeRemoved && outgoingConnection.removed) {\r\n continue;\r\n }\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all connections of all ports of this node, not including connections of sections of this node.\r\n * @public\r\n * @returns A list of connections.\r\n */\r\n getConnections(includeRemoved = false): DiagramConnection[] {\r\n const result: DiagramConnection[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n if (!includeRemoved && incomingConnection.removed) {\r\n continue;\r\n }\r\n result.push(incomingConnection);\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n if (!includeRemoved && outgoingConnection.removed) {\r\n continue;\r\n }\r\n result.push(outgoingConnection);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get all nodes that have a direct connection to this node, not including nodes that have a direct connection to sections of this node.\r\n * @public\r\n * @returns A list of nodes.\r\n */\r\n getAdjacentNodes(includeRemoved = false): DiagramNode[] {\r\n const result: DiagramNode[] = [];\r\n for (const port of this.ports) {\r\n for (const incomingConnection of port.incomingConnections) {\r\n if (!includeRemoved && incomingConnection.removed) {\r\n continue;\r\n }\r\n const otherNode = incomingConnection.start?.getNode();\r\n if (otherNode) {\r\n if (!includeRemoved && otherNode.removed) {\r\n continue;\r\n }\r\n result.push(otherNode);\r\n }\r\n }\r\n for (const outgoingConnection of port.outgoingConnections) {\r\n if (!includeRemoved && outgoingConnection.removed) {\r\n continue;\r\n }\r\n const otherNode = outgoingConnection.end?.getNode();\r\n if (otherNode) {\r\n if (!includeRemoved && otherNode.removed) {\r\n continue;\r\n }\r\n result.push(otherNode);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Change the coordinates of this node to the given coordinates and move its sections, ports and labels correspondingly.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n const coordDifferences = [\r\n coords[0] - this.coords[0],\r\n coords[1] - this.coords[1]\r\n ];\r\n for (const section of this.sections) {\r\n section.move([\r\n section.coords[0] + coordDifferences[0],\r\n section.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n\r\n this.setGeometry({\r\n coords,\r\n width: this.width,\r\n height: this.height,\r\n // We already moved the sections above - skip changing them in setDimensions.\r\n sections: {}\r\n });\r\n }\r\n\r\n /**\r\n * Change the dimensions of this node in the given direction by the given amount without changing the dimensions of the sections of this node.\r\n * @public\r\n * @param direction A direction.\r\n * @param distance A distance.\r\n */\r\n stretch(direction: Side, distance: number): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n let newCoordsX: Point;\r\n let newCoordsY: Point;\r\n switch (direction) {\r\n case Side.Left:\r\n newCoordsX = [oldCoordsX[0] - distance, oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.type.minWidth) {\r\n newCoordsX[0] = newCoordsX[1] - this.type.minWidth;\r\n }\r\n break;\r\n case Side.Top:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0] - distance, oldCoordsY[1]];\r\n if (newCoordsY[1] - newCoordsY[0] < this.type.minHeight) {\r\n newCoordsY[0] = newCoordsY[1] - this.type.minHeight;\r\n }\r\n break;\r\n case Side.Right:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1] + distance];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1]];\r\n if (newCoordsX[1] - newCoordsX[0] < this.type.minWidth) {\r\n newCoordsX[1] = newCoordsX[0] + this.type.minWidth;\r\n }\r\n break;\r\n case Side.Bottom:\r\n newCoordsX = [oldCoordsX[0], oldCoordsX[1]];\r\n newCoordsY = [oldCoordsY[0], oldCoordsY[1] + distance];\r\n if (newCoordsY[1] - newCoordsY[0] < this.type.minHeight) {\r\n newCoordsY[1] = newCoordsY[0] + this.type.minHeight;\r\n }\r\n break;\r\n }\r\n\r\n this.setGeometry({\r\n coords: [newCoordsX[0], newCoordsY[0]],\r\n width: newCoordsX[1] - newCoordsX[0],\r\n height: newCoordsY[1] - newCoordsY[0],\r\n // we ignore this.sections, the stretching of a node with sections is handled in the stretchSections method\r\n sections: {}\r\n });\r\n }\r\n\r\n /**\r\n * Change the dimensions of this node and its sections in the given direction by the given amount, with the sections of the given index being stretched.\r\n * @public\r\n * @param direction A direction.\r\n * @param distance A distance.\r\n * @param indexX A section index.\r\n * @param indexY A section index.\r\n */\r\n stretchSections(\r\n direction: Side,\r\n distance: number,\r\n indexX: number,\r\n indexY: number\r\n ) {\r\n let minimumStretchableDistance = Number.NEGATIVE_INFINITY;\r\n switch (direction) {\r\n case Side.Bottom:\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinHeight() - section.height\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexYInNode > indexY) {\r\n section.move([section.coords[0], section.coords[1] + distance]);\r\n }\r\n }\r\n break;\r\n case Side.Right:\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinWidth() - section.width\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexXInNode > indexX) {\r\n section.move([section.coords[0] + distance, section.coords[1]]);\r\n }\r\n }\r\n break;\r\n case Side.Top:\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinHeight() - section.height\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexYInNode === indexY) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexYInNode < indexY) {\r\n section.move([section.coords[0], section.coords[1] - distance]);\r\n }\r\n }\r\n break;\r\n case Side.Left:\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n minimumStretchableDistance = Math.max(\r\n minimumStretchableDistance,\r\n section.getMinWidth() - section.width\r\n );\r\n }\r\n }\r\n if (distance < minimumStretchableDistance) {\r\n distance = minimumStretchableDistance;\r\n }\r\n for (const section of this.sections) {\r\n if (section.indexXInNode === indexX) {\r\n section.stretch(direction, distance);\r\n } else if (section.indexXInNode < indexX) {\r\n section.move([section.coords[0] - distance, section.coords[1]]);\r\n }\r\n }\r\n break;\r\n }\r\n this.stretch(direction, distance);\r\n }\r\n\r\n /**\r\n * Returns the current values of all geometric properties (coordinates and dimensions) of this node and its sections.\r\n * @public\r\n */\r\n getGeometry(): DiagramNodeGeometry {\r\n const sections: { [sectionId: string]: DiagramSectionGeometry } = {};\r\n for (const section of this.sections) {\r\n sections[section.id] = section.getGeometry();\r\n }\r\n return {\r\n coords: [...this.coords],\r\n width: this.width,\r\n height: this.height,\r\n sections\r\n };\r\n }\r\n\r\n /**\r\n * Sets all geometric properties (coordinates and dimensions) of this node and its sections.\r\n * @public\r\n */\r\n setGeometry(geometry: DiagramNodeGeometry): void {\r\n const oldCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const oldCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n\r\n this.coords = [...geometry.coords];\r\n this.width = geometry.width;\r\n this.height = geometry.height;\r\n\r\n const newCoordsX: Point = [this.coords[0], this.coords[0] + this.width];\r\n const newCoordsY: Point = [this.coords[1], this.coords[1] + this.height];\r\n\r\n // Update sections, if supplied.\r\n for (const section of this.sections) {\r\n const sectionGeometry = geometry.sections[section.id];\r\n if (sectionGeometry) {\r\n section.setGeometry(sectionGeometry);\r\n }\r\n }\r\n\r\n // Move ports to match the new coords.\r\n for (const port of this.ports) {\r\n port.move(\r\n translatePoint(\r\n port.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n\r\n // Set label's dimensions as a function of ours.\r\n if (this.label) {\r\n this.label.coords = [\r\n this.coords[0] + getLeftMargin(this.type.label),\r\n this.coords[1] + getTopMargin(this.type.label)\r\n ];\r\n this.label.width =\r\n this.width -\r\n getLeftMargin(this.type.label) -\r\n getRightMargin(this.type.label);\r\n this.label.height =\r\n this.height -\r\n getTopMargin(this.type.label) -\r\n getBottomMargin(this.type.label);\r\n this.label.updateInView();\r\n }\r\n\r\n // Move decorators to match the new coords.\r\n for (const decorator of this.decorators) {\r\n decorator.move(\r\n translatePoint(\r\n decorator.coords,\r\n oldCoordsX,\r\n oldCoordsY,\r\n newCoordsX,\r\n newCoordsY\r\n )\r\n );\r\n }\r\n\r\n // Update canvas.\r\n this.getConnections().forEach((c) => c.tighten());\r\n this.updateInView();\r\n }\r\n}\r\n\r\nexport class DiagramNodeSet extends DiagramElementSet<DiagramNode> {\r\n private model: DiagramModel;\r\n /**\r\n * Set of the possible types of node that the nodes of this set can have.\r\n * @public\r\n */\r\n types = new DiagramEntitySet<DiagramNodeType>();\r\n\r\n /**\r\n * Instance a set of nodes for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new node and add it to this set.\r\n * @public\r\n * @param type The type of the node given as either the type itself or the id of the type.\r\n * @param coords The coordinates of the top left corner of the node in the diagram.\r\n * @param id The id of the node.\r\n * @returns The instanced node.\r\n */\r\n new(type: DiagramNodeType | string, coords: Point, id: string): DiagramNode {\r\n let nodeType: DiagramNodeType;\r\n if (type instanceof DiagramNodeType) {\r\n nodeType = type;\r\n } else {\r\n const foundNodeType = this.types.get(type);\r\n if (foundNodeType === undefined) {\r\n throw new TypeError(`Node type with id '${type}' could not be found.`);\r\n }\r\n nodeType = foundNodeType;\r\n }\r\n\r\n const node = new DiagramNode(this.model, nodeType, coords, id);\r\n super.add(node);\r\n node.updateInView();\r\n // add node sections\r\n if (nodeType.sectionGrid !== null) {\r\n // create sections\r\n let heightAccumulator =\r\n node.coords[1] + (nodeType.sectionGrid.margin || 0);\r\n for (let j = 0; j < nodeType.sectionGrid.sections.length; ++j) {\r\n let widthAccumulator =\r\n node.coords[0] + (nodeType.sectionGrid.margin || 0);\r\n for (let i = 0; i < nodeType.sectionGrid.sections[j].length; ++i) {\r\n this.model.sections.new(\r\n node,\r\n i,\r\n j,\r\n [widthAccumulator, heightAccumulator],\r\n nodeType.sectionGrid.defaultWidths?.[i] ||\r\n DIAGRAM_SECTION_DEFAULT_WIDTH,\r\n nodeType.sectionGrid.defaultHeights?.[j] ||\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT,\r\n `${node.id}_${j}_${i}`\r\n );\r\n widthAccumulator +=\r\n (nodeType.sectionGrid.defaultWidths?.[i] ||\r\n DIAGRAM_SECTION_DEFAULT_WIDTH) +\r\n (nodeType.sectionGrid.margin || 0);\r\n }\r\n heightAccumulator +=\r\n (nodeType.sectionGrid.defaultHeights?.[j] ||\r\n DIAGRAM_SECTION_DEFAULT_HEIGHT) +\r\n (nodeType.sectionGrid.margin || 0);\r\n }\r\n }\r\n // add node ports\r\n if (nodeType.ports.length > 0) {\r\n for (let i = 0; i < nodeType.ports.length; ++i) {\r\n const portConfig = nodeType.ports[i];\r\n const port = this.model.ports.new(\r\n node,\r\n [\r\n node.coords[0] + portConfig.coords[0],\r\n node.coords[1] + portConfig.coords[1]\r\n ],\r\n portConfig.direction,\r\n `${node.id}_${i}`\r\n );\r\n if (portConfig.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...portConfig.label\r\n };\r\n let labelCoords: Point;\r\n switch (port.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n port.coords[0] - labelConfiguration.fontSize,\r\n port.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n port.coords[0] + labelConfiguration.fontSize,\r\n port.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = port.coords;\r\n }\r\n this.model.fields.new(\r\n port,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n }\r\n }\r\n }\r\n // add node label\r\n if (nodeType.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...nodeType.label\r\n };\r\n this.model.fields.new(\r\n node,\r\n [\r\n node.coords[0] + getLeftMargin(labelConfiguration),\r\n node.coords[1] + getTopMargin(labelConfiguration)\r\n ],\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n node.width -\r\n getLeftMargin(labelConfiguration) -\r\n getRightMargin(labelConfiguration),\r\n node.height -\r\n getTopMargin(labelConfiguration) -\r\n getBottomMargin(labelConfiguration),\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n }\r\n node.valueSet.resetValues();\r\n node.model.canvas?.fitNodeInView(node.id);\r\n return node;\r\n }\r\n\r\n override remove(id: string) {\r\n const node = this.get(id);\r\n if (node) {\r\n // remove all sections\r\n while (node.sections.length > 0) {\r\n this.model.sections.remove(node.sections[0].id);\r\n }\r\n // remove all ports\r\n while (node.ports.length > 0) {\r\n this.model.ports.remove(node.ports[0].id);\r\n }\r\n // remove all decorators\r\n while (node.decorators.length > 0) {\r\n this.model.decorators.remove(node.decorators[0].id);\r\n }\r\n // remove label\r\n if (node.label) {\r\n this.model.fields.remove(node.label.id);\r\n }\r\n // remove from set of nodes\r\n super.remove(id);\r\n // remove from canvas\r\n node.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point, distanceBetweenPoints } from '../../util/canvas-util';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { Side } from '../../util/svg-util';\r\nimport { DiagramConnection } from './diagram-connection';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramElementSet\r\n} from './diagram-element';\r\nimport { DiagramField } from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * Default values of the parameters of a diagram port.\r\n * @see DiagramPort\r\n * @private\r\n */\r\nexport const DIAGRAM_PORT_DEFAULTS = {\r\n radius: 12,\r\n highlightedColor: 'cyan',\r\n selectedColor: 'violet'\r\n};\r\n\r\n/**\r\n * A port which is part of a node or section and at which connections can start or end.\r\n * @see DiagramConnection\r\n * @see DiagramNode\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramPort extends DiagramElement {\r\n /**\r\n * Element that this port belongs to.\r\n * @public\r\n */\r\n rootElement?: DiagramNode | DiagramSection;\r\n /**\r\n * Label of this port.\r\n * @public\r\n */\r\n label?: DiagramField;\r\n /**\r\n * Direction of the connections of this port at the coordinates of this port.\r\n * @public\r\n */\r\n direction: Side;\r\n /**\r\n * Coordinates of this port.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Connections that start at this port.\r\n * @public\r\n */\r\n outgoingConnections: DiagramConnection[] = [];\r\n /**\r\n * Connections that end at this port.\r\n * @public\r\n */\r\n incomingConnections: DiagramConnection[] = [];\r\n\r\n constructor(\r\n model: DiagramModel,\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n direction: Side,\r\n id: string\r\n ) {\r\n if (model.ports.get(id) !== undefined) {\r\n throw new Error(`DiagramPort with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.rootElement = rootElement;\r\n this.coords = coords;\r\n this.direction = direction;\r\n }\r\n\r\n get removed() {\r\n return (\r\n this.selfRemoved ||\r\n (this.rootElement !== undefined && this.rootElement.removed)\r\n );\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updatePortsInView(this.id);\r\n }\r\n\r\n /**\r\n * Add a connection to this port's list of outgoing connections.\r\n * @public\r\n * @param connection A connection.\r\n */\r\n startConnection(connection: DiagramConnection) {\r\n this.outgoingConnections.push(connection);\r\n }\r\n\r\n /**\r\n * Add a connection to this port's list of incoming connections.\r\n * @public\r\n * @param connection A connection.\r\n */\r\n finishConnection(connection: DiagramConnection) {\r\n this.incomingConnections.push(connection);\r\n }\r\n\r\n /**\r\n * Get the root node of this port, which is either its rootElement if it's a node or it's rootElement's node if it's a section.\r\n * @public\r\n * @returns A node if it could be found, `undefined` otherwise.\r\n */\r\n getNode(): DiagramNode | undefined {\r\n if (this.rootElement instanceof DiagramNode) {\r\n return this.rootElement;\r\n } else if (this.rootElement instanceof DiagramSection) {\r\n return this.rootElement.node;\r\n }\r\n return undefined;\r\n }\r\n\r\n getPriority(): number {\r\n return this.rootElement?.getPriority() || DEFAULT_PRIORITY;\r\n }\r\n\r\n /**\r\n * Change the coordinates of this port to the given coordinates and move its labels correspondingly.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n const coordDifferences = [\r\n coords[0] - this.coords[0],\r\n coords[1] - this.coords[1]\r\n ];\r\n this.coords = coords;\r\n for (const connection of this.outgoingConnections) {\r\n connection.setStart(this);\r\n }\r\n for (const connection of this.incomingConnections) {\r\n connection.setEnd(this);\r\n }\r\n if (this.label) {\r\n this.label.move([\r\n this.label.coords[0] + coordDifferences[0],\r\n this.label.coords[1] + coordDifferences[1]\r\n ]);\r\n }\r\n this.updateInView();\r\n }\r\n\r\n distanceTo(coords: Point): number {\r\n return distanceBetweenPoints(this.coords, coords);\r\n }\r\n}\r\n\r\nexport class DiagramPortSet extends DiagramElementSet<DiagramPort> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of ports for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new port and add it to this set. This method is normally called when instancing an element with a port and it is rarely called by itself.\r\n * @private\r\n */\r\n new(\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n direction: Side,\r\n id: string\r\n ): DiagramPort {\r\n const port = new DiagramPort(\r\n this.model,\r\n rootElement,\r\n coords,\r\n direction,\r\n id\r\n );\r\n super.add(port);\r\n port.updateInView();\r\n // add this port to its root element\r\n if (rootElement !== undefined) {\r\n rootElement.ports.push(port);\r\n }\r\n return port;\r\n }\r\n\r\n override remove(id: string) {\r\n const port = this.get(id);\r\n if (port) {\r\n // remove all connections\r\n while (port.outgoingConnections.length > 0) {\r\n this.model.connections.remove(port.outgoingConnections[0].id);\r\n }\r\n while (port.incomingConnections.length > 0) {\r\n this.model.connections.remove(port.incomingConnections[0].id);\r\n }\r\n // remove label\r\n if (port.label) {\r\n this.model.fields.remove(port.label.id);\r\n }\r\n // remove from root element\r\n if (\r\n port.rootElement instanceof DiagramNode ||\r\n port.rootElement instanceof DiagramSection\r\n ) {\r\n removeIfExists(port.rootElement.ports, port);\r\n }\r\n // remove from set of ports\r\n super.remove(id);\r\n // remove from canvas\r\n port.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { HorizontalAlign, VerticalAlign } from '../../util/svg-util';\r\nimport { CollabTimestamp } from './collab/primitives';\r\nimport { FieldConfig } from './diagram-config';\r\nimport {\r\n DEFAULT_PRIORITY,\r\n DiagramElement,\r\n DiagramElementSet\r\n} from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramPort } from './diagram-port';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * Default values of the parameters of a diagram field.\r\n * @see DiagramField\r\n * @private\r\n */\r\nexport const DIAGRAM_FIELD_DEFAULTS = {\r\n editable: true,\r\n fontSize: 0,\r\n margin: 0,\r\n padding: 0,\r\n fontFamily: \"'Wonder Unit Sans', sans-serif\",\r\n color: '#000000',\r\n selectedColor: '#000000',\r\n horizontalAlign: HorizontalAlign.Center,\r\n verticalAlign: VerticalAlign.Center,\r\n fit: false\r\n};\r\n\r\n/**\r\n * A field which displays text and is part of a diagram element.\r\n * @see DiagramNode\r\n * @see DiagramPort\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramField extends DiagramElement {\r\n /**\r\n * Element that this field belongs to.\r\n * @public\r\n */\r\n rootElement?: DiagramNode | DiagramSection | DiagramPort;\r\n /**\r\n * Coordinates of this field.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this field along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this field along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n /**\r\n * Font size of this field.\r\n * @public\r\n */\r\n fontSize: number;\r\n /**\r\n * Font family of this field. `null` for the default one.\r\n * @public\r\n */\r\n fontFamily: string | null;\r\n /**\r\n * Font color of this field.\r\n * @public\r\n */\r\n color: string;\r\n /**\r\n * Font color of this field when selected.\r\n * @public\r\n */\r\n selectedColor: string;\r\n /**\r\n * Horizontal alignment of the text of this field.\r\n * @public\r\n */\r\n horizontalAlign: HorizontalAlign;\r\n /**\r\n * Vertical alignment of the text of this field.\r\n * @public\r\n */\r\n verticalAlign: VerticalAlign;\r\n private _text: string;\r\n /**\r\n * Default text that this field's text resets to when empty.\r\n * @public\r\n */\r\n defaultText: string;\r\n /**\r\n * Text contents of this field.\r\n * @public\r\n */\r\n get text(): string {\r\n return this._text;\r\n }\r\n set text(value: string) {\r\n if (value.trim() === '') {\r\n value = this.defaultText;\r\n }\r\n this._text = value;\r\n this.updateInView();\r\n if (this.fit) {\r\n this.model.canvas?.fitFieldRootInView(this.id);\r\n }\r\n }\r\n /**\r\n * Collaborative timestamp for text.\r\n * @public\r\n */\r\n textTimestamp: CollabTimestamp | null = null;\r\n /**\r\n * Whether this field's text can be edited by the user.\r\n * @public\r\n */\r\n editable: boolean;\r\n /**\r\n * Whether this field's size can adapt to the size of the text.\r\n * @public\r\n */\r\n fit: boolean;\r\n\r\n constructor(\r\n model: DiagramModel,\r\n rootElement: DiagramNode | DiagramSection | DiagramPort | undefined,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n fontSize: number,\r\n fontFamily: string | null,\r\n color: string,\r\n selectedColor: string,\r\n horizontalAlign: HorizontalAlign,\r\n verticalAlign: VerticalAlign,\r\n text: string,\r\n editable: boolean,\r\n fit: boolean\r\n ) {\r\n const id = `${rootElement?.id}_field`;\r\n if (model.fields.get(id) !== undefined) {\r\n throw new Error('DiagramField for rootElement already exists');\r\n }\r\n super(model, id);\r\n this.rootElement = rootElement;\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n this.fontSize = fontSize;\r\n this.fontFamily = fontFamily;\r\n this.color = color;\r\n this.selectedColor = selectedColor;\r\n this.horizontalAlign = horizontalAlign;\r\n this.verticalAlign = verticalAlign;\r\n this.defaultText = text;\r\n this._text = text;\r\n this.editable = editable;\r\n this.fit = fit;\r\n }\r\n\r\n override select():\r\n | d3.Selection<SVGGElement, unknown, null, unknown>\r\n | undefined {\r\n return this.model.canvas\r\n ?.selectCanvasView()\r\n ?.select(`foreignObject#${this.id}`);\r\n }\r\n\r\n get removed() {\r\n return (\r\n this.selfRemoved ||\r\n (this.rootElement !== undefined && this.rootElement.removed)\r\n );\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateFieldsInView(this.id);\r\n }\r\n\r\n /**\r\n * Change the coordinates of this field to the given coordinates.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n this.coords = coords;\r\n this.updateInView();\r\n }\r\n\r\n getPriority(): number {\r\n return this.rootElement?.getPriority() || DEFAULT_PRIORITY;\r\n }\r\n}\r\n\r\nexport class DiagramFieldSet extends DiagramElementSet<DiagramField> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of fields for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new field and add it to this set. This method is normally called when instancing an element with a field and it is rarely called by itself.\r\n * @private\r\n */\r\n new(\r\n rootElement: DiagramNode | DiagramSection | DiagramPort | undefined,\r\n coords: Point,\r\n fontSize: number,\r\n fontFamily: string | null,\r\n color: string,\r\n selectedColor: string,\r\n width: number,\r\n height: number,\r\n horizontalAlign: HorizontalAlign,\r\n verticalAlign: VerticalAlign,\r\n text: string,\r\n editable: boolean,\r\n fit: boolean\r\n ): DiagramField {\r\n const field = new DiagramField(\r\n this.model,\r\n rootElement,\r\n coords,\r\n width,\r\n height,\r\n fontSize,\r\n fontFamily,\r\n color,\r\n selectedColor,\r\n horizontalAlign,\r\n verticalAlign,\r\n text,\r\n editable,\r\n fit\r\n );\r\n super.add(field);\r\n field.updateInView();\r\n // add this field to its root element\r\n if (rootElement !== undefined) {\r\n rootElement.label = field;\r\n }\r\n return field;\r\n }\r\n\r\n override remove(id: string) {\r\n const field = this.get(id);\r\n if (field) {\r\n // remove from root element\r\n if (\r\n field.rootElement instanceof DiagramNode ||\r\n field.rootElement instanceof DiagramSection ||\r\n field.rootElement instanceof DiagramPort\r\n ) {\r\n if (field.rootElement.label === field) {\r\n field.rootElement.label = undefined;\r\n }\r\n }\r\n // remove from set of fields\r\n super.remove(id);\r\n // remove from canvas\r\n field.updateInView();\r\n }\r\n }\r\n}\r\n\r\nexport const getBottomMargin = (config?: FieldConfig | null): number => {\r\n if (config?.margin === null || config?.margin === undefined) {\r\n return DIAGRAM_FIELD_DEFAULTS.margin;\r\n } else if (typeof config.margin === 'number') {\r\n return config.margin;\r\n } else {\r\n if (config.margin.length === 0) {\r\n return DIAGRAM_FIELD_DEFAULTS.margin;\r\n } else if (config.margin.length === 1) {\r\n return config.margin[0];\r\n } else if (config.margin.length === 2) {\r\n return config.margin[0];\r\n } else if (config.margin.length === 3) {\r\n return config.margin[2];\r\n } else {\r\n return config.margin[2];\r\n }\r\n }\r\n};\r\n\r\nexport const getLeftMargin = (config?: FieldConfig | null): number => {\r\n if (config?.margin === null || config?.margin === undefined) {\r\n return DIAGRAM_FIELD_DEFAULTS.margin;\r\n } else if (typeof config.margin === 'number') {\r\n return config.margin;\r\n } else {\r\n if (config.margin.length === 0) {\r\n return DIAGRAM_FIELD_DEFAULTS.margin;\r\n } else if (config.margin.length === 1) {\r\n return config.margin[0];\r\n } else if (config.margin.length === 2) {\r\n return config.margin[1];\r\n } else if (config.margin.length === 3) {\r\n return config.margin[1];\r\n } else {\r\n return config.margin[3];\r\n }\r\n }\r\n};\r\n\r\nexport const getRightMargin = (config?: FieldConfig | null): number => {\r\n if (config?.margin === null || config?.margin === undefined) {\r\n return DIAGRAM_FIELD_DEFAULTS.margin;\r\n } else if (typeof config.margin === 'number') {\r\n return config.margin;\r\n } else {\r\n if (config.margin.length === 0) {\r\n return DIAGRAM_FIELD_DEFAULTS.margin;\r\n } else if (config.margin.length === 1) {\r\n return config.margin[0];\r\n } else if (config.margin.length === 2) {\r\n return config.margin[1];\r\n } else if (config.margin.length === 3) {\r\n return config.margin[1];\r\n } else {\r\n return config.margin[1];\r\n }\r\n }\r\n};\r\n\r\nexport const getTopMargin = (config?: FieldConfig | null): number => {\r\n if (config?.margin === null || config?.margin === undefined) {\r\n return DIAGRAM_FIELD_DEFAULTS.margin;\r\n } else if (typeof config.margin === 'number') {\r\n return config.margin;\r\n } else {\r\n if (config.margin.length === 0) {\r\n return DIAGRAM_FIELD_DEFAULTS.margin;\r\n } else if (config.margin.length === 1) {\r\n return config.margin[0];\r\n } else if (config.margin.length === 2) {\r\n return config.margin[0];\r\n } else if (config.margin.length === 3) {\r\n return config.margin[0];\r\n } else {\r\n return config.margin[0];\r\n }\r\n }\r\n};\r\n\r\nexport const getBottomPadding = (config?: FieldConfig | null): number => {\r\n if (config?.padding === null || config?.padding === undefined) {\r\n return DIAGRAM_FIELD_DEFAULTS.padding;\r\n } else if (typeof config.padding === 'number') {\r\n return config.padding;\r\n } else {\r\n if (config.padding.length === 0) {\r\n return DIAGRAM_FIELD_DEFAULTS.padding;\r\n } else if (config.padding.length === 1) {\r\n return config.padding[0];\r\n } else if (config.padding.length === 2) {\r\n return config.padding[0];\r\n } else if (config.padding.length === 3) {\r\n return config.padding[2];\r\n } else {\r\n return config.padding[2];\r\n }\r\n }\r\n};\r\n\r\nexport const getLeftPadding = (config?: FieldConfig | null): number => {\r\n if (config?.padding === null || config?.padding === undefined) {\r\n return DIAGRAM_FIELD_DEFAULTS.padding;\r\n } else if (typeof config.padding === 'number') {\r\n return config.padding;\r\n } else {\r\n if (config.padding.length === 0) {\r\n return DIAGRAM_FIELD_DEFAULTS.padding;\r\n } else if (config.padding.length === 1) {\r\n return config.padding[0];\r\n } else if (config.padding.length === 2) {\r\n return config.padding[1];\r\n } else if (config.padding.length === 3) {\r\n return config.padding[1];\r\n } else {\r\n return config.padding[3];\r\n }\r\n }\r\n};\r\n\r\nexport const getRightPadding = (config?: FieldConfig | null): number => {\r\n if (config?.padding === null || config?.padding === undefined) {\r\n return DIAGRAM_FIELD_DEFAULTS.padding;\r\n } else if (typeof config.padding === 'number') {\r\n return config.padding;\r\n } else {\r\n if (config.padding.length === 0) {\r\n return DIAGRAM_FIELD_DEFAULTS.padding;\r\n } else if (config.padding.length === 1) {\r\n return config.padding[0];\r\n } else if (config.padding.length === 2) {\r\n return config.padding[1];\r\n } else if (config.padding.length === 3) {\r\n return config.padding[1];\r\n } else {\r\n return config.padding[1];\r\n }\r\n }\r\n};\r\n\r\nexport const getTopPadding = (config?: FieldConfig | null): number => {\r\n if (config?.padding === null || config?.padding === undefined) {\r\n return DIAGRAM_FIELD_DEFAULTS.padding;\r\n } else if (typeof config.padding === 'number') {\r\n return config.padding;\r\n } else {\r\n if (config.padding.length === 0) {\r\n return DIAGRAM_FIELD_DEFAULTS.padding;\r\n } else if (config.padding.length === 1) {\r\n return config.padding[0];\r\n } else if (config.padding.length === 2) {\r\n return config.padding[0];\r\n } else if (config.padding.length === 3) {\r\n return config.padding[0];\r\n } else {\r\n return config.padding[0];\r\n }\r\n }\r\n};\r\n","import { Point } from '../../../util/canvas-util';\r\nimport { Side } from '../../../util/svg-util';\r\nimport { CollabTimestamp } from '../collab/primitives';\r\nimport { DiagramConnection } from '../diagram-connection';\r\nimport {\r\n DIAGRAM_FIELD_DEFAULTS,\r\n DiagramField,\r\n getBottomMargin,\r\n getLeftMargin,\r\n getRightMargin,\r\n getTopMargin\r\n} from '../diagram-field';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { DiagramPort } from '../diagram-port';\r\nimport { DiagramSection } from '../diagram-section';\r\nimport { DagaConnection, DagaModel, DagaNode } from './daga-model';\r\nimport { DiagramModelImporter } from './diagram-model-importer';\r\n\r\n/**\r\n * Importer which imports a diagram from its daga model representation.\r\n * @public\r\n */\r\nexport class DagaImporter implements DiagramModelImporter<DagaModel> {\r\n import(model: DiagramModel, data: DagaModel): DiagramModel {\r\n // clear the model beforehand\r\n model.clear();\r\n\r\n if (data.id) {\r\n model.id = data.id;\r\n }\r\n model.name = data.name;\r\n model.description = data.description;\r\n model.type = data.type;\r\n model.createdAt = new Date(data.createdAt);\r\n model.updatedAt = new Date(data.updatedAt);\r\n for (const node of data.nodes || []) {\r\n this.importNode(model, node);\r\n }\r\n for (const connection of data.connections || []) {\r\n this.importConnection(model, connection);\r\n }\r\n if (data.data) {\r\n model.valueSet.setValues(data.data);\r\n }\r\n if (data.collabMeta) {\r\n model.logicalClock = data.collabMeta.logicalClock;\r\n model.valueSet.setTimestamps(data.collabMeta.dataTimestamps);\r\n }\r\n\r\n return model;\r\n }\r\n\r\n importNode(model: DiagramModel, node: DagaNode): DiagramModel {\r\n const newNodeType = model.nodes.types.get(node.type);\r\n if (newNodeType) {\r\n const newNode = new DiagramNode(model, newNodeType, node.coords, node.id);\r\n model.nodes.add(newNode);\r\n newNode.width = node.width;\r\n newNode.height = node.height;\r\n if (node.label) {\r\n // add node label\r\n if (newNodeType.label) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.label\r\n };\r\n const newField = new DiagramField(\r\n model,\r\n newNode,\r\n [\r\n newNode.coords[0] + getLeftMargin(labelConfiguration),\r\n newNode.coords[1] + getTopMargin(labelConfiguration)\r\n ],\r\n newNode.width -\r\n getLeftMargin(labelConfiguration) -\r\n getRightMargin(labelConfiguration),\r\n newNode.height -\r\n getTopMargin(labelConfiguration) -\r\n getBottomMargin(labelConfiguration),\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = node.label;\r\n newNode.label = newField;\r\n model.fields.add(newField);\r\n newField.updateInView();\r\n }\r\n }\r\n for (const section of node.sections || []) {\r\n const newSection = new DiagramSection(\r\n model,\r\n newNode,\r\n section.indexXInNode,\r\n section.indexYInNode,\r\n section.coords,\r\n section.width,\r\n section.height,\r\n section.id\r\n );\r\n newNode.sections?.push(newSection);\r\n model.sections.add(newSection);\r\n if (section.label) {\r\n // add section label\r\n if (\r\n newNodeType.sectionGrid?.sections?.[section.indexYInNode]?.[\r\n section.indexXInNode\r\n ]?.label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.sectionGrid?.sections?.[section.indexYInNode]?.[\r\n section.indexXInNode\r\n ]?.label\r\n };\r\n const newField = new DiagramField(\r\n model,\r\n newSection,\r\n [\r\n newSection.coords[0] + getLeftMargin(labelConfiguration),\r\n newSection.coords[1] + getTopMargin(labelConfiguration)\r\n ],\r\n newSection.width -\r\n getLeftMargin(labelConfiguration) -\r\n getRightMargin(labelConfiguration),\r\n newSection.height -\r\n getTopMargin(labelConfiguration) -\r\n getBottomMargin(labelConfiguration),\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = section.label;\r\n newSection.label = newField;\r\n model.fields.add(newField);\r\n newField.updateInView();\r\n }\r\n }\r\n let portCounter = 0;\r\n for (const port of section.ports || []) {\r\n const newPort = new DiagramPort(\r\n model,\r\n newSection,\r\n port.coords,\r\n port.direction,\r\n port.id\r\n );\r\n newSection.ports.push(newPort);\r\n model.ports.add(newPort);\r\n if (port.label) {\r\n // add port label\r\n if (\r\n newNodeType.ports.length > portCounter &&\r\n newNodeType.ports[portCounter].label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.ports[portCounter].label\r\n };\r\n let labelCoords: Point;\r\n switch (newPort.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n newPort.coords[0] + labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = newPort.coords;\r\n }\r\n const newField = new DiagramField(\r\n model,\r\n newPort,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = port.label;\r\n newPort.label = newField;\r\n model.fields.add(newField);\r\n newField.updateInView();\r\n }\r\n ++portCounter;\r\n }\r\n if (port.collabMeta) {\r\n newPort.selfRemoved = port.collabMeta.selfRemoved;\r\n newPort.selfRemovedTimestamp = port.collabMeta.selfRemovedTimestamp;\r\n this.importLabelCollabMeta(newPort.label, port.collabMeta.label);\r\n }\r\n newPort.updateInView();\r\n }\r\n if (section.collabMeta) {\r\n newSection.selfRemoved = section.collabMeta.selfRemoved;\r\n newSection.selfRemovedTimestamp =\r\n section.collabMeta.selfRemovedTimestamp;\r\n this.importLabelCollabMeta(\r\n newSection.label,\r\n section.collabMeta.label\r\n );\r\n }\r\n newSection.updateInView();\r\n }\r\n let portCounter = 0;\r\n for (const port of node.ports || []) {\r\n const newPort = new DiagramPort(\r\n model,\r\n newNode,\r\n port.coords,\r\n port.direction,\r\n port.id\r\n );\r\n newNode.ports.push(newPort);\r\n model.ports.add(newPort);\r\n if (port.label) {\r\n // add port label\r\n if (\r\n newNodeType.ports.length > portCounter &&\r\n newNodeType.ports[portCounter].label\r\n ) {\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...newNodeType.ports[portCounter].label\r\n };\r\n let labelCoords: Point;\r\n switch (newPort.direction) {\r\n case Side.Top:\r\n case Side.Left:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Bottom:\r\n labelCoords = [\r\n newPort.coords[0] - labelConfiguration.fontSize,\r\n newPort.coords[1] + labelConfiguration.fontSize\r\n ];\r\n break;\r\n case Side.Right:\r\n labelCoords = [\r\n newPort.coords[0] + labelConfiguration.fontSize,\r\n newPort.coords[1] - labelConfiguration.fontSize\r\n ];\r\n break;\r\n default:\r\n labelCoords = newPort.coords;\r\n }\r\n const newField = new DiagramField(\r\n model,\r\n newPort,\r\n labelCoords,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontSize,\r\n labelConfiguration.fontFamily,\r\n labelConfiguration.color,\r\n labelConfiguration.selectedColor,\r\n labelConfiguration.horizontalAlign,\r\n labelConfiguration.verticalAlign,\r\n '',\r\n labelConfiguration.editable,\r\n labelConfiguration.fit\r\n );\r\n newField.text = port.label;\r\n newPort.label = newField;\r\n model.fields.add(newField);\r\n newField.updateInView();\r\n }\r\n ++portCounter;\r\n }\r\n if (port.collabMeta) {\r\n newPort.selfRemoved = port.collabMeta.selfRemoved;\r\n newPort.selfRemovedTimestamp = port.collabMeta.selfRemovedTimestamp;\r\n this.importLabelCollabMeta(newPort.label, port.collabMeta.label);\r\n }\r\n newPort.updateInView();\r\n }\r\n if (node.data) {\r\n newNode.valueSet.setValues(node.data);\r\n }\r\n if (node.collabMeta) {\r\n newNode.selfRemoved = node.collabMeta.selfRemoved;\r\n newNode.selfRemovedTimestamp = node.collabMeta.selfRemovedTimestamp;\r\n newNode.geometryTimestamp = node.collabMeta.geometryTimestamp;\r\n this.importLabelCollabMeta(newNode.label, node.collabMeta.label);\r\n newNode.valueSet.setTimestamps(node.collabMeta.dataTimestamps);\r\n }\r\n newNode.updateInView();\r\n }\r\n return model;\r\n }\r\n\r\n importConnection(\r\n model: DiagramModel,\r\n connection: DagaConnection\r\n ): DiagramModel {\r\n const newConnectionType = model.connections.types.get(connection.type);\r\n if (newConnectionType) {\r\n const newConnection = new DiagramConnection(\r\n model,\r\n newConnectionType,\r\n connection.start ? model.ports.get(connection.start) : undefined,\r\n connection.end ? model.ports.get(connection.end) : undefined,\r\n connection.id\r\n );\r\n model.connections.add(newConnection);\r\n newConnection.startLabel = connection.startLabel;\r\n newConnection.middleLabel = connection.middleLabel;\r\n newConnection.endLabel = connection.endLabel;\r\n newConnection.points = connection.points;\r\n if (connection.data) {\r\n newConnection.valueSet.setValues(connection.data);\r\n }\r\n if (connection.collabMeta) {\r\n newConnection.selfRemoved = connection.collabMeta.selfRemoved;\r\n newConnection.selfRemovedTimestamp =\r\n connection.collabMeta.selfRemovedTimestamp;\r\n newConnection.valueSet.setTimestamps(\r\n connection.collabMeta.dataTimestamps\r\n );\r\n }\r\n newConnection.updateInView();\r\n }\r\n return model;\r\n }\r\n\r\n importLabelCollabMeta(\r\n newLabel?: DiagramField,\r\n labelCollabMeta?: {\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n textTimestamp: CollabTimestamp | null;\r\n }\r\n ): void {\r\n if (newLabel && labelCollabMeta) {\r\n newLabel.selfRemoved = labelCollabMeta.selfRemoved;\r\n newLabel.selfRemovedTimestamp = labelCollabMeta.selfRemovedTimestamp;\r\n newLabel.textTimestamp = labelCollabMeta.textTimestamp;\r\n }\r\n }\r\n}\r\n","import { Canvas } from '../../../interfaces/canvas';\r\nimport { Point } from '../../../util/canvas-util';\r\nimport { DagaImporter } from '../converters/daga-importer';\r\nimport { DagaConnection, DagaNode } from '../converters/daga-model';\r\nimport { DiagramElement } from '../diagram-element';\r\nimport { DiagramNodeGeometry } from '../diagram-node';\r\nimport { ValueSet } from '../diagram-property';\r\nimport { CollabTimestamp, timestampWins } from './primitives';\r\n\r\n/**\r\n * An action taken by a local or remote user.\r\n *\r\n * The action can performed on its creator's device, serialized\r\n * and deserialized to reach remote users' devices, and performed\r\n * on remote users' devices.\r\n * @private\r\n */\r\nexport interface CollabAction {\r\n /**\r\n * Performs this action on the diagram.\r\n *\r\n * Note: Local Actions should call `canvas.collabEngine.doCollaboratively(collabAction)`, **not** this method directly.\r\n *\r\n * CollabAction `do()` methods must follow the rules of operation-based CRDT messages:\r\n * If two users concurrently create CollabActions (possibly of different types) on the same diagram, then performing the actions on a future diagram state _in either order_ must result in the same diagram state.\r\n */\r\n do(): void;\r\n\r\n /**\r\n * Serializes this action, converting it to a JSON form.\r\n *\r\n * To deserialize, use the *static* deserialize method on the same class.\r\n */\r\n serialize(): CollabActionSerialized;\r\n\r\n // In addition to the object methods above, each implementation should\r\n // have a static method `deserialize(canvas: Canvas, serialized: (CollabActionSerialized subtype))`\r\n // that inputs a JSON value of the form output by `serialize()` and\r\n // outputs a new instance of the class.\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type CollabActionSerialized =\r\n | AddNodeSerialized\r\n | SetGeometrySerialized\r\n | AddConnectionSerialized\r\n | EditFieldSerialized\r\n | UpdateValuesSerialized\r\n | SetSelfRemovedSerialized\r\n | PasteSerialized;\r\n\r\n/**\r\n * @private\r\n */\r\nexport type AddNodeSerialized = {\r\n type: 'addNode';\r\n id: string;\r\n typeId: string;\r\n coords: Point;\r\n label?: string;\r\n values?: { [key: string]: unknown };\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of adding a node.\r\n * @see AddNodeAction\r\n * @private\r\n */\r\nexport class AddNodeCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly id: string,\r\n readonly typeId: string,\r\n readonly coords: Point,\r\n readonly label?: string,\r\n readonly values?: { [key: string]: unknown }\r\n ) {}\r\n\r\n do(): void {\r\n const node = this.canvas.model.nodes.new(this.typeId, this.coords, this.id);\r\n if (this.values !== undefined) {\r\n node.valueSet.setValues(\r\n structuredClone({\r\n ...node.valueSet.getValues(),\r\n ...this.values\r\n })\r\n );\r\n }\r\n if (node.label) {\r\n node.label.text = this.label || '';\r\n }\r\n }\r\n\r\n serialize(): AddNodeSerialized {\r\n return {\r\n type: 'addNode',\r\n id: this.id,\r\n typeId: this.typeId,\r\n coords: this.coords,\r\n label: this.label,\r\n values: this.values\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: AddNodeSerialized\r\n ): AddNodeCollabAction {\r\n return new AddNodeCollabAction(\r\n canvas,\r\n serialized.id,\r\n serialized.typeId,\r\n serialized.coords,\r\n serialized.label,\r\n serialized.values\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type SetGeometrySerialized = {\r\n type: 'setGeometry';\r\n nodeId: string;\r\n to: DiagramNodeGeometry;\r\n timestamp: CollabTimestamp;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of changing a node's geometry: moving, stretching, or stretching sections.\r\n * @see SetGeometryAction\r\n * @private\r\n */\r\nexport class SetGeometryCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly nodeId: string,\r\n readonly to: DiagramNodeGeometry,\r\n readonly timestamp: CollabTimestamp\r\n ) {}\r\n\r\n do(): void {\r\n const node = this.canvas.model.nodes.get(this.nodeId, true);\r\n if (node && timestampWins(this.timestamp, node.geometryTimestamp)) {\r\n node.setGeometry(this.to);\r\n // Re-fit the labels, in case their text has changed since `this.to` was measured.\r\n if (node.label?.fit) {\r\n this.canvas.fitFieldRootInView(node.label.id);\r\n }\r\n for (const section of node.sections) {\r\n if (section.label?.fit) {\r\n this.canvas.fitFieldRootInView(section.label.id);\r\n }\r\n }\r\n node.geometryTimestamp = this.timestamp;\r\n }\r\n }\r\n\r\n serialize(): SetGeometrySerialized {\r\n return {\r\n type: 'setGeometry',\r\n nodeId: this.nodeId,\r\n to: this.to,\r\n timestamp: this.timestamp\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: SetGeometrySerialized\r\n ): SetGeometryCollabAction {\r\n return new SetGeometryCollabAction(\r\n canvas,\r\n serialized.nodeId,\r\n serialized.to,\r\n serialized.timestamp\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type AddConnectionSerialized = {\r\n type: 'addConnection';\r\n id: string;\r\n typeId: string;\r\n startId: string;\r\n endId: string;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of adding a connection.\r\n * @see AddConnectionAction\r\n * @private\r\n */\r\nexport class AddConnectionCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly id: string,\r\n readonly typeId: string,\r\n readonly startId: string,\r\n readonly endId: string\r\n ) {}\r\n\r\n do(): void {\r\n const start = this.canvas.model.ports.get(this.startId, true);\r\n const end = this.canvas.model.ports.get(this.endId, true);\r\n if (start && end) {\r\n this.canvas.model.connections.new(this.typeId, start, end, this.id);\r\n }\r\n }\r\n\r\n serialize(): AddConnectionSerialized {\r\n return {\r\n type: 'addConnection',\r\n id: this.id,\r\n typeId: this.typeId,\r\n startId: this.startId,\r\n endId: this.endId\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: AddConnectionSerialized\r\n ): AddConnectionCollabAction {\r\n return new AddConnectionCollabAction(\r\n canvas,\r\n serialized.id,\r\n serialized.typeId,\r\n serialized.startId,\r\n serialized.endId\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type EditFieldSerialized = {\r\n type: 'editField';\r\n fieldId: string;\r\n to: string;\r\n timestamp: CollabTimestamp;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of editing the text of a field.\r\n * @see EditFieldAction\r\n * @private\r\n */\r\nexport class EditFieldCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly fieldId: string,\r\n readonly to: string,\r\n readonly timestamp: CollabTimestamp\r\n ) {}\r\n\r\n do(): void {\r\n const field = this.canvas.model.fields.get(this.fieldId, true);\r\n if (field && timestampWins(this.timestamp, field.textTimestamp)) {\r\n field.text = this.to;\r\n field.textTimestamp = this.timestamp;\r\n }\r\n }\r\n\r\n serialize(): EditFieldSerialized {\r\n return {\r\n type: 'editField',\r\n fieldId: this.fieldId,\r\n to: this.to,\r\n timestamp: this.timestamp\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: EditFieldSerialized\r\n ): EditFieldCollabAction {\r\n return new EditFieldCollabAction(\r\n canvas,\r\n serialized.fieldId,\r\n serialized.to,\r\n serialized.timestamp\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type UpdateValuesSerialized = {\r\n type: 'updateValues';\r\n id: string | undefined;\r\n to: { [key: string]: unknown };\r\n timestamp: CollabTimestamp;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of editing the values of a value set.\r\n * @see UpdateValuesAction\r\n * @private\r\n */\r\nexport class UpdateValuesCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly id: string | undefined,\r\n readonly to: { [key: string]: unknown },\r\n readonly timestamp: CollabTimestamp\r\n ) {}\r\n\r\n getValueSet(): ValueSet | undefined {\r\n if (this.id === undefined) {\r\n return this.canvas.model.valueSet;\r\n } else {\r\n return (\r\n this.canvas.model.nodes.get(this.id, true) ||\r\n this.canvas.model.connections.get(this.id, true)\r\n )?.valueSet;\r\n }\r\n }\r\n\r\n do(): void {\r\n this.getValueSet()?.overwriteValuesLww(this.to, this.timestamp);\r\n }\r\n\r\n serialize(): UpdateValuesSerialized {\r\n return {\r\n type: 'updateValues',\r\n id: this.id,\r\n to: this.to,\r\n timestamp: this.timestamp\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: UpdateValuesSerialized\r\n ): UpdateValuesCollabAction {\r\n return new UpdateValuesCollabAction(\r\n canvas,\r\n serialized.id,\r\n serialized.to,\r\n serialized.timestamp\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type SetSelfRemovedSerialized = {\r\n type: 'setSelfRemoved';\r\n nodeIds: string[];\r\n sectionIds: string[];\r\n portIds: string[];\r\n connectionIds: string[];\r\n fieldIds: string[];\r\n removed: boolean;\r\n timestamp: CollabTimestamp;\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of removing or un-removing elements.\r\n *\r\n * Specifically, the action sets the `selfRemoved` field for elements that are\r\n * explicitly removed/unremoved. This causes the `removed` fields for those elements\r\n * and their transitive dependents to update automatically.\r\n * For example, self-removing a node also removes all of its sections/connections/etc.\r\n *\r\n * @see RemoveAction\r\n * @private\r\n */\r\nexport class SetSelfRemovedCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly nodeIds: string[],\r\n readonly sectionIds: string[],\r\n readonly portIds: string[],\r\n readonly connectionIds: string[],\r\n readonly fieldIds: string[],\r\n readonly selfRemoved: boolean,\r\n readonly timestamp: CollabTimestamp\r\n ) {}\r\n\r\n private doOne(elt: DiagramElement | undefined): void {\r\n if (elt && timestampWins(this.timestamp, elt.selfRemovedTimestamp)) {\r\n elt.selfRemoved = this.selfRemoved;\r\n elt.selfRemovedTimestamp = this.timestamp;\r\n }\r\n }\r\n\r\n do(): void {\r\n for (const nodeId of this.nodeIds) {\r\n this.doOne(this.canvas.model.nodes.get(nodeId, true));\r\n }\r\n for (const sectionId of this.sectionIds) {\r\n this.doOne(this.canvas.model.sections.get(sectionId, true));\r\n }\r\n for (const portId of this.portIds) {\r\n this.doOne(this.canvas.model.ports.get(portId, true));\r\n }\r\n for (const connectionId of this.connectionIds) {\r\n this.doOne(this.canvas.model.connections.get(connectionId, true));\r\n }\r\n for (const fieldId of this.fieldIds) {\r\n this.doOne(this.canvas.model.fields.get(fieldId, true));\r\n }\r\n // update view\r\n this.canvas.updateNodesInView(...this.nodeIds);\r\n this.canvas.updateSectionsInView(...this.sectionIds);\r\n this.canvas.updatePortsInView(...this.portIds);\r\n this.canvas.updateConnectionsInView(...this.connectionIds);\r\n this.canvas.updateFieldsInView(...this.fieldIds);\r\n // some of the nodes and sections may have decorators, so update them\r\n this.canvas.updateDecoratorsInView();\r\n }\r\n\r\n serialize(): CollabActionSerialized {\r\n return {\r\n type: 'setSelfRemoved',\r\n nodeIds: this.nodeIds,\r\n sectionIds: this.sectionIds,\r\n portIds: this.portIds,\r\n connectionIds: this.connectionIds,\r\n fieldIds: this.fieldIds,\r\n removed: this.selfRemoved,\r\n timestamp: this.timestamp\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: SetSelfRemovedSerialized\r\n ): SetSelfRemovedCollabAction {\r\n return new SetSelfRemovedCollabAction(\r\n canvas,\r\n serialized.nodeIds,\r\n serialized.sectionIds,\r\n serialized.portIds,\r\n serialized.connectionIds,\r\n serialized.fieldIds,\r\n serialized.removed,\r\n serialized.timestamp\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nexport type PasteSerialized = {\r\n type: 'paste';\r\n readonly nodes: DagaNode[];\r\n readonly connections: DagaConnection[];\r\n};\r\n\r\n/**\r\n * Collaborative action which consists of pasting elements from an external source into a diagram.\r\n *\r\n * @see PasteAction\r\n * @private\r\n */\r\nexport class PasteCollabAction implements CollabAction {\r\n constructor(\r\n readonly canvas: Canvas,\r\n readonly nodes: DagaNode[],\r\n readonly connections: DagaConnection[]\r\n ) {}\r\n\r\n do(): void {\r\n const importer = new DagaImporter();\r\n for (const node of this.nodes) {\r\n importer.importNode(this.canvas.model, node);\r\n }\r\n for (const connection of this.connections) {\r\n importer.importConnection(this.canvas.model, connection);\r\n }\r\n }\r\n\r\n serialize(): CollabActionSerialized {\r\n return {\r\n type: 'paste',\r\n nodes: this.nodes,\r\n connections: this.connections\r\n };\r\n }\r\n\r\n static deserialize(\r\n canvas: Canvas,\r\n serialized: PasteSerialized\r\n ): PasteCollabAction {\r\n return new PasteCollabAction(\r\n canvas,\r\n serialized.nodes,\r\n serialized.connections\r\n );\r\n }\r\n}\r\n","import { Canvas } from '../../interfaces/canvas';\r\nimport { Point } from '../../util/canvas-util';\r\nimport {\r\n AddConnectionCollabAction,\r\n AddNodeCollabAction,\r\n EditFieldCollabAction,\r\n PasteCollabAction,\r\n SetGeometryCollabAction,\r\n SetSelfRemovedCollabAction,\r\n UpdateValuesCollabAction\r\n} from './collab/collab-action';\r\nimport { DagaConnection, DagaNode } from './converters/daga-model';\r\nimport { DiagramConnectionType } from './diagram-connection';\r\nimport { DiagramNodeGeometry, DiagramNodeType } from './diagram-node';\r\n\r\n/**\r\n * A queue of recent actions taken by the user that can be undone and redone.\r\n * @private\r\n */\r\nexport class ActionQueue {\r\n /**\r\n * Canvas that this action queue belongs to.\r\n * @private\r\n */\r\n canvas: Canvas;\r\n /**\r\n * Maximum number of actions that can be recorded simultaneously.\r\n * When new actions are added past this limit, older actions are removed.\r\n * @private\r\n */\r\n maximum: number;\r\n /**\r\n * List of recorded actions, from oldest to newest.\r\n * @private\r\n */\r\n history: DiagramAction[];\r\n /**\r\n * Index of the last action not counting undone actions. One-indexed. Zero if all actions are undone.\r\n * @private\r\n */\r\n index: number;\r\n\r\n constructor(canvas: Canvas, maximum: number) {\r\n this.canvas = canvas;\r\n this.maximum = maximum;\r\n this.history = [];\r\n this.index = 0;\r\n }\r\n\r\n /**\r\n * Adds an action to the history.\r\n * @private\r\n */\r\n add(action: DiagramAction): void {\r\n if (this.index < this.history.length) {\r\n this.history = this.history.slice(0, this.index);\r\n }\r\n if (this.history.length >= this.maximum) {\r\n this.history = this.history.slice(1, this.history.length);\r\n this.history.push(action);\r\n } else {\r\n this.history.push(action);\r\n ++this.index;\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n\r\n /**\r\n * Undoes the last action in the history, not counting undone actions.\r\n * @private\r\n */\r\n undo(): void {\r\n if (this.index > 0) {\r\n --this.index;\r\n this.history[this.index].undo();\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n\r\n /**\r\n * Redoes the last undone action in the history.\r\n * @private\r\n */\r\n redo(): void {\r\n if (this.index < this.history.length) {\r\n this.history[this.index].redo();\r\n ++this.index;\r\n }\r\n this.canvas.diagramChanges$.next();\r\n }\r\n}\r\n\r\n/**\r\n * An action taken by the user that can be undone and redone.\r\n * @private\r\n */\r\nexport interface DiagramAction {\r\n /**\r\n * Perform this action on the diagram for the first time.\r\n * Performing the same action with the same parameters on a diagram with the same state should always result in the same changes to the state of the diagram.\r\n */\r\n do(): void;\r\n /**\r\n * Undo the changes in the diagram caused by this action.\r\n * After having called `do()` followed by `undo()`, calling `redo()` followed by `undo()` any number of times should always result in no net changes to the state of the diagram.\r\n */\r\n undo(): void;\r\n /**\r\n * Redo the changes in the diagram caused by this action.\r\n * After having called `do()`, calling `undo()` followed by `redo()` any number of times should always result in no net changes to the state of the diagram.\r\n * `redo()` is usually equivalent to `do()`, but not always.\r\n */\r\n redo(): void;\r\n}\r\n\r\n/**\r\n * Enum listing the actions that can be taken by the user.\r\n * The actions can correspond to a DiagramAction that can be recorded in the action queue of a diagram or they may not correspond to any DiagramAction implementations.\r\n * @public\r\n */\r\nexport enum DiagramActions {\r\n /**\r\n * Action that corresponds to the addition of a connection.\r\n * @see AddConnectionAction\r\n * @public\r\n */\r\n AddConnection = 'add-connection',\r\n /**\r\n * Action that corresponds to the addition of a node.\r\n * @see AddNodeAction\r\n * @public\r\n */\r\n AddNode = 'add-node',\r\n /**\r\n * Action that corresponds to copying diagram elements to the clipboard.\r\n * @public\r\n */\r\n Clipboard = 'clipboard',\r\n /**\r\n * Action that corresponds to opening the context menu.\r\n * @public\r\n */\r\n ContextMenu = 'context-menu',\r\n /**\r\n * Action that corresponds to the edition of a field's text content.\r\n * @see EditFieldAction\r\n * @public\r\n */\r\n EditField = 'edit-field',\r\n /**\r\n * Action that corresponds to moving a node.\r\n * @see SetGeometryAction\r\n * @public\r\n */\r\n MoveNode = 'move-node',\r\n /**\r\n * Action that corresponds to pasting diagram elements from the clipboard.\r\n * @see PasteAction\r\n * @public\r\n */\r\n Paste = 'paste',\r\n /**\r\n * Action that corresponds to removing elements.\r\n * @see RemoveAction\r\n * @public\r\n */\r\n Remove = 'remove',\r\n /**\r\n * Action that corresponds to altering a node's dimensions.\r\n * @see SetGeometryActionAction\r\n * @public\r\n */\r\n StretchNode = 'stretch-node',\r\n /**\r\n * Action that corresponds to altering a sections's dimensions.\r\n * @see SetGeometryAction\r\n * @public\r\n */\r\n StretchSection = 'stretch-section',\r\n /**\r\n * Action that corresponds to changing the values of a value set.\r\n * @see UpdateValuesAction\r\n * @public\r\n */\r\n UpdateValues = 'update-values',\r\n /**\r\n * Action that corresponds to changing the view point of a diagram by zooming or panning.\r\n * @public\r\n */\r\n Zoom = 'zoom'\r\n}\r\n\r\n/**\r\n * Action which consists of adding a node.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport class AddNodeAction implements DiagramAction {\r\n canvas: Canvas;\r\n type: DiagramNodeType;\r\n coords: Point;\r\n label?: string;\r\n values?: { [key: string]: unknown };\r\n id: string;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n type: DiagramNodeType,\r\n coords: Point,\r\n label?: string,\r\n values?: { [key: string]: unknown }\r\n ) {\r\n this.canvas = canvas;\r\n this.type = type;\r\n this.coords = coords;\r\n this.label = label;\r\n this.values = values;\r\n this.id = this.canvas.collabEngine.freshId();\r\n }\r\n\r\n do(): void {\r\n const collabAction = new AddNodeCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.type.id,\r\n this.coords,\r\n this.label,\r\n this.values\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n [this.id],\r\n [],\r\n [],\r\n [],\r\n [],\r\n true,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n redo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n [this.id],\r\n [],\r\n [],\r\n [],\r\n [],\r\n false,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of changing a node's geometry: moving, stretching, or stretching sections.\r\n * @see DiagramNode\r\n * @private\r\n */\r\nexport class SetGeometryAction implements DiagramAction {\r\n canvas: Canvas;\r\n intent:\r\n | DiagramActions.MoveNode\r\n | DiagramActions.StretchNode\r\n | DiagramActions.StretchSection;\r\n nodeId: string;\r\n from: DiagramNodeGeometry;\r\n to: DiagramNodeGeometry;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n intent:\r\n | DiagramActions.MoveNode\r\n | DiagramActions.StretchNode\r\n | DiagramActions.StretchSection,\r\n nodeId: string,\r\n from: DiagramNodeGeometry,\r\n to: DiagramNodeGeometry\r\n ) {\r\n this.canvas = canvas;\r\n this.intent = intent;\r\n this.nodeId = nodeId;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n do(): void {\r\n const collabAction = new SetGeometryCollabAction(\r\n this.canvas,\r\n this.nodeId,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const node = this.canvas.model.nodes.get(this.nodeId);\r\n if (node) {\r\n this.to = node.getGeometry();\r\n const collabAction = new SetGeometryCollabAction(\r\n this.canvas,\r\n this.nodeId,\r\n this.from,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n\r\n redo(): void {\r\n const node = this.canvas.model.nodes.get(this.nodeId);\r\n if (node) {\r\n this.from = node.getGeometry();\r\n const collabAction = new SetGeometryCollabAction(\r\n this.canvas,\r\n this.nodeId,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of adding a connection.\r\n * @see DiagramConnection\r\n * @private\r\n */\r\nexport class AddConnectionAction implements DiagramAction {\r\n canvas: Canvas;\r\n type: DiagramConnectionType;\r\n startId: string;\r\n endId: string;\r\n id: string;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n type: DiagramConnectionType,\r\n startId: string,\r\n endId: string\r\n ) {\r\n this.canvas = canvas;\r\n this.type = type;\r\n this.startId = startId;\r\n this.endId = endId;\r\n this.id = this.canvas.collabEngine.freshId();\r\n }\r\n\r\n do(): void {\r\n const collabAction = new AddConnectionCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.type.id,\r\n this.startId,\r\n this.endId\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n [],\r\n [],\r\n [],\r\n [this.id],\r\n [],\r\n true,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n redo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n [],\r\n [],\r\n [],\r\n [this.id],\r\n [],\r\n false,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of editing the text of a field.\r\n * @see DiagramField\r\n * @private\r\n */\r\nexport class EditFieldAction implements DiagramAction {\r\n canvas: Canvas;\r\n fieldId: string;\r\n from: string;\r\n to: string;\r\n\r\n constructor(canvas: Canvas, fieldId: string, from: string, to: string) {\r\n this.canvas = canvas;\r\n this.fieldId = fieldId;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n do(): void {\r\n const collabAction = new EditFieldCollabAction(\r\n this.canvas,\r\n this.fieldId,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const field = this.canvas.model.fields.get(this.fieldId);\r\n if (field) {\r\n this.to = field.text;\r\n const collabAction = new EditFieldCollabAction(\r\n this.canvas,\r\n this.fieldId,\r\n this.from,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n\r\n redo(): void {\r\n const field = this.canvas.model.fields.get(this.fieldId);\r\n if (field) {\r\n this.from = field.text;\r\n const collabAction = new EditFieldCollabAction(\r\n this.canvas,\r\n this.fieldId,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of editing the values of a value set.\r\n * @see ValueSet\r\n * @private\r\n */\r\nexport class UpdateValuesAction implements DiagramAction {\r\n canvas: Canvas;\r\n id: string | undefined;\r\n from: { [key: string]: unknown };\r\n to: { [key: string]: unknown };\r\n\r\n constructor(\r\n canvas: Canvas,\r\n id: string | undefined,\r\n from: { [key: string]: unknown },\r\n to: { [key: string]: unknown }\r\n ) {\r\n this.canvas = canvas;\r\n this.id = id;\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n do(): void {\r\n const collabAction = new UpdateValuesCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new UpdateValuesCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.from,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n const valueSet = collabAction.getValueSet();\r\n if (valueSet) {\r\n this.to = valueSet.getValuesForKeys(this.to);\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n\r\n redo(): void {\r\n const collabAction = new UpdateValuesCollabAction(\r\n this.canvas,\r\n this.id,\r\n this.to,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n const valueSet = collabAction.getValueSet();\r\n if (valueSet) {\r\n this.from = valueSet.getValuesForKeys(this.from);\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of removing elements from a diagram.\r\n *\r\n * You should only include an element in this action if the element itself is explicitly removed.\r\n * Elements removed as a consequence of a removing another element\r\n * (e.g., removing a node removes all of its sections)\r\n * will be handled automatically, in a way that converges in the case\r\n * of concurrent collaborative actions.\r\n *\r\n * @private\r\n */\r\nexport class RemoveAction implements DiagramAction {\r\n canvas: Canvas;\r\n nodeIds: string[];\r\n sectionIds: string[];\r\n portIds: string[];\r\n connectionIds: string[];\r\n fieldIds: string[];\r\n\r\n constructor(\r\n canvas: Canvas,\r\n nodeIds: string[],\r\n sectionIds: string[],\r\n portIds: string[],\r\n connectionIds: string[],\r\n fieldIds: string[]\r\n ) {\r\n this.canvas = canvas;\r\n this.nodeIds = nodeIds;\r\n this.sectionIds = sectionIds;\r\n this.portIds = portIds;\r\n this.connectionIds = connectionIds;\r\n this.fieldIds = fieldIds;\r\n }\r\n\r\n do(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n this.nodeIds,\r\n this.sectionIds,\r\n this.portIds,\r\n this.connectionIds,\r\n this.fieldIds,\r\n true,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n this.nodeIds,\r\n this.sectionIds,\r\n this.portIds,\r\n this.connectionIds,\r\n this.fieldIds,\r\n false,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n redo(): void {\r\n this.do();\r\n }\r\n}\r\n\r\n/**\r\n * Action which consists of pasting elements from an external source into a diagram.\r\n *\r\n * @private\r\n */\r\nexport class PasteAction implements DiagramAction {\r\n canvas: Canvas;\r\n nodes: DagaNode[];\r\n connections: DagaConnection[];\r\n coords?: Point;\r\n\r\n constructor(\r\n canvas: Canvas,\r\n nodes: DagaNode[],\r\n connections: DagaConnection[],\r\n coords?: Point\r\n ) {\r\n this.canvas = canvas;\r\n this.nodes = nodes;\r\n this.connections = connections;\r\n this.coords = coords;\r\n }\r\n\r\n do(): void {\r\n const minCoords = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY];\r\n for (const node of this.nodes) {\r\n if (node.coords[0] < minCoords[0]) {\r\n minCoords[0] = node.coords[0];\r\n }\r\n if (node.coords[1] < minCoords[1]) {\r\n minCoords[1] = node.coords[1];\r\n }\r\n }\r\n const coordsDiff =\r\n this.coords !== undefined\r\n ? [this.coords[0] - minCoords[0], this.coords[1] - minCoords[1]]\r\n : undefined;\r\n // create new unique ids for pasted elements\r\n const idRefresh: { [key: string]: string } = {};\r\n const newNodes: DagaNode[] = [];\r\n const newConnections: DagaConnection[] = [];\r\n for (const node of this.nodes) {\r\n const oldNodeId = node.id;\r\n const newNodeId = this.canvas.collabEngine.freshId();\r\n idRefresh[oldNodeId] = newNodeId;\r\n const newNode = structuredClone(node);\r\n newNode.id = newNodeId;\r\n if (coordsDiff) {\r\n newNode.coords = [\r\n newNode.coords[0] + coordsDiff[0],\r\n newNode.coords[1] + coordsDiff[1]\r\n ];\r\n }\r\n newNodes.push(newNode);\r\n if (newNode.sections) {\r\n for (const newSection of newNode.sections) {\r\n const oldSectionId = newSection.id;\r\n if (newSection.id.includes(node.id)) {\r\n newSection.id = newSection.id.replace(node.id, newNodeId);\r\n } else {\r\n newSection.id = this.canvas.collabEngine.freshId();\r\n }\r\n idRefresh[oldSectionId] = newSection.id;\r\n if (coordsDiff) {\r\n newSection.coords = [\r\n newSection.coords[0] + coordsDiff[0],\r\n newSection.coords[1] + coordsDiff[1]\r\n ];\r\n }\r\n if (newSection.ports) {\r\n for (const newPort of newSection.ports) {\r\n const oldPortId = newPort.id;\r\n if (newPort.id.includes(node.id)) {\r\n newPort.id = newPort.id.replace(node.id, newNodeId);\r\n } else {\r\n newPort.id = this.canvas.collabEngine.freshId();\r\n }\r\n idRefresh[oldPortId] = newPort.id;\r\n if (coordsDiff) {\r\n newPort.coords = [\r\n newPort.coords[0] + coordsDiff[0],\r\n newPort.coords[1] + coordsDiff[1]\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (newNode.ports) {\r\n for (const newPort of newNode.ports) {\r\n const oldPortId = newPort.id;\r\n if (newPort.id.includes(node.id)) {\r\n newPort.id = newPort.id.replace(node.id, newNodeId);\r\n } else {\r\n newPort.id = this.canvas.collabEngine.freshId();\r\n }\r\n idRefresh[oldPortId] = newPort.id;\r\n if (coordsDiff) {\r\n newPort.coords = [\r\n newPort.coords[0] + coordsDiff[0],\r\n newPort.coords[1] + coordsDiff[1]\r\n ];\r\n }\r\n }\r\n }\r\n }\r\n for (const connection of this.connections) {\r\n const newConnectionId = this.canvas.collabEngine.freshId();\r\n idRefresh[connection.id] = newConnectionId;\r\n const newConnection = structuredClone(connection);\r\n newConnection.id = newConnectionId;\r\n // if the id of the start or end ports have changed, change it to the new one\r\n newConnection.start =\r\n idRefresh[newConnection.start] || newConnection.start;\r\n newConnection.end = idRefresh[newConnection.end] || newConnection.end;\r\n if (coordsDiff) {\r\n for (let i = 0; i < newConnection.points.length; ++i) {\r\n newConnection.points[i] = [\r\n newConnection.points[i][0] + coordsDiff[0],\r\n newConnection.points[i][1] + coordsDiff[1]\r\n ];\r\n }\r\n }\r\n newConnections.push(newConnection);\r\n }\r\n const collabAction = new PasteCollabAction(\r\n this.canvas,\r\n newNodes,\r\n newConnections\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n undo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n this.nodes.map((n) => n.id),\r\n [],\r\n [],\r\n this.connections.map((c) => c.id),\r\n [],\r\n true,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n\r\n redo(): void {\r\n const collabAction = new SetSelfRemovedCollabAction(\r\n this.canvas,\r\n this.nodes.map((n) => n.id),\r\n [],\r\n [],\r\n this.connections.map((c) => c.id),\r\n [],\r\n false,\r\n this.canvas.collabEngine.freshTimestamp()\r\n );\r\n this.canvas.collabEngine.doCollaboratively(collabAction);\r\n }\r\n}\r\n","import { Point } from './canvas-util';\n\n/**\n * A two dimensional array of elements of the given class that can extend infinitely in any direction, both positive and negative.\n * @private\n */\nexport class Grid<T> {\n private grid: (T | undefined)[][] = [[undefined]];\n private offsetX = 0;\n private offsetY = 0;\n\n /**\n * Get the minimum x coordinate among the elements in the grid.\n */\n minX(): number {\n return -this.offsetX;\n }\n\n /**\n * Get the maximum x coordinate among the elements in the grid.\n */\n maxX(): number {\n return this.width() - 1 - this.offsetX;\n }\n\n /**\n * Get the minimum y coordinate among the elements in the grid.\n */\n minY(): number {\n return -this.offsetY;\n }\n\n /**\n * Get the maximum y coordinate among the elements in the grid.\n */\n maxY(): number {\n return this.height() - 1 - this.offsetY;\n }\n\n /**\n * Get the total extension of the grid along the x axis.\n */\n width(): number {\n return this.grid[0].length;\n }\n\n /**\n * Get the total extension of the grid along the y axis.\n */\n height(): number {\n return this.grid.length;\n }\n\n /**\n * Add a new column at the start of the x axis.\n */\n addColumnLeft() {\n for (const row of this.grid) {\n row.splice(0, 0, undefined);\n }\n this.offsetX = this.offsetX + 1;\n }\n\n /**\n * Add a new column at the end of the x axis.\n */\n addColumnRight() {\n for (const row of this.grid) {\n row.push(undefined);\n }\n }\n\n /**\n * Add a new row at the start of the y axis.\n */\n addRowTop() {\n const newRow = [];\n for (let i = 0; i < this.grid[0].length; ++i) {\n newRow.push(undefined);\n }\n this.grid.splice(0, 0, newRow);\n this.offsetY = this.offsetY + 1;\n }\n\n /**\n * Add a new row at the end of the y axis.\n */\n addRowBottom() {\n const newRow = [];\n for (let i = 0; i < this.grid[0].length; ++i) {\n newRow.push(undefined);\n }\n this.grid.push(newRow);\n }\n\n /**\n * Get the element at the given coordinates or undefined if there is no element at the given coordinates.\n */\n get(coords: Point): T | undefined {\n if (this.grid[coords[1] + this.offsetY]) {\n return this.grid[coords[1] + this.offsetY][coords[0] + this.offsetX];\n }\n return undefined;\n }\n\n /**\n * Set the element at the given coordinates to the given element.\n */\n set(coords: Point, value: T | undefined): void {\n while (coords[0] < -this.offsetX) {\n this.addColumnLeft();\n }\n while (coords[0] >= this.width() - this.offsetX) {\n this.addColumnRight();\n }\n while (coords[1] < -this.offsetY) {\n this.addRowTop();\n }\n while (coords[1] >= this.height() - this.offsetY) {\n this.addRowBottom();\n }\n this.grid[coords[1] + this.offsetY][coords[0] + this.offsetX] = value;\n }\n\n /**\n * Get the closest coordinates to the given coordinates that are not set to an element.\n */\n getClosestEmptyCoordinate(coords: Point): Point {\n if (this.get(coords) === undefined) {\n return coords;\n }\n const foundCoords: Point = [...coords];\n // go in a spiral until found the closest empty coordinate\n for (let i = 1; ; ++i) {\n const increase = i % 2 > 0 ? i : -i;\n const step = increase > 0 ? 1 : -1;\n const goalCoords = [foundCoords[0] + increase, foundCoords[1] + increase];\n for (let j = foundCoords[0]; j !== goalCoords[0] + step; j += step) {\n foundCoords[0] = j;\n if (this.get(foundCoords) === undefined) {\n return foundCoords;\n }\n }\n for (let j = foundCoords[1]; j !== goalCoords[1] + step; j += step) {\n foundCoords[1] = j;\n if (this.get(foundCoords) === undefined) {\n return foundCoords;\n }\n }\n }\n }\n}\n","import { Point } from '../../../util/canvas-util';\r\nimport { Grid } from '../../../util/grid';\r\nimport { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which places adjacent nodes close by, placing nodes in order according to depth first search.\r\n * @public\r\n */\r\nexport class AdjacencyLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // arrange nodes\r\n\r\n const nodeArrangement = new Grid<DiagramNode>();\r\n const nodesToBeArranged = model.nodes.all();\r\n\r\n while (nodesToBeArranged.length > 0) {\r\n arrangeNode(\r\n nodesToBeArranged[0],\r\n nodeArrangement,\r\n [0, 0],\r\n nodesToBeArranged\r\n );\r\n }\r\n\r\n // place nodes according to arrangement\r\n\r\n const maximumWidth = Math.max(...model.nodes.map((n) => n.width));\r\n const maximumHeight = Math.max(...model.nodes.map((n) => n.height));\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n for (let y = nodeArrangement.minY(); y <= nodeArrangement.maxY(); ++y) {\r\n for (let x = nodeArrangement.minX(); x <= nodeArrangement.maxX(); ++x) {\r\n const node = nodeArrangement.get([x, y]);\r\n if (node !== undefined) {\r\n node.move([\r\n x * (maximumWidth + gapSize),\r\n y * (maximumHeight + gapSize)\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n\r\nconst arrangeNode = (\r\n node: DiagramNode,\r\n nodeArrangement: Grid<DiagramNode>,\r\n coords: Point,\r\n nodesToBeArranged: DiagramNode[]\r\n): void => {\r\n const placementCoords = nodeArrangement.getClosestEmptyCoordinate(coords);\r\n nodeArrangement.set(placementCoords, node);\r\n removeIfExists(nodesToBeArranged, node);\r\n for (const adjacency of node.getAdjacentNodes()) {\r\n if (nodesToBeArranged.includes(adjacency)) {\r\n arrangeNode(\r\n adjacency,\r\n nodeArrangement,\r\n placementCoords,\r\n nodesToBeArranged\r\n );\r\n }\r\n }\r\n};\r\n","import { Point } from '../../../util/canvas-util';\r\nimport { Grid } from '../../../util/grid';\r\nimport { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which places adjacent nodes close by, placing nodes in order according to breadth first search.\r\n * @public\r\n */\r\nexport class BreadthAdjacencyLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // arrange nodes\r\n\r\n const nodeArrangement = new Grid<DiagramNode>();\r\n const nodesToBeArranged = model.nodes.all();\r\n const nodeGridIndices: { [key: string]: Point } = {};\r\n const firstNode = nodesToBeArranged[0];\r\n\r\n let currentNodeLevel = [firstNode];\r\n nodeGridIndices[firstNode.id] = [0, 0];\r\n\r\n while (nodesToBeArranged.length > 0) {\r\n const nextNodeLevel: DiagramNode[] = [];\r\n for (const nodeInThisLevel of currentNodeLevel) {\r\n nodeArrangement.set(\r\n nodeArrangement.getClosestEmptyCoordinate(\r\n nodeGridIndices[nodeInThisLevel.id]\r\n ),\r\n nodeInThisLevel\r\n );\r\n removeIfExists(nodesToBeArranged, nodeInThisLevel);\r\n const nodesAdjacentToThisNode = nodeInThisLevel.getAdjacentNodes();\r\n for (const adjacentNode of nodesAdjacentToThisNode) {\r\n if (nodesToBeArranged.includes(adjacentNode)) {\r\n nextNodeLevel.push(adjacentNode);\r\n nodeGridIndices[adjacentNode.id] =\r\n nodeGridIndices[nodeInThisLevel.id];\r\n }\r\n }\r\n }\r\n if (nextNodeLevel.length > 0) {\r\n currentNodeLevel = nextNodeLevel;\r\n } else if (nodesToBeArranged.length > 0) {\r\n const disconnectedNode = nodesToBeArranged[0];\r\n currentNodeLevel = [disconnectedNode];\r\n nodeGridIndices[disconnectedNode.id] =\r\n nodeArrangement.getClosestEmptyCoordinate([0, 0]);\r\n }\r\n }\r\n\r\n // place nodes according to arrangement\r\n\r\n const maximumWidth = Math.max(...model.nodes.map((n) => n.width));\r\n const maximumHeight = Math.max(...model.nodes.map((n) => n.height));\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n for (let y = nodeArrangement.minY(); y <= nodeArrangement.maxY(); ++y) {\r\n for (let x = nodeArrangement.minX(); x <= nodeArrangement.maxX(); ++x) {\r\n const node = nodeArrangement.get([x, y]);\r\n if (node !== undefined) {\r\n node.move([\r\n x * (maximumWidth + gapSize),\r\n y * (maximumHeight + gapSize)\r\n ]);\r\n }\r\n }\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges the nodes by a breadth first search system according to their distance to the first node in the list.\r\n * @public\r\n */\r\nexport class BreadthLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n let nodesToBeArranged = model.nodes.all();\r\n\r\n // Arrange nodes by a breadth first search\r\n const firstNode = nodesToBeArranged[0];\r\n removeIfExists(nodesToBeArranged, firstNode);\r\n /*\r\n * Node arrangement is a list of lists where:\r\n * the first list is the first node in the list of nodes\r\n * the second list is the nodes connected directly to the first node\r\n * the third list is the nodes connected directly to the nodes in the second list\r\n * and so on\r\n */\r\n const nodeArrangement = [[firstNode]];\r\n while (nodesToBeArranged.length > 0) {\r\n const lastRowOfNodes = nodeArrangement[nodeArrangement.length - 1];\r\n const nodesInNextRow: DiagramNode[] = [];\r\n for (const nodeInLastRow of lastRowOfNodes) {\r\n const nodesAdjacentToThisNode = nodeInLastRow.getAdjacentNodes();\r\n for (const adjacentNode of nodesAdjacentToThisNode) {\r\n if (nodesToBeArranged.includes(adjacentNode)) {\r\n removeIfExists(nodesToBeArranged, adjacentNode);\r\n nodesInNextRow.push(adjacentNode);\r\n }\r\n }\r\n }\r\n if (nodesInNextRow.length > 0) {\r\n nodeArrangement.push(nodesInNextRow);\r\n } else {\r\n // what remains in nodesToBeArranged are the nodes which aren't connected to any other node\r\n // we add them as one last line of nodes to the node arrangement\r\n nodeArrangement.push(nodesToBeArranged);\r\n nodesToBeArranged = [];\r\n }\r\n }\r\n\r\n let widthAccumulator = 0;\r\n for (const nodeArrangementRow of nodeArrangement) {\r\n let heightAccumulator = 0;\r\n for (const node of nodeArrangementRow) {\r\n node.move([widthAccumulator, heightAccumulator]);\r\n heightAccumulator += gapSize + node.height;\r\n }\r\n const maximumWidth = Math.max(...nodeArrangementRow.map((n) => n.width));\r\n widthAccumulator += gapSize + maximumWidth;\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { Point, distanceBetweenPoints } from '../../../util/canvas-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which attracts connected nodes and repels unconnected nodes.\r\n * @public\r\n */\r\nexport class ForceLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n // as a starting point, we apply a simple layout\r\n new BreadthLayout().apply(model);\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n const coolingFactor = 0.99;\r\n const minimumTemperature = 1;\r\n const attractionFactor = 0.1;\r\n const repulsionFactor = 200_000;\r\n const gapRepulsionFactor = 0.5;\r\n const shiftNodeIfOverlap = 1;\r\n const gravityFactor = 0.002;\r\n let temperature = 100;\r\n\r\n while (temperature > minimumTemperature) {\r\n temperature = temperature * coolingFactor;\r\n // calculate the center of the diagram for applying gravity\r\n const diagramCenterCoords: Point = [0, 0];\r\n if (gravityFactor > 0) {\r\n for (const node of model.nodes) {\r\n diagramCenterCoords[0] =\r\n diagramCenterCoords[0] + node.coords[0] + node.width / 2;\r\n diagramCenterCoords[1] =\r\n diagramCenterCoords[1] + node.coords[1] + node.width / 2;\r\n }\r\n diagramCenterCoords[0] = diagramCenterCoords[0] / model.nodes.length;\r\n diagramCenterCoords[1] = diagramCenterCoords[1] / model.nodes.length;\r\n }\r\n\r\n for (const node1 of model.nodes) {\r\n const node1Adjacencies = node1.getAdjacentNodes();\r\n for (const node2 of model.nodes) {\r\n const node1CenterCoords: Point = [\r\n node1.coords[0] + node1.width / 2,\r\n node1.coords[1] + node1.height / 2\r\n ];\r\n const node2CenterCoords: Point = [\r\n node2.coords[0] + node2.width / 2,\r\n node2.coords[1] + node2.height / 2\r\n ];\r\n const distanceBetweenNodes = distanceBetweenPoints(\r\n node1.coords,\r\n node2.coords\r\n );\r\n const newNode2Coords: Point = [node2.coords[0], node2.coords[1]];\r\n // apply attraction forces between connected nodes\r\n if (node1Adjacencies.includes(node2)) {\r\n if (distanceBetweenNodes > 0) {\r\n if (\r\n distanceBetweenNodes >\r\n gapSize +\r\n (Math.max(node1.width, node1.height) +\r\n Math.max(node2.width, node2.height)) /\r\n 2\r\n ) {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] -\r\n (node2CenterCoords[0] - node1CenterCoords[0]) *\r\n attractionFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] -\r\n (node2CenterCoords[1] - node1CenterCoords[1]) *\r\n attractionFactor;\r\n } else {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] +\r\n (node2CenterCoords[0] - node1CenterCoords[0]) *\r\n gapRepulsionFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] +\r\n (node2CenterCoords[1] - node1CenterCoords[1]) *\r\n gapRepulsionFactor;\r\n }\r\n }\r\n }\r\n // apply repulsion forces between nodes\r\n if (distanceBetweenNodes > 0) {\r\n const force =\r\n repulsionFactor / (distanceBetweenNodes * distanceBetweenNodes);\r\n newNode2Coords[0] =\r\n newNode2Coords[0] +\r\n (force * (node2CenterCoords[0] - node1CenterCoords[0])) /\r\n distanceBetweenNodes;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] +\r\n (force * (node2CenterCoords[1] - node1CenterCoords[1])) /\r\n distanceBetweenNodes;\r\n } else {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] + shiftNodeIfOverlap * (Math.random() * 2 - 1);\r\n newNode2Coords[1] =\r\n newNode2Coords[1] + shiftNodeIfOverlap * (Math.random() * 2 - 1);\r\n }\r\n // apply gravity force\r\n if (gravityFactor > 0) {\r\n newNode2Coords[0] =\r\n newNode2Coords[0] -\r\n (node2CenterCoords[0] - diagramCenterCoords[0]) * gravityFactor;\r\n newNode2Coords[1] =\r\n newNode2Coords[1] -\r\n (node2CenterCoords[1] - diagramCenterCoords[1]) * gravityFactor;\r\n }\r\n // limit force\r\n if (newNode2Coords[0] - node2.coords[0] > temperature) {\r\n newNode2Coords[0] = node2.coords[0] + temperature;\r\n } else if (newNode2Coords[0] - node2.coords[0] < -temperature) {\r\n newNode2Coords[0] = node2.coords[0] - temperature;\r\n }\r\n if (newNode2Coords[1] - node2.coords[1] > temperature) {\r\n newNode2Coords[1] = node2.coords[1] + temperature;\r\n } else if (newNode2Coords[1] - node2.coords[1] < -temperature) {\r\n newNode2Coords[1] = node2.coords[1] - temperature;\r\n }\r\n\r\n node2.move(newNode2Coords);\r\n }\r\n }\r\n }\r\n\r\n if (model.canvas && model.canvas.snapToGrid) {\r\n for (const node of model.nodes) {\r\n const snappedCoords = model.canvas.getClosestGridPoint(node.coords);\r\n node.move(snappedCoords);\r\n }\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges all the nodes in a horizontal line.\r\n * @public\r\n */\r\nexport class HorizontalLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n const nodesToBeArranged = model.nodes.all();\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n\r\n let widthAccumulator = 0;\r\n\r\n for (const node of nodesToBeArranged) {\r\n node.move([widthAccumulator, 0]);\r\n widthAccumulator += node.width + gapSize;\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { removeIfExists } from '../../../util/list-util';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges the nodes by their priority first.\r\n * @public\r\n */\r\nexport class PriorityLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const maximumPriority = Math.max(\r\n ...model.nodes.map((n) => n.getPriority())\r\n );\r\n const minimumPriority = Math.min(\r\n ...model.nodes.map((n) => n.getPriority())\r\n );\r\n if (maximumPriority === minimumPriority) {\r\n // if there's no disparity in priorities, just use breadth layout\r\n new BreadthLayout().apply(model);\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n const nodesToBeArranged = model.nodes.all();\r\n const nodeArrangement: DiagramNode[][] = [];\r\n\r\n const nodesWithMaximumPriorityToBeArranged = model.nodes.filter(\r\n (n) => n.getPriority() >= maximumPriority\r\n );\r\n const nodesWithMaximumPriority: DiagramNode[] = [];\r\n if (nodesWithMaximumPriorityToBeArranged.length > 1) {\r\n // use bfs to sort nodes by distance to the first node\r\n const bfsRoot = nodesWithMaximumPriorityToBeArranged[0];\r\n nodesWithMaximumPriorityToBeArranged.splice(0, 1);\r\n nodesWithMaximumPriority.push(bfsRoot);\r\n const bfsQueue = [bfsRoot];\r\n const bfsExplored = [bfsRoot];\r\n while (bfsQueue.length > 0) {\r\n const bfsNode = bfsQueue[0];\r\n bfsQueue.splice(0, 1);\r\n if (nodesWithMaximumPriorityToBeArranged.includes(bfsNode)) {\r\n nodesWithMaximumPriority.push(bfsNode);\r\n removeIfExists(nodesWithMaximumPriorityToBeArranged, bfsNode);\r\n }\r\n const bfsAdjacentNodes = bfsNode.getAdjacentNodes();\r\n for (const bfsAdjacentNode of bfsAdjacentNodes) {\r\n if (!bfsExplored.includes(bfsAdjacentNode)) {\r\n bfsQueue.push(bfsAdjacentNode);\r\n bfsExplored.push(bfsAdjacentNode);\r\n }\r\n }\r\n }\r\n // nodes that are disconnected from other nodes\r\n for (const node of nodesWithMaximumPriorityToBeArranged) {\r\n nodesWithMaximumPriority.push(node);\r\n }\r\n } else {\r\n nodesWithMaximumPriority.push(nodesWithMaximumPriorityToBeArranged[0]);\r\n }\r\n for (const node of nodesWithMaximumPriority) {\r\n removeIfExists(nodesToBeArranged, node);\r\n nodeArrangement.push([node]);\r\n }\r\n // last column, for disconnected nodes\r\n nodeArrangement.push([]);\r\n\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n while (nodesToBeArranged.length > 0) {\r\n // use bfs to find the closest high priority node\r\n const nodeToBeArranged = nodesToBeArranged[0];\r\n nodesToBeArranged.splice(0, 1);\r\n const bfsQueue = [nodeToBeArranged];\r\n const bfsExplored = [nodeToBeArranged];\r\n let bfsFound = false;\r\n while (bfsQueue.length > 0) {\r\n const bfsNode = bfsQueue[0];\r\n bfsQueue.splice(0, 1);\r\n const indexOfBfsNode = nodesWithMaximumPriority.indexOf(bfsNode);\r\n if (indexOfBfsNode >= 0) {\r\n nodeArrangement[indexOfBfsNode].push(nodeToBeArranged);\r\n bfsFound = true;\r\n break;\r\n } else {\r\n const bfsAdjacentNodes = bfsNode.getAdjacentNodes();\r\n for (const bfsAdjacentNode of bfsAdjacentNodes) {\r\n if (!bfsExplored.includes(bfsAdjacentNode)) {\r\n bfsQueue.push(bfsAdjacentNode);\r\n bfsExplored.push(bfsAdjacentNode);\r\n }\r\n }\r\n }\r\n }\r\n if (!bfsFound) {\r\n // node is disconnected from any of the high priority nodes\r\n nodeArrangement[nodeArrangement.length - 1].push(nodeToBeArranged);\r\n }\r\n }\r\n\r\n let widthAccumulator = 0;\r\n for (let i = 0; i < nodeArrangement.length; ++i) {\r\n let heightAccumulator = 0;\r\n for (let j = 0; j < nodeArrangement[i].length; ++j) {\r\n const node = nodeArrangement[i][j];\r\n node.move([widthAccumulator, heightAccumulator]);\r\n heightAccumulator += gapSize + node.height;\r\n }\r\n const maximumWidth = Math.max(...nodeArrangement[i].map((n) => n.width));\r\n widthAccumulator += gapSize + maximumWidth;\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges the nodes in trees from left to right by depth relative to the nodes with most priority.\r\n * @public\r\n */\r\nexport class TreeLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const maximumPriority = Math.max(\r\n ...model.nodes.map((n) => n.getPriority())\r\n );\r\n const minimumPriority = Math.min(\r\n ...model.nodes.map((n) => n.getPriority())\r\n );\r\n if (maximumPriority === minimumPriority) {\r\n // if there's no disparity in priorities, just use breadth layout\r\n new BreadthLayout().apply(model);\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n const nodesToBeArranged = [...model.nodes].sort(\r\n (n1, n2) => n2.getPriority() - n1.getPriority()\r\n );\r\n const branches: Branch[] = [];\r\n\r\n while (nodesToBeArranged.length > 0) {\r\n const nodeToBeArranged = nodesToBeArranged[0];\r\n nodesToBeArranged.splice(0, 1);\r\n const branch = new Branch(undefined, nodeToBeArranged);\r\n populateBranches(branch, nodesToBeArranged);\r\n branches.push(branch);\r\n }\r\n\r\n const branchArrangement: Branch[][] = [];\r\n for (const branch of branches) {\r\n branchArrangement.push([branch]);\r\n arrangeBranches(branch, branchArrangement, branchArrangement.length);\r\n }\r\n\r\n const maximumHeight = Math.max(...model.nodes.map((n) => n.height));\r\n let widthAccumulator = 0;\r\n for (let i = 0; i < branchArrangement.length; ++i) {\r\n let heightAccumulator = 0;\r\n for (let j = 0; j < branchArrangement[i].length; ++j) {\r\n const branch = branchArrangement[i][j];\r\n branch.node.move([widthAccumulator, heightAccumulator]);\r\n heightAccumulator +=\r\n (gapSize + maximumHeight) * branch.countBranchHeight();\r\n }\r\n const maximumWidth = Math.max(\r\n ...branchArrangement[i].map((b) => b.node.width)\r\n );\r\n widthAccumulator += gapSize + maximumWidth;\r\n }\r\n\r\n for (const connection of model.connections) {\r\n connection.tighten();\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n\r\nconst populateBranches = (branch: Branch, nodesToBeArranged: DiagramNode[]) => {\r\n for (const adjacentNode of branch.node\r\n .getAdjacentNodes()\r\n .sort((n1, n2) => n2.getPriority() - n1.getPriority())) {\r\n const indexOfAdjacentNode = nodesToBeArranged.indexOf(adjacentNode);\r\n if (indexOfAdjacentNode >= 0) {\r\n nodesToBeArranged.splice(indexOfAdjacentNode, 1);\r\n const newBranch = branch.addBranch(adjacentNode);\r\n populateBranches(newBranch, nodesToBeArranged);\r\n }\r\n }\r\n};\r\n\r\nconst arrangeBranches = (\r\n branch: Branch,\r\n branchArrangement: Branch[][],\r\n index: number\r\n) => {\r\n if (branch.branches.length > 0) {\r\n while (index >= branchArrangement.length) {\r\n branchArrangement.push([]);\r\n }\r\n for (const subbranch of branch.branches) {\r\n branchArrangement[index].push(subbranch);\r\n arrangeBranches(subbranch, branchArrangement, index + 1);\r\n }\r\n }\r\n};\r\n\r\nclass Branch {\r\n parent?: Branch;\r\n branches: Branch[];\r\n depth: number;\r\n node: DiagramNode;\r\n\r\n constructor(parent: Branch | undefined, node: DiagramNode) {\r\n this.parent = parent;\r\n this.branches = [];\r\n this.depth = 0;\r\n this.node = node;\r\n }\r\n\r\n addBranch(node: DiagramNode): Branch {\r\n const newBranch = new Branch(this, node);\r\n newBranch.depth = this.depth + 1;\r\n this.branches.push(newBranch);\r\n return newBranch;\r\n }\r\n\r\n countBranchHeight(): number {\r\n if (this.branches.length <= 0) {\r\n return 1;\r\n } else {\r\n let total = 0;\r\n for (const subbranch of this.branches) {\r\n total += subbranch.countBranchHeight();\r\n }\r\n return total;\r\n }\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { DiagramLayout } from './diagram-layout';\r\n\r\n/**\r\n * A layout which arranges all the nodes in a vertical line.\r\n * @public\r\n */\r\nexport class VerticalLayout implements DiagramLayout {\r\n apply(model: DiagramModel): DiagramModel {\r\n if (model.nodes.length === 0) {\r\n // nothing to arrange...\r\n return model;\r\n }\r\n\r\n const gapSize = (model.canvas?.gridSize || 0) * 2;\r\n\r\n const nodesToBeArranged = model.nodes.all();\r\n nodesToBeArranged.sort((a, b) => b.type.priority - a.type.priority);\r\n\r\n let heightAccumulator = 0;\r\n\r\n for (const node of nodesToBeArranged) {\r\n node.move([0, heightAccumulator]);\r\n heightAccumulator += node.height + gapSize;\r\n }\r\n\r\n model.canvas?.diagramChanges$.next();\r\n\r\n return model;\r\n }\r\n}\r\n","import { DiagramModel } from '../diagram-model';\r\nimport { AdjacencyLayout } from './adjacency-layout';\r\nimport { BreadthAdjacencyLayout } from './breadth-adjacency-layout';\r\nimport { BreadthLayout } from './breadth-layout';\r\nimport { ForceLayout } from './force-layout';\r\nimport { HorizontalLayout } from './horizontal-layout';\r\nimport { PriorityLayout } from './priority-layout';\r\nimport { TreeLayout } from './tree-layout';\r\nimport { VerticalLayout } from './vertical-layout';\r\n\r\n/**\r\n * A layout algorithm that can be applied to a diagram.\r\n * @public\r\n */\r\nexport interface DiagramLayout {\r\n /**\r\n * Rearranges the diagram elements of the given model according to a layout algorithm.\r\n * @public\r\n */\r\n apply(model: DiagramModel): DiagramModel;\r\n}\r\n\r\n/**\r\n * Mapping of available layout algorithms.\r\n */\r\nexport const layouts: { [key: string]: DiagramLayout } = {\r\n adjacency: new AdjacencyLayout(),\r\n breadth: new BreadthLayout(),\r\n 'breadth-adjacency': new BreadthAdjacencyLayout(),\r\n force: new ForceLayout(),\r\n horizontal: new HorizontalLayout(),\r\n priority: new PriorityLayout(),\r\n tree: new TreeLayout(),\r\n vertical: new VerticalLayout()\r\n};\r\n","/**\r\n * User events.\r\n * @private\r\n */\r\nexport enum Events {\r\n Blur = 'blur',\r\n Change = 'change',\r\n Click = 'click',\r\n ContextMenu = 'contextmenu',\r\n DoubleClick = 'dblclick',\r\n Focus = 'focus',\r\n FocusIn = 'focusin',\r\n FocusOut = 'focusout',\r\n Input = 'input',\r\n KeyDown = 'keydown',\r\n KeyUp = 'keyup',\r\n MouseDown = 'mousedown',\r\n MouseMove = 'mousemove',\r\n MouseOut = 'mouseout',\r\n MouseOver = 'mouseover',\r\n MouseUp = 'mouseup',\r\n TouchStart = 'touchstart',\r\n TouchEnd = 'touchend',\r\n Wheel = 'wheel'\r\n}\r\n\r\n/**\r\n * Keys in keyboard events.\r\n * @private\r\n */\r\nexport enum Keys {\r\n Alt = 'Alt',\r\n AltGraph = 'AltGraph',\r\n ArrowDown = 'ArrowDown',\r\n ArrowLeft = 'ArrowLeft',\r\n ArrowRight = 'ArrowRight',\r\n ArrowUp = 'ArrowUp',\r\n Backspace = 'Backspace',\r\n Control = 'Control',\r\n Delete = 'Delete',\r\n End = 'End',\r\n Enter = 'Enter',\r\n Escape = 'Escape',\r\n Home = 'Home',\r\n OS = 'OS',\r\n PageDown = 'PageDown',\r\n PageUp = 'PageUp',\r\n Shift = 'Shift',\r\n Tab = 'Tab'\r\n}\r\n\r\n/**\r\n * Types of events used by D3's drag functionality.\r\n * @private\r\n */\r\nexport enum DragEvents {\r\n Drag = 'drag',\r\n Start = 'start',\r\n End = 'end'\r\n}\r\n\r\n/**\r\n * Types of events used by D3's zoom functionality.\r\n * @private\r\n */\r\nexport enum ZoomEvents {\r\n Zoom = 'zoom',\r\n Start = 'start',\r\n End = 'end'\r\n}\r\n","export enum CursorStyle {\r\n AllScroll = 'all-scroll',\r\n Auto = 'auto',\r\n EWResize = 'ew-resize',\r\n Grab = 'grab',\r\n Grabbing = 'grabbing',\r\n Move = 'move',\r\n NoDrop = 'no-drop',\r\n NSResize = 'ns-resize',\r\n NotAllowed = 'not-allowed',\r\n ZoomIn = 'zoom-in',\r\n ZoomOut = 'zoom-out'\r\n}\r\n","export const numberOfColumns = (s: string): number => {\n return Math.max(...s.split('\\n').map((a) => a.length));\n};\nexport const numberOfRows = (s: string): number => {\n return s.match(/\\n/g)?.length || 0;\n};\n","import { v4 as uuidv4 } from 'uuid';\r\nimport type { Canvas } from '../../../interfaces/canvas';\r\nimport {\r\n AddConnectionCollabAction,\r\n AddNodeCollabAction,\r\n CollabAction,\r\n CollabActionSerialized,\r\n EditFieldCollabAction,\r\n PasteCollabAction,\r\n SetGeometryCollabAction,\r\n SetSelfRemovedCollabAction,\r\n UpdateValuesCollabAction\r\n} from './collab-action';\r\nimport { CollabTimestamp } from './primitives';\r\n\r\n/**\r\n * A collaboration engine, which manages collaboration for a diagram.\r\n * @private\r\n */\r\nexport class CollabEngine {\r\n /**\r\n * Canvas that this collaboration engine belongs to.\r\n * @private\r\n */\r\n readonly canvas: Canvas;\r\n /**\r\n * The local replica ID.\r\n */\r\n readonly replicaId: string;\r\n /**\r\n * Event handler for when we request to send a message to the server.\r\n */\r\n onSend?: (message: CollabActionSerialized) => void;\r\n /**\r\n * Whether we have joined (or are joining) a room on the server.\r\n */\r\n isInRoom = false;\r\n\r\n constructor(canvas: Canvas) {\r\n this.canvas = canvas;\r\n this.replicaId = uuidv4();\r\n }\r\n\r\n /**\r\n * Returns a fresh timestamp, suitable for use by new CollabActions.\r\n */\r\n freshTimestamp(): CollabTimestamp {\r\n this.canvas.model.logicalClock++;\r\n return [this.canvas.model.logicalClock, this.replicaId];\r\n }\r\n\r\n /**\r\n * Returns a fresh unique ID, suitable for use by new CollabActions.\r\n */\r\n freshId(): string {\r\n // For more compressible saves, consider using a [dot ID](https://mattweidner.com/2023/09/26/crdt-survey-3.html#unique-ids-dots) instead of a new UUID each time.\r\n\r\n // Since IDs are often used in CSS query selectors, ensure that they start with\r\n // a letter instead of a number.\r\n // See https://stackoverflow.com/a/34777644/16782898\r\n return 'id' + uuidv4();\r\n }\r\n\r\n /**\r\n * Performs the action - immediately locally, and eventually for remote collaborators.\r\n */\r\n doCollaboratively(action: CollabAction): void {\r\n // Perform the action locally.\r\n // Note: if this errors, it will prevent the action from performing collaboratively.\r\n action.do();\r\n\r\n if (this.onSend) {\r\n // Send the action to the server.\r\n const serialized = action.serialize();\r\n this.onSend(serialized);\r\n }\r\n }\r\n\r\n /**\r\n * Processes a message received from the server.\r\n *\r\n * The message is assumed to be non-redundant (in particular, not one of\r\n * our own messages) and delivered after all prior messages on the server.\r\n */\r\n receive(message: CollabActionSerialized): void {\r\n // Update local logical clock.\r\n if ('timestamp' in message) {\r\n this.canvas.model.logicalClock = Math.max(\r\n this.canvas.model.logicalClock,\r\n message.timestamp[0]\r\n );\r\n }\r\n\r\n // Perform CollabAction.\r\n switch (message.type) {\r\n case 'addNode': {\r\n const action = AddNodeCollabAction.deserialize(this.canvas, message);\r\n action.do();\r\n break;\r\n }\r\n case 'setGeometry': {\r\n const action = SetGeometryCollabAction.deserialize(\r\n this.canvas,\r\n message\r\n );\r\n action.do();\r\n break;\r\n }\r\n case 'addConnection': {\r\n const action = AddConnectionCollabAction.deserialize(\r\n this.canvas,\r\n message\r\n );\r\n action.do();\r\n break;\r\n }\r\n case 'editField': {\r\n const action = EditFieldCollabAction.deserialize(this.canvas, message);\r\n action.do();\r\n break;\r\n }\r\n case 'updateValues': {\r\n const action = UpdateValuesCollabAction.deserialize(\r\n this.canvas,\r\n message\r\n );\r\n action.do();\r\n break;\r\n }\r\n case 'setSelfRemoved': {\r\n const action = SetSelfRemovedCollabAction.deserialize(\r\n this.canvas,\r\n message\r\n );\r\n action.do();\r\n break;\r\n }\r\n case 'paste': {\r\n const action = PasteCollabAction.deserialize(this.canvas, message);\r\n action.do();\r\n break;\r\n }\r\n default: {\r\n const exhaustiveMessage: never = message;\r\n console.error(\r\n 'Unknown CollabAction type, skipping:',\r\n exhaustiveMessage\r\n );\r\n }\r\n }\r\n }\r\n}\r\n","import { Point } from '../../../util/canvas-util';\r\nimport { Side } from '../../../util/svg-util';\r\nimport { CollabTimestamp, CollabTimestampSet } from '../collab/primitives';\r\n\r\nexport const DAGA_FILE_VERSION = 1;\r\n\r\n/**\r\n * Representation of a diagram model in a serialized format.\r\n * @see DiagramModel\r\n * @public\r\n */\r\nexport interface DagaModel {\r\n id?: string;\r\n /** User version */\r\n version?: string;\r\n name: string;\r\n description?: string;\r\n type: string;\r\n /** Serialization file format version for tooling */\r\n typeVersion: number;\r\n createdAt: Date;\r\n updatedAt: Date;\r\n updatedDaysAgo?: string;\r\n nodes: DagaNode[];\r\n connections: DagaConnection[];\r\n data: { [key: string]: unknown };\r\n collabMeta?: {\r\n logicalClock: number;\r\n dataTimestamps: CollabTimestampSet;\r\n };\r\n}\r\n\r\nexport interface DagaNode {\r\n id: string;\r\n type: string;\r\n sections?: DagaSection[];\r\n ports?: DagaPort[];\r\n label: string;\r\n coords: Point;\r\n width: number;\r\n height: number;\r\n data: { [key: string]: unknown };\r\n collabMeta?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n geometryTimestamp: CollabTimestamp | null;\r\n dataTimestamps: CollabTimestampSet;\r\n label?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n textTimestamp: CollabTimestamp | null;\r\n };\r\n };\r\n}\r\n\r\nexport interface DagaSection {\r\n id: string;\r\n ports?: DagaPort[];\r\n label: string;\r\n indexXInNode: number;\r\n indexYInNode: number;\r\n coords: Point;\r\n width: number;\r\n height: number;\r\n collabMeta?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n label?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n textTimestamp: CollabTimestamp | null;\r\n };\r\n };\r\n}\r\n\r\nexport interface DagaPort {\r\n id: string;\r\n coords: Point;\r\n direction: Side;\r\n label: string;\r\n collabMeta?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n label?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n textTimestamp: CollabTimestamp | null;\r\n };\r\n };\r\n}\r\n\r\nexport interface DagaConnection {\r\n id: string;\r\n type: string;\r\n start: string;\r\n end: string;\r\n startLabel: string;\r\n middleLabel: string;\r\n endLabel: string;\r\n points: Point[];\r\n data: { [key: string]: unknown };\r\n collabMeta?: {\r\n removed: boolean;\r\n selfRemoved: boolean;\r\n selfRemovedTimestamp: CollabTimestamp | null;\r\n dataTimestamps: CollabTimestampSet;\r\n };\r\n}\r\n","import { roundPoint } from '../../../util/canvas-util';\r\nimport { DiagramConnection } from '../diagram-connection';\r\nimport { DiagramField } from '../diagram-field';\r\nimport { DiagramModel } from '../diagram-model';\r\nimport { DiagramNode } from '../diagram-node';\r\nimport {\r\n DAGA_FILE_VERSION,\r\n DagaConnection,\r\n DagaModel,\r\n DagaNode\r\n} from './daga-model';\r\nimport { DiagramModelExporter } from './diagram-model-exporter';\r\n\r\n/**\r\n * Importer which exports a diagram to its daga model representation.\r\n * @public\r\n */\r\nexport class DagaExporter implements DiagramModelExporter<DagaModel> {\r\n export(model: DiagramModel, includeCollabMeta = false): DagaModel {\r\n const result: DagaModel = {\r\n name: model.name,\r\n type: model.type,\r\n typeVersion: DAGA_FILE_VERSION,\r\n createdAt: model.createdAt,\r\n updatedAt: model.updatedAt,\r\n nodes: [],\r\n connections: [],\r\n data: model.valueSet.getValues(),\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n logicalClock: model.logicalClock,\r\n dataTimestamps: model.valueSet.getTimestamps()\r\n }\r\n }\r\n : {})\r\n };\r\n if (model.id) {\r\n result.id = model.id;\r\n }\r\n if (model.description) {\r\n result.description = model.description;\r\n }\r\n\r\n for (const node of model.nodes.all(true)) {\r\n if (!includeCollabMeta && node.removed) continue;\r\n result.nodes.push(this.exportNode(node, includeCollabMeta));\r\n }\r\n for (const connection of model.connections.all(true)) {\r\n if (!includeCollabMeta && connection.removed) continue;\r\n result.connections.push(\r\n this.exportConnection(connection, includeCollabMeta)\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n exportNode(node: DiagramNode, includeCollabMeta = false): DagaNode {\r\n const sections = [];\r\n for (const section of node.sections) {\r\n const ports = [];\r\n for (const port of section.ports) {\r\n ports.push({\r\n id: port.id,\r\n coords: roundPoint(port.coords),\r\n direction: port.direction,\r\n label: port.label?.text || '',\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: port.removed,\r\n selfRemoved: port.selfRemoved,\r\n selfRemovedTimestamp: port.selfRemovedTimestamp,\r\n ...this.exportLabelCollabMeta(port)\r\n }\r\n }\r\n : {})\r\n });\r\n }\r\n sections.push({\r\n id: section.id,\r\n ports,\r\n label: section.label?.text || '',\r\n indexXInNode: section.indexXInNode,\r\n indexYInNode: section.indexYInNode,\r\n coords: roundPoint(section.coords),\r\n width: section.width,\r\n height: section.height,\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: section.removed,\r\n selfRemoved: section.selfRemoved,\r\n selfRemovedTimestamp: section.selfRemovedTimestamp,\r\n ...this.exportLabelCollabMeta(section)\r\n }\r\n }\r\n : {})\r\n });\r\n }\r\n const ports = [];\r\n for (const port of node.ports) {\r\n ports.push({\r\n id: port.id,\r\n coords: roundPoint(port.coords),\r\n direction: port.direction,\r\n label: port.label?.text || '',\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: port.removed,\r\n selfRemoved: port.selfRemoved,\r\n selfRemovedTimestamp: port.selfRemovedTimestamp,\r\n ...this.exportLabelCollabMeta(port)\r\n }\r\n }\r\n : {})\r\n });\r\n }\r\n return {\r\n id: node.id,\r\n type: node.type.id,\r\n sections,\r\n ports,\r\n label: node.label?.text || '',\r\n coords: roundPoint(node.coords),\r\n width: node.width,\r\n height: node.height,\r\n data: node.valueSet.getValues(),\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: node.removed,\r\n selfRemoved: node.selfRemoved,\r\n selfRemovedTimestamp: node.selfRemovedTimestamp,\r\n geometryTimestamp: node.geometryTimestamp,\r\n dataTimestamps: node.valueSet.getTimestamps(),\r\n ...this.exportLabelCollabMeta(node)\r\n }\r\n }\r\n : {})\r\n };\r\n }\r\n\r\n exportConnection(\r\n connection: DiagramConnection,\r\n includeCollabMeta = false\r\n ): DagaConnection {\r\n return {\r\n id: connection.id,\r\n type: connection.type.id,\r\n start: connection.start?.id || '',\r\n end: connection.end?.id || '',\r\n startLabel: connection.startLabel,\r\n middleLabel: connection.middleLabel,\r\n endLabel: connection.endLabel,\r\n points: connection.points,\r\n data: connection.valueSet.getValues(),\r\n ...(includeCollabMeta\r\n ? {\r\n collabMeta: {\r\n removed: connection.removed,\r\n selfRemoved: connection.selfRemoved,\r\n selfRemovedTimestamp: connection.selfRemovedTimestamp,\r\n dataTimestamps: connection.valueSet.getTimestamps()\r\n }\r\n }\r\n : {})\r\n };\r\n }\r\n\r\n exportLabelCollabMeta({ label }: { label?: DiagramField }) {\r\n if (label) {\r\n return {\r\n label: {\r\n removed: label.removed,\r\n selfRemoved: label.selfRemoved,\r\n selfRemovedTimestamp: label.selfRemovedTimestamp,\r\n textTimestamp: label.textTimestamp\r\n }\r\n };\r\n } else return {};\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { Events } from '../../util/events';\r\nimport { DiagramElement } from './diagram-element';\r\n\r\n/**\r\n * Represents an action taken by the user on the diagram.\r\n * @public\r\n */\r\nexport class DiagramEvent {\r\n cause: Event;\r\n type: Events;\r\n target?: DiagramElement;\r\n coords?: Point;\r\n defaultPrevented: boolean;\r\n\r\n constructor(\r\n cause: Event,\r\n type: Events,\r\n target?: DiagramElement,\r\n coords?: Point\r\n ) {\r\n this.cause = cause;\r\n this.type = type;\r\n this.target = target;\r\n this.coords = coords;\r\n this.defaultPrevented = false;\r\n }\r\n\r\n preventDefault(): void {\r\n this.defaultPrevented = true;\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { DiagramElement, DiagramElementSet } from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode } from './diagram-node';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * A foreign object which is inserted with arbitrary html into a diagram.\r\n * Similar to a diagram object, but it's part of a node or section and it moves and stretches as its geometry changes.\r\n * Diagram decorators are not serialized with other diagram elements.\r\n * @see DiagramNode\r\n * @see DiagramObject\r\n * @see DiagramSection\r\n * @public\r\n */\r\nexport class DiagramDecorator extends DiagramElement {\r\n /**\r\n * Element that this port belongs to.\r\n * @public\r\n */\r\n rootElement?: DiagramNode | DiagramSection;\r\n /**\r\n * Coordinates of this decorator.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this decorator along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this decorator along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n priority: number;\r\n html: string;\r\n\r\n constructor(\r\n model: DiagramModel,\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n priority: number,\r\n html: string,\r\n id: string\r\n ) {\r\n if (model.objects.get(id) !== undefined) {\r\n throw new Error(`DiagramObject with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.rootElement = rootElement;\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n this.priority = priority;\r\n this.html = html;\r\n }\r\n\r\n override select():\r\n | d3.Selection<SVGGElement, unknown, null, unknown>\r\n | undefined {\r\n return this.model.canvas\r\n ?.selectCanvasView()\r\n ?.select(`foreignObject#${this.id}`);\r\n }\r\n\r\n get removed() {\r\n return (\r\n this.selfRemoved ||\r\n (this.rootElement !== undefined && this.rootElement.removed)\r\n );\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateDecoratorsInView(this.id);\r\n }\r\n\r\n /**\r\n * Change the coordinates of this decorator to the given coordinates.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n this.coords = coords;\r\n this.updateInView();\r\n }\r\n\r\n getPriority(): number {\r\n return this.priority;\r\n }\r\n}\r\n\r\nexport class DiagramDecoratorSet extends DiagramElementSet<DiagramDecorator> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of decorators for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new decorator and add it to this set.\r\n * @private\r\n */\r\n new(\r\n rootElement: DiagramNode | DiagramSection | undefined,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n priority: number,\r\n html: string,\r\n id: string\r\n ): DiagramDecorator {\r\n const decorator = new DiagramDecorator(\r\n this.model,\r\n rootElement,\r\n coords,\r\n width,\r\n height,\r\n priority,\r\n html,\r\n id\r\n );\r\n super.add(decorator);\r\n decorator.updateInView();\r\n // add this port to its root element\r\n if (rootElement !== undefined) {\r\n rootElement.decorators.push(decorator);\r\n }\r\n return decorator;\r\n }\r\n\r\n override remove(id: string) {\r\n const decorator = this.get(id);\r\n if (decorator) {\r\n // remove from root element\r\n if (\r\n decorator.rootElement instanceof DiagramNode ||\r\n decorator.rootElement instanceof DiagramSection\r\n ) {\r\n removeIfExists(decorator.rootElement.decorators, decorator);\r\n }\r\n // remove from set of objects\r\n super.remove(id);\r\n // remove from canvas\r\n decorator.updateInView();\r\n }\r\n }\r\n}\r\n","import { Point } from '../../util/canvas-util';\r\nimport { DiagramElement, DiagramElementSet } from './diagram-element';\r\nimport { DiagramModel } from './diagram-model';\r\n\r\n/**\r\n * A foreign object which is inserted with arbitrary html into a diagram.\r\n * Diagram objects are not serialized with other diagram elements.\r\n * @public\r\n */\r\nexport class DiagramObject extends DiagramElement {\r\n /**\r\n * Coordinates of this object.\r\n * @public\r\n */\r\n coords: Point;\r\n /**\r\n * Dimension of this object along the x axis.\r\n * @public\r\n */\r\n width: number;\r\n /**\r\n * Dimension of this object along the y axis.\r\n * @public\r\n */\r\n height: number;\r\n priority: number;\r\n html: string;\r\n\r\n constructor(\r\n model: DiagramModel,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n priority: number,\r\n html: string,\r\n id: string\r\n ) {\r\n if (model.objects.get(id) !== undefined) {\r\n throw new Error(`DiagramObject with id \"${id}\" already exists`);\r\n }\r\n super(model, id);\r\n this.coords = coords;\r\n this.width = width;\r\n this.height = height;\r\n this.priority = priority;\r\n this.html = html;\r\n }\r\n\r\n override select():\r\n | d3.Selection<SVGGElement, unknown, null, unknown>\r\n | undefined {\r\n return this.model.canvas\r\n ?.selectCanvasView()\r\n ?.select(`foreignObject#${this.id}`);\r\n }\r\n\r\n get removed() {\r\n return this.selfRemoved;\r\n }\r\n\r\n updateInView() {\r\n this.model.canvas?.updateObjectsInView(this.id);\r\n }\r\n\r\n /**\r\n * Change the coordinates of this object to the given coordinates.\r\n * @public\r\n * @param coords A point in the diagram.\r\n */\r\n move(coords: Point): void {\r\n this.coords = coords;\r\n this.updateInView();\r\n }\r\n\r\n getPriority(): number {\r\n return this.priority;\r\n }\r\n}\r\n\r\nexport class DiagramObjectSet extends DiagramElementSet<DiagramObject> {\r\n private model: DiagramModel;\r\n\r\n /**\r\n * Instance a set of objects for the given model. This method is used internally.\r\n * @private\r\n */\r\n constructor(model: DiagramModel) {\r\n super();\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Instance a new object and add it to this set.\r\n * @private\r\n */\r\n new(\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n priority: number,\r\n html: string,\r\n id: string\r\n ): DiagramObject {\r\n const object = new DiagramObject(\r\n this.model,\r\n coords,\r\n width,\r\n height,\r\n priority,\r\n html,\r\n id\r\n );\r\n super.add(object);\r\n object.updateInView();\r\n return object;\r\n }\r\n\r\n override remove(id: string) {\r\n const object = this.get(id);\r\n if (object) {\r\n // remove from set of objects\r\n super.remove(id);\r\n // remove from canvas\r\n object.updateInView();\r\n }\r\n }\r\n}\r\n","import { Canvas } from '../../interfaces/canvas';\r\nimport { DiagramConnectionSet } from './diagram-connection';\r\nimport { DiagramDecoratorSet } from './diagram-decorator';\r\nimport { DiagramFieldSet } from './diagram-field';\r\nimport { DiagramNodeSet } from './diagram-node';\r\nimport { DiagramObjectSet } from './diagram-object';\r\nimport { DiagramPortSet } from './diagram-port';\r\nimport { Property, PropertySet, ValueSet } from './diagram-property';\r\nimport { DiagramSectionSet } from './diagram-section';\r\n\r\n/**\r\n * Stores the data of a diagram.\r\n * Represents the state of the diagram.\r\n * @public\r\n */\r\nexport class DiagramModel {\r\n /**\r\n * The canvas where this model's data is being rendered.\r\n * @private\r\n */\r\n canvas?: Canvas;\r\n /**\r\n * Nodes of this model.\r\n * @see DiagramNode\r\n * @public\r\n */\r\n nodes = new DiagramNodeSet(this);\r\n /**\r\n * Sections of this model.\r\n * @see DiagramSection\r\n * @public\r\n */\r\n sections = new DiagramSectionSet(this);\r\n /**\r\n * Ports of this model.\r\n * @see DiagramPort\r\n * @public\r\n */\r\n ports = new DiagramPortSet(this);\r\n /**\r\n * Connections of this model.\r\n * @see DiagramConnection\r\n * @public\r\n */\r\n connections = new DiagramConnectionSet(this);\r\n /**\r\n * Fields of this model.\r\n * @see DiagramField\r\n * @public\r\n */\r\n fields = new DiagramFieldSet(this);\r\n /**\r\n * Objects of this model.\r\n * @see DiagramObject\r\n * @public\r\n */\r\n objects = new DiagramObjectSet(this);\r\n /**\r\n * Decorators of this model.\r\n * @see DiagramDecorator\r\n * @public\r\n */\r\n decorators = new DiagramDecoratorSet(this);\r\n /**\r\n * Identifier of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n id: string | undefined;\r\n /**\r\n * Name of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n name: string;\r\n /**\r\n * Description of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n description?: string;\r\n /**\r\n * Type of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n type: string;\r\n /**\r\n * Date of creation of this diagram. Set at the creation of the diagram.\r\n * @public\r\n */\r\n createdAt: Date;\r\n /**\r\n * Date of last changes of this diagram. Set by the consumer of the diagram.\r\n * @public\r\n */\r\n updatedAt: Date;\r\n /**\r\n * Additional properties of this diagram.\r\n * @public\r\n */\r\n valueSet: ValueSet;\r\n /**\r\n * The last-seen logical clock value, used to generate CollabTimestamps.\r\n * @public\r\n */\r\n logicalClock: number;\r\n\r\n constructor(\r\n canvas: Canvas | undefined,\r\n id: string | undefined,\r\n name: string,\r\n description: string | undefined,\r\n type: string,\r\n properties: Property[] = []\r\n ) {\r\n this.canvas = canvas;\r\n this.id = id;\r\n this.name = name;\r\n this.description = description;\r\n this.type = type;\r\n this.createdAt = new Date();\r\n this.updatedAt = new Date();\r\n this.logicalClock = 0;\r\n this.valueSet = new ValueSet(new PropertySet(properties), this);\r\n }\r\n\r\n /**\r\n * Deletes everything in this diagram.\r\n * @public\r\n */\r\n clear(): void {\r\n this.canvas?.cancelAllUserActions();\r\n this.id = undefined;\r\n this.name = '';\r\n this.description = undefined;\r\n this.createdAt = new Date();\r\n this.updatedAt = new Date();\r\n this.logicalClock = 0;\r\n this.nodes.clear();\r\n this.sections.clear();\r\n this.ports.clear();\r\n this.connections.clear();\r\n this.fields.clear();\r\n this.objects.clear();\r\n this.decorators.clear();\r\n this.valueSet.resetValues();\r\n this.canvas?.updateModelInView();\r\n }\r\n}\r\n","import * as d3 from 'd3';\r\nimport { BaseType } from 'd3';\r\nimport { Subject, debounceTime } from 'rxjs';\r\nimport { DiagramValidator } from '../../errors/diagram-validator';\r\nimport { Canvas } from '../../interfaces/canvas';\r\nimport { DiagramEditor } from '../../interfaces/diagram-editor';\r\nimport { Point } from '../../util/canvas-util';\r\nimport { DragEvents, Events, Keys, ZoomEvents } from '../../util/events';\r\nimport { LineShape, linePath, lineStyleDasharray } from '../../util/line';\r\nimport { removeIfExists } from '../../util/list-util';\r\nimport { generalClosedPath, pillPath } from '../../util/shape';\r\nimport { CursorStyle } from '../../util/style';\r\nimport { HorizontalAlign, Side, VerticalAlign } from '../../util/svg-util';\r\nimport { numberOfColumns, numberOfRows } from '../../util/text-util';\r\nimport { CollabEngine } from './collab/collab-engine';\r\nimport { DagaExporter } from './converters/daga-exporter';\r\nimport { DagaConnection, DagaNode } from './converters/daga-model';\r\nimport {\r\n ActionQueue,\r\n AddConnectionAction,\r\n DiagramAction,\r\n DiagramActions,\r\n EditFieldAction,\r\n PasteAction,\r\n RemoveAction,\r\n SetGeometryAction,\r\n UpdateValuesAction\r\n} from './diagram-action';\r\nimport {\r\n DiagramConfig,\r\n NodeImageLook,\r\n NodeShapedLook,\r\n NodeStretchableImageLook\r\n} from './diagram-config';\r\nimport { DiagramConnection, DiagramConnectionType } from './diagram-connection';\r\nimport { DiagramDecorator } from './diagram-decorator';\r\nimport { DiagramElement } from './diagram-element';\r\nimport { DiagramEvent } from './diagram-event';\r\nimport {\r\n DIAGRAM_FIELD_DEFAULTS,\r\n DiagramField,\r\n getBottomMargin,\r\n getBottomPadding,\r\n getLeftMargin,\r\n getLeftPadding,\r\n getRightMargin,\r\n getRightPadding,\r\n getTopMargin,\r\n getTopPadding\r\n} from './diagram-field';\r\nimport { DiagramModel } from './diagram-model';\r\nimport { DiagramNode, DiagramNodeType } from './diagram-node';\r\nimport { DiagramObject } from './diagram-object';\r\nimport { DIAGRAM_PORT_DEFAULTS, DiagramPort } from './diagram-port';\r\nimport { ValueSet, diff, equals } from './diagram-property';\r\nimport { DiagramSection } from './diagram-section';\r\n\r\n/**\r\n * Thickness of the invisible path around a connection used to make it easier to click on, in pixels.\r\n * @private\r\n */\r\nexport const CONNECTION_PATH_BOX_THICKNESS = 12;\r\n/**\r\n * Thickness of the resizer line used to resize nodes and sections on drag, in pixels.\r\n * @private\r\n */\r\nexport const RESIZER_THICKNESS = 6;\r\n\r\n/**\r\n * Text to display as the title of the property editor when editing this diagram's properties.\r\n * @see PropertyEditorComponent\r\n * @private\r\n */\r\nexport const DIAGRAM_PROPERTIES_TEXT = 'Diagram properties';\r\n\r\n/**\r\n * Maximum number of user actions that can be recorded in the user action queue.\r\n * @see ActionQueue\r\n * @private\r\n */\r\nexport const ACTION_QUEUE_SIZE = 25;\r\n\r\nconst UNFINISHED_CONNECTION_ID = 'diagram-connection-unfinished';\r\n\r\nconst MAX_DISTANCE_TO_PORT = 100;\r\n\r\n// Context menu constants\r\nconst CONTEXT_MENU_MENU_RADIUS = 96;\r\nconst CONTEXT_MENU_BUTTON_RADIUS = 32;\r\nconst CONTEXT_MENU_TOTAL_RADIUS =\r\n CONTEXT_MENU_MENU_RADIUS + CONTEXT_MENU_BUTTON_RADIUS;\r\nconst CONTEXT_MENU_BUTTON_PADDING_RADIANS = Math.PI / 4;\r\nconst CONTEXT_MENU_ANIMATION_DURATION_MS = 100;\r\n\r\nexport class DiagramCanvas implements Canvas {\r\n parentComponent!: DiagramEditor;\r\n diagramRoot!: HTMLElement;\r\n\r\n model: DiagramModel;\r\n backgroundColor: string;\r\n gridSize: number;\r\n snapToGrid: boolean;\r\n guessConnectionType: boolean;\r\n connectionType?: DiagramConnectionType;\r\n validators: DiagramValidator[];\r\n layoutFormat?: string;\r\n userActions: { [key in DiagramActions]?: boolean };\r\n actionQueue: ActionQueue;\r\n collabEngine: CollabEngine;\r\n\r\n private static canvasCount = 0;\r\n private backgroundPatternId = `daga-background-pattern-id-${DiagramCanvas.canvasCount++}`;\r\n\r\n private zoomBehavior!: d3.ZoomBehavior<SVGRectElement, unknown>;\r\n private zoomTransform: d3.ZoomTransform = d3.zoomIdentity;\r\n private priorityThreshold?: number;\r\n private priorityThresholds: number[];\r\n private mainUserHighlight?: DiagramElement = undefined;\r\n private userHighlight: DiagramElement[] = [];\r\n /**\r\n * Elements selected by the user. Only nodes and connections should be selected.\r\n */\r\n private userSelection: DiagramElement[] = [];\r\n private propertyEditorSelection?: { valueSet: ValueSet } & (\r\n | DiagramElement\r\n | DiagramModel\r\n );\r\n private propertyEditorValues?: { [key: string]: unknown };\r\n private unfinishedConnection?: DiagramConnection;\r\n /**\r\n * Invisible path followed by an unfinished connection. Used for making unfinished connections stop before the cursor rather than stopping right at the cursor.\r\n */\r\n private unfinishedConnectionTracer?: d3.Selection<\r\n SVGPathElement,\r\n unknown,\r\n null,\r\n unknown\r\n >;\r\n private inputFieldContainer?: d3.Selection<\r\n SVGForeignObjectElement,\r\n unknown,\r\n null,\r\n unknown\r\n >;\r\n private contextMenuContainer?: d3.Selection<\r\n SVGForeignObjectElement,\r\n unknown,\r\n null,\r\n unknown\r\n >;\r\n // used to distinguish drags from clicks when dragging elements\r\n private draggingFrom: Point = [0, 0];\r\n // current action that started but hasn't finished yet\r\n private currentAction?: DiagramAction;\r\n\r\n viewInitialized$ = new Subject<void>();\r\n validatorChanges$ = new Subject<void>();\r\n diagramChanges$ = new Subject<void>();\r\n diagramImportantChanges$ = new Subject<void>();\r\n propertyEditorChanges$ = new Subject<void>();\r\n\r\n constructor(parentComponent: DiagramEditor, config: DiagramConfig) {\r\n this.parentComponent = parentComponent;\r\n\r\n this.model = new DiagramModel(\r\n this,\r\n undefined,\r\n config.name || 'unnamed',\r\n '',\r\n config.type || '',\r\n config.properties || []\r\n );\r\n this.backgroundColor = config.backgroundColor || '#FFFFFF';\r\n this.gridSize = config.gridSize || 0;\r\n this.snapToGrid = config.snapToGrid || false;\r\n this.guessConnectionType = config.guessConnectionType || false;\r\n this.priorityThresholds = config.priorityThresholds || [];\r\n this.priorityThreshold = this.priorityThresholds\r\n ? this.priorityThresholds[0]\r\n : undefined;\r\n this.layoutFormat = config.layoutFormat;\r\n this.userActions = config.userActions || {};\r\n this.validators = [];\r\n this.actionQueue = new ActionQueue(this, ACTION_QUEUE_SIZE);\r\n this.collabEngine = new CollabEngine(this);\r\n\r\n // load node types\r\n if (config.nodeTypes) {\r\n for (const nodeTypeConfig of config.nodeTypes) {\r\n const nodeType = new DiagramNodeType({\r\n ...config.nodeTypeDefaults,\r\n ...nodeTypeConfig\r\n });\r\n this.model.nodes.types.add(nodeType);\r\n }\r\n }\r\n // load connection types\r\n if (config.connectionTypes) {\r\n for (const connectionTypeConfig of config.connectionTypes) {\r\n const connectionType = new DiagramConnectionType({\r\n ...config.connectionTypeDefaults,\r\n ...connectionTypeConfig\r\n });\r\n this.model.connections.types.add(connectionType);\r\n }\r\n this.connectionType =\r\n config.defaultConnection !== undefined\r\n ? this.model.connections.types.get(config.defaultConnection)\r\n : undefined;\r\n }\r\n this.propertyEditorChanges$.pipe(debounceTime(2_000)).subscribe(() => {\r\n this.makeUpdateValuesAction();\r\n });\r\n }\r\n\r\n addValidator(validator: DiagramValidator) {\r\n this.validators.push(validator);\r\n this.validatorChanges$.next();\r\n }\r\n\r\n removeValidator(validator: DiagramValidator) {\r\n removeIfExists(this.validators, validator);\r\n this.validatorChanges$.next();\r\n }\r\n\r\n getPriorityThresholdOptions(): number[] | undefined {\r\n return this.priorityThresholds;\r\n }\r\n\r\n getPriorityThreshold(): number | undefined {\r\n return this.priorityThreshold;\r\n }\r\n\r\n setPriorityThreshold(priority: number) {\r\n this.priorityThreshold = priority;\r\n this.updateModelInView();\r\n for (const node of this.model.nodes) {\r\n this.fitNodeInView(node.id);\r\n }\r\n this.parentComponent.palette?.refreshPalette();\r\n }\r\n\r\n // View methods\r\n\r\n initView(appendTo: HTMLElement): void {\r\n this.diagramRoot = d3.select(appendTo).append('div').node() as HTMLElement;\r\n\r\n d3.select(this.diagramRoot)\r\n .attr('tabindex', 0) // make element focusable\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .append('svg')\r\n .style('width', '100%')\r\n .style('height', '100%');\r\n\r\n d3.select(this.diagramRoot)\r\n .on(Events.Click, () => {\r\n // focus on the diagram when clicking so that we can focus on the diagram\r\n // keyboard events only work if we're focusing on the diagram\r\n d3.select(this.diagramRoot).node()?.focus();\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent) => {\r\n const diagramEvent = new DiagramEvent(\r\n event,\r\n Events.ContextMenu,\r\n undefined\r\n );\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event) => {\r\n const diagramEvent = new DiagramEvent(\r\n event,\r\n Events.DoubleClick,\r\n undefined\r\n );\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n })\r\n .on(Events.KeyDown, (event: KeyboardEvent) => {\r\n if (\r\n !event.ctrlKey &&\r\n (event.key === Keys.Delete || event.key === Keys.Backspace) &&\r\n this.canUserPerformAction(DiagramActions.Remove)\r\n ) {\r\n this.deleteUserSelection();\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'a') {\r\n event.preventDefault();\r\n // select all\r\n for (const node of this.model.nodes) {\r\n this.addToUserSelection(node);\r\n }\r\n for (const connection of this.model.connections) {\r\n this.addToUserSelection(connection);\r\n }\r\n }\r\n if (event.ctrlKey && event.key === 'i') {\r\n event.preventDefault();\r\n // invert selection\r\n for (const node of this.model.nodes) {\r\n this.toggleUserSelection(node);\r\n }\r\n for (const connection of this.model.connections) {\r\n this.toggleUserSelection(connection);\r\n }\r\n }\r\n if (event.ctrlKey && event.key === 'c') {\r\n event.preventDefault();\r\n // copy\r\n this.copyUserSelectionToClipboard();\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'x') {\r\n event.preventDefault();\r\n // cut\r\n this.deleteUserSelection();\r\n this.copyUserSelectionToClipboard();\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'v') {\r\n event.preventDefault();\r\n // paste\r\n const coordinateRange = this.getCoordinatesOnScreen();\r\n this.pasteUserSelectionFromClipboard(\r\n this.getClosestGridPoint([\r\n (coordinateRange[0][0] + coordinateRange[1][0]) / 2,\r\n (coordinateRange[0][1] + coordinateRange[1][1]) / 2\r\n ])\r\n );\r\n this.cancelAllUserActions();\r\n }\r\n if (event.ctrlKey && event.key === 'y') {\r\n event.preventDefault();\r\n // redo\r\n this.actionQueue.redo();\r\n }\r\n if (event.ctrlKey && event.key === 'z') {\r\n event.preventDefault();\r\n // undo\r\n this.actionQueue.undo();\r\n }\r\n if (event.key === '+') {\r\n event.preventDefault();\r\n // zoom in\r\n this.parentComponent.diagramButtons.zoomIn();\r\n }\r\n if (event.key === '-') {\r\n event.preventDefault();\r\n // zoom out\r\n this.parentComponent.diagramButtons.zoomOut();\r\n }\r\n if (event.key === Keys.ArrowLeft) {\r\n event.preventDefault();\r\n // move left, faster if we're zoomed out and slower if we're zoomed in\r\n this.translateBy(-100 / this.zoomTransform.k, 0);\r\n }\r\n if (event.key === Keys.ArrowRight) {\r\n event.preventDefault();\r\n // move right, faster if we're zoomed out and slower if we're zoomed in\r\n this.translateBy(100 / this.zoomTransform.k, 0);\r\n }\r\n if (event.key === Keys.ArrowDown) {\r\n event.preventDefault();\r\n // move down, faster if we're zoomed out and slower if we're zoomed in\r\n this.translateBy(0, -100 / this.zoomTransform.k);\r\n }\r\n if (event.key === Keys.ArrowUp) {\r\n event.preventDefault();\r\n // move up, faster if we're zoomed out and slower if we're zoomed in\r\n this.translateBy(0, 100 / this.zoomTransform.k);\r\n }\r\n });\r\n\r\n const canvasView = this.selectRoot()\r\n .append('g')\r\n .attr('class', 'daga-canvas-view')\r\n .attr('width', `100%`)\r\n .attr('height', `100%`);\r\n\r\n const canvasBackground = canvasView\r\n .append('rect')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', `100%`)\r\n .attr('height', `100%`)\r\n .attr('fill', this.backgroundColor)\r\n .attr('stroke-width', '0')\r\n .on(Events.MouseMove, (event: MouseEvent) => {\r\n if (this.unfinishedConnection !== undefined) {\r\n const pointerCoords = this.getPointerLocationRelativeToCanvas(event);\r\n this.unfinishedConnection.endCoords = pointerCoords;\r\n }\r\n })\r\n .on(Events.MouseOver, () => {\r\n this.unhighlight();\r\n })\r\n .on(Events.Click, () => {\r\n this.unhighlight();\r\n this.closeContextMenu();\r\n this.clearUserSelection();\r\n this.setPropertyEditorSelection(this.model);\r\n })\r\n .call(\r\n (this.zoomBehavior = d3\r\n .zoom<SVGRectElement, unknown>()\r\n .on(\r\n ZoomEvents.Zoom,\r\n (event: d3.D3ZoomEvent<SVGRectElement, unknown>) => {\r\n if (event.sourceEvent) {\r\n // zoom event was triggered by user\r\n if (!this.canUserPerformAction(DiagramActions.Zoom)) {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n return;\r\n }\r\n if (\r\n event.sourceEvent.type === Events.Wheel &&\r\n event.sourceEvent.wheelDelta !== undefined\r\n ) {\r\n if (event.sourceEvent.wheelDelta > 0) {\r\n cursorStyle(CursorStyle.ZoomIn);\r\n }\r\n if (event.sourceEvent.wheelDelta < 0) {\r\n cursorStyle(CursorStyle.ZoomOut);\r\n }\r\n } else if (event.sourceEvent.type === Events.MouseMove) {\r\n cursorStyle(CursorStyle.AllScroll);\r\n }\r\n }\r\n this.zoomTransform = event.transform;\r\n const transformAttribute = event.transform.toString();\r\n this.selectCanvasElements().attr('transform', transformAttribute);\r\n d3.select(`#${this.backgroundPatternId}`).attr(\r\n 'patternTransform',\r\n transformAttribute\r\n );\r\n this.closeContextMenu();\r\n }\r\n )\r\n .on(ZoomEvents.End, () => {\r\n cursorStyle();\r\n }))\r\n );\r\n\r\n const canvasDefs = canvasView.append('defs');\r\n\r\n if (this.gridSize > 0) {\r\n const canvasBackgroundPattern = canvasDefs\r\n .append('pattern')\r\n .attr('id', this.backgroundPatternId)\r\n .attr('x', -this.gridSize / 2)\r\n .attr('y', -this.gridSize / 2)\r\n .attr('width', this.gridSize)\r\n .attr('height', this.gridSize)\r\n .attr('patternUnits', 'userSpaceOnUse');\r\n canvasBackgroundPattern\r\n .append('rect')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', this.gridSize)\r\n .attr('height', this.gridSize)\r\n .attr('fill', this.backgroundColor);\r\n canvasBackgroundPattern\r\n .append('circle')\r\n .attr('cx', this.gridSize / 2)\r\n .attr('cy', this.gridSize / 2)\r\n .attr('r', this.gridSize / 16)\r\n .attr('fill', 'black')\r\n .attr('fill-opacity', 0.1);\r\n canvasBackground.attr('fill', `url(#${this.backgroundPatternId})`);\r\n }\r\n\r\n const canvasElements = canvasView\r\n .append('g')\r\n .attr('class', 'daga-canvas-elements');\r\n canvasElements.append('g').attr('class', 'daga-canvas-nodes');\r\n canvasElements.append('g').attr('class', 'daga-canvas-sections');\r\n canvasElements.append('g').attr('class', 'daga-canvas-ports');\r\n canvasElements.append('g').attr('class', 'daga-canvas-connections');\r\n canvasElements.append('g').attr('class', 'daga-canvas-fields');\r\n canvasElements.append('g').attr('class', 'daga-canvas-objects');\r\n canvasElements.append('g').attr('class', 'daga-canvas-decorators');\r\n\r\n this.viewInitialized$.next();\r\n }\r\n\r\n zoomBy(zoom: number): void {\r\n if (!isNaN(zoom)) {\r\n this.zoomBehavior.scaleBy(this.selectCanvasView().select('rect'), zoom);\r\n }\r\n }\r\n\r\n zoomTo(zoom: number): void {\r\n if (!isNaN(zoom)) {\r\n this.zoomBehavior.scaleTo(this.selectCanvasView().select('rect'), zoom);\r\n }\r\n }\r\n\r\n translateBy(x: number, y: number): void {\r\n if (!isNaN(x) && !isNaN(y)) {\r\n this.zoomBehavior.translateBy(\r\n this.selectCanvasView().select('rect'),\r\n x,\r\n y\r\n );\r\n }\r\n }\r\n\r\n translateTo(x: number, y: number): void {\r\n if (!isNaN(x) && !isNaN(y)) {\r\n this.zoomBehavior.translateTo(\r\n this.selectCanvasView().select('rect'),\r\n x,\r\n y\r\n );\r\n }\r\n }\r\n\r\n center() {\r\n // if there are no nodes, we have nothing to do here\r\n if (this.model.nodes.length > 0) {\r\n const canvasViewBoundingBox = (\r\n this.selectCanvasView().select('rect').node() as SVGGraphicsElement\r\n ).getBBox();\r\n const nonRemovedNodes = this.model.nodes.all();\r\n const minimumX = Math.min(...nonRemovedNodes.map((n) => n.coords[0]));\r\n const maximumX = Math.max(\r\n ...nonRemovedNodes.map((n) => n.coords[0] + n.width)\r\n );\r\n const averageX = (minimumX + maximumX) / 2;\r\n const rangeX = maximumX - minimumX;\r\n const windowRangeX = canvasViewBoundingBox.width;\r\n const minimumY = Math.min(...nonRemovedNodes.map((n) => n.coords[1]));\r\n const maximumY = Math.max(\r\n ...nonRemovedNodes.map((n) => n.coords[1] + n.height)\r\n );\r\n const averageY = (minimumY + maximumY) / 2;\r\n const rangeY = maximumY - minimumY;\r\n const windowRangeY = canvasViewBoundingBox.height;\r\n /*\r\n * (windowRangeX / rangeX) is the zoom level to fit everything horizontally\r\n * (windowRangeY / rangeY) is the zoom level to fit everything vertically\r\n * the minimum between them is the zoom to fit everything in the screen both horizontally and vertically\r\n * we also add 1 to the list so that if the zoom exceeds 1 it is set to 1\r\n * a zoom bigger than 1 means zooming in instead of out, and we don't want to zoom in if it's not necessary\r\n */\r\n const zoom = Math.min(windowRangeX / rangeX, windowRangeY / rangeY, 1);\r\n this.translateTo(averageX, averageY);\r\n this.zoomTo(zoom);\r\n }\r\n }\r\n\r\n getClosestGridPoint(point: Point): Point {\r\n if (\r\n this.gridSize === 0 ||\r\n isNaN(this.gridSize) ||\r\n !isFinite(this.gridSize)\r\n ) {\r\n return point;\r\n } else {\r\n return [\r\n Math.round(point[0] / this.gridSize) * this.gridSize,\r\n Math.round(point[1] / this.gridSize) * this.gridSize\r\n ];\r\n }\r\n }\r\n\r\n getCoordinatesOnScreen(): [Point, Point] {\r\n const rootBoundingClientRect = this.selectRoot()\r\n .node()\r\n ?.getBoundingClientRect();\r\n const rootDimensions = [\r\n rootBoundingClientRect?.width || 0,\r\n rootBoundingClientRect?.height || 0\r\n ];\r\n return [\r\n [\r\n -this.zoomTransform.x / this.zoomTransform.k,\r\n -this.zoomTransform.y / this.zoomTransform.k\r\n ],\r\n [\r\n (rootDimensions[0] - this.zoomTransform.x) / this.zoomTransform.k,\r\n (rootDimensions[1] - this.zoomTransform.y) / this.zoomTransform.k\r\n ]\r\n ];\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private getEventHoldingCoordinates(event: MouseEvent): any {\r\n if (\r\n event.type === 'drag' ||\r\n event.type === 'start' ||\r\n event.type === 'end'\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const sourceEvent = (event as any).sourceEvent;\r\n if (\r\n sourceEvent &&\r\n (sourceEvent.type === 'touchmove' ||\r\n sourceEvent.type === 'touchstart' ||\r\n sourceEvent.type === 'touchend')\r\n ) {\r\n return (\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (event as any).sourceEvent.touches[0] ||\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (event as any).sourceEvent.changedTouches[0]\r\n );\r\n }\r\n }\r\n return event;\r\n }\r\n\r\n getPointerLocationRelativeToCanvas(event: MouseEvent): Point {\r\n return d3.pointer(\r\n this.getEventHoldingCoordinates(event),\r\n this.selectCanvasElements().node()\r\n );\r\n }\r\n\r\n getPointerLocationRelativeToRoot(event: MouseEvent): Point {\r\n return d3.pointer(\r\n this.getEventHoldingCoordinates(event),\r\n this.selectRoot().node()\r\n );\r\n }\r\n\r\n getPointerLocationRelativeToBody(event: MouseEvent): Point {\r\n return d3.pointer(\r\n this.getEventHoldingCoordinates(event),\r\n d3.select('body').node()\r\n );\r\n }\r\n\r\n getPointerLocationRelativeToScreen(event: MouseEvent): Point {\r\n const pointerLocationRelativeToBody =\r\n this.getPointerLocationRelativeToBody(event);\r\n return [\r\n pointerLocationRelativeToBody[0] - window.scrollX,\r\n pointerLocationRelativeToBody[1] - window.scrollY\r\n ];\r\n }\r\n\r\n updateModelInView(): void {\r\n this.updateNodesInView();\r\n this.updateSectionsInView();\r\n this.updatePortsInView();\r\n this.updateConnectionsInView();\r\n this.updateFieldsInView();\r\n this.updateObjectsInView();\r\n this.updateDecoratorsInView();\r\n }\r\n\r\n updateNodesInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramNode,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasNodes()\r\n .selectAll<SVGGElement, DiagramNode>('g.diagram-node')\r\n .data(\r\n this.model.nodes.filter((e) =>\r\n this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true\r\n ),\r\n (d: DiagramNode) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr(\r\n 'class',\r\n (d) =>\r\n `diagram-node${d.type.resizableX ? ' resizable-x' : ''}${\r\n d.type.resizableY ? ' resizable-y' : ''\r\n } ${d.type.look.lookType}`\r\n );\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramNode) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramNode) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d);\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramNode) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.highlight(d);\r\n this.addToUserSelection(d);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramNode) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.MoveNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n const newNodeCoords: Point = [\r\n event.x - d.width / 2,\r\n event.y - d.height / 2\r\n ];\r\n d.move(newNodeCoords);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.MoveNode\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - d.width / 2,\r\n event.y - d.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n d.move(newNodeCoords);\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection.filter('.shaped-look').append('path');\r\n enterSelection\r\n .filter('.image-look')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'center-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'left-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Left, d.coords[0] - pointerCoords[0]);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchNode\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Left, d.coords[0] - pointerCoords[0]);\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'top-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Top, d.coords[1] - pointerCoords[1]);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchNode\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Top, d.coords[1] - pointerCoords[1]);\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'right-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(Side.Right, pointerCoords[0] - (d.coords[0] + d.width));\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableX &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchNode\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(Side.Right, pointerCoords[0] - (d.coords[0] + d.width));\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'bottom-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramNode, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchNode,\r\n d.id,\r\n d.getGeometry(),\r\n d.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.stretch(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height)\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramNode) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchNode) &&\r\n d.type.resizableY &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchNode\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.stretch(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height)\r\n );\r\n this.currentAction.to = d.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n\r\n mergeSelection\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1));\r\n\r\n mergeSelection\r\n .filter('.shaped-look')\r\n .select('path')\r\n .attr('d', (d) =>\r\n generalClosedPath(\r\n (d.type.look as NodeShapedLook).shape,\r\n 0,\r\n 0,\r\n d.width,\r\n d.height\r\n )\r\n )\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeShapedLook).selectedFillColor\r\n : (d.type.look as NodeShapedLook).fillColor\r\n )\r\n .attr('stroke', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeShapedLook).selectedBorderColor\r\n : (d.type.look as NodeShapedLook).borderColor\r\n )\r\n .attr('stroke-width', (d) => `${d.highlighted ? 3 : 1}px`);\r\n mergeSelection\r\n .filter('.image-look')\r\n .select('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => d.width)\r\n .attr('height', (d) => d.height)\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeImageLook).selectedBackgroundImage\r\n : (d.type.look as NodeImageLook).backgroundImage\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-left-image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTopLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook).selectedBackgroundImageTop\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTop\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageTopRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.left-image')\r\n .attr('x', 0)\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.center-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageCenter\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageCenter\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', (d) => (d.type.look as NodeStretchableImageLook).topMargin)\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.type.look as NodeStretchableImageLook).bottomMargin -\r\n (d.type.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomLeft\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottomLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-image')\r\n .attr('x', (d) => (d.type.look as NodeStretchableImageLook).leftMargin)\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.type.look as NodeStretchableImageLook).rightMargin -\r\n (d.type.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottom\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottom\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-right-image')\r\n .attr(\r\n 'x',\r\n (d) => d.width - (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => d.height - (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.type.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.type.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.type.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomRight\r\n : (d.type.look as NodeStretchableImageLook).backgroundImageBottomRight\r\n );\r\n\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.left-resizer')\r\n .attr('x1', RESIZER_THICKNESS / 2)\r\n .attr('x2', RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.top-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', RESIZER_THICKNESS / 2)\r\n .attr('y2', RESIZER_THICKNESS / 2);\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.right-resizer')\r\n .attr('x1', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('x2', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.bottom-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', (d) => d.height - RESIZER_THICKNESS / 2)\r\n .attr('y2', (d) => d.height - RESIZER_THICKNESS / 2);\r\n }\r\n\r\n updateSectionsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramSection,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasSections()\r\n .selectAll<SVGGElement, DiagramSection>('g.diagram-section')\r\n .data(\r\n this.model.sections.filter((e) =>\r\n this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true\r\n ),\r\n (d: DiagramSection) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr(\r\n 'class',\r\n (d) =>\r\n `diagram-section${d.node?.type?.resizableX ? ' resizable-x' : ''}${\r\n d.node?.type?.resizableY ? ' resizable-y' : ''\r\n } ${d.getConfig()?.look?.lookType}`\r\n );\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramSection) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramSection) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(getRelatedNodeOrItself(d));\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramSection) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n const elementToSelect = getRelatedNodeOrItself(d);\r\n this.highlight(elementToSelect);\r\n this.addToUserSelection(elementToSelect);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramSection) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n const node = d.node as DiagramNode;\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.MoveNode,\r\n node.id,\r\n node.getGeometry(),\r\n node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n const node = d.node as DiagramNode;\r\n const newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n node.move(newNodeCoords);\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n const node = d.node as DiagramNode;\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.MoveNode\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n node.move(newNodeCoords);\r\n this.currentAction.to = node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection.filter('.shaped-look').append('path');\r\n enterSelection\r\n .filter('.image-look')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'top-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'center-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-left-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .filter('.stretchable-image-look')\r\n .append('image')\r\n .attr('class', 'bottom-right-image')\r\n .attr('preserveAspectRatio', 'none');\r\n\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'left-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchSection,\r\n d.node.id,\r\n d.node.getGeometry(),\r\n d.node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Left,\r\n d.coords[0] - pointerCoords[0],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchSection\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Left,\r\n d.coords[0] - pointerCoords[0],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n this.currentAction.to = d.node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'top-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchSection,\r\n d.node.id,\r\n d.node.getGeometry(),\r\n d.node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Top,\r\n d.coords[1] - pointerCoords[1],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchSection\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Top,\r\n d.coords[1] - pointerCoords[1],\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n this.currentAction.to = d.node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-x')\r\n .append('line')\r\n .attr('class', 'right-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.EWResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchSection,\r\n d.node.id,\r\n d.node.getGeometry(),\r\n d.node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Right,\r\n pointerCoords[0] - (d.coords[0] + d.width),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableX &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchSection\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Right,\r\n pointerCoords[0] - (d.coords[0] + d.width),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n this.currentAction.to = d.node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection\r\n .filter('.resizable-y')\r\n .append('line')\r\n .attr('class', 'bottom-resizer')\r\n .attr('stroke', 'transparent')\r\n .attr('stroke-width', `${RESIZER_THICKNESS}px`)\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n }\r\n })\r\n .on(Events.MouseOut, (_event: MouseEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle();\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGLineElement, DiagramSection, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.NSResize);\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.StretchSection,\r\n d.node.id,\r\n d.node.getGeometry(),\r\n d.node.getGeometry()\r\n );\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed\r\n ) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n d.node.stretchSections(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramSection) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.StretchSection) &&\r\n d.node?.type?.resizableY &&\r\n !d.removed &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.StretchSection\r\n ) {\r\n let pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n if (this.snapToGrid) {\r\n pointerCoords = this.getClosestGridPoint(pointerCoords);\r\n }\r\n d.node.stretchSections(\r\n Side.Bottom,\r\n pointerCoords[1] - (d.coords[1] + d.height),\r\n d.indexXInNode,\r\n d.indexYInNode\r\n );\r\n this.currentAction.to = d.node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n\r\n mergeSelection\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1));\r\n\r\n mergeSelection\r\n .filter('.shaped-look')\r\n .select('path')\r\n .attr('d', (d) =>\r\n generalClosedPath(\r\n (d.getConfig()?.look as NodeShapedLook).shape,\r\n 0,\r\n 0,\r\n d.width,\r\n d.height\r\n )\r\n )\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeShapedLook).selectedFillColor\r\n : (d.getConfig()?.look as NodeShapedLook).fillColor\r\n )\r\n .attr('stroke', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeShapedLook).selectedBorderColor\r\n : (d.getConfig()?.look as NodeShapedLook).borderColor\r\n )\r\n .attr('stroke-width', (d) => `${d.highlighted ? 3 : 1}px`);\r\n mergeSelection\r\n .filter('.image-look')\r\n .select('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => d.width)\r\n .attr('height', (d) => d.height)\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeImageLook).selectedBackgroundImage\r\n : (d.getConfig()?.look as NodeImageLook).backgroundImage\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-left-image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageTopLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTop\r\n : (d.getConfig()?.look as NodeStretchableImageLook).backgroundImageTop\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.top-right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageTopRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageTopRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.center-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageCenter\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageCenter\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).topMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageRight\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-left-image')\r\n .attr('x', 0)\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomLeft\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottomLeft\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-image')\r\n .attr(\r\n 'x',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin -\r\n (d.getConfig()?.look as NodeStretchableImageLook).leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottom\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottom\r\n );\r\n mergeSelection\r\n .filter('.stretchable-image-look')\r\n .select('image.bottom-right-image')\r\n .attr(\r\n 'x',\r\n (d) =>\r\n d.width -\r\n (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'y',\r\n (d) =>\r\n d.height -\r\n (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr(\r\n 'width',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).rightMargin\r\n )\r\n .attr(\r\n 'height',\r\n (d) => (d.getConfig()?.look as NodeStretchableImageLook).bottomMargin\r\n )\r\n .attr('href', (d) =>\r\n d.selected\r\n ? (d.getConfig()?.look as NodeStretchableImageLook)\r\n .selectedBackgroundImageBottomRight\r\n : (d.getConfig()?.look as NodeStretchableImageLook)\r\n .backgroundImageBottomRight\r\n );\r\n\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.left-resizer')\r\n .attr('x1', RESIZER_THICKNESS / 2)\r\n .attr('x2', RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.top-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', RESIZER_THICKNESS / 2)\r\n .attr('y2', RESIZER_THICKNESS / 2);\r\n mergeSelection\r\n .filter('.resizable-x')\r\n .select('line.right-resizer')\r\n .attr('x1', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('x2', (d) => d.width - RESIZER_THICKNESS / 2)\r\n .attr('y1', 0)\r\n .attr('y2', (d) => d.height);\r\n mergeSelection\r\n .filter('.resizable-y')\r\n .select('line.bottom-resizer')\r\n .attr('x1', 0)\r\n .attr('x2', (d) => d.width)\r\n .attr('y1', (d) => d.height - RESIZER_THICKNESS / 2)\r\n .attr('y2', (d) => d.height - RESIZER_THICKNESS / 2);\r\n }\r\n\r\n updatePortsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramPort,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasPorts()\r\n .selectAll<SVGGElement, DiagramPort>('g.diagram-port')\r\n .data(\r\n this.model.ports.filter((e) =>\r\n this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true\r\n ),\r\n (d: DiagramPort) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-port');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramPort) => {\r\n if (!this.unfinishedConnection) {\r\n // if there is an unfinished connection, the port will be highlighted automatically if the pointer is close\r\n this.highlight(d);\r\n }\r\n if (this.unfinishedConnection) {\r\n const canConnectionFinishAtThisPort =\r\n (this.unfinishedConnection.type.canStartFromType(\r\n this.unfinishedConnection.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n d.getNode()?.type?.id || ''\r\n )) ||\r\n (this.unfinishedConnection.type.canStartFromType(\r\n d.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n this.unfinishedConnection.start?.getNode()?.type?.id || ''\r\n ));\r\n if (!canConnectionFinishAtThisPort) {\r\n cursorStyle(CursorStyle.NoDrop);\r\n }\r\n }\r\n })\r\n .on(Events.MouseOut, () => {\r\n if (this.unfinishedConnection) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramPort) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(getRelatedNodeOrItself(d));\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramPort) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n const elementToSelect = getRelatedNodeOrItself(d);\r\n this.highlight(elementToSelect);\r\n this.addToUserSelection(elementToSelect);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramPort) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n })\r\n .call(\r\n d3\r\n .drag<SVGGElement, DiagramPort, HTMLElement>()\r\n .on(DragEvents.Start, (_event: DragEvent, d: DiagramPort) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.AddConnection) &&\r\n !d.removed\r\n ) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.startConnection(d);\r\n // should be true after having called this.startConnection()\r\n if (this.unfinishedConnection) {\r\n this.unfinishedConnectionTracer = this.selectCanvasElements()\r\n .append('path')\r\n .attr('stroke', 'none')\r\n .attr('fill', 'none');\r\n }\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramPort) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.AddConnection) &&\r\n !d.removed\r\n ) {\r\n if (this.unfinishedConnection !== undefined) {\r\n const endCoords: Point = [event.x, event.y];\r\n this.unfinishedConnectionTracer?.attr(\r\n 'd',\r\n getConnectionPath(\r\n this.unfinishedConnection.type.shape,\r\n this.unfinishedConnection.startCoords,\r\n endCoords,\r\n this.unfinishedConnection.startDirection,\r\n this.unfinishedConnection.endDirection,\r\n this.unfinishedConnection.type.width,\r\n this.unfinishedConnection.startMarkerLook?.markerWidth,\r\n this.unfinishedConnection.endMarkerLook?.markerWidth\r\n )\r\n );\r\n const unfinishedConnectionGhostNode =\r\n this.unfinishedConnectionTracer?.node();\r\n if (unfinishedConnectionGhostNode) {\r\n let margin = 2;\r\n const unfinishedConnectionTotalLength =\r\n unfinishedConnectionGhostNode.getTotalLength();\r\n if (unfinishedConnectionTotalLength < margin) {\r\n margin = 0;\r\n }\r\n const beforeUnfinishedConnectionEnd =\r\n unfinishedConnectionGhostNode.getPointAtLength(\r\n unfinishedConnectionTotalLength - margin\r\n );\r\n this.unfinishedConnection.endCoords = [\r\n beforeUnfinishedConnectionEnd.x,\r\n beforeUnfinishedConnectionEnd.y\r\n ];\r\n } else {\r\n // if it fails, just use the event coordinates\r\n this.unfinishedConnection.endCoords = endCoords;\r\n }\r\n this.updateConnectionsInView(UNFINISHED_CONNECTION_ID);\r\n // highlight closest target port\r\n if (this.model.ports.length > 0) {\r\n const pointerCoords =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n let minDistanceFound = Number.POSITIVE_INFINITY;\r\n let closestPortFound = undefined;\r\n for (const port of this.model.ports) {\r\n const distance = port.distanceTo(pointerCoords);\r\n if (distance < minDistanceFound) {\r\n minDistanceFound = distance;\r\n closestPortFound = port;\r\n }\r\n }\r\n if (\r\n closestPortFound &&\r\n minDistanceFound < MAX_DISTANCE_TO_PORT\r\n ) {\r\n this.highlight(closestPortFound);\r\n } else {\r\n this.unhighlight();\r\n }\r\n }\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramPort) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.AddConnection) &&\r\n !d.removed\r\n ) {\r\n this.unfinishedConnectionTracer?.remove();\r\n if (this.mainUserHighlight instanceof DiagramPort) {\r\n this.finishConnection(this.mainUserHighlight);\r\n } else if (\r\n this.mainUserHighlight instanceof DiagramNode ||\r\n this.mainUserHighlight instanceof DiagramSection ||\r\n this.mainUserHighlight instanceof DiagramField\r\n ) {\r\n let targetRootElement: DiagramNode | DiagramSection;\r\n if (\r\n this.mainUserHighlight instanceof DiagramNode ||\r\n this.mainUserHighlight instanceof DiagramSection\r\n ) {\r\n targetRootElement = this.mainUserHighlight;\r\n } else if (\r\n this.mainUserHighlight.rootElement instanceof DiagramNode ||\r\n this.mainUserHighlight.rootElement instanceof DiagramSection\r\n ) {\r\n targetRootElement = this.mainUserHighlight.rootElement;\r\n } else {\r\n this.dropConnection();\r\n return;\r\n }\r\n const closestPort = targetRootElement.getClosestPortToPoint([\r\n event.x,\r\n event.y\r\n ]);\r\n if (closestPort !== undefined) {\r\n this.finishConnection(closestPort);\r\n } else {\r\n this.dropConnection();\r\n }\r\n } else {\r\n this.dropConnection();\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n );\r\n enterSelection.append('circle');\r\n\r\n mergeSelection\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1))\r\n .select('circle')\r\n .attr('cx', 0)\r\n .attr('cy', 0)\r\n .attr('r', DIAGRAM_PORT_DEFAULTS.radius)\r\n .attr('fill', (d) =>\r\n d.selected\r\n ? DIAGRAM_PORT_DEFAULTS.selectedColor\r\n : DIAGRAM_PORT_DEFAULTS.highlightedColor\r\n )\r\n .attr('opacity', (d) => (d.highlighted || d.selected ? 0.5 : 0));\r\n }\r\n\r\n updateConnectionsInView(...ids: string[]): void {\r\n const connectionList = this.model.connections.filter((e) =>\r\n this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true\r\n );\r\n if (this.unfinishedConnection) {\r\n connectionList.push(this.unfinishedConnection);\r\n }\r\n\r\n let updateSelection: d3.Selection<\r\n SVGGElement,\r\n DiagramConnection,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasConnections()\r\n .selectAll<SVGGElement, DiagramConnection>('g.diagram-connection')\r\n .data(connectionList, (d: DiagramConnection) => d.id);\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('g')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-connection');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramConnection) => {\r\n if (d.end !== undefined) {\r\n this.highlight(d);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramConnection) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(d);\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramConnection) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.highlight(d);\r\n this.addToUserSelection(d);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramConnection) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n });\r\n\r\n enterSelection.append('path').attr('class', 'diagram-connection-path');\r\n enterSelection.append('path').attr('class', 'diagram-connection-path-box');\r\n enterSelection\r\n .append('marker')\r\n .attr('id', (d) => `${d.id}-start-marker`)\r\n .attr('class', 'diagram-connection-start-marker')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection\r\n .append('marker')\r\n .attr('id', (d) => `${d.id}-end-marker`)\r\n .attr('class', 'diagram-connection-end-marker')\r\n .append('image')\r\n .attr('preserveAspectRatio', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-start-label');\r\n enterSelection.select('g.diagram-connection-start-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-start-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-middle-label');\r\n enterSelection.select('g.diagram-connection-middle-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-middle-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n enterSelection.append('g').attr('class', 'diagram-connection-end-label');\r\n enterSelection.select('g.diagram-connection-end-label').append('path');\r\n enterSelection\r\n .select('g.diagram-connection-end-label')\r\n .append('text')\r\n .style('user-select', 'none');\r\n\r\n mergeSelection\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1))\r\n .select('path.diagram-connection-path')\r\n .attr('d', (d) =>\r\n getConnectionPath(\r\n d.type.shape,\r\n d.startCoords,\r\n d.endCoords,\r\n d.startDirection,\r\n d.endDirection,\r\n d.type.width,\r\n d.startMarkerLook?.markerWidth,\r\n d.endMarkerLook?.markerWidth\r\n )\r\n )\r\n .attr('marker-start', (d) => `url(#${d.id}-start-marker)`)\r\n .attr('marker-end', (d) => `url(#${d.id}-end-marker)`)\r\n .attr('stroke', (d) => (d.selected ? d.type.selectedColor : d.type.color))\r\n .attr(\r\n 'stroke-width',\r\n (d) => `${d.highlighted ? d.type.width + 1 : d.type.width}px`\r\n )\r\n .attr('stroke-dasharray', (d) =>\r\n lineStyleDasharray(d.type.style, d.type.width)\r\n )\r\n .attr('fill', 'none');\r\n mergeSelection\r\n .select('path.diagram-connection-path-box')\r\n .attr('d', (d) =>\r\n getConnectionPath(\r\n d.type.shape,\r\n d.startCoords,\r\n d.endCoords,\r\n d.startDirection,\r\n d.endDirection,\r\n d.type.width,\r\n d.startMarkerLook?.markerWidth,\r\n d.endMarkerLook?.markerWidth\r\n )\r\n )\r\n .attr('stroke', 'transparent')\r\n // allow generating pointer events even when it is transparent\r\n .attr('pointer-events', 'stroke')\r\n .attr(\r\n 'stroke-width',\r\n (d) => `${d.type.width + CONNECTION_PATH_BOX_THICKNESS}px`\r\n )\r\n .attr('stroke-dasharray', (d) =>\r\n lineStyleDasharray(d.type.style, d.type.width)\r\n )\r\n .attr('fill', 'none');\r\n\r\n mergeSelection.data().forEach((connection) => {\r\n this.updateConnectionLabelsInView(connection);\r\n this.updateConnectionMarkersInView(connection);\r\n });\r\n }\r\n\r\n updateFieldsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGForeignObjectElement,\r\n DiagramField,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasFields()\r\n .selectAll<SVGForeignObjectElement, DiagramField>(\r\n 'foreignObject.diagram-field'\r\n )\r\n .data(\r\n this.model.fields.filter((e) =>\r\n this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true\r\n ),\r\n (d: DiagramField) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('foreignObject')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-field');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .style('box-sizing', 'border-box')\r\n .on(Events.MouseOver, (_event: MouseEvent, d: DiagramField) => {\r\n this.highlight(d);\r\n })\r\n .on(Events.Click, (event: MouseEvent, d: DiagramField) => {\r\n if (!event.ctrlKey && !event.shiftKey) {\r\n this.clearUserSelection();\r\n }\r\n this.toggleUserSelection(getRelatedNodeOrItself(d));\r\n })\r\n .on(Events.ContextMenu, (event: MouseEvent, d: DiagramField) => {\r\n const diagramEvent = new DiagramEvent(event, Events.ContextMenu, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n const elementToSelect = getRelatedNodeOrItself(d);\r\n this.highlight(elementToSelect);\r\n this.addToUserSelection(elementToSelect);\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramField) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.EditField) &&\r\n d.editable &&\r\n !d.removed\r\n ) {\r\n this.currentAction = new EditFieldAction(this, d.id, d.text, '');\r\n this.createInputField(\r\n d.text,\r\n d.coords,\r\n d.width,\r\n d.height,\r\n d.fontSize,\r\n d.fontFamily || DIAGRAM_FIELD_DEFAULTS.fontFamily,\r\n (text) => {\r\n d.text = text;\r\n },\r\n (text) => {\r\n d.text = text;\r\n if (this.currentAction instanceof EditFieldAction) {\r\n this.currentAction.to = text;\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n );\r\n }\r\n })\r\n .call(\r\n d3\r\n .drag<SVGForeignObjectElement, DiagramField, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent, d: DiagramField) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n cursorStyle(CursorStyle.Grabbing);\r\n this.draggingFrom = [event.x, event.y];\r\n this.currentAction = new SetGeometryAction(\r\n this,\r\n DiagramActions.MoveNode,\r\n node.id,\r\n node.getGeometry(),\r\n node.getGeometry()\r\n );\r\n }\r\n } else {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent, d: DiagramField) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n const newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n node.move(newNodeCoords);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent, d: DiagramField) => {\r\n if (\r\n this.canUserPerformAction(DiagramActions.MoveNode) &&\r\n !d.removed\r\n ) {\r\n if (\r\n d.rootElement instanceof DiagramNode ||\r\n d.rootElement instanceof DiagramSection\r\n ) {\r\n const node =\r\n d.rootElement instanceof DiagramNode\r\n ? d.rootElement\r\n : (d.rootElement.node as DiagramNode);\r\n // prevent drag behavior if mouse hasn't moved\r\n if (\r\n (this.draggingFrom[0] !== event.x ||\r\n this.draggingFrom[1] !== event.y) &&\r\n this.currentAction instanceof SetGeometryAction &&\r\n this.currentAction.intent === DiagramActions.MoveNode\r\n ) {\r\n let newNodeCoords: Point = [\r\n event.x - node.width / 2,\r\n event.y - node.height / 2\r\n ];\r\n if (this.snapToGrid) {\r\n newNodeCoords = this.getClosestGridPoint(newNodeCoords);\r\n }\r\n node.move(newNodeCoords);\r\n this.currentAction.to = node.getGeometry();\r\n this.currentAction.do();\r\n this.actionQueue.add(this.currentAction);\r\n this.currentAction = undefined;\r\n }\r\n }\r\n }\r\n cursorStyle();\r\n })\r\n )\r\n .append('xhtml:div')\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .style('display', 'flex')\r\n .append('xhtml:p')\r\n .style('box-sizing', 'border-box')\r\n .style('outline', 0)\r\n .style('margin', 0)\r\n .style('border', 0)\r\n .style('padding', 0)\r\n .style('user-select', 'none')\r\n .style('font-kerning', 'none')\r\n .style('white-space', 'nowrap');\r\n\r\n mergeSelection\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', (d) => `${d.width}px`)\r\n .attr('height', (d) => `${d.height}px`)\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .attr('opacity', (d) => (d.removed ? 0.5 : 1))\r\n .select('div')\r\n .style('justify-content', (d) =>\r\n d.horizontalAlign === HorizontalAlign.Center\r\n ? 'center'\r\n : d.horizontalAlign === HorizontalAlign.Right\r\n ? 'flex-end'\r\n : 'flex-start'\r\n )\r\n .style('align-items', (d) =>\r\n d.verticalAlign === VerticalAlign.Center\r\n ? 'center'\r\n : d.verticalAlign === VerticalAlign.Bottom\r\n ? 'end'\r\n : 'start'\r\n )\r\n .select('p')\r\n .style('max-width', (d) => (d.fit ? 'default' : '100%'))\r\n .style('max-height', (d) => (d.fit ? 'default' : '100%'))\r\n .style('overflow', (d) => (d.fit ? 'default' : 'hidden'))\r\n .style('text-overflow', (d) => (d.fit ? 'default' : 'ellipsis'))\r\n .style('text-align', (d) =>\r\n d.horizontalAlign === HorizontalAlign.Center\r\n ? 'center'\r\n : d.horizontalAlign === HorizontalAlign.Right\r\n ? 'end'\r\n : 'start'\r\n )\r\n .style('font-size', (d) => `${d.fontSize}px`)\r\n .style(\r\n 'font-family',\r\n (d) => d.fontFamily || \"'Wonder Unit Sans', sans-serif\"\r\n )\r\n .style('font-weight', (d) => (d.highlighted ? 600 : 400))\r\n .style('color', (d) =>\r\n d.selected ? d.selectedColor || '#000000' : d.color || '#000000'\r\n )\r\n .html((d) =>\r\n d.text\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\\n/g, '<br/>')\r\n );\r\n }\r\n\r\n updateObjectsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGForeignObjectElement,\r\n DiagramObject,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasObjects()\r\n .selectAll<SVGForeignObjectElement, DiagramObject>(\r\n 'foreignObject.diagram-object'\r\n )\r\n .data(\r\n this.model.objects.filter((e) =>\r\n this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true\r\n ),\r\n (d: DiagramObject) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('foreignObject')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-object');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n mergeSelection\r\n .attr('width', (d) => `${d.width}px`)\r\n .attr('height', (d) => `${d.height}px`)\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .html((d) => d.html);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.ContextMenu, (event: MouseEvent) => {\r\n const diagramEvent = new DiagramEvent(\r\n event,\r\n Events.ContextMenu,\r\n undefined\r\n );\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramObject) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n });\r\n }\r\n\r\n updateDecoratorsInView(...ids: string[]): void {\r\n let updateSelection: d3.Selection<\r\n SVGForeignObjectElement,\r\n DiagramDecorator,\r\n BaseType,\r\n unknown\r\n > = this.selectCanvasDecorators()\r\n .selectAll<SVGForeignObjectElement, DiagramDecorator>(\r\n 'foreignObject.diagram-decorator'\r\n )\r\n .data(\r\n this.model.decorators.filter((e) =>\r\n this.priorityThreshold !== undefined\r\n ? e.getPriority() >= this.priorityThreshold\r\n : true\r\n ),\r\n (d: DiagramDecorator) => d.id\r\n );\r\n const exitSelection = updateSelection.exit();\r\n const enterSelection = updateSelection\r\n .enter()\r\n .append('foreignObject')\r\n .attr('id', (d) => d.id)\r\n .attr('class', 'diagram-decorator');\r\n\r\n if (ids && ids.length > 0) {\r\n updateSelection = updateSelection.filter((d) => ids.includes(d.id));\r\n }\r\n\r\n const mergeSelection = enterSelection.merge(updateSelection);\r\n\r\n mergeSelection\r\n .attr('width', (d) => `${d.width}px`)\r\n .attr('height', (d) => `${d.height}px`)\r\n .attr('transform', (d) => `translate(${d.coords[0]},${d.coords[1]})`)\r\n .html((d) => d.html);\r\n\r\n exitSelection.remove();\r\n\r\n enterSelection\r\n .on(Events.ContextMenu, (event: MouseEvent) => {\r\n const diagramEvent = new DiagramEvent(\r\n event,\r\n Events.ContextMenu,\r\n undefined\r\n );\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n if (\r\n !diagramEvent.defaultPrevented &&\r\n this.canUserPerformAction(DiagramActions.ContextMenu)\r\n ) {\r\n event.preventDefault();\r\n this.openContextMenu(event);\r\n }\r\n })\r\n .on(Events.DoubleClick, (event: MouseEvent, d: DiagramDecorator) => {\r\n const diagramEvent = new DiagramEvent(event, Events.DoubleClick, d);\r\n this.parentComponent.modelEvent.emit(diagramEvent);\r\n });\r\n }\r\n\r\n updateConnectionLabelsInView(connection: DiagramConnection) {\r\n const connectionSelection: d3.Selection<\r\n SVGGElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = this.selectCanvasView().select(`g.diagram-connection#${connection.id}`);\r\n const pathSelection: d3.Selection<SVGPathElement, unknown, null, unknown> =\r\n connectionSelection.select('path');\r\n const pathNode = pathSelection.node();\r\n const labelConfiguration = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...connection.type.label\r\n };\r\n if (pathNode) {\r\n const pathLength = pathNode.getTotalLength();\r\n\r\n // bind start labels\r\n connectionSelection\r\n .select('g.diagram-connection-start-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.startLabel);\r\n const startLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-start-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (startLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.startLabel\r\n ? 0\r\n : startLabelBoundingRect.width / this.zoomTransform.k +\r\n getLeftPadding(labelConfiguration) +\r\n getRightPadding(labelConfiguration);\r\n const boundingHeight = !connection.startLabel\r\n ? 0\r\n : startLabelBoundingRect.height / this.zoomTransform.k +\r\n getTopPadding(labelConfiguration) +\r\n getBottomPadding(labelConfiguration);\r\n const pathStartLabelPoint = pathNode.getPointAtLength(\r\n Math.max(\r\n getLeftMargin(labelConfiguration) + boundingWidth / 2,\r\n getRightMargin(labelConfiguration) + boundingWidth / 2,\r\n getTopMargin(labelConfiguration) + boundingHeight / 2,\r\n getBottomMargin(labelConfiguration) + boundingHeight / 2\r\n )\r\n );\r\n connectionSelection\r\n .select('g.diagram-connection-start-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-start-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathStartLabelPoint.x},${pathStartLabelPoint.y})`\r\n );\r\n }\r\n\r\n // bind middle labels\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.middleLabel);\r\n const middleLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-middle-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (middleLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.middleLabel\r\n ? 0\r\n : middleLabelBoundingRect.width / this.zoomTransform.k +\r\n getLeftPadding(labelConfiguration) +\r\n getRightPadding(labelConfiguration);\r\n const boundingHeight = !connection.middleLabel\r\n ? 0\r\n : middleLabelBoundingRect.height / this.zoomTransform.k +\r\n getTopPadding(labelConfiguration) +\r\n getBottomPadding(labelConfiguration);\r\n const pathMiddleLabelPoint = pathNode.getPointAtLength(pathLength / 2);\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-middle-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathMiddleLabelPoint.x},${pathMiddleLabelPoint.y})`\r\n );\r\n }\r\n\r\n // bind end labels\r\n connectionSelection\r\n .select('g.diagram-connection-end-label text')\r\n .attr('x', 0)\r\n .attr('y', labelConfiguration.fontSize / 3)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfiguration.fontFamily)\r\n .attr('font-size', labelConfiguration.fontSize)\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? labelConfiguration.selectedColor\r\n : labelConfiguration.color\r\n )\r\n .style('font-kerning', 'none')\r\n .text(connection.endLabel);\r\n const endLabelBoundingRect = connectionSelection\r\n .select<SVGTextElement>('g.diagram-connection-end-label text')\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (endLabelBoundingRect) {\r\n // don't create space for the label if the label is empty\r\n const boundingWidth = !connection.endLabel\r\n ? 0\r\n : endLabelBoundingRect.width / this.zoomTransform.k +\r\n getLeftPadding(labelConfiguration) +\r\n getRightPadding(labelConfiguration);\r\n const boundingHeight = !connection.endLabel\r\n ? 0\r\n : endLabelBoundingRect.height / this.zoomTransform.k +\r\n getTopPadding(labelConfiguration) +\r\n getBottomPadding(labelConfiguration);\r\n const pathEndLabelPoint = pathNode.getPointAtLength(\r\n pathLength -\r\n Math.max(\r\n getLeftMargin(labelConfiguration) + boundingWidth / 2,\r\n getRightMargin(labelConfiguration) + boundingWidth / 2,\r\n getTopMargin(labelConfiguration) + boundingHeight / 2,\r\n getBottomMargin(labelConfiguration) + boundingHeight / 2\r\n )\r\n );\r\n connectionSelection\r\n .select('g.diagram-connection-end-label path')\r\n .attr(\r\n 'd',\r\n pillPath(\r\n -boundingWidth / 2,\r\n -boundingHeight / 2,\r\n boundingWidth,\r\n boundingHeight\r\n )\r\n )\r\n .attr(\r\n 'fill',\r\n connection.selected\r\n ? connection.type.selectedColor\r\n : connection.type.color\r\n )\r\n .attr('stroke', 'none');\r\n connectionSelection\r\n .select('g.diagram-connection-end-label')\r\n .attr(\r\n 'transform',\r\n `translate(${pathEndLabelPoint.x},${pathEndLabelPoint.y})`\r\n );\r\n }\r\n }\r\n }\r\n\r\n updateConnectionMarkersInView(connection: DiagramConnection) {\r\n const connectionSelection: d3.Selection<\r\n SVGGElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = this.selectCanvasView().select(`g.diagram-connection#${connection.id}`);\r\n const startMarkerSelection: d3.Selection<\r\n SVGMarkerElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = connectionSelection.select('marker.diagram-connection-start-marker');\r\n const endMarkerSelection: d3.Selection<\r\n SVGMarkerElement,\r\n unknown,\r\n null,\r\n unknown\r\n > = connectionSelection.select('marker.diagram-connection-end-marker');\r\n\r\n if (connection.startMarkerLook !== null) {\r\n startMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', connection.startMarkerLook.markerWidth)\r\n .attr('markerHeight', connection.startMarkerLook.markerHeight)\r\n .attr('refX', connection.startMarkerLook.markerRefX)\r\n .attr('refY', connection.startMarkerLook.markerRefY)\r\n .select('image')\r\n .attr(\r\n 'href',\r\n connection.selected\r\n ? connection.startMarkerLook.selectedImage\r\n : connection.startMarkerLook.image\r\n )\r\n .attr('width', connection.startMarkerLook.markerWidth)\r\n .attr('height', connection.startMarkerLook.markerHeight);\r\n } else {\r\n startMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', 0)\r\n .attr('markerHeight', 0);\r\n }\r\n\r\n if (connection.endMarkerLook !== null) {\r\n endMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', connection.endMarkerLook.markerWidth)\r\n .attr('markerHeight', connection.endMarkerLook.markerHeight)\r\n .attr('refX', connection.endMarkerLook.markerRefX)\r\n .attr('refY', connection.endMarkerLook.markerRefY)\r\n .select('image')\r\n .attr(\r\n 'href',\r\n connection.selected\r\n ? connection.endMarkerLook.selectedImage\r\n : connection.endMarkerLook.image\r\n )\r\n .attr('width', connection.endMarkerLook.markerWidth)\r\n .attr('height', connection.endMarkerLook.markerHeight);\r\n } else {\r\n endMarkerSelection\r\n .attr('orient', 'auto-start-reverse')\r\n .attr('markerWidth', 0)\r\n .attr('markerHeight', 0);\r\n }\r\n }\r\n\r\n fitFieldRootInView(id: string) {\r\n const field = this.model.fields.get(id);\r\n if (!field) {\r\n return;\r\n }\r\n if (field.rootElement instanceof DiagramNode && field.fit) {\r\n const fieldDimensions = this.minimumSizeOfField(field);\r\n let stretchX =\r\n fieldDimensions[0] +\r\n getLeftMargin(field.rootElement.type.label) +\r\n getRightMargin(field.rootElement.type.label) -\r\n field.rootElement.width;\r\n let stretchY =\r\n fieldDimensions[1] +\r\n getTopMargin(field.rootElement.type.label) +\r\n getBottomMargin(field.rootElement.type.label) -\r\n field.rootElement.height;\r\n if (this.snapToGrid) {\r\n stretchX = Math.ceil(stretchX / this.gridSize) * this.gridSize;\r\n stretchY = Math.ceil(stretchY / this.gridSize) * this.gridSize;\r\n }\r\n // ensure node is not stretched under its minimum dimensions\r\n if (\r\n field.rootElement.width + stretchX <\r\n field.rootElement.type.minWidth\r\n ) {\r\n stretchX = field.rootElement.type.minWidth - field.rootElement.width;\r\n }\r\n if (\r\n field.rootElement.height + stretchY <\r\n field.rootElement.type.minHeight\r\n ) {\r\n stretchY = field.rootElement.type.minHeight - field.rootElement.height;\r\n }\r\n field.rootElement.stretch(Side.Right, stretchX);\r\n field.rootElement.stretch(Side.Bottom, stretchY);\r\n }\r\n if (field.rootElement instanceof DiagramSection && field.fit) {\r\n const fieldDimensions = this.minimumSizeOfField(field);\r\n let minimumFieldWidth = fieldDimensions[0];\r\n let minimumFieldHeight = fieldDimensions[1];\r\n for (const section of field.rootElement.node?.sections || []) {\r\n if (section.label) {\r\n if (\r\n section.indexXInNode === field.rootElement.indexXInNode &&\r\n section.indexYInNode !== field.rootElement.indexYInNode\r\n ) {\r\n minimumFieldWidth = Math.max(\r\n minimumFieldWidth,\r\n this.minimumSizeOfField(section.label)[0]\r\n );\r\n } else if (\r\n section.indexXInNode !== field.rootElement.indexXInNode &&\r\n section.indexYInNode === field.rootElement.indexYInNode\r\n ) {\r\n minimumFieldHeight = Math.max(\r\n minimumFieldHeight,\r\n this.minimumSizeOfField(section.label)[1]\r\n );\r\n }\r\n }\r\n }\r\n if (fieldDimensions[0] < minimumFieldWidth) {\r\n fieldDimensions[0] = minimumFieldWidth;\r\n }\r\n if (fieldDimensions[1] < minimumFieldHeight) {\r\n fieldDimensions[1] = minimumFieldHeight;\r\n }\r\n let stretchX =\r\n fieldDimensions[0] +\r\n getLeftMargin(field.rootElement?.getConfig()?.label) +\r\n getRightMargin(field.rootElement?.getConfig()?.label) -\r\n field.rootElement.width;\r\n let stretchY =\r\n fieldDimensions[1] +\r\n getTopMargin(field.rootElement?.getConfig()?.label) +\r\n getBottomMargin(field.rootElement?.getConfig()?.label) -\r\n field.rootElement.height;\r\n if (this.snapToGrid) {\r\n stretchX = Math.ceil(stretchX / this.gridSize) * this.gridSize;\r\n stretchY = Math.ceil(stretchY / this.gridSize) * this.gridSize;\r\n }\r\n // ensure section is not stretched under its minimum dimensions\r\n if (\r\n field.rootElement.width + stretchX <\r\n (field.rootElement.getMinWidth() || 0)\r\n ) {\r\n stretchX =\r\n (field.rootElement.getMinWidth() || 0) - field.rootElement.width;\r\n }\r\n if (\r\n field.rootElement.height + stretchY <\r\n (field.rootElement.getMinHeight() || 0)\r\n ) {\r\n stretchY =\r\n (field.rootElement.getMinHeight() || 0) - field.rootElement.height;\r\n }\r\n field.rootElement.node?.stretchSections(\r\n Side.Right,\r\n stretchX,\r\n field.rootElement.indexXInNode,\r\n field.rootElement.indexYInNode\r\n );\r\n field.rootElement.node?.stretchSections(\r\n Side.Bottom,\r\n stretchY,\r\n field.rootElement.indexXInNode,\r\n field.rootElement.indexYInNode\r\n );\r\n }\r\n }\r\n\r\n fitNodeInView(id: string) {\r\n const node = this.model.nodes.get(id);\r\n if (!node) {\r\n return;\r\n }\r\n if (node.sections.length > 0 && this.priorityThreshold) {\r\n let newNodeWidth = 0;\r\n let newNodeHeight = 0;\r\n // calculate newNodeWidth, newNodeHeight as the rightmost and bottommost points of any of the sections of the node\r\n for (const section of node.sections) {\r\n if (section.getPriority() >= this.priorityThreshold) {\r\n const sectionLastXCoordRelativeToNode =\r\n section.coords[0] + section.width - node.coords[0];\r\n const sectionLastYCoordRelativeToNode =\r\n section.coords[1] + section.height - node.coords[1];\r\n newNodeWidth = Math.max(\r\n newNodeWidth,\r\n sectionLastXCoordRelativeToNode\r\n );\r\n newNodeHeight = Math.max(\r\n newNodeHeight,\r\n sectionLastYCoordRelativeToNode\r\n );\r\n }\r\n }\r\n // add the margin that goes between the rightmost and bottommost points of the sections and the edge of the node\r\n newNodeWidth += node.type.sectionGrid?.margin || 0;\r\n newNodeHeight += node.type.sectionGrid?.margin || 0;\r\n node.stretch(Side.Right, newNodeWidth - node.width);\r\n node.stretch(Side.Bottom, newNodeHeight - node.height);\r\n }\r\n }\r\n\r\n selectRoot(): d3.Selection<SVGElement, unknown, null, unknown> {\r\n return d3.select(this.diagramRoot).select('svg');\r\n }\r\n\r\n selectCanvasView(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-view`);\r\n }\r\n\r\n selectCanvasElements(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-elements`);\r\n }\r\n\r\n selectCanvasNodes(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-nodes`);\r\n }\r\n\r\n selectCanvasSections(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-sections`);\r\n }\r\n\r\n selectCanvasPorts(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-ports`);\r\n }\r\n\r\n selectCanvasConnections(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-connections`);\r\n }\r\n\r\n selectCanvasFields(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-fields`);\r\n }\r\n\r\n selectCanvasObjects(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-objects`);\r\n }\r\n\r\n selectCanvasDecorators(): d3.Selection<SVGGElement, unknown, null, unknown> {\r\n return this.selectRoot().select(`.daga-canvas-decorators`);\r\n }\r\n\r\n // User actions\r\n\r\n startConnection(port: DiagramPort) {\r\n if (\r\n this.connectionType &&\r\n (this.connectionType.canStartFromType(port.getNode()?.type?.id || '') ||\r\n this.connectionType.canFinishOnType(port.getNode()?.type?.id || ''))\r\n ) {\r\n this.unfinishedConnection = new DiagramConnection(\r\n this.model,\r\n this.connectionType,\r\n port,\r\n undefined,\r\n UNFINISHED_CONNECTION_ID\r\n );\r\n } else {\r\n if (this.guessConnectionType) {\r\n let differentConnectionType = this.model.connections.types\r\n .all()\r\n .find((t) => t.canStartFromType(port.getNode()?.type?.id || ''));\r\n if (differentConnectionType === undefined) {\r\n differentConnectionType = this.model.connections.types\r\n .all()\r\n .find((t) => t.canFinishOnType(port.getNode()?.type?.id || ''));\r\n }\r\n if (differentConnectionType !== undefined) {\r\n this.unfinishedConnection = new DiagramConnection(\r\n this.model,\r\n differentConnectionType,\r\n port,\r\n undefined,\r\n UNFINISHED_CONNECTION_ID\r\n );\r\n } else {\r\n // error: connection source of wrong type and no allowed type can be found\r\n }\r\n } else {\r\n // error: connection source of wrong type and can't guess for a different type\r\n }\r\n }\r\n }\r\n\r\n finishConnection(port: DiagramPort) {\r\n this.unhighlight();\r\n if (this.unfinishedConnection !== undefined) {\r\n if (this.unfinishedConnection.start !== port) {\r\n if (\r\n this.unfinishedConnection.type.canStartFromType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canFinishOnType(\r\n port.getNode()?.type?.id || ''\r\n )\r\n ) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n this.unfinishedConnection.type,\r\n this.unfinishedConnection.start?.id as string,\r\n port.id\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.do();\r\n this.actionQueue.add(addConnectionAction);\r\n } else if (\r\n this.unfinishedConnection.type.canFinishOnType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) &&\r\n this.unfinishedConnection.type.canStartFromType(\r\n port.getNode()?.type?.id || ''\r\n )\r\n ) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n this.unfinishedConnection.type,\r\n port.id,\r\n this.unfinishedConnection.start?.id as string\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.do();\r\n this.actionQueue.add(addConnectionAction);\r\n } else {\r\n if (this.guessConnectionType) {\r\n let differentConnectionType = this.model.connections.types\r\n .all()\r\n .find(\r\n (t) =>\r\n t.canStartFromType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id || ''\r\n ) && t.canFinishOnType(port.getNode()?.type?.id || '')\r\n );\r\n let invertConnection = false;\r\n if (differentConnectionType === undefined) {\r\n differentConnectionType = this.model.connections.types\r\n .all()\r\n .find(\r\n (t) =>\r\n t.canFinishOnType(\r\n this.unfinishedConnection?.start?.getNode()?.type?.id ||\r\n ''\r\n ) && t.canStartFromType(port.getNode()?.type?.id || '')\r\n );\r\n invertConnection = true;\r\n }\r\n if (differentConnectionType !== undefined) {\r\n const addConnectionAction = new AddConnectionAction(\r\n this,\r\n differentConnectionType,\r\n invertConnection\r\n ? port.id\r\n : (this.unfinishedConnection.start?.id as string),\r\n invertConnection\r\n ? (this.unfinishedConnection.start?.id as string)\r\n : port.id\r\n );\r\n // clean up the previous unfinished connection\r\n this.dropConnection();\r\n addConnectionAction.do();\r\n this.actionQueue.add(addConnectionAction);\r\n } else {\r\n // error: connection target of wrong type and no allowed type can be found\r\n this.dropConnection();\r\n }\r\n } else {\r\n // error: connection target of wrong type and can't guess for a different type\r\n this.dropConnection();\r\n }\r\n }\r\n } else {\r\n // error: start port of a connection can't also be the end port\r\n this.dropConnection();\r\n }\r\n }\r\n }\r\n\r\n dropConnection() {\r\n this.unfinishedConnection?.setStart(undefined);\r\n this.unfinishedConnection?.setEnd(undefined);\r\n this.unfinishedConnection?.select()?.remove();\r\n this.unfinishedConnection = undefined;\r\n }\r\n\r\n highlight(element: DiagramElement): void {\r\n this.unhighlight();\r\n element.highlighted = true;\r\n this.mainUserHighlight = element;\r\n this.userHighlight.push(element);\r\n if (element instanceof DiagramNode) {\r\n for (const port of element.ports) {\r\n port.highlighted = true;\r\n this.userHighlight.push(port);\r\n this.updatePortsInView(port.id);\r\n }\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updateNodesInView(element.id);\r\n } else if (element instanceof DiagramSection) {\r\n for (const port of element.ports) {\r\n port.highlighted = true;\r\n this.userHighlight.push(port);\r\n this.updatePortsInView(port.id);\r\n }\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updateSectionsInView(element.id);\r\n } else if (element instanceof DiagramPort) {\r\n if (element.label) {\r\n element.label.highlighted = true;\r\n this.userHighlight.push(element.label);\r\n this.updateFieldsInView(element.label.id);\r\n }\r\n this.updatePortsInView(element.id);\r\n } else if (element instanceof DiagramConnection) {\r\n this.updateConnectionsInView(element.id);\r\n } else if (element instanceof DiagramField && element.rootElement) {\r\n this.highlight(element.rootElement);\r\n }\r\n }\r\n\r\n unhighlight(): void {\r\n for (const element of this.userHighlight) {\r\n element.highlighted = false;\r\n element.updateInView();\r\n }\r\n this.mainUserHighlight = undefined;\r\n this.userHighlight = [];\r\n }\r\n\r\n setPropertyEditorSelection(\r\n selection?: { valueSet: ValueSet } & (DiagramElement | DiagramModel)\r\n ): void {\r\n this.makeUpdateValuesAction();\r\n\r\n const propertyEditor = this.parentComponent.propertyEditor;\r\n const selectedValueSet = selection?.valueSet;\r\n if (selectedValueSet) {\r\n this.propertyEditorSelection = selection;\r\n this.propertyEditorValues = structuredClone(selectedValueSet.getValues());\r\n if (propertyEditor) {\r\n if (\r\n selection instanceof DiagramNode ||\r\n selection instanceof DiagramConnection\r\n ) {\r\n if (selection instanceof DiagramNode) {\r\n if (selection.name) {\r\n propertyEditor.title = `${selection.type.name}: ${selection.name}`;\r\n } else {\r\n propertyEditor.title = selection.type.name;\r\n }\r\n } else if (selection instanceof DiagramConnection) {\r\n propertyEditor.title = selection.type.name;\r\n }\r\n // force the update of the valueSet\r\n propertyEditor.valueSet = undefined;\r\n propertyEditor.valueSet = selectedValueSet;\r\n } else {\r\n propertyEditor.title = DIAGRAM_PROPERTIES_TEXT;\r\n // force the update of the valueSet\r\n propertyEditor.valueSet = undefined;\r\n propertyEditor.valueSet = selectedValueSet;\r\n }\r\n }\r\n } else {\r\n this.propertyEditorSelection = undefined;\r\n this.propertyEditorValues = undefined;\r\n if (propertyEditor) {\r\n propertyEditor.title = '';\r\n propertyEditor.valueSet = undefined;\r\n }\r\n }\r\n }\r\n\r\n private makeUpdateValuesAction() {\r\n if (\r\n this.propertyEditorSelection === undefined ||\r\n this.propertyEditorValues === undefined\r\n ) {\r\n return;\r\n }\r\n const previousSelectionId =\r\n this.propertyEditorSelection instanceof DiagramModel\r\n ? undefined\r\n : (this.propertyEditorSelection as DiagramElement).id;\r\n // check if there have been changes in the previously selected ValueSet,\r\n // and create an UpdateValuesAction if there have\r\n if (\r\n equals(\r\n this.propertyEditorValues,\r\n this.propertyEditorSelection?.valueSet.getValues()\r\n )\r\n ) {\r\n return;\r\n }\r\n const from = this.propertyEditorValues;\r\n const to = structuredClone(\r\n this.propertyEditorSelection?.valueSet.getValues()\r\n );\r\n const [fromDiff, toDiff] = diff(from, to);\r\n const currentAction = new UpdateValuesAction(\r\n this,\r\n previousSelectionId,\r\n fromDiff,\r\n toDiff\r\n );\r\n currentAction.do();\r\n this.actionQueue.add(currentAction);\r\n this.propertyEditorValues = to;\r\n }\r\n\r\n isInUserSelection(selection: DiagramElement): boolean {\r\n return this.userSelection.indexOf(selection) >= 0;\r\n }\r\n\r\n addToUserSelection(selection: DiagramElement): void {\r\n if (selection.selected) {\r\n // if selection is already selected, do nothing\r\n return;\r\n }\r\n if (\r\n this.propertyEditorSelection === undefined &&\r\n (selection instanceof DiagramNode ||\r\n selection instanceof DiagramConnection)\r\n ) {\r\n this.setPropertyEditorSelection(selection);\r\n } else if (\r\n this.propertyEditorSelection === undefined &&\r\n selection instanceof DiagramSection\r\n ) {\r\n this.setPropertyEditorSelection(selection.node);\r\n } else {\r\n this.setPropertyEditorSelection(undefined);\r\n }\r\n this.userSelection.push(selection);\r\n selection.selected = true;\r\n selection.updateInView();\r\n // if selection is a node with sections, select the sections too so that sections show up as selected in the view\r\n if (selection instanceof DiagramNode && selection.sections) {\r\n for (const section of selection.sections) {\r\n this.addToUserSelection(section);\r\n }\r\n }\r\n }\r\n\r\n removeFromUserSelection(selection: DiagramElement): void {\r\n if (this.propertyEditorSelection === selection) {\r\n this.setPropertyEditorSelection(undefined);\r\n }\r\n const indexOfSelectionInUserSelection =\r\n this.userSelection.indexOf(selection);\r\n if (indexOfSelectionInUserSelection >= 0) {\r\n this.userSelection.splice(indexOfSelectionInUserSelection, 1);\r\n }\r\n selection.selected = false;\r\n selection.updateInView();\r\n // if selection is a node with sections, deselect the sections too so that sections don't show up as selected in the view\r\n if (selection instanceof DiagramNode && selection.sections) {\r\n for (const section of selection.sections) {\r\n this.removeFromUserSelection(section);\r\n }\r\n }\r\n }\r\n\r\n toggleUserSelection(selection: DiagramElement): void {\r\n if (this.isInUserSelection(selection)) {\r\n this.removeFromUserSelection(selection);\r\n } else {\r\n this.addToUserSelection(selection);\r\n }\r\n }\r\n\r\n clearUserSelection(): void {\r\n this.setPropertyEditorSelection(undefined);\r\n for (const userSelectionElement of this.userSelection) {\r\n userSelectionElement.selected = false;\r\n userSelectionElement.updateInView();\r\n }\r\n this.userSelection = [];\r\n }\r\n\r\n deleteUserSelection(): void {\r\n if (this.userSelection.length > 0) {\r\n const nodeIdsToBeDeleted: string[] = [];\r\n const sectionIdsToBeDeleted: string[] = [];\r\n const portIdsToBeDeleted: string[] = [];\r\n const connectionIdsToBeDeleted: string[] = [];\r\n const fieldIdsToBeDeleted: string[] = [];\r\n for (const userSelectionElement of this.userSelection) {\r\n if (userSelectionElement instanceof DiagramNode) {\r\n nodeIdsToBeDeleted.push(userSelectionElement.id);\r\n } else if (userSelectionElement instanceof DiagramSection) {\r\n sectionIdsToBeDeleted.push(userSelectionElement.id);\r\n } else if (userSelectionElement instanceof DiagramPort) {\r\n portIdsToBeDeleted.push(userSelectionElement.id);\r\n } else if (userSelectionElement instanceof DiagramConnection) {\r\n connectionIdsToBeDeleted.push(userSelectionElement.id);\r\n } else if (userSelectionElement instanceof DiagramField) {\r\n fieldIdsToBeDeleted.push(userSelectionElement.id);\r\n }\r\n }\r\n const removeAction = new RemoveAction(\r\n this,\r\n nodeIdsToBeDeleted,\r\n sectionIdsToBeDeleted,\r\n portIdsToBeDeleted,\r\n connectionIdsToBeDeleted,\r\n fieldIdsToBeDeleted\r\n );\r\n removeAction.do();\r\n this.actionQueue.add(removeAction);\r\n }\r\n }\r\n\r\n copyUserSelectionToClipboard(): void {\r\n const userSelection: {\r\n type: 'daga-user-selection';\r\n nodes: DagaNode[];\r\n connections: DagaConnection[];\r\n } = { type: 'daga-user-selection', nodes: [], connections: [] };\r\n const exporter = new DagaExporter();\r\n for (const element of this.userSelection) {\r\n if (element instanceof DiagramNode) {\r\n userSelection.nodes.push(exporter.exportNode(element, false));\r\n }\r\n if (element instanceof DiagramConnection) {\r\n userSelection.connections.push(\r\n exporter.exportConnection(element, false)\r\n );\r\n }\r\n }\r\n navigator.clipboard.writeText(JSON.stringify(userSelection));\r\n }\r\n\r\n pasteUserSelectionFromClipboard(coords?: Point): void {\r\n navigator.clipboard.readText().then((text) => {\r\n try {\r\n const userSelection = JSON.parse(text);\r\n if (userSelection.type !== 'daga-user-selection') {\r\n return;\r\n }\r\n const action = new PasteAction(\r\n this,\r\n userSelection.nodes,\r\n userSelection.connections,\r\n coords\r\n );\r\n this.actionQueue.add(action);\r\n action.do();\r\n } catch {\r\n return;\r\n }\r\n });\r\n }\r\n\r\n openContextMenu(event: MouseEvent): void {\r\n this.closeContextMenu();\r\n\r\n const coordsRelativeToRoot = this.getPointerLocationRelativeToRoot(event);\r\n const coordsRelativeToCanvas =\r\n this.getPointerLocationRelativeToCanvas(event);\r\n\r\n // append to the root (svg) element so the context menu is not affected by zoom transforms on the canvas view\r\n const contextMenuContainer = this.selectRoot()\r\n .append('foreignObject')\r\n .attr('class', 'daga-context-menu')\r\n .attr('x', `${coordsRelativeToRoot[0] - CONTEXT_MENU_TOTAL_RADIUS}px`)\r\n .attr('y', `${coordsRelativeToRoot[1] - CONTEXT_MENU_TOTAL_RADIUS}px`)\r\n .attr('width', `${2 * CONTEXT_MENU_TOTAL_RADIUS}px`)\r\n .attr('height', `${2 * CONTEXT_MENU_TOTAL_RADIUS}px`)\r\n .style('pointer-events', 'none')\r\n .on(Events.ContextMenu, (newEvent: MouseEvent) => {\r\n if (this.canUserPerformAction(DiagramActions.ContextMenu)) {\r\n event.preventDefault();\r\n this.openContextMenu(newEvent);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent) => {\r\n event.preventDefault();\r\n this.closeContextMenu();\r\n });\r\n this.contextMenuContainer = contextMenuContainer;\r\n const buttons: {\r\n name: string;\r\n imageClass: string;\r\n onPress?: (buttonPressEvent: UIEvent) => void;\r\n }[] = [];\r\n if (\r\n this.userSelection.length > 0 &&\r\n this.canUserPerformAction(DiagramActions.Clipboard) &&\r\n this.canUserPerformAction(DiagramActions.Remove)\r\n ) {\r\n buttons.push({\r\n name: 'CUT',\r\n imageClass: 'daga-cut',\r\n onPress: (buttonPressEvent: UIEvent) => {\r\n buttonPressEvent.preventDefault();\r\n this.copyUserSelectionToClipboard();\r\n this.deleteUserSelection();\r\n this.cancelAllUserActions();\r\n }\r\n });\r\n }\r\n if (\r\n this.userSelection.length > 0 &&\r\n this.canUserPerformAction(DiagramActions.Clipboard)\r\n ) {\r\n buttons.push({\r\n name: 'COPY',\r\n imageClass: 'daga-copy',\r\n onPress: (buttonPressEvent: UIEvent) => {\r\n buttonPressEvent.preventDefault();\r\n this.copyUserSelectionToClipboard();\r\n this.cancelAllUserActions();\r\n }\r\n });\r\n }\r\n if (this.canUserPerformAction(DiagramActions.Paste)) {\r\n buttons.push({\r\n name: 'PASTE',\r\n imageClass: 'daga-paste',\r\n onPress: (buttonPressEvent: UIEvent) => {\r\n buttonPressEvent.preventDefault();\r\n this.pasteUserSelectionFromClipboard(\r\n this.getClosestGridPoint(coordsRelativeToCanvas)\r\n );\r\n this.cancelAllUserActions();\r\n }\r\n });\r\n }\r\n if (\r\n this.userSelection.length > 0 &&\r\n this.canUserPerformAction(DiagramActions.Remove)\r\n ) {\r\n buttons.push({\r\n name: 'DELETE',\r\n imageClass: 'daga-delete',\r\n onPress: (buttonPressEvent: UIEvent) => {\r\n buttonPressEvent.preventDefault();\r\n this.deleteUserSelection();\r\n this.cancelAllUserActions();\r\n }\r\n });\r\n }\r\n // show something if there are no options available\r\n if (buttons.length === 0) {\r\n buttons.push({\r\n name: 'NONE',\r\n imageClass: 'daga-cross',\r\n onPress: undefined\r\n });\r\n }\r\n\r\n for (let i = 0; i < buttons.length; ++i) {\r\n const button = buttons[i];\r\n const buttonOnPress = button.onPress;\r\n const angle =\r\n (i + 0.5 - buttons.length / 2) * CONTEXT_MENU_BUTTON_PADDING_RADIANS;\r\n const buttonContainer = contextMenuContainer\r\n .append('xhtml:div')\r\n .attr(\r\n 'class',\r\n `daga-context-menu-button ${button.imageClass}-button${button.onPress != undefined ? ' daga-clickable' : ''}`\r\n )\r\n .attr('tabindex', 0)\r\n .style('position', 'absolute')\r\n .style('box-sizing', 'border-box')\r\n .style('width', `${2 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('height', `${2 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('border-radius', `${CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('pointer-events', 'auto')\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n .on(Events.Click, (event: MouseEvent) => {\r\n if (buttonOnPress) {\r\n buttonOnPress(event);\r\n }\r\n })\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n .on(Events.KeyDown, (event: KeyboardEvent) => {\r\n if (buttonOnPress && event.key === Keys.Enter) {\r\n buttonOnPress(event);\r\n }\r\n });\r\n buttonContainer\r\n .append('xhtml:div')\r\n .style('position', 'absolute')\r\n .style('left', `${0.75 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('top', `${0.5 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('width', `${0.5 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('height', `${0.5 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('background-size', 'contain')\r\n .style('background-repeat', 'no-repeat')\r\n .attr('class', button.imageClass);\r\n buttonContainer\r\n .append('xhtml:span')\r\n .style('position', 'absolute')\r\n .style('left', `${0.2 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('top', `${1.1 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('text-align', 'center')\r\n .style('width', `${1.6 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('height', `${0.35 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('margin', '0')\r\n .style('font-size', `${0.35 * CONTEXT_MENU_BUTTON_RADIUS}px`)\r\n .style('font-weight', '700')\r\n .style('user-select', 'none')\r\n .text(button.name);\r\n buttonContainer\r\n .transition()\r\n .ease(d3.easeLinear)\r\n .duration(CONTEXT_MENU_ANIMATION_DURATION_MS)\r\n .tween('progress', () => {\r\n return (value: number) => {\r\n const currentAngle = angle * value;\r\n return buttonContainer\r\n .style(\r\n 'left',\r\n `${Math.sin(currentAngle) * CONTEXT_MENU_MENU_RADIUS - CONTEXT_MENU_BUTTON_RADIUS + CONTEXT_MENU_TOTAL_RADIUS}px`\r\n )\r\n .style(\r\n 'top',\r\n `${-Math.cos(currentAngle) * CONTEXT_MENU_MENU_RADIUS - CONTEXT_MENU_BUTTON_RADIUS + CONTEXT_MENU_TOTAL_RADIUS}px`\r\n );\r\n };\r\n });\r\n }\r\n }\r\n\r\n closeContextMenu(): void {\r\n this.contextMenuContainer?.remove();\r\n this.contextMenuContainer = undefined;\r\n }\r\n\r\n cancelAllUserActions(): void {\r\n this.currentAction = undefined;\r\n this.dropConnection();\r\n this.removeInputField();\r\n this.closeContextMenu();\r\n this.clearUserSelection();\r\n }\r\n\r\n canUserPerformAction(action: DiagramActions): boolean {\r\n return this.userActions[action] !== false;\r\n }\r\n\r\n private createInputField(\r\n text: string,\r\n coords: Point,\r\n width: number,\r\n height: number,\r\n fontSize: number,\r\n fontFamily: string,\r\n changeCallback?: (text: string) => void,\r\n finishCallback?: (text: string) => void\r\n ): void {\r\n // if we have a text input open, close it before creating a new one\r\n this.removeInputField();\r\n const inputFieldContainer = this.selectCanvasElements()\r\n .append('foreignObject')\r\n .attr('x', `${coords[0]}px`)\r\n .attr('y', `${coords[1]}px`)\r\n .attr('width', `${width}px`)\r\n .attr('height', `${height}px`)\r\n .style('box-sizing', 'border-box')\r\n .style('border', '1px solid');\r\n this.inputFieldContainer = inputFieldContainer;\r\n const inputField = inputFieldContainer.append('xhtml:textarea');\r\n let inputFieldWidth: number;\r\n let inputFieldHeight: number;\r\n inputField\r\n .text(text)\r\n .style('box-sizing', 'border-box')\r\n .style('width', `${width}px`)\r\n .style('height', `${height}px`)\r\n .style('font-size', `${fontSize}px`)\r\n .style('font-family', fontFamily)\r\n .style('resize', 'none')\r\n .style('outline', 0)\r\n .style('border', 0)\r\n .style('margin', 0)\r\n .style('padding', 0)\r\n .on(Events.KeyDown, (event: KeyboardEvent) => {\r\n event.stopPropagation();\r\n })\r\n .on(Events.KeyUp, (event: KeyboardEvent) => {\r\n event.stopPropagation();\r\n if (event.key === Keys.Escape) {\r\n const value = inputField.property('value');\r\n this.removeInputField();\r\n if (finishCallback) {\r\n finishCallback(value);\r\n }\r\n }\r\n })\r\n .on(Events.Input, () => {\r\n const value = inputField.property('value');\r\n inputField.attr('cols', numberOfColumns(value) + 1);\r\n inputField.attr('rows', numberOfRows(value) + 1);\r\n // reset width and height so that later the scrollWidth and scrollHeight are fit to the size of the text\r\n inputField.style('width', '');\r\n inputField.style('height', '');\r\n // add one pixel of margin of error\r\n inputFieldWidth = inputField.property('scrollWidth') + 1;\r\n inputFieldHeight = inputField.property('scrollHeight') + 1;\r\n // keep the field from shrinking below its original size\r\n const newWidth = Math.max(inputFieldWidth, width);\r\n const newHeight = Math.max(inputFieldHeight, height);\r\n inputFieldContainer?.attr('width', `${newWidth}px`);\r\n inputField.style('width', `${newWidth}px`);\r\n inputFieldContainer?.attr('height', `${newHeight}px`);\r\n inputField.style('height', `${newHeight}px`);\r\n if (changeCallback) {\r\n changeCallback(value);\r\n }\r\n })\r\n .on(Events.Click, (event: MouseEvent) => {\r\n event.stopPropagation();\r\n })\r\n .on(Events.FocusOut, () => {\r\n const value = inputField.property('value');\r\n this.removeInputField();\r\n if (finishCallback) {\r\n finishCallback(value);\r\n }\r\n });\r\n const htmlInput = inputField.node() as HTMLInputElement;\r\n htmlInput.focus();\r\n htmlInput.select();\r\n }\r\n\r\n private removeInputField(): void {\r\n // when removing an element, a blur event is emitted\r\n // we remove the listener for blur so that it doesn't shoot again on element removal\r\n this.inputFieldContainer?.select('input')?.on(Events.Blur, null);\r\n this.inputFieldContainer?.remove();\r\n this.inputFieldContainer = undefined;\r\n }\r\n\r\n private minimumSizeOfField(field: DiagramField): Point {\r\n const pNode = field.select()?.select('p')?.node() as HTMLParagraphElement;\r\n if (!pNode) {\r\n // happens when a field has been created but not updated in view yet\r\n return [0, 0];\r\n }\r\n const pBoundingBox = pNode.getBoundingClientRect();\r\n return [\r\n pBoundingBox.width / this.zoomTransform.k,\r\n pBoundingBox.height / this.zoomTransform.k\r\n ];\r\n }\r\n}\r\n\r\n/**\r\n * Get the SVG path of a diagram connection.\r\n * @see linePath\r\n * @private\r\n */\r\nconst getConnectionPath = (\r\n shape: LineShape,\r\n startCoords: Point,\r\n endCoords: Point,\r\n startDirection: Side | undefined,\r\n endDirection: Side | undefined,\r\n width: number,\r\n startMarkerWidth: number | undefined,\r\n endMarkerWidth: number | undefined\r\n): string => {\r\n return linePath(\r\n shape,\r\n [startCoords, endCoords],\r\n startDirection,\r\n endDirection,\r\n Math.max(\r\n // reasonable value for the minimumDistanceBeforeTurn relative to the line width\r\n 10,\r\n startMarkerWidth || 0,\r\n endMarkerWidth || 0\r\n ) * width\r\n );\r\n};\r\n\r\nexport const cursorStyle = (style?: CursorStyle) => {\r\n if (!style) {\r\n d3.select('body').style('cursor', CursorStyle.Auto);\r\n } else {\r\n d3.select('body').style('cursor', style);\r\n }\r\n};\r\n\r\nconst getRelatedNodeOrItself = (\r\n element: DiagramNode | DiagramSection | DiagramPort | DiagramField\r\n): DiagramNode | DiagramSection | DiagramPort | DiagramField => {\r\n if (element instanceof DiagramNode) {\r\n return element;\r\n }\r\n if (element instanceof DiagramSection) {\r\n return element.node || element;\r\n }\r\n return element.rootElement !== undefined\r\n ? getRelatedNodeOrItself(element.rootElement)\r\n : element;\r\n};\r\n","import { Injectable } from '@angular/core';\nimport { DiagramCanvas } from '../diagram-editor/diagram/diagram-canvas';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\nimport { Canvas } from '../interfaces/canvas';\nimport { DiagramEditor } from '../interfaces/diagram-editor';\n\n/**\n * A provider for the {@link Canvas} associated with a {@link DiagramComponent} context.\n * @public\n */\n@Injectable()\nexport class CanvasProviderService {\n private _canvas!: Canvas;\n\n /**\n * Initialize the diagram canvas object of this context.\n * @private\n * @param parentComponent A diagram editor.\n * @param config A diagram configuration.\n */\n initCanvas(parentComponent: DiagramEditor, config: DiagramConfig) {\n this._canvas = new DiagramCanvas(parentComponent, config);\n }\n\n /**\n * Attach the canvas of this context to an HTML Element to render it there.\n * @private\n * @param appendTo An HTML Element.\n */\n initCanvasView(appendTo: HTMLElement) {\n this._canvas.initView(appendTo);\n }\n\n /**\n * Get the diagram canvas of this context. Should only be called after the view of the {@link DiagramComponent} context has been initialized.\n * @public\n * @returns A diagram canvas.\n */\n getCanvas(): Canvas {\n return this._canvas;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n ViewChild\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { DiagramActions } from '../diagram-editor/diagram/diagram-action';\r\nimport { layouts } from '../diagram-editor/diagram/layout/diagram-layout';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { DiagramButtons } from '../interfaces/diagram-buttons';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Corner, Side } from '../util/svg-util';\r\n\r\n/**\r\n * Buttons used to trigger diagram functionalities by the user.\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram-buttons',\r\n templateUrl: './diagram-buttons.component.html',\r\n imports: [CommonModule]\r\n})\r\nexport class DiagramButtonsComponent implements AfterViewInit, DiagramButtons {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('collapsableButtons')\r\n collapsableButtons!: ElementRef<HTMLDivElement>;\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n enableFilter = true;\r\n @Input()\r\n enableLayout = true;\r\n @Input()\r\n enableUndoRedo = true;\r\n @Input()\r\n enableZoom = true;\r\n @Input()\r\n zoomRate = 2;\r\n\r\n filterOn = false;\r\n collapsed = true;\r\n animationOngoing = false;\r\n private sizeAttribute!: string;\r\n private transformFunction!: string;\r\n private transformOrigin!: string;\r\n private marginSide!: string;\r\n private collapsableButtonsSize!: string;\r\n\r\n DiagramActions = DiagramActions;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterViewInit() {\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'top';\r\n this.marginSide = 'bottom';\r\n break;\r\n case Side.Top:\r\n this.sizeAttribute = 'height';\r\n this.transformFunction = 'scaleY';\r\n this.transformOrigin = 'bottom';\r\n this.marginSide = 'top';\r\n break;\r\n case Side.Left:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'right';\r\n this.marginSide = 'left';\r\n break;\r\n case Side.Right:\r\n this.sizeAttribute = 'width';\r\n this.transformFunction = 'scaleX';\r\n this.transformOrigin = 'left';\r\n this.marginSide = 'right';\r\n break;\r\n }\r\n const numberOfCollapsableButtons = d3\r\n .select(this.collapsableButtons.nativeElement)\r\n .selectChildren()\r\n .size();\r\n this.collapsableButtonsSize = `${4 * numberOfCollapsableButtons}rem`;\r\n d3.select(this.collapsableButtons.nativeElement)\r\n .style(`margin-${this.marginSide}`, '-1rem')\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`)\r\n .style('transform-origin', this.transformOrigin);\r\n }\r\n\r\n // Collapse functions\r\n\r\n async toggleCollapse() {\r\n if (!this.animationOngoing) {\r\n const duration = 500;\r\n const collapsableButtons = d3.select(\r\n this.collapsableButtons.nativeElement\r\n );\r\n if (this.collapsed) {\r\n this.collapsed = false;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, this.collapsableButtonsSize)\r\n .style('transform', `${this.transformFunction}(1)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n } else {\r\n this.collapsed = true;\r\n collapsableButtons\r\n .transition()\r\n .duration(duration)\r\n .ease(d3.easeLinear)\r\n .style(this.sizeAttribute, '0rem')\r\n .style('transform', `${this.transformFunction}(0)`);\r\n setTimeout(() => {\r\n this.animationOngoing = false;\r\n }, duration);\r\n }\r\n }\r\n }\r\n\r\n // Button functions\r\n\r\n zoomIn(): void {\r\n this.canvas.zoomBy(this.zoomRate);\r\n }\r\n\r\n zoomOut(): void {\r\n this.canvas.zoomBy(1 / this.zoomRate);\r\n }\r\n\r\n center(): void {\r\n this.canvas.center();\r\n }\r\n\r\n layout(): void {\r\n if (this.canvas.layoutFormat && this.canvas.layoutFormat in layouts) {\r\n layouts[this.canvas.layoutFormat].apply(this.canvas.model);\r\n }\r\n }\r\n\r\n filter(): void {\r\n this.filterOn = !this.filterOn;\r\n const priorityThresholds = this.canvas.getPriorityThresholdOptions();\r\n if (priorityThresholds && priorityThresholds.length >= 2) {\r\n this.canvas.setPriorityThreshold(\r\n priorityThresholds[this.filterOn ? 1 : 0]\r\n );\r\n }\r\n }\r\n\r\n undo(): void {\r\n this.canvas.actionQueue.undo();\r\n }\r\n\r\n redo(): void {\r\n this.canvas.actionQueue.redo();\r\n }\r\n}\r\n","<div class=\"daga-diagram-buttons daga-{{ location }} daga-{{ direction }}\">\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"daga-zoom-in\"\r\n (click)=\"zoomIn()\"\r\n >\r\n <span class=\"daga-tooltip\">Zoom in</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"daga-zoom-out\"\r\n (click)=\"zoomOut()\"\r\n >\r\n <span class=\"daga-tooltip\">Zoom out</span>\r\n </button>\r\n <div #collapsableButtons class=\"daga-collapsable-buttons daga-collapsed\">\r\n <button\r\n *ngIf=\"enableZoom && canvas.canUserPerformAction(DiagramActions.Zoom)\"\r\n class=\"daga-center\"\r\n (click)=\"center()\"\r\n >\r\n <span class=\"daga-tooltip\">Fit diagram to screen</span>\r\n </button>\r\n <button *ngIf=\"enableUndoRedo\" class=\"daga-undo\" (click)=\"undo()\">\r\n <span class=\"daga-tooltip\">Undo</span>\r\n </button>\r\n <button *ngIf=\"enableUndoRedo\" class=\"daga-redo\" (click)=\"redo()\">\r\n <span class=\"daga-tooltip\">Redo</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableLayout && canvas.layoutFormat\"\r\n class=\"daga-layout\"\r\n (click)=\"layout()\"\r\n >\r\n <span class=\"daga-tooltip\">Apply layout</span>\r\n </button>\r\n <button\r\n *ngIf=\"enableFilter\"\r\n class=\"daga-filter\"\r\n [class]=\"filterOn ? 'daga-on' : 'daga-off'\"\r\n (click)=\"filter()\"\r\n >\r\n <span class=\"daga-tooltip\">Apply filter</span>\r\n </button>\r\n </div>\r\n <button class=\"daga-more-options\" (click)=\"toggleCollapse()\">\r\n <span *ngIf=\"!collapsed\" class=\"daga-tooltip\">Less options</span>\r\n <span *ngIf=\"collapsed\" class=\"daga-tooltip\">More options</span>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { merge, delay, map } from 'rxjs';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Side } from '../util/svg-util';\r\nimport { DiagramError } from './diagram-error';\r\n\r\n/**\r\n * Displays the errors detected by a diagram's validators.\r\n * @see DiagramValidator\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-errors',\r\n templateUrl: './errors.component.html',\r\n imports: [CommonModule, CollapseButtonComponent]\r\n})\r\nexport class ErrorsComponent implements AfterViewInit {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('errors') errorsContainer!: ElementRef<HTMLDivElement>;\r\n\r\n errors: DiagramError[] = [];\r\n\r\n Side = Side;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterViewInit(): void {\r\n merge(this.canvas.validatorChanges$, this.canvas.diagramChanges$)\r\n .pipe(\r\n // delay to avoid errors of variables changing right after checking\r\n delay(1),\r\n map(() => this.validate())\r\n )\r\n .subscribe();\r\n }\r\n\r\n selectPanel(): d3.Selection<d3.BaseType, unknown, null, unknown> {\r\n return d3\r\n .select(this.errorsContainer.nativeElement)\r\n .select('.daga-error-panel');\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n for (const validator of this.canvas.validators) {\r\n const newErrors = validator.validate(this.canvas.model);\r\n this.errors = [...this.errors, ...newErrors];\r\n }\r\n }\r\n\r\n showError(error: DiagramError): void {\r\n if (\r\n error.elementId &&\r\n (error.propertyNames === undefined || error.propertyNames.length === 0)\r\n ) {\r\n const element =\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId);\r\n if (element) {\r\n this.canvas.highlight(element);\r\n }\r\n } else if (\r\n error.elementId &&\r\n error.propertyNames !== undefined &&\r\n error.propertyNames.length > 0\r\n ) {\r\n this.canvas.setPropertyEditorSelection(\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId)\r\n );\r\n const element =\r\n this.canvas.model.nodes.get(error.elementId) ||\r\n this.canvas.model.connections.get(error.elementId);\r\n if (element) {\r\n this.canvas.highlight(element);\r\n }\r\n this.canvas.parentComponent.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n } else if (\r\n !error.elementId &&\r\n error.propertyNames !== undefined &&\r\n error.propertyNames.length > 0\r\n ) {\r\n this.canvas.setPropertyEditorSelection();\r\n this.canvas.parentComponent.propertyEditor?.highlightProperty(\r\n ...error.propertyNames\r\n );\r\n }\r\n }\r\n}\r\n","<div #errorsContainer class=\"daga-errors\">\r\n <div\r\n *ngIf=\"errors.length === 0\"\r\n class=\"daga-errors-summary daga-no-errors daga-prevent-user-select\"\r\n >\r\n <span>No errors found</span>\r\n </div>\r\n <div\r\n *ngIf=\"errors.length > 0\"\r\n class=\"daga-errors-summary daga-with-errors daga-prevent-user-select\"\r\n >\r\n <span>{{ errors.length }} errors found</span>\r\n <div class=\"daga-collapse-button-container\">\r\n <daga-collapse-button\r\n [collapsableSelector]=\"errorsContainer\"\r\n [collapsableAdditionalSelector]=\"'.daga-error-panel'\"\r\n [direction]=\"Side.Top\"\r\n [rule]=\"'display'\"\r\n [collapsedValue]=\"'none'\"\r\n [visibleValue]=\"'block'\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngIf=\"errors.length > 0\" class=\"daga-error-panel\">\r\n <ol>\r\n <li\r\n *ngFor=\"let error of errors; index as i\"\r\n (click)=\"showError(error)\"\r\n [innerHTML]=\"error.message\"\r\n ></li>\r\n </ol>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n ViewChild\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport {\r\n AddNodeAction,\r\n DiagramActions\r\n} from '../diagram-editor/diagram/diagram-action';\r\nimport { cursorStyle } from '../diagram-editor/diagram/diagram-canvas';\r\nimport {\r\n ConnectionTemplateConfig,\r\n NodeTemplateConfig,\r\n PaletteSectionConfig\r\n} from '../diagram-editor/diagram/diagram-config';\r\nimport { DiagramConnectionType } from '../diagram-editor/diagram/diagram-connection';\r\nimport {\r\n DIAGRAM_FIELD_DEFAULTS,\r\n getLeftMargin,\r\n getTopMargin\r\n} from '../diagram-editor/diagram/diagram-field';\r\nimport { DiagramNodeType } from '../diagram-editor/diagram/diagram-node';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { Palette } from '../interfaces/palette';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { Point } from '../util/canvas-util';\r\nimport { DragEvents, Events } from '../util/events';\r\nimport { ClosedShape, generalClosedPath } from '../util/shape';\r\nimport { CursorStyle } from '../util/style';\r\nimport { Corner, Side } from '../util/svg-util';\r\n\r\n/**\r\n * Palette that the user can drag and drop nodes from.\r\n * @see DiagramConfig\r\n * @see DiagramNode\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-palette',\r\n templateUrl: './palette.component.html',\r\n imports: [CommonModule, CollapseButtonComponent]\r\n})\r\nexport class PaletteComponent\r\n implements AfterContentInit, AfterViewInit, Palette\r\n{\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n @Input()\r\n palettes!: PaletteSectionConfig[];\r\n @Input()\r\n currentPalette!: PaletteSectionConfig;\r\n @Input()\r\n currentCategory = '';\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n width!: string;\r\n\r\n private priorityThreshold?: number;\r\n\r\n constructor(private canvasProvider: CanvasProviderService) {}\r\n\r\n ngAfterContentInit(): void {\r\n // we initialize the currentPalette variable if it hasn't been initalized with a proper value\r\n // doing this in ngAfterViewInit() would cause an ExpressionChangedAfterItHasBeenCheckedError\r\n this.currentPalette = this.currentPalette || this.palettes[0];\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.refreshPalette();\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel().style('width', this.width);\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel().style('height', this.width);\r\n break;\r\n }\r\n }\r\n\r\n refreshPalette(): void {\r\n this.switchPalette(this.currentPalette);\r\n }\r\n\r\n switchPalette(palette: PaletteSectionConfig): void {\r\n this.currentPalette = palette;\r\n\r\n this.selectPalette().selectAll('*').remove();\r\n this.priorityThreshold = this.canvas.getPriorityThreshold();\r\n\r\n if (palette.categories) {\r\n this.appendCategories(palette.categories);\r\n }\r\n if (palette.templates) {\r\n for (const template of palette.templates) {\r\n this.appendTemplate(template);\r\n }\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n selectPalette(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return this.selectPanel().select('.daga-palette-view');\r\n }\r\n\r\n private appendCategories(categories: {\r\n [key: string]: (NodeTemplateConfig | ConnectionTemplateConfig)[];\r\n }): void {\r\n const thisComponent = this.selectPalette()\r\n .append('select')\r\n .style('width', '100%')\r\n .style('height', '2rem')\r\n .style('padding', '0.5rem')\r\n .style('border-radius', '0.25rem')\r\n .style('background-color', '#f7f8fc')\r\n .style('border', `1px solid #e6e6e6`);\r\n thisComponent.append('option').attr('value', '').text('(None selected)');\r\n for (const categoryKey in categories) {\r\n thisComponent\r\n .append('option')\r\n .attr('value', categoryKey)\r\n .text(categoryKey);\r\n }\r\n thisComponent.on(Events.Change, () => {\r\n if (this.currentCategory) {\r\n this.selectPalette()\r\n .selectAll(`.daga-template-container.daga-in-category`)\r\n .remove();\r\n }\r\n\r\n const selectedKey = thisComponent.property('value');\r\n this.currentCategory = selectedKey;\r\n const templatesInCategory = categories[selectedKey] || [];\r\n for (const template of templatesInCategory) {\r\n this.appendTemplate(template, 'daga-in-category');\r\n }\r\n });\r\n if (this.currentCategory) {\r\n // if we had a category already selected, re-select it\r\n thisComponent.property('value', this.currentCategory);\r\n thisComponent.dispatch(Events.Change);\r\n }\r\n }\r\n\r\n private appendTemplate(\r\n template: NodeTemplateConfig | ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (template.templateType === 'node') {\r\n const nodeType = this.canvas.model.nodes.types.get(template.type);\r\n if (nodeType) {\r\n this.appendNodeTemplate(nodeType, template, classes);\r\n } else {\r\n console.error(`Could not find a node type called '${template.type}'`);\r\n }\r\n } else if (template.templateType === 'connection') {\r\n {\r\n const connectionType = this.canvas.model.connections.types.get(\r\n template.type\r\n );\r\n if (connectionType) {\r\n this.appendConnectionTemplate(connectionType, template, classes);\r\n } else {\r\n console.error(\r\n `Could not find a connection type called '${template.type}'`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private appendNodeTemplate(\r\n type: DiagramNodeType,\r\n templateConfig: NodeTemplateConfig,\r\n classes?: string\r\n ): void {\r\n if (\r\n this.priorityThreshold !== undefined &&\r\n type.priority < this.priorityThreshold\r\n ) {\r\n return;\r\n }\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `daga-template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${type.defaultWidth}px`)\r\n .style('height', `${type.defaultHeight}px`)\r\n .call(\r\n d3\r\n .drag<HTMLDivElement, unknown, HTMLElement>()\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n thisComponent\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - type.defaultWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - type.defaultHeight / 2}px`)\r\n .style('z-index', 1);\r\n }\r\n })\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n cursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n thisComponent\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - type.defaultWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - type.defaultHeight / 2}px`)\r\n .style('z-index', 1);\r\n // when trying to place a unique node in a diagram that already has a node of that type, set cursor style to not allowed\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(\r\n (n) => !n.removed && n.type.id === type.id\r\n ) !== undefined\r\n ) {\r\n cursorStyle(CursorStyle.NotAllowed);\r\n }\r\n }\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n if (this.canvas.canUserPerformAction(DiagramActions.AddNode)) {\r\n // take node back to its original position\r\n cursorStyle(CursorStyle.Auto);\r\n thisComponent\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('z-index', 'auto');\r\n // try to place node\r\n if (\r\n type.isUnique &&\r\n this.canvas.model.nodes.find(\r\n (n) => !n.removed && n.type.id === type.id\r\n ) !== undefined\r\n ) {\r\n // can't place, it's unique and that node is already in the model\r\n return;\r\n }\r\n const pointerCoordsRelativeToScreen =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoordsRelativeToScreen.length < 2 ||\r\n isNaN(pointerCoordsRelativeToScreen[0]) ||\r\n isNaN(pointerCoordsRelativeToScreen[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n\r\n const element = document.elementFromPoint(\r\n pointerCoordsRelativeToScreen[0],\r\n pointerCoordsRelativeToScreen[1]\r\n );\r\n if (\r\n element &&\r\n !this.canvas.selectCanvasView().node()?.contains(element)\r\n ) {\r\n // can't place, node hasn't been dropped on the canvas\r\n return;\r\n }\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToCanvas(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n // can't place, position is incorrect\r\n return;\r\n }\r\n let newNodeCoords: Point = [\r\n pointerCoords[0] - type.defaultWidth / 2,\r\n pointerCoords[1] - type.defaultHeight / 2\r\n ];\r\n if (this.canvas.snapToGrid) {\r\n newNodeCoords = this.canvas.getClosestGridPoint(newNodeCoords);\r\n }\r\n const addNodeAction = new AddNodeAction(\r\n this.canvas,\r\n type,\r\n newNodeCoords,\r\n templateConfig.label,\r\n templateConfig.values\r\n );\r\n addNodeAction.do();\r\n this.canvas.actionQueue.add(addNodeAction);\r\n // reset cursor\r\n cursorStyle();\r\n }\r\n })\r\n )\r\n .append('svg')\r\n .attr('class', `palette-node ${type.id}`)\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', '100%')\r\n .style('height', '100%');\r\n\r\n switch (type.look.lookType) {\r\n case 'shaped-look':\r\n thisComponent\r\n .append('path')\r\n .attr(\r\n 'd',\r\n generalClosedPath(\r\n type.look.shape,\r\n 0,\r\n 0,\r\n type.defaultWidth,\r\n type.defaultHeight\r\n )\r\n )\r\n .attr('fill', type.look.fillColor)\r\n .attr('stroke', type.look.borderColor)\r\n .attr('stroke-width', '1px');\r\n break;\r\n case 'image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', type.defaultWidth)\r\n .attr('height', type.defaultHeight)\r\n .attr('href', type.look.backgroundImage)\r\n .attr('preserveAspectRatio', 'none');\r\n break;\r\n case 'stretchable-image-look':\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', type.look.leftMargin)\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTopLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', 0)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTop)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', 0)\r\n .attr('width', type.look.rightMargin)\r\n .attr('height', type.look.topMargin)\r\n .attr('href', type.look.backgroundImageTopRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', type.look.topMargin)\r\n .attr('width', type.look.leftMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', type.look.topMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageCenter)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', type.look.topMargin)\r\n .attr('width', type.look.rightMargin)\r\n .attr(\r\n 'height',\r\n type.defaultHeight - type.look.bottomMargin - type.look.topMargin\r\n )\r\n .attr('href', type.look.backgroundImageRight)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr('width', type.look.leftMargin)\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottomLeft)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.look.leftMargin)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr(\r\n 'width',\r\n type.defaultWidth - type.look.rightMargin - type.look.leftMargin\r\n )\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottom)\r\n .attr('preserveAspectRatio', 'none');\r\n thisComponent\r\n .append('image')\r\n .attr('x', type.defaultWidth - type.look.rightMargin)\r\n .attr('y', type.defaultHeight - type.look.bottomMargin)\r\n .attr('width', type.look.rightMargin)\r\n .attr('height', type.look.bottomMargin)\r\n .attr('href', type.look.backgroundImageBottomRight)\r\n .attr('preserveAspectRatio', 'none');\r\n }\r\n\r\n if (templateConfig.label) {\r\n const labelConfig = {\r\n ...DIAGRAM_FIELD_DEFAULTS,\r\n ...type.label,\r\n ...templateConfig.labelLook\r\n };\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${(getLeftMargin(labelConfig) + type.defaultWidth) / 2},${(getTopMargin(labelConfig) + type.defaultHeight) / 2})`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', `${labelConfig.fontSize}px`)\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', labelConfig.fontFamily)\r\n .attr('font-weight', 400)\r\n .attr('fill', labelConfig.color)\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n\r\n private appendConnectionTemplate(\r\n type: DiagramConnectionType,\r\n templateConfig: ConnectionTemplateConfig,\r\n classes?: string\r\n ): void {\r\n const thisComponent = this.selectPalette()\r\n .append('div')\r\n .attr(\r\n 'class',\r\n `daga-template-container ${classes !== undefined ? classes : ''}`\r\n )\r\n .style('width', `${templateConfig.width}px`)\r\n .style('height', `${templateConfig.height}px`)\r\n .append('svg')\r\n .attr('class', `palette-button ${type.id}`)\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('width', '100%')\r\n .style('height', '100%')\r\n .on('click', () => {\r\n this.canvas.connectionType = type;\r\n });\r\n\r\n thisComponent\r\n .append('path')\r\n .attr(\r\n 'd',\r\n generalClosedPath(\r\n ClosedShape.Rectangle,\r\n 0,\r\n 0,\r\n templateConfig.width,\r\n templateConfig.height\r\n )\r\n )\r\n .attr('fill', templateConfig.backgroundColor)\r\n .attr('stroke', 'black')\r\n .attr('stroke-width', '1px');\r\n\r\n if (templateConfig.icon !== '') {\r\n thisComponent\r\n .append('image')\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('width', templateConfig.width)\r\n .attr('height', templateConfig.height)\r\n .attr('href', templateConfig.icon);\r\n }\r\n\r\n if (templateConfig.label !== '') {\r\n thisComponent\r\n .append('text')\r\n .attr(\r\n 'transform',\r\n `translate(${templateConfig.width / 2},${\r\n templateConfig.height / 2 + 5\r\n })`\r\n )\r\n .attr('x', 0)\r\n .attr('y', 0)\r\n .attr('font-size', '20px')\r\n .attr('text-anchor', 'middle')\r\n .attr('font-family', \"'Wonder Unit Sans', sans-serif\")\r\n .attr('font-weight', 400)\r\n .attr('fill', '#000000')\r\n .attr('stroke', 'none')\r\n .style('font-kerning', 'none')\r\n .style('user-select', 'none')\r\n .text(templateConfig.label);\r\n }\r\n }\r\n}\r\n","<div #panel class=\"daga-panel daga-{{ location }} daga-{{ direction }}\">\r\n <daga-collapse-button\r\n #collapseButton\r\n [direction]=\"direction\"\r\n [collapsableSelector]=\"panel\"\r\n collapsableAdditionalSelector=\".daga-panel-content\"\r\n rule=\"display\"\r\n collapsedValue=\"none\"\r\n visibleValue=\"block\"\r\n />\r\n <div class=\"daga-panel-content\">\r\n <div *ngIf=\"palettes.length > 1\" class=\"daga-panel-tabs\">\r\n <div\r\n *ngFor=\"let palette of palettes\"\r\n class=\"daga-panel-tab\"\r\n [class]=\"palette === currentPalette ? 'daga-current-tab' : ''\"\r\n (click)=\"switchPalette(palette)\"\r\n >\r\n {{ palette.name }}\r\n </div>\r\n </div>\r\n <div class=\"daga-palette-view\"></div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n Input\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport * as d3 from 'd3';\r\nimport { cursorStyle } from '../../diagram-editor/diagram/diagram-canvas';\r\nimport {\r\n Property,\r\n Type,\r\n ValueSet,\r\n isObject\r\n} from '../../diagram-editor/diagram/diagram-property';\r\nimport { Canvas } from '../../interfaces/canvas';\r\nimport { CanvasProviderService } from '../../services/canvas-provider.service';\r\nimport { Point, distanceBetweenPoints } from '../../util/canvas-util';\r\nimport { DragEvents } from '../../util/events';\r\nimport { CursorStyle } from '../../util/style';\r\nimport { getStyleClassName } from '../property-editor.component';\r\n\r\n/**\r\n * Editor of the settings of a property editor, such as what properties are displayed and hidden and in what order.\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-property-settings',\r\n templateUrl: './property-settings.component.html',\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class PropertySettingsComponent implements AfterViewInit {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n /** How many property-settings elements are parents of this property-settings element. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n getStyleClassName = getStyleClassName;\r\n asString = asString;\r\n\r\n constructor(\r\n private element: ElementRef,\r\n private cdr: ChangeDetectorRef,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.addListeners();\r\n }\r\n\r\n private addListeners() {\r\n for (const property of this.valueSet?.displayedProperties || []) {\r\n let propertyElementWidth = 0;\r\n let propertyElementHeight = 0;\r\n let closestDropbarIndex = 0;\r\n const propertyElement = d3\r\n .select(this.element.nativeElement)\r\n .select<HTMLDivElement>(\r\n `.daga-property.${getStyleClassName(property.name)}.daga-depth-${this.depth}`\r\n );\r\n propertyElement.select<HTMLButtonElement>('button.daga-move-button').call(\r\n d3\r\n .drag<HTMLButtonElement, unknown, HTMLElement>()\r\n .on(DragEvents.Start, (event: DragEvent) => {\r\n cursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n const boundingRect = propertyElement\r\n .node()\r\n ?.getBoundingClientRect();\r\n propertyElementWidth = boundingRect?.width || 0;\r\n propertyElementHeight = boundingRect?.height || 0;\r\n propertyElement\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - propertyElementWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - propertyElementHeight / 2}px`)\r\n .style('width', `${propertyElementWidth}px`)\r\n .style('height', `${propertyElementHeight}px`)\r\n .style('z-index', 1);\r\n })\r\n .on(DragEvents.Drag, (event: DragEvent) => {\r\n cursorStyle(CursorStyle.Grabbing);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n propertyElement\r\n .style('position', 'fixed')\r\n .style('left', `${pointerCoords[0] - propertyElementWidth / 2}px`)\r\n .style('top', `${pointerCoords[1] - propertyElementHeight / 2}px`)\r\n .style('width', `${propertyElementWidth}px`)\r\n .style('height', `${propertyElementHeight}px`)\r\n .style('z-index', 1);\r\n d3.select(this.element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'hidden')\r\n .style('height', 0);\r\n closestDropbarIndex = this.getClosestDropbarIndex(pointerCoords);\r\n d3.select(this.element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'visible')\r\n .style('height', '0.25rem');\r\n })\r\n .on(DragEvents.End, (event: DragEvent) => {\r\n cursorStyle(CursorStyle.Auto);\r\n propertyElement\r\n .style('position', 'relative')\r\n .style('left', 0)\r\n .style('top', 0)\r\n .style('z-index', 0)\r\n .style('width', 'unset')\r\n .style('height', 'unset');\r\n d3.select(this.element.nativeElement)\r\n .select(\r\n `.daga-dropbar.daga-index-${closestDropbarIndex}.daga-depth-${this.depth}`\r\n )\r\n .style('visibility', 'hidden')\r\n .style('height', 0);\r\n const pointerCoords =\r\n this.canvas.getPointerLocationRelativeToScreen(event);\r\n if (\r\n pointerCoords.length < 2 ||\r\n isNaN(pointerCoords[0]) ||\r\n isNaN(pointerCoords[1])\r\n ) {\r\n return;\r\n }\r\n closestDropbarIndex = this.getClosestDropbarIndex(pointerCoords);\r\n this.valueSet?.displayedProperties?.splice(\r\n this.valueSet.displayedProperties.indexOf(property),\r\n 1\r\n );\r\n this.valueSet?.displayedProperties?.splice(\r\n closestDropbarIndex,\r\n 0,\r\n property\r\n );\r\n })\r\n );\r\n }\r\n }\r\n\r\n getClosestDropbarIndex(pointerCoords: Point): number {\r\n const propertyList = this.valueSet?.propertySet.propertyList || [];\r\n // note that this is <= and not < as we are counting the index after the last element as well\r\n const coordsList: Point[] = [];\r\n for (let i = 0; i <= propertyList.length; ++i) {\r\n const boundingRect = d3\r\n .select(this.element.nativeElement)\r\n .select<HTMLDivElement>(\r\n `.daga-dropbar.daga-index-${i}.daga-depth-${this.depth}`\r\n )\r\n .node()\r\n ?.getBoundingClientRect();\r\n if (boundingRect) {\r\n coordsList.push([\r\n boundingRect.x + boundingRect.width / 2,\r\n boundingRect.y + boundingRect.height / 2\r\n ]);\r\n }\r\n }\r\n if (coordsList.length > 0) {\r\n const distanceToDropbars = coordsList.map((p) =>\r\n distanceBetweenPoints(pointerCoords, p)\r\n );\r\n const indexOfClosestDropbar = distanceToDropbars.indexOf(\r\n Math.min(...distanceToDropbars)\r\n );\r\n return indexOfClosestDropbar;\r\n }\r\n return 0;\r\n }\r\n\r\n displayProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.displayProperty(selectedProperty);\r\n }\r\n this.cdr.detectChanges();\r\n this.addListeners();\r\n }\r\n\r\n hideProperty(property: Property | Event | string | undefined) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n let selectedProperty: Property | undefined;\r\n if (property instanceof Property) {\r\n selectedProperty = property;\r\n } else if (property instanceof Event) {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(\r\n (property.target as unknown as { value: string })?.value || ''\r\n );\r\n } else {\r\n selectedProperty = this.valueSet?.propertySet.getProperty(property || '');\r\n }\r\n if (selectedProperty) {\r\n this.valueSet.hideProperty(selectedProperty);\r\n }\r\n this.cdr.detectChanges();\r\n this.addListeners();\r\n }\r\n}\r\n\r\nexport const asString = (value: unknown): string => {\r\n if (Array.isArray(value)) {\r\n return value.join(', ');\r\n }\r\n if (isObject(value)) {\r\n return Object.entries(value as object)\r\n .map((pair) => pair.map((p) => JSON.stringify(p)).join(': '))\r\n .join(', ');\r\n }\r\n if (value instanceof Date) {\r\n return value.toLocaleString();\r\n }\r\n if (value === undefined || value === null) {\r\n return '';\r\n }\r\n return '' + value;\r\n};\r\n","<div\r\n class=\"daga-dropbar\"\r\n [class]=\"'daga-index-' + 0 + ' daga-depth-' + depth\"\r\n></div>\r\n<div\r\n *ngFor=\"let property of valueSet?.displayedProperties || []; index as i\"\r\n class=\"daga-property-and-dropbar\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n>\r\n <div\r\n class=\"daga-property\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n >\r\n <div class=\"daga-property-name\">\r\n <span>{{ property.name }}</span>\r\n <div class=\"daga-buttons\">\r\n <button class=\"daga-property-button daga-move-button\">\r\n <div class=\"daga-icon daga-move-icon\"></div>\r\n </button>\r\n <button\r\n class=\"daga-property-button daga-hide-button\"\r\n (click)=\"hideProperty(property.name)\"\r\n >\r\n <div class=\"daga-icon daga-hide-icon\"></div>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"property.type !== Type.Object\" class=\"daga-property-value\">\r\n {{ asString(valueSet?.getValue(property.name)) }}\r\n </div>\r\n <div *ngIf=\"property.type === Type.Object\">\r\n <daga-property-settings\r\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\r\n [depth]=\"depth + 1\"\r\n ></daga-property-settings>\r\n </div>\r\n </div>\r\n <div\r\n class=\"daga-dropbar\"\r\n [class]=\"'daga-index-' + (i + 1) + ' daga-depth-' + depth\"\r\n ></div>\r\n</div>\r\n<div\r\n class=\"daga-property\"\r\n *ngIf=\"valueSet && valueSet.hiddenProperties.length > 0\"\r\n>\r\n <p class=\"daga-property-name\">Add property:</p>\r\n <select (change)=\"displayProperty($event)\">\r\n <option value=\"\">Select a property</option>\r\n <option\r\n *ngFor=\"let property of valueSet?.hiddenProperties || []\"\r\n [value]=\"property.name\"\r\n >\r\n {{ property.name }}\r\n </option>\r\n </select>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Option, equals } from '../../diagram-editor/diagram/diagram-property';\r\nimport { Keys } from '../../util/events';\r\nimport { asString } from '../property-settings/property-settings.component';\r\n\r\nexport const LOST_FOCUS_TIME_WINDOW_MS = 200;\r\n\r\n/**\r\n * Combobox with autocomplete.\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-autocomplete',\r\n templateUrl: './autocomplete.component.html',\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class AutocompleteComponent {\r\n @ViewChild('main', { static: true }) mainElement!: ElementRef;\r\n\r\n private _value: unknown;\r\n @Input()\r\n set value(value: unknown) {\r\n if (equals(value, this._value)) {\r\n return;\r\n }\r\n this._value = value;\r\n this.valueInput = this.getLabelOfValue(value);\r\n }\r\n get value(): unknown {\r\n return this._value;\r\n }\r\n @Input() valueInput = '';\r\n focusIndex?: number;\r\n @Input() options!: Option<unknown>[];\r\n currentOptions!: Option<unknown>[];\r\n currentLabelStarts!: string[];\r\n currentLabelMatches!: string[];\r\n currentLabelEnds!: string[];\r\n\r\n @Input() disabled = false;\r\n showOptions = false;\r\n\r\n @Output() valueChange = new EventEmitter<unknown>();\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n getLabelOfValue(value: unknown): string {\r\n for (const option of this.options) {\r\n if (equals(option.key, value)) {\r\n return option.label;\r\n }\r\n }\r\n return asString(value);\r\n }\r\n\r\n onKeyup(event: KeyboardEvent): void {\r\n if (!this.disabled) {\r\n switch (event.key) {\r\n case Keys.PageDown:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(0);\r\n this.scrollToOption(0);\r\n } else {\r\n this.focusOnOption(this.focusIndex + 5);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.ArrowDown:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(0);\r\n this.scrollToOption(0);\r\n } else {\r\n this.focusOnOption(this.focusIndex + 1);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.PageUp:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(this.options.length - 1);\r\n this.scrollToOption(this.options.length - 1);\r\n } else {\r\n this.focusOnOption(this.focusIndex - 5);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.ArrowUp:\r\n if (this.focusIndex === undefined) {\r\n this.focusOnOption(this.options.length - 1);\r\n this.scrollToOption(this.options.length - 1);\r\n } else {\r\n this.focusOnOption(this.focusIndex - 1);\r\n this.scrollToOption(this.focusIndex);\r\n }\r\n event.preventDefault();\r\n break;\r\n case Keys.Escape:\r\n this.closeOptions();\r\n event.preventDefault();\r\n break;\r\n case Keys.Enter:\r\n this.complete(this.options[this.focusIndex || 0]);\r\n event.preventDefault();\r\n break;\r\n default:\r\n this.openOptions();\r\n }\r\n }\r\n }\r\n\r\n openOptions(): void {\r\n if (!this.disabled) {\r\n const mustContain = normalizeString(this.valueInput.trim());\r\n this.currentOptions = [];\r\n this.currentLabelStarts = [];\r\n this.currentLabelMatches = [];\r\n this.currentLabelEnds = [];\r\n for (const option of this.options) {\r\n const normalizedLabel = normalizeString(option.label);\r\n const position = normalizedLabel.indexOf(mustContain);\r\n if (position >= 0) {\r\n const labelStart = option.label.substring(0, position);\r\n const labelMatch = option.label.substring(\r\n position,\r\n position + mustContain.length\r\n );\r\n const labelEnd = option.label.substring(\r\n position + mustContain.length\r\n );\r\n this.currentOptions.push(option);\r\n this.currentLabelStarts.push(labelStart);\r\n this.currentLabelMatches.push(labelMatch);\r\n this.currentLabelEnds.push(labelEnd);\r\n }\r\n }\r\n this.showOptions = true;\r\n }\r\n }\r\n\r\n closeOptions(): void {\r\n this.showOptions = false;\r\n }\r\n\r\n focusOnOption(index: number | undefined) {\r\n if (!this.disabled) {\r\n this.focusIndex = index;\r\n if (index === undefined) {\r\n return;\r\n }\r\n if (index < 0) {\r\n this.focusIndex = 0;\r\n }\r\n if (index >= this.options.length) {\r\n this.focusIndex = this.options.length - 1;\r\n }\r\n }\r\n }\r\n\r\n onLostFocus(): void {\r\n setTimeout(() => {\r\n this.closeOptions();\r\n }, LOST_FOCUS_TIME_WINDOW_MS);\r\n }\r\n\r\n scrollToOption(index: number) {\r\n const target = this.mainElement.nativeElement.querySelectorAll('li')[index];\r\n if (target) {\r\n target.scrollIntoView({ block: 'center' });\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n if (!this.disabled) {\r\n this.value = undefined;\r\n this.valueInput = '';\r\n this.showOptions = false;\r\n this.focusIndex = undefined;\r\n }\r\n }\r\n\r\n complete(option: Option<unknown>): void {\r\n if (!this.disabled) {\r\n this.value = option;\r\n this.valueInput = option.label;\r\n this.showOptions = false;\r\n this.focusIndex = undefined;\r\n this.valueChange.emit(option.key);\r\n }\r\n }\r\n}\r\n\r\nconst normalizeString = (a: string): string =>\r\n (a || '')\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '');\r\n","<div\r\n #main\r\n class=\"daga-autocomplete\"\r\n [class]=\"showOptions ? 'daga-showing-options' : ''\"\r\n (blur)=\"closeOptions()\"\r\n>\r\n <div class=\"daga-autocomplete-input\">\r\n <input\r\n [(ngModel)]=\"valueInput\"\r\n [disabled]=\"disabled\"\r\n (keyup)=\"onKeyup($event)\"\r\n (focus)=\"openOptions()\"\r\n (blur)=\"onLostFocus()\"\r\n />\r\n <button\r\n *ngIf=\"valueInput !== ''\"\r\n class=\"daga-clear\"\r\n (click)=\"clearInput()\"\r\n ></button>\r\n </div>\r\n <div class=\"daga-autocomplete-options\">\r\n <ul class=\"daga-autocomplete-option-list\">\r\n <li\r\n *ngIf=\"(currentOptions?.length || 0) === 0\"\r\n class=\"daga-autocomplete-option no-options\"\r\n >\r\n (No options)\r\n </li>\r\n <li\r\n *ngFor=\"let option of currentOptions; let index = index\"\r\n class=\"daga-autocomplete-option\"\r\n [class]=\"index === focusIndex ? 'daga-focused' : ''\"\r\n (mousemove)=\"focusOnOption(index)\"\r\n (click)=\"complete(option)\"\r\n >\r\n <span>{{ currentLabelStarts[index] }}</span>\r\n <span class=\"daga-match\">{{ currentLabelMatches[index] }}</span>\r\n <span>{{ currentLabelEnds[index] }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Option } from '../../diagram-editor/diagram/diagram-property';\r\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\r\n\r\n/**\r\n * Editor of a property of text list type within a property editor.\r\n * @see Type.TextList\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-option-list-editor',\r\n templateUrl: './option-list-editor.component.html',\r\n imports: [AutocompleteComponent, CommonModule, FormsModule]\r\n})\r\nexport class OptionListEditorComponent {\r\n private _value: unknown[] = [];\r\n @Input()\r\n set value(value: unknown[]) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty = value.length === 0 && this._value.length === 0;\r\n this._value = value;\r\n this.labelsOfValue = [];\r\n for (const key of this._value) {\r\n this.labelsOfValue.push(this.getLabelOfValue(key));\r\n }\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n this.updateOptionsNotPresentInValue();\r\n }\r\n get value(): unknown[] {\r\n return this._value;\r\n }\r\n labelsOfValue: string[] = [];\r\n\r\n @Input() options: Option<unknown>[] = [];\r\n\r\n @Input() valueInput?: unknown = undefined;\r\n\r\n @Input() allowRepeats = true;\r\n\r\n @Input() optionsNotPresentInValue: Option<unknown>[] = [];\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<unknown[]>();\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n getLabelOfValue(value: unknown): string {\r\n for (const option of this.options) {\r\n if (option.key === value) {\r\n return option.label;\r\n }\r\n }\r\n return `${value}`;\r\n }\r\n\r\n hasValue(value: unknown): boolean {\r\n for (const item of this._value || []) {\r\n if (item === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n removeFromValue(index: number): void {\r\n if (this._value.length > index) {\r\n this._value.splice(index, 1);\r\n this.labelsOfValue.splice(index, 1);\r\n this.valueChange.emit(this._value);\r\n this.updateOptionsNotPresentInValue();\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n if (\r\n this.valueInput !== undefined &&\r\n (this.allowRepeats ? true : !this.hasValue(this.valueInput))\r\n ) {\r\n this._value.push(this.valueInput);\r\n this.labelsOfValue.push(this.getLabelOfValue(this.valueInput));\r\n this.valueChange.emit(this._value);\r\n this.clearInput();\r\n this.updateOptionsNotPresentInValue();\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n updateOptionsNotPresentInValue(): void {\r\n if (!this.allowRepeats) {\r\n const optionsNotPresentInValue = [];\r\n for (const option of this.options) {\r\n if (!this.hasValue(option.key)) {\r\n optionsNotPresentInValue.push(option);\r\n }\r\n }\r\n this.optionsNotPresentInValue = optionsNotPresentInValue;\r\n }\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","<div\r\n *ngFor=\"let item of value; let index = index\"\r\n class=\"daga-value-item-element\"\r\n>\r\n <span class=\"daga-input\">{{ labelsOfValue[index] }}</span>\r\n <button\r\n *ngIf=\"!disabled\"\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(index)\"\r\n >\r\n <div class=\"daga-icon daga-close-icon\"></div>\r\n </button>\r\n</div>\r\n<div *ngIf=\"!disabled\" class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <daga-autocomplete\r\n [disabled]=\"disabled\"\r\n [options]=\"allowRepeats ? options || [] : optionsNotPresentInValue || []\"\r\n [(value)]=\"valueInput\"\r\n />\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Editor of a property of text list type within a property editor.\r\n * @see Type.TextList\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-text-list-editor',\r\n templateUrl: './text-list-editor.component.html',\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class TextListEditorComponent {\r\n private _value: string[] = [];\r\n @Input()\r\n set value(value: string[]) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty = value.length === 0 && this._value.length === 0;\r\n this._value = value;\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n get value(): string[] {\r\n return this._value;\r\n }\r\n @Input() valueInput = '';\r\n\r\n @Input() allowRepeats = true;\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<string[]>();\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n getValueFromEvent(event: Event): string {\r\n return (event.target as HTMLInputElement).value;\r\n }\r\n\r\n hasValue(value: string): boolean {\r\n for (const item of this._value || []) {\r\n if (item === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n removeFromValue(index: number): void {\r\n if (this._value.length > index) {\r\n this._value.splice(index, 1);\r\n this.valueChange.emit(this._value);\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n editFromValue(item: string, index: number): void {\r\n item = item.trim();\r\n if (this._value.length > index && item !== '') {\r\n this._value.splice(index, 1, item);\r\n this.valueChange.emit(this._value);\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n const valueInput = this.valueInput.trim();\r\n if (\r\n valueInput !== '' &&\r\n (this.allowRepeats ? true : !this.hasValue(valueInput))\r\n ) {\r\n this._value.push(valueInput);\r\n this.valueChange.emit(this._value);\r\n this.clearInput();\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","<div\r\n *ngFor=\"let item of value; let index = index\"\r\n class=\"daga-value-item-element\"\r\n>\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item\"\r\n (focusout)=\"editFromValue(getValueFromEvent($event), index)\"\r\n />\r\n <button\r\n *ngIf=\"!disabled\"\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(index)\"\r\n >\r\n <div class=\"icon close-icon\"></div>\r\n </button>\r\n</div>\r\n<div *ngIf=\"!disabled\" class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"valueInput\" />\r\n <button\r\n *ngIf=\"valueInput !== ''\"\r\n class=\"daga-clear\"\r\n (click)=\"clearInput()\"\r\n ></button>\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * Editor of a property of text map type within a property editor.\r\n * @see Type.TextMap\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-text-map-editor',\r\n templateUrl: './text-map-editor.component.html',\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class TextMapEditorComponent {\r\n private _value: { [name: string]: string } = {};\r\n\r\n @Input()\r\n set value(value: { [name: string]: string }) {\r\n if (value === this._value) {\r\n return;\r\n }\r\n const initialAndEmpty =\r\n Object.keys(value).length === 0 && Object.keys(this._value).length === 0;\r\n this._value = value;\r\n if (initialAndEmpty) {\r\n this.valueChange.emit(this._value);\r\n }\r\n }\r\n get value(): { [name: string]: string } {\r\n return this._value;\r\n }\r\n @Input() keyInput = '';\r\n @Input() valueInput = '';\r\n\r\n @Input() disabled = false;\r\n\r\n @Output() valueChange = new EventEmitter<{ [name: string]: string }>();\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n getValueFromEvent(event: Event): string {\r\n return (event.target as HTMLInputElement).value;\r\n }\r\n\r\n removeFromValue(key: string): void {\r\n delete this._value[key];\r\n this.cdr.detectChanges();\r\n }\r\n\r\n editKey(oldKey: string, newKey: string): void {\r\n newKey = newKey.trim();\r\n if (oldKey !== newKey && newKey !== '') {\r\n this._value[newKey] = this._value[oldKey];\r\n delete this._value[oldKey];\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n editValue(key: string, value: string): void {\r\n value = value.trim();\r\n if (value !== '') {\r\n this._value[key] = value;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n addToValue(): void {\r\n const keyInput = this.keyInput.trim();\r\n const valueInput = this.valueInput.trim();\r\n if (keyInput !== '' && valueInput !== '') {\r\n this._value[keyInput] = valueInput;\r\n this.valueChange.emit(this._value);\r\n this.clearKeyInput();\r\n this.clearValueInput();\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n clearKeyInput(): void {\r\n this.keyInput = '';\r\n }\r\n\r\n clearValueInput(): void {\r\n this.valueInput = '';\r\n }\r\n\r\n onKeyUp(event: KeyboardEvent) {\r\n if (event.key === 'Enter') {\r\n this.addToValue();\r\n }\r\n }\r\n}\r\n","<div *ngFor=\"let item of value | keyvalue\" class=\"daga-value-item-element\">\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item.key\"\r\n (focusout)=\"editKey(item.key, getValueFromEvent($event))\"\r\n />\r\n <input\r\n class=\"daga-input\"\r\n type=\"text\"\r\n [disabled]=\"disabled\"\r\n [value]=\"item.value\"\r\n (focusout)=\"editValue(item.key, getValueFromEvent($event))\"\r\n />\r\n <button\r\n *ngIf=\"!disabled\"\r\n class=\"daga-property-button\"\r\n (click)=\"removeFromValue(item.key)\"\r\n >\r\n <div class=\"icon close-icon\"></div>\r\n </button>\r\n</div>\r\n<div *ngIf=\"!disabled\" class=\"daga-value-item-input\">\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"keyInput\" />\r\n <button\r\n *ngIf=\"keyInput !== ''\"\r\n class=\"daga-clear\"\r\n (click)=\"clearKeyInput()\"\r\n ></button>\r\n </div>\r\n <div class=\"daga-input daga-relatively-positioned\">\r\n <input type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"valueInput\" />\r\n <button\r\n *ngIf=\"valueInput !== ''\"\r\n class=\"daga-clear\"\r\n (click)=\"clearValueInput()\"\r\n ></button>\r\n </div>\r\n <button class=\"daga-property-button\" (click)=\"addToValue()\">\r\n <div class=\"daga-icon daga-add-icon\"></div>\r\n </button>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DiagramActions } from '../../diagram-editor/diagram/diagram-action';\r\nimport {\r\n Property,\r\n Type,\r\n ValueSet,\r\n equals\r\n} from '../../diagram-editor/diagram/diagram-property';\r\nimport { Canvas } from '../../interfaces/canvas';\r\nimport { CanvasProviderService } from '../../services/canvas-provider.service';\r\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\r\nimport { OptionListEditorComponent } from '../option-list-editor/option-list-editor.component';\r\nimport { TextListEditorComponent } from '../text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from '../text-map-editor/text-map-editor.component';\r\nimport { getStyleClassName } from '../property-editor.component';\r\n\r\n/**\r\n * Editor of a value set within a property editor.\r\n * @see PropertyEditor\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-object-editor',\r\n templateUrl: './object-editor.component.html',\r\n imports: [\r\n AutocompleteComponent,\r\n CommonModule,\r\n FormsModule,\r\n OptionListEditorComponent,\r\n TextListEditorComponent,\r\n TextMapEditorComponent\r\n ]\r\n})\r\nexport class ObjectEditorComponent {\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n get userCanEdit(): boolean {\r\n return (\r\n this.canvas.canUserPerformAction(DiagramActions.UpdateValues) &&\r\n this.valueSet?.rootElement?.['removed'] !== true\r\n );\r\n }\r\n\r\n _valueSet?: ValueSet;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n // force value change detection\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n /** How many object-editor elements are parents of this object-editor element. @private */\r\n @Input() depth = 0;\r\n\r\n // Attributes for the template\r\n Type = Type;\r\n getStyleClassName = getStyleClassName;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n setValue(property: Property, value: unknown) {\r\n if (this.valueSet === undefined) {\r\n return;\r\n }\r\n if (property.editable) {\r\n if (!equals(this.valueSet.getValue(property.name), value)) {\r\n this.valueSet.setValue(property.name, value);\r\n // register a diagram change when editing a value\r\n this.canvas.diagramChanges$?.next();\r\n this.canvas.propertyEditorChanges$?.next();\r\n }\r\n }\r\n }\r\n\r\n dateToLocalDatetimeString(\r\n date: string | number | Date | null | undefined\r\n ): string {\r\n if (typeof date === 'string') {\r\n return date;\r\n }\r\n if (date === null || date === undefined || isNaN(date.valueOf())) {\r\n return '';\r\n }\r\n const offsetDate = new Date(date);\r\n const timezoneOffset = offsetDate.getTimezoneOffset();\r\n offsetDate.setMinutes(offsetDate.getMinutes() - timezoneOffset);\r\n return offsetDate.toISOString().substring(0, 19); // for user friendliness, we trim off the milliseconds\r\n }\r\n\r\n localDatetimeStringToDate(string: string): Date {\r\n // with no timezone specified, the local time is assumed\r\n return new Date(string);\r\n }\r\n}\r\n","<div\r\n *ngFor=\"let property of valueSet?.displayedProperties || []\"\r\n class=\"daga-property\"\r\n [class]=\"getStyleClassName(property.name) + ' daga-depth-' + depth\"\r\n>\r\n <p class=\"daga-property-name\">\r\n {{ property.name }}\r\n </p>\r\n\r\n <input\r\n *ngIf=\"property.type === Type.Text\"\r\n type=\"daga-text\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <textarea\r\n *ngIf=\"property.type === Type.TextArea\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n ></textarea>\r\n <input\r\n *ngIf=\"property.type === Type.Number\"\r\n type=\"number\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Color\"\r\n type=\"text\"\r\n pattern=\"#\\d{6}\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Datetime\"\r\n type=\"datetime-local\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"dateToLocalDatetimeString(valueSet?.getValue(property.name))\"\r\n (ngModelChange)=\"setValue(property, localDatetimeStringToDate($event))\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Date\"\r\n type=\"date\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Time\"\r\n type=\"time\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <input\r\n *ngIf=\"property.type === Type.Url\"\r\n type=\"url\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [ngModel]=\"valueSet?.getValue(property.name)\"\r\n (ngModelChange)=\"setValue(property, $event)\"\r\n />\r\n <div class=\"daga-radio\" *ngIf=\"property.type === Type.Boolean\">\r\n <label class=\"daga-radio-item daga-radio-start\">\r\n <input\r\n type=\"radio\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [name]=\"property.name\"\r\n value=\"false\"\r\n [checked]=\"valueSet?.getValue(property.name) === false\"\r\n (change)=\"setValue(property, false)\"\r\n />\r\n No\r\n </label>\r\n <label class=\"daga-radio-item daga-radio-end\">\r\n <input\r\n type=\"radio\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [name]=\"property.name\"\r\n value=\"true\"\r\n [checked]=\"valueSet?.getValue(property.name) === true\"\r\n (change)=\"setValue(property, true)\"\r\n />\r\n Yes\r\n </label>\r\n </div>\r\n <div class=\"daga-relatively-positioned\" *ngIf=\"property.type === Type.Option\">\r\n <daga-autocomplete\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [options]=\"property.options || []\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n />\r\n </div>\r\n <daga-option-list-editor\r\n *ngIf=\"\r\n property.type === Type.OptionList || property.type === Type.OptionSet\r\n \"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [allowRepeats]=\"property.type === Type.OptionList\"\r\n [options]=\"property.options || []\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-option-list-editor>\r\n <daga-text-list-editor\r\n *ngIf=\"property.type === Type.TextList || property.type === Type.TextSet\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [allowRepeats]=\"property.type === Type.TextList\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-text-list-editor>\r\n <daga-text-map-editor\r\n *ngIf=\"property.type === Type.TextMap\"\r\n [disabled]=\"!property.editable || !userCanEdit\"\r\n [value]=\"valueSet?.getValue(property.name)\"\r\n (valueChange)=\"setValue(property, $event)\"\r\n ></daga-text-map-editor>\r\n <div *ngIf=\"property.type === Type.Object\" class=\"daga-left-bar\">\r\n <daga-object-editor\r\n [valueSet]=\"valueSet?.getSubValueSet(property.name)\"\r\n [depth]=\"depth + 1\"\r\n ></daga-object-editor>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n Input,\r\n ViewChild\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\nimport { CollapseButtonComponent } from '../collapse-button/collapse-button.component';\r\nimport { ValueSet } from '../diagram-editor/diagram/diagram-property';\r\nimport { PropertyEditor } from '../interfaces/property-editor';\r\nimport { Corner, Side } from '../util/svg-util';\r\nimport { ObjectEditorComponent } from './object-editor/object-editor.component';\r\nimport { PropertySettingsComponent } from './property-settings/property-settings.component';\r\n\r\n/**\r\n * Duration of the highlight property animation in milliseconds.\r\n */\r\nexport const HIGHLIGHT_ANIMATION_DURATION_MS = 1000;\r\n\r\n/**\r\n * Editor of the values of a value set.\r\n * @see ValueSet\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-property-editor',\r\n templateUrl: './property-editor.component.html',\r\n imports: [\r\n CommonModule,\r\n CollapseButtonComponent,\r\n ObjectEditorComponent,\r\n PropertySettingsComponent\r\n ]\r\n})\r\nexport class PropertyEditorComponent implements AfterViewInit, PropertyEditor {\r\n @ViewChild('panel') panel!: ElementRef<HTMLDivElement>;\r\n\r\n @Input()\r\n location!: Corner;\r\n @Input()\r\n direction!: Side;\r\n @Input()\r\n width!: string;\r\n\r\n title?: string;\r\n _valueSet!: ValueSet | undefined;\r\n @Input()\r\n get valueSet(): ValueSet | undefined {\r\n return this._valueSet;\r\n }\r\n set valueSet(valueSet: ValueSet | undefined) {\r\n if (this._valueSet !== valueSet) {\r\n this._valueSet = valueSet;\r\n this.settings = undefined;\r\n // force value change detection\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n settings?: boolean;\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n ngAfterViewInit(): void {\r\n switch (this.direction) {\r\n case Side.Bottom:\r\n case Side.Top:\r\n this.selectPanel().style('width', this.width);\r\n break;\r\n case Side.Left:\r\n case Side.Right:\r\n this.selectPanel().style('height', this.width);\r\n break;\r\n }\r\n }\r\n\r\n selectPanel(): d3.Selection<HTMLDivElement, unknown, null, undefined> {\r\n return d3.select(this.panel.nativeElement);\r\n }\r\n\r\n highlightProperty(...propertyNames: string[]): void {\r\n let selector = '';\r\n let depth = 0;\r\n for (const propertyName of propertyNames) {\r\n selector += ` .daga-property.${getStyleClassName(propertyName)}.daga-depth-${depth}`;\r\n ++depth;\r\n }\r\n if (this.valueSet) {\r\n d3.select(this.panel.nativeElement)\r\n .select(selector)\r\n .transition()\r\n .duration(HIGHLIGHT_ANIMATION_DURATION_MS)\r\n .ease(d3.easeLinear)\r\n .styleTween('background-color', () => {\r\n const interpolator = d3.interpolate(\r\n 'rgba(255, 0, 0, 0)',\r\n 'rgba(255, 0, 0, 0.4)'\r\n );\r\n return (t: number) => interpolator(t > 0.5 ? 1 - t : t);\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const getStyleClassName = (s: string): string => {\r\n return 'daga-property-name-' + s.replace(/\\s/g, '');\r\n};\r\n","<div\r\n #panel\r\n class=\"daga-panel daga-bottom daga-{{ location }} daga-{{ direction }}\"\r\n>\r\n <daga-collapse-button\r\n #collapse\r\n [disabled]=\"\r\n !valueSet ||\r\n !valueSet.propertySet ||\r\n !valueSet.propertySet.hasProperties()\r\n \"\r\n [direction]=\"direction\"\r\n [collapsableSelector]=\"panel\"\r\n collapsableAdditionalSelector=\".daga-panel-content\"\r\n rule=\"display\"\r\n collapsedValue=\"none\"\r\n visibleValue=\"block\"\r\n />\r\n <div\r\n *ngIf=\"\r\n valueSet &&\r\n valueSet.propertySet &&\r\n valueSet.propertySet.hasProperties() &&\r\n !collapse.collapsed\r\n \"\r\n class=\"daga-panel-content\"\r\n >\r\n <p *ngIf=\"title\" class=\"daga-title\">\r\n {{ title }}\r\n <button class=\"daga-property-button\" (click)=\"settings = !settings\">\r\n <div\r\n class=\"daga-icon daga-settings-icon\"\r\n [class]=\"\r\n settings === undefined\r\n ? ''\r\n : settings\r\n ? 'daga-unrotate'\r\n : 'daga-rotate'\r\n \"\r\n ></div>\r\n </button>\r\n </p>\r\n <daga-object-editor *ngIf=\"!settings\" [valueSet]=\"valueSet\" />\r\n <daga-property-settings *ngIf=\"settings\" [valueSet]=\"valueSet\" />\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\n\n/**\n * A provider for the {@link DiagramConfig} associated with a {@link DiagramComponent} context.\n * @public\n */\n@Injectable()\nexport class DagaConfigurationService {\n private _config!: DiagramConfig;\n\n /**\n * Set the diagram configuration of this context.\n * @private\n * @param config A diagram configuration.\n */\n init(config: DiagramConfig) {\n this._config = config;\n }\n\n /**\n * Get the diagram configuration of this context. Should only be called after the {@link DiagramComponent} context has been initialized.\n * @public\n * @returns A diagram configuration.\n */\n getConfig(): DiagramConfig {\n return this._config;\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n OnInit,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { DiagramButtonsComponent } from '../diagram-buttons/diagram-buttons.component';\r\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\r\nimport { ErrorsComponent } from '../errors/errors.component';\r\nimport { Canvas } from '../interfaces/canvas';\r\nimport { DiagramEditor } from '../interfaces/diagram-editor';\r\nimport { PaletteComponent } from '../palette/palette.component';\r\nimport { PropertyEditorComponent } from '../property-editor/property-editor.component';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\nimport { Corner, Side } from '../util/svg-util';\r\nimport { DiagramEvent } from './diagram/diagram-event';\r\n\r\n/**\r\n * A diagram's user interface editor.\r\n * @private\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram-editor',\r\n templateUrl: './diagram-editor.component.html',\r\n imports: [\r\n CommonModule,\r\n DiagramButtonsComponent,\r\n PaletteComponent,\r\n PropertyEditorComponent,\r\n ErrorsComponent\r\n ]\r\n})\r\nexport class DiagramEditorComponent\r\n implements AfterViewInit, DiagramEditor, OnInit\r\n{\r\n @ViewChild('appendTo') appendTo!: ElementRef<HTMLDivElement>;\r\n @ViewChild('diagramButtons') diagramButtons!: DiagramButtonsComponent;\r\n @ViewChild('palette') palette!: PaletteComponent;\r\n @ViewChild('propertyEditor') propertyEditor!: PropertyEditorComponent;\r\n\r\n /**\r\n * Output for user events on the diagram's model.\r\n * @public\r\n */\r\n @Output()\r\n modelEvent = new EventEmitter<DiagramEvent>();\r\n\r\n get config(): DiagramConfig {\r\n return this.configurationService.getConfig();\r\n }\r\n get canvas(): Canvas {\r\n return this.canvasProvider.getCanvas();\r\n }\r\n\r\n Corner = Corner;\r\n Side = Side;\r\n\r\n constructor(\r\n private configurationService: DagaConfigurationService,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.canvasProvider.initCanvas(this, this.config);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.canvasProvider.initCanvasView(this.appendTo.nativeElement);\r\n }\r\n}\r\n","<div class=\"daga-append-to\" #appendTo></div>\r\n<daga-diagram-buttons\r\n *ngIf=\"config.components?.buttons?.exists !== false\"\r\n #diagramButtons\r\n [location]=\"config.components?.buttons?.location || Corner.BottomRight\"\r\n [direction]=\"config.components?.buttons?.direction || Side.Top\"\r\n [enableFilter]=\"config.components?.buttons?.enableFilter !== false\"\r\n [enableLayout]=\"config.components?.buttons?.enableLayout !== false\"\r\n [enableUndoRedo]=\"config.components?.buttons?.enableUndoRedo !== false\"\r\n [enableZoom]=\"config.components?.buttons?.enableZoom !== false\"\r\n [zoomRate]=\"config.components?.buttons?.zoomRate || 2\"\r\n/>\r\n<daga-palette\r\n *ngIf=\"\r\n config.components?.palette?.exists !== false &&\r\n config.components?.palette?.sections &&\r\n (config.components?.palette?.sections?.length || 0) > 0\r\n \"\r\n #palette\r\n [location]=\"config.components?.palette?.location || Corner.TopLeft\"\r\n [direction]=\"config.components?.palette?.direction || Side.Bottom\"\r\n [width]=\"config.components?.palette?.width || '12rem'\"\r\n [palettes]=\"config.components?.palette?.sections || []\"\r\n/>\r\n<daga-property-editor\r\n *ngIf=\"config.components?.propertyEditor?.exists !== false\"\r\n #propertyEditor\r\n [location]=\"config.components?.propertyEditor?.location || Corner.TopRight\"\r\n [direction]=\"config.components?.propertyEditor?.direction || Side.Bottom\"\r\n [width]=\"config.components?.propertyEditor?.width || '24rem'\"\r\n/>\r\n<daga-errors *ngIf=\"config.components?.errors?.exists !== false\" />\r\n","import {\r\n AfterContentInit,\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport { delay } from 'rxjs';\r\nimport { DagaExporter } from '../diagram-editor/diagram/converters/daga-exporter';\r\nimport { DagaImporter } from '../diagram-editor/diagram/converters/daga-importer';\r\nimport { DagaModel } from '../diagram-editor/diagram/converters/daga-model';\r\nimport { DiagramConfig } from '../diagram-editor/diagram/diagram-config';\r\nimport { CanvasProviderService } from '../services/canvas-provider.service';\r\nimport { DagaConfigurationService } from '../services/daga-configuration.service';\r\n\r\n/**\r\n * The context of a diagram. Every separate diagram must be contained within its own {@link DiagramComponent} and every {@link DiagramComponent} must contain its own {@link DiagramEditorComponent}.\r\n * This component defines a {@link DagaConfigurationService} and a {@link CanvasProviderService}, which is shared by all the components within and allows accessing the configuration and the canvas of this component's diagram, respectively.\r\n * @public\r\n */\r\n@Component({\r\n standalone: true,\r\n selector: 'daga-diagram',\r\n template: `<ng-content />`,\r\n providers: [CanvasProviderService, DagaConfigurationService]\r\n})\r\nexport class DiagramComponent\r\n implements AfterContentInit, AfterViewInit, OnInit\r\n{\r\n /**\r\n * Configuration for the diagram.\r\n * @public\r\n */\r\n @Input()\r\n config!: DiagramConfig;\r\n private importer = new DagaImporter();\r\n private exporter = new DagaExporter();\r\n private _model!: DagaModel;\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n get model(): DagaModel {\r\n return this._model;\r\n }\r\n /**\r\n * Serialized model for the diagram. Used for data binding to the model.\r\n * @public\r\n */\r\n @Input()\r\n set model(model: DagaModel) {\r\n if (this._model !== model) {\r\n this._model = model;\r\n const canvas = this.canvasProvider.getCanvas();\r\n if (canvas) {\r\n this.importer.import(this.canvasProvider.getCanvas().model, model);\r\n }\r\n }\r\n }\r\n /**\r\n * Output for changes to the diagram's model.\r\n * @public\r\n */\r\n @Output()\r\n modelChange = new EventEmitter<DagaModel>();\r\n\r\n constructor(\r\n private configurationService: DagaConfigurationService,\r\n private canvasProvider: CanvasProviderService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.configurationService.init(this.config);\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.canvasProvider\r\n .getCanvas()\r\n .viewInitialized$.pipe(delay(1))\r\n .subscribe(() => {\r\n if (this.model) {\r\n this.importer.import(\r\n this.canvasProvider.getCanvas().model,\r\n this.model\r\n );\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.canvasProvider.getCanvas().diagramChanges$.subscribe(() => {\r\n const exportedModel = this.exporter.export(\r\n this.canvasProvider.getCanvas().model\r\n );\r\n this._model = exportedModel;\r\n this.modelChange.emit(exportedModel);\r\n });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { CollapseButtonComponent } from './collapse-button/collapse-button.component';\r\nimport { DiagramButtonsComponent } from './diagram-buttons/diagram-buttons.component';\r\nimport { DiagramEditorComponent } from './diagram-editor/diagram-editor.component';\r\nimport { DiagramComponent } from './diagram/diagram.component';\r\nimport { ErrorsComponent } from './errors/errors.component';\r\nimport { ObjectEditorComponent } from './property-editor/object-editor/object-editor.component';\r\nimport { PaletteComponent } from './palette/palette.component';\r\nimport { PropertyEditorComponent } from './property-editor/property-editor.component';\r\nimport { CanvasProviderService } from './services/canvas-provider.service';\r\nimport { DagaConfigurationService } from './services/daga-configuration.service';\r\nimport { TextListEditorComponent } from './property-editor/text-list-editor/text-list-editor.component';\r\nimport { TextMapEditorComponent } from './property-editor/text-map-editor/text-map-editor.component';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CollapseButtonComponent,\r\n DiagramButtonsComponent,\r\n DiagramComponent,\r\n DiagramEditorComponent,\r\n ErrorsComponent,\r\n ObjectEditorComponent,\r\n PaletteComponent,\r\n TextListEditorComponent,\r\n TextMapEditorComponent,\r\n PropertyEditorComponent,\r\n CommonModule,\r\n FormsModule\r\n ],\r\n exports: [DiagramComponent, DiagramEditorComponent],\r\n providers: [DagaConfigurationService, CanvasProviderService]\r\n})\r\nexport class DagaModule {}\r\n","import { Canvas } from '../../../interfaces/canvas';\r\nimport { DagaExporter } from '../converters/daga-exporter';\r\nimport { DagaImporter } from '../converters/daga-importer';\r\nimport { DagaModel } from '../converters/daga-model';\r\nimport { CollabActionSerialized } from './collab-action';\r\nimport { AddMessage, Message } from './message-types';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst VERSION = '0.0.1';\r\n\r\ntype Session = {\r\n readonly canvas: Canvas;\r\n locator: string | null;\r\n createRoomResolve?: (locator: string) => void;\r\n joinRoomResolve?: () => void;\r\n /**\r\n * AddMessages that we queue after creating a room but before learning its locator.\r\n */\r\n addQueue: Omit<AddMessage, 'locator'>[];\r\n};\r\n\r\n/**\r\n * The client that communicates with the daga-server over WebSockets.\r\n *\r\n * Use this to create and join rooms.\r\n * @public\r\n */\r\nexport class CollabClient {\r\n /**\r\n * The WebSocket URL of the daga-server.\r\n */\r\n readonly dagaServer: string;\r\n readonly userId: string;\r\n readonly clientId: string;\r\n\r\n private readonly ws: WebSocket;\r\n private sendQueue: string[] = [];\r\n\r\n /**\r\n * Joined sessions by locator.\r\n */\r\n private sessions = new Map<string, Session>();\r\n /**\r\n * Created but unacked sessions by refId.\r\n */\r\n private pendingSessions = new Map<string, Session>();\r\n\r\n constructor(dagaServer: string, userId: string) {\r\n this.dagaServer = dagaServer;\r\n this.userId = userId;\r\n\r\n this.clientId = uuidv4();\r\n\r\n this.ws = new WebSocket(this.dagaServer, 'esgrima');\r\n this.ws.addEventListener('open', this.onOpen.bind(this));\r\n this.ws.addEventListener('message', this.onMessage.bind(this));\r\n this.ws.addEventListener('close', this.onClose.bind(this));\r\n this.ws.addEventListener('error', this.onError.bind(this));\r\n\r\n this.send({\r\n type: 'HELO',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n version: VERSION,\r\n ts: now()\r\n });\r\n }\r\n\r\n private onOpen(): void {\r\n // Send queued messages.\r\n for (const serialized of this.sendQueue) {\r\n this.ws.send(serialized);\r\n }\r\n this.sendQueue = [];\r\n }\r\n\r\n private onMessage(e: MessageEvent<string>): void {\r\n const serialized = e.data;\r\n const message = JSON.parse(serialized) as Message;\r\n this.receive(message);\r\n }\r\n\r\n private onClose(e: CloseEvent): void {\r\n console.error('WebSocket closed', e);\r\n }\r\n\r\n private onError(e: Event): void {\r\n console.error('WebSocket error', e);\r\n }\r\n\r\n /**\r\n * Internal send method. Use instead of calling ws.send directly.\r\n */\r\n private send(message: Message): void {\r\n const serialized = JSON.stringify(message);\r\n if (this.ws.readyState === WebSocket.OPEN) {\r\n this.ws.send(serialized);\r\n } else {\r\n // Queue until after we connect.\r\n this.sendQueue.push(serialized);\r\n }\r\n }\r\n\r\n /**\r\n * Internal receive method. Use instead of handling ws receive events directly.\r\n */\r\n private receive(message: Message): void {\r\n switch (message.type) {\r\n case 'EACK': {\r\n const session = this.sessions.get(message.locator);\r\n if (session === undefined) {\r\n throw new Error(`EACK for unknown locator: \"${message.locator}\"`);\r\n }\r\n\r\n const initialModel = message.initialModel as DagaModel;\r\n new DagaImporter().import(session.canvas.model, initialModel);\r\n this.startSyncing(session);\r\n session.joinRoomResolve?.();\r\n session.joinRoomResolve = undefined;\r\n break;\r\n }\r\n case 'ADD': {\r\n const session = this.sessions.get(message.locator);\r\n if (session === undefined) {\r\n throw new Error(`ADD for unknown locator: \"${message.locator}\"`);\r\n }\r\n\r\n const action = message.payload as CollabActionSerialized;\r\n session.canvas.collabEngine.receive(action);\r\n break;\r\n }\r\n case 'CACK': {\r\n const session = this.pendingSessions.get(message.refId);\r\n if (session === undefined) {\r\n throw new Error(`CACK for unknown refId: \"${message.refId}\"`);\r\n }\r\n\r\n session.locator = message.locator;\r\n this.pendingSessions.delete(message.refId);\r\n this.sessions.set(session.locator, session);\r\n session.createRoomResolve?.(session.locator);\r\n session.createRoomResolve = undefined;\r\n\r\n // Deliver queued AddMessages now that we have a locator.\r\n for (const message of session.addQueue) {\r\n this.send({ ...message, locator: session.locator });\r\n }\r\n session.addQueue = [];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Creates and joins a room. The given canvas becomes collaborative, starting\r\n * with its current model.\r\n *\r\n * Returns a Promise that resolves with the new room's locator once joined.\r\n * @public\r\n */\r\n createAndJoinRoom(canvas: Canvas): Promise<string> {\r\n if (canvas.collabEngine.isInRoom) {\r\n throw new Error('Canvas is already in a room');\r\n }\r\n canvas.collabEngine.isInRoom = true;\r\n\r\n const refId = uuidv4();\r\n const initialModel = new DagaExporter().export(canvas.model, true);\r\n this.send({\r\n type: 'CREA',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n refId,\r\n initialModel,\r\n ts: now()\r\n });\r\n\r\n const session: Session = {\r\n canvas,\r\n locator: null,\r\n addQueue: []\r\n };\r\n this.pendingSessions.set(refId, session);\r\n\r\n // We need to start queuing local AddMessages immediately, in case the user edits\r\n // the diagram while the CREA message is in-flight.\r\n this.startSyncing(session);\r\n\r\n return new Promise((resolve) => {\r\n session.createRoomResolve = resolve;\r\n });\r\n }\r\n\r\n /**\r\n * Joins the room with the given locator. The given canvas becomes collaborative,\r\n * **replacing** its current model with the room's model.\r\n *\r\n * Returns a Promise that resolves once the room has been joined and loaded into\r\n * the canvas. You should hide or lock the canvas until it resolves, since any\r\n * user inputs before then will be overwritten.\r\n * @public\r\n */\r\n joinRoom(canvas: Canvas, locator: string): Promise<void> {\r\n if (canvas.collabEngine.isInRoom) {\r\n throw new Error('Canvas is already in a room');\r\n }\r\n canvas.collabEngine.isInRoom = true;\r\n\r\n this.send({\r\n type: 'ENRO',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n locator,\r\n ts: now()\r\n });\r\n\r\n const session: Session = {\r\n canvas,\r\n locator,\r\n addQueue: []\r\n };\r\n this.sessions.set(locator, session);\r\n\r\n return new Promise((resolve) => {\r\n session.joinRoomResolve = resolve;\r\n });\r\n }\r\n\r\n private startSyncing(session: Session): void {\r\n // Sync AddMessages from us to the server.\r\n session.canvas.collabEngine.onSend = (action) => {\r\n if (session.locator === null) {\r\n // Queue until we receive the locator in the CACK message.\r\n session.addQueue.push({\r\n type: 'ADD',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n payload: action,\r\n ts: now()\r\n });\r\n } else {\r\n this.send({\r\n type: 'ADD',\r\n clientId: this.clientId,\r\n userId: this.userId,\r\n locator: session.locator,\r\n payload: action,\r\n ts: now()\r\n });\r\n }\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Returns the current timestamp for a message's ts field.\r\n */\r\nfunction now(): string {\r\n return new Date().toISOString();\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["equals","uuidv4","i1.CanvasProviderService","i2","i3","i1.DagaConfigurationService","i2.CanvasProviderService"],"mappings":";;;;;;;;;;AAAA;;;AAGG;IACS,KAqBX;AArBD,CAAA,UAAY,IAAI,EAAA;AACd;;;AAGG;AACH,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;;AAGG;AACH,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb;;;AAGG;AACH,IAAA,IAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf;;;AAGG;AACH,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EArBW,IAAI,KAAJ,IAAI,GAqBf,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;IACS,OAqBX;AArBD,CAAA,UAAY,MAAM,EAAA;AAChB;;;AAGG;AACH,IAAA,MAAA,CAAA,YAAA,CAAA,GAAA,aAA0B,CAAA;AAC1B;;;AAGG;AACH,IAAA,MAAA,CAAA,aAAA,CAAA,GAAA,cAA4B,CAAA;AAC5B;;;AAGG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACpB;;;AAGG;AACH,IAAA,MAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACxB,CAAC,EArBW,MAAM,KAAN,MAAM,GAqBjB,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;IACS,gBAgBX;AAhBD,CAAA,UAAY,eAAe,EAAA;AACzB;;;AAGG;AACH,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb;;;AAGG;AACH,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;;AAGG;AACH,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAhBW,eAAe,KAAf,eAAe,GAgB1B,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;IACS,cAgBX;AAhBD,CAAA,UAAY,aAAa,EAAA;AACvB;;;AAGG;AACH,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX;;;AAGG;AACH,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;;AAGG;AACH,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAhBW,aAAa,KAAb,aAAa,GAgBxB,EAAA,CAAA,CAAA;;AC3FD;;;AAGG;MAOU,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;QAYE,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAElB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,IAAI,CAAA,IAAA,GAAG,YAAY,CAAC;QAEpB,IAAc,CAAA,cAAA,GAAG,UAAU,CAAC;QAE5B,IAAY,CAAA,YAAA,GAAG,SAAS,CAAC;QAEzB,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;AAiEb,KAAA;IA/DC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,YAAA,IAAI,SAAS,CAAC;AACd,YAAA,IAAI,IAAI,CAAC,mBAAmB,YAAY,UAAU,EAAE;gBAClD,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAC9D,gBAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE;oBACtC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;iBAClE;aACF;AAAM,iBAAA,IAAI,IAAI,CAAC,mBAAmB,YAAY,WAAW,EAAE;gBAC1D,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChD,gBAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE;oBACtC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;iBAClE;aACF;iBAAM;gBACL,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChD,gBAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE;oBACtC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;iBAClE;aACF;YACD,SAAS,CAAC,KAAK,CACb,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CACzD,CAAC;SACH;KACF;IAED,QAAQ,GAAA;AACN,QAAA,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,IAAI,CAAC,KAAK;AACb,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,OAAO,sBAAsB,CAAC;iBAC/B;AAAM,qBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,oBAAA,OAAO,uBAAuB,CAAC;iBAChC;qBAAM;AACL,oBAAA,OAAO,sBAAsB,CAAC;iBAC/B;YACH,KAAK,IAAI,CAAC,MAAM;AACd,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,OAAO,oBAAoB,CAAC;iBAC7B;AAAM,qBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,oBAAA,OAAO,oBAAoB,CAAC;iBAC7B;qBAAM;AACL,oBAAA,OAAO,kBAAkB,CAAC;iBAC3B;YACH,KAAK,IAAI,CAAC,IAAI;AACZ,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,OAAO,sBAAsB,CAAC;iBAC/B;AAAM,qBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,oBAAA,OAAO,sBAAsB,CAAC;iBAC/B;qBAAM;AACL,oBAAA,OAAO,uBAAuB,CAAC;iBAChC;YACH,KAAK,IAAI,CAAC,GAAG;AACX,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,OAAO,oBAAoB,CAAC;iBAC7B;AAAM,qBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,oBAAA,OAAO,kBAAkB,CAAC;iBAC3B;qBAAM;AACL,oBAAA,OAAO,oBAAoB,CAAC;iBAC7B;SACJ;KACF;8GAlFU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfpC,kKAMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDOY,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAEX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACN,QAAA,EAAA,sBAAsB,EAEvB,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,kKAAA,EAAA,CAAA;8BAIvB,mBAAmB,EAAA,CAAA;sBADlB,KAAK;gBAGN,6BAA6B,EAAA,CAAA;sBAD5B,KAAK;gBAGN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAGN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAGN,IAAI,EAAA,CAAA;sBADH,KAAK;gBAGN,cAAc,EAAA,CAAA;sBADb,KAAK;gBAGN,YAAY,EAAA,CAAA;sBADX,KAAK;;;AE3BR;;;AAGG;IACS,UAgBX;AAhBD,CAAA,UAAY,SAAS,EAAA;AACnB;;;AAGG;AACH,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB;;;AAGG;AACH,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;;AAGG;AACH,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAhBW,SAAS,KAAT,SAAS,GAgBpB,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;IACS,UAqBX;AArBD,CAAA,UAAY,SAAS,EAAA;AACnB;;;AAGG;AACH,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf;;;AAGG;AACH,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;;AAGG;AACH,IAAA,SAAA,CAAA,cAAA,CAAA,GAAA,eAA8B,CAAA;AAC9B;;;AAGG;AACH,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EArBW,SAAS,KAAT,SAAS,GAqBpB,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;AACH,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC;;;AAGG;AACI,MAAM,QAAQ,GAAG,CACtB,KAAgB,EAChB,MAAe,EACf,cAAiC,EACjC,YAA+B,EAC/B,yBAAkC,KACxB;AACV,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,EAAE,CAAC;KACX;AAAM,SAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,QAAA,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C;SAAM;QACL,yBAAyB;YACvB,yBAAyB,IAAI,4BAA4B,CAAC;QAC5D,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,gBAAkC,CAAC;AACvC,QAAA,IAAI,aAA+B,CAAC;QACpC,QAAQ,KAAK;YACX,KAAK,SAAS,CAAC,QAAQ;AACrB,gBAAA,MAAM,IAAI,CAAK,EAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtC,oBAAA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD;gBACD,MAAM;YACR,KAAK,SAAS,CAAC,MAAM;gBACnB,gBAAgB,GAAG,cAAc,CAAC;AAClC,gBAAA,MAAM,IAAI,CAAK,EAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBACtC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE;wBAC1B,aAAa,GAAG,YAAY,CAAC;qBAC9B;yBAAM;wBACL,IACE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACzC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACzC;AACA,4BAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACnC,gCAAA,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;6BAC7B;iCAAM;AACL,gCAAA,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC;6BAC1B;yBACF;6BAAM;AACL,4BAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACnC,gCAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;6BAC5B;iCAAM;AACL,gCAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;6BAC3B;yBACF;qBACF;AACD,oBAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;wBAClC,IAAI,aAAa,GAAG,EAAE,CAAC;wBACvB,IAAI,aAAa,GAAG,EAAE,CAAC;wBACvB,MAAM,oBAAoB,GACxB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,4BAAA,CAAC,CAAC;wBACJ,QAAQ,gBAAgB;4BACtB,KAAK,IAAI,CAAC,MAAM;gCACd,aAAa,GAAG,CAAG,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EACjC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBACrB,CAAA,CAAE,CAAC;gCACH,MAAM;4BACR,KAAK,IAAI,CAAC,GAAG;gCACX,aAAa,GAAG,CAAG,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EACjC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBACrB,CAAA,CAAE,CAAC;gCACH,MAAM;4BACR,KAAK,IAAI,CAAC,KAAK;gCACb,aAAa,GAAG,CAAG,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,CACxD,CAAA,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACjB,CAAA,CAAE,CAAC;gCACH,MAAM;4BACR,KAAK,IAAI,CAAC,IAAI;gCACZ,aAAa,GAAG,CAAG,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,CACxD,CAAA,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACjB,CAAA,CAAE,CAAC;gCACH,MAAM;yBACT;AACD,wBAAA,IAAI,aAAa,KAAK,SAAS,EAAE;4BAC/B,QAAQ,aAAa;gCACnB,KAAK,IAAI,CAAC,MAAM;oCACd,aAAa,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBACjB,EAAE,CAAC;oCACH,MAAM;gCACR,KAAK,IAAI,CAAC,GAAG;oCACX,aAAa,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBACjB,EAAE,CAAC;oCACH,MAAM;gCACR,KAAK,IAAI,CAAC,KAAK;oCACb,aAAa,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,CACpD,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACb,EAAE,CAAC;oCACH,MAAM;gCACR,KAAK,IAAI,CAAC,IAAI;oCACZ,aAAa,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,CACpD,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACb,EAAE,CAAC;oCACH,MAAM;6BACT;4BACD,MAAM,IAAI,MAAM,aAAa,CAAA,CAAA,EAAI,aAAa,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;yBAClF;6BAAM;4BACL,MAAM,IAAI,MAAM,aAAa,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yBACjE;qBACF;yBAAM;AACL,wBAAA,IAAI,aAAa,KAAK,SAAS,EAAE;4BAC/B,IAAI,YAAY,GAAG,EAAE,CAAC;4BACtB,MAAM,oBAAoB,GACxB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,gCAAA,CAAC,CAAC;4BACJ,QAAQ,aAAa;gCACnB,KAAK,IAAI,CAAC,MAAM;oCACd,YAAY,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAC5B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBACjB,EAAE,CAAC;oCACH,MAAM;gCACR,KAAK,IAAI,CAAC,GAAG;oCACX,YAAY,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAC5B,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBACjB,EAAE,CAAC;oCACH,MAAM;gCACR,KAAK,IAAI,CAAC,KAAK;oCACb,YAAY,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,CACnD,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACb,EAAE,CAAC;oCACH,MAAM;gCACR,KAAK,IAAI,CAAC,IAAI;oCACZ,YAAY,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,CACnD,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACb,EAAE,CAAC;oCACH,MAAM;6BACT;4BACD,MAAM,IAAI,MAAM,YAAY,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yBAChE;6BAAM;AACL,4BAAA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yBAChD;qBACF;oBACD,gBAAgB,GAAG,aAAa,CAAC;iBAClC;gBACD,MAAM;YACR,KAAK,SAAS,CAAC,MAAM;AACnB,gBAAA,MAAM,IAAI,CAAK,EAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,IAAI,cAAc,EAAE;oBAClB,QAAQ,cAAc;wBACpB,KAAK,IAAI,CAAC,MAAM;AACd,4BAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AAClB,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB;AACzC,6BAAA,CAAC,CAAC;4BACH,MAAM;wBACR,KAAK,IAAI,CAAC,GAAG;AACX,4BAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AAClB,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB;AACzC,6BAAA,CAAC,CAAC;4BACH,MAAM;wBACR,KAAK,IAAI,CAAC,KAAK;AACb,4BAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AAClB,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB;AACxC,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,6BAAA,CAAC,CAAC;4BACH,MAAM;wBACR,KAAK,IAAI,CAAC,IAAI;AACZ,4BAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AAClB,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB;AACxC,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,6BAAA,CAAC,CAAC;4BACH,MAAM;qBACT;iBACF;gBACD,IAAI,YAAY,EAAE;oBAChB,QAAQ,YAAY;wBAClB,KAAK,IAAI,CAAC,MAAM;4BACd,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;gCAClC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB;AACzD,6BAAA,CAAC,CAAC;4BACH,MAAM;wBACR,KAAK,IAAI,CAAC,GAAG;4BACX,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;gCAClC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB;AACzD,6BAAA,CAAC,CAAC;4BACH,MAAM;wBACR,KAAK,IAAI,CAAC,KAAK;4BACb,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;gCAClC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB;gCACxD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,6BAAA,CAAC,CAAC;4BACH,MAAM;wBACR,KAAK,IAAI,CAAC,IAAI;4BACZ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;gCAClC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB;gCACxD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,6BAAA,CAAC,CAAC;4BACH,MAAM;qBACT;iBACF;AACD,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtC,oBAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;wBAClC,QAAQ,gBAAgB;4BACtB,KAAK,IAAI,CAAC,MAAM;AACd,gCAAA,IACE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oCAAA,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC;iCAC7B;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;AAEA,oCAAA,MAAM,IAAI,CAAA,GAAA,EAAM,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAA,CAAE,CAAC;oCAC3D,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oCAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC;iCAC9B;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,gBAAgB;AACd,wCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;iCAC5D;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iCAChC;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iCAChC;gCACD,MAAM;4BACR,KAAK,IAAI,CAAC,GAAG;AACX,gCAAA,IACE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oCAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;iCAChC;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;AAEA,oCAAA,MAAM,IAAI,CAAA,GAAA,EAAM,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAA,CAAE,CAAC;oCAC3D,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oCAAA,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC;iCAC/B;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,gBAAgB;AACd,wCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;iCAC5D;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iCAChC;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iCAChC;gCACD,MAAM;4BACR,KAAK,IAAI,CAAC,KAAK;AACb,gCAAA,IACE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oCAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC;iCAC9B;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;AAEA,oCAAA,MAAM,IAAI,CAAA,GAAA,EAAM,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAA,CAAE,CAAC;oCAC3D,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oCAAA,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC;iCAC7B;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,gBAAgB;AACd,wCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;iCAC5D;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iCAChC;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iCAChC;gCACD,MAAM;4BACR,KAAK,IAAI,CAAC,IAAI;AACZ,gCAAA,IACE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oCAAA,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC;iCAC/B;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;AAEA,oCAAA,MAAM,IAAI,CAAA,GAAA,EAAM,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAA,CAAE,CAAC;oCAC3D,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oCAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;iCAChC;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,gBAAgB;AACd,wCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;iCAC5D;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;oCAC/B,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iCAChC;AAAM,qCAAA,IACL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,oCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC;;oCAEA,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iCAChC;gCACD,MAAM;yBACT;qBACF;yBAAM;AACL,wBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;4BACrC,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;4BAC/B,gBAAgB;AACd,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;yBAC5D;AACD,wBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;4BACrC,MAAM,IAAI,CAAM,GAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;4BAC/B,gBAAgB;AACd,gCAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;yBAC5D;qBACF;iBACF;gBACD,MAAM;SACT;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACH,CAAC,CAAC;AAEF;;;AAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,KAAgB,EAAE,KAAa,KAAY;IAC5E,QAAQ,KAAK;QACX,KAAK,SAAS,CAAC,MAAM;YACnB,OAAO,CAAA,EAAG,KAAK,CAAA,CAAE,CAAC;QACpB,KAAK,SAAS,CAAC,MAAM;AACnB,YAAA,OAAO,GAAG,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;QACjC,KAAK,SAAS,CAAC,YAAY;YACzB,OAAO,CAAA,EAAG,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,KAAK,CAAA,CAAE,CAAC;QACrC,KAAK,SAAS,CAAC,KAAK,CAAC;AACrB,QAAA;AACE,YAAA,OAAO,MAAM,CAAC;KACjB;AACH,CAAC;;AChdD;;;;;;AAMG;AACI,MAAM,cAAc,GAAG,CAAI,GAAQ,EAAE,GAAM,KAAS;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/B,IAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACtB;AACD,IAAA,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;;;AAMG;AACI,MAAM,cAAc,GAAG,CAAI,GAAQ,EAAE,GAAM,KAAS;IACzD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtB,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACf;AACD,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;;ACZD;;;;;AAKG;MACU,gBAAgB,CAAA;AAA7B,IAAA,WAAA,GAAA;AACE;;;AAGG;QACO,IAAQ,CAAA,QAAA,GAAQ,EAAE,CAAC;AAC7B;;;AAGG;QACO,IAAS,CAAA,SAAA,GAAwB,EAAE,CAAC;KAmI/C;AAjIC;;;AAGG;AACH,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;KACpB;AAED;;;;AAIG;IACH,GAAG,GAAA;AACD,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3B;AAED;;;;;AAKG;AACH,IAAA,GAAG,CAAC,MAAS,EAAA;QACX,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;YAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5B;KACF;AAED;;;AAGG;IACH,KAAK,GAAA;;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAClC;KACF;AAED;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,EAAU,EAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;KACzC;AAED;;;;AAIG;AACH,IAAA,KAAK,CAAC,SAA2D,EAAA;QAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;KAC/C;AAED;;;;AAIG;AACH,IAAA,MAAM,CAAC,SAA2D,EAAA;QAChE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KACxC;AAED;;;;AAIG;AACH,IAAA,IAAI,CACF,SAA2D,EAAA;QAE3D,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACtC;AAED;;;;;AAKG;AACH,IAAA,GAAG,CAAC,EAAU,EAAA;AACZ,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;KAC3B;AAED;;;;AAIG;AACH,IAAA,GAAG,CAAI,QAAoD,EAAA;QACzD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KACpC;AAED;;;;AAIG;AACH,IAAA,MAAM,CAAC,EAAU,EAAA;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5B,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC1B,YAAA,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SACvC;KACF;AAED;;;AAGG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;KAC7B;AAED;;;AAGG;AACH,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;AAChB,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClC,YAAA,MAAM,MAAM,CAAC;SACd;KACF;AACF;;AC7JD;;;AAGG;AACI,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC;;;;;AAKG;MACmB,cAAc,CAAA;AAOlC,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB;IA6BD,WAAY,CAAA,KAAmB,EAAE,EAAU,EAAA;AA5B3C;;;AAGG;QACH,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AACpB;;;AAGG;QACH,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AACjB;;;;;;;;;;AAUG;QACH,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AACpB;;;AAGG;QACH,IAAoB,CAAA,oBAAA,GAA2B,IAAI,CAAC;AAGlD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;KACf;AAyBD;;;AAGG;IACH,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAK,EAAA,EAAA,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC;KACtE;AACF,CAAA;AAEK,MAAO,iBAEX,SAAQ,gBAAmB,CAAA;IAClB,GAAG,CAAC,cAAc,GAAG,KAAK,EAAA;QACjC,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC;SACpB;aAAM;AACL,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACxC;KACF;AAEQ,IAAA,QAAQ,CAAC,EAAU,EAAE,cAAc,GAAG,KAAK,EAAA;QAClD,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAC3B;aAAM;AACL,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;SAC1D;KACF;AAEQ,IAAA,KAAK,CACZ,SAA2D,EAC3D,cAAc,GAAG,KAAK,EAAA;QAEtB,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SAC/B;aAAM;YACL,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACnE;KACF;AAEQ,IAAA,MAAM,CACb,SAA2D,EAC3D,cAAc,GAAG,KAAK,EAAA;QAEtB,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAChC;aAAM;YACL,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACpE;KACF;AAEQ,IAAA,IAAI,CACX,SAA2D,EAC3D,cAAc,GAAG,KAAK,EAAA;QAEtB,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC9B;aAAM;YACL,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SAClE;KACF;AAEQ,IAAA,GAAG,CAAC,EAAU,EAAE,cAAc,GAAG,KAAK,EAAA;QAC7C,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACtB;aAAM;AACL,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO;AACtD,kBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;kBACb,SAAS,CAAC;SACf;KACF;AAEQ,IAAA,GAAG,CACV,QAAoD,EACpD,cAAc,GAAG,KAAK,EAAA;QAEtB,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC5B;aAAM;AACL,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SACtD;KACF;AAED;;;AAGG;IACM,IAAI,CAAC,cAAc,GAAG,KAAK,EAAA;QAClC,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;SACrB;aAAM;AACL,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;SAC/C;KACF;IAEQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,GAAG,KAAK,EAAA;QAChD,IAAI,cAAc,EAAE;AAClB,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClC,gBAAA,MAAM,MAAM,CAAC;aACd;SACF;aAAM;YACL,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC5D,gBAAA,MAAM,MAAM,CAAC;aACd;SACF;KACF;AACF;;ACnLD;;;;;AAKG;AACa,SAAA,aAAa,CAC3B,QAAyB,EACzB,QAA4C,EAAA;AAE5C,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI,CAAC;IAC3B,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;IAC3C,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;QAI/B,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;KACnC;AACD,IAAA,OAAO,KAAK,CAAC;AACf;;ACrBA;;;;;AAKG;MACU,QAAQ,CAAA;IAuCnB,WACE,CAAA,IAAY,EACZ,IAAU,EACV,YAAqB,EACrB,KAAc,EACd,QAAiB,EACjB,aAAiC,EAAA;AAEjC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;KAC7B;AACF,CAAA;AAYD;;;;AAIG;IACS,KAmEX;AAnED,CAAA,UAAY,IAAI,EAAA;AACd;;AAEG;AACH,IAAA,IAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB;;AAEG;AACH,IAAA,IAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf;;AAEG;AACH,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb;;AAEG;AACH,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB;;AAEG;AACH,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;AAEG;AACH,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;AAEG;AACH,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;;AAGG;AACH,IAAA,IAAA,CAAA,YAAA,CAAA,GAAA,aAA0B,CAAA;AAC1B;;;AAGG;AACH,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB;;AAEG;AACH,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb;;AAEG;AACH,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACtB;;AAEG;AACH,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACtB;;AAEG;AACH,IAAA,IAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACpB;;AAEG;AACH,IAAA,IAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACpB;;AAEG;AACH,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb;;AAEG;AACH,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EAnEW,IAAI,KAAJ,IAAI,GAmEf,EAAA,CAAA,CAAA,CAAA;AAED;;;;;AAKG;MACU,WAAW,CAAA;AAItB,IAAA,WAAA,CAAY,aAAyB,EAAE,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;YACxC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;SAC5C;KACF;AAED,IAAA,WAAW,CAAC,GAAW,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,WAAW,CAAC,GAAW,EAAA;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;KAC5C;IAED,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;KACrC;AACF,CAAA;AAED;;;;AAIG;MACU,QAAQ,CAAA;IAenB,WAAY,CAAA,WAAwB,EAAE,WAAoB,EAAA;QAZ1D,IAAmB,CAAA,mBAAA,GAAe,EAAE,CAAC;QACrC,IAAgB,CAAA,gBAAA,GAAe,EAAE,CAAC;QAC1B,IAAM,CAAA,MAAA,GAA+B,EAAE,CAAC;QACxC,IAAS,CAAA,SAAA,GAAgC,EAAE,CAAC;AACpD;;;;;AAKG;QACK,IAAa,CAAA,aAAA,GAAmD,EAAE,CAAC;AAGzE,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAyC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;AAED;;;;;;AAMG;AACH,IAAA,mBAAmB,CAAC,aAAuC,EAAA;AACzD,QAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;SACxC;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE5D,YAAA,IAAI,cAAc,GAAQ,IAAI,CAAC,WAAW,CAAC;AAC3C,YAAA,KAAK,MAAM,gBAAgB,IAAI,aAAa,EAAE;gBAC5C,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE;AAC3D,oBAAA,OAAO,SAAS,CAAC;iBAClB;AACD,gBAAA,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;aACnD;AACD,YAAA,OAAO,cAAc,CAAC;SACvB;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAED;;;;;;;;AAQG;IACH,mBAAmB,CACjB,aAAuC,EACvC,KAAc,EAAA;AAEd,QAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;SACzC;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE5D,YAAA,IAAI,cAAc,GAAQ,IAAI,CAAC,WAAW,CAAC;AAC3C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;AACjD,gBAAA,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE;oBAC3D,OAAO;iBACR;AACD,gBAAA,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;aACnD;YACD,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE;gBAC3D,OAAO;aACR;AACD,YAAA,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;SACjE;QACD,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,UAAU,EAAE;AAC1D,YAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;SACpC;KACF;AAED;;;;;AAKG;;AAEH,IAAA,QAAQ,CAAC,GAAW,EAAA;AAClB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC;QACvE,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE;AACzD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;SAC5D;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;SACxC;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACzB;KACF;AAED;;;;AAIG;IACH,SAAS,GAAA;QACP,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;aAC/C;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aAClC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,IAAgC,EAAA;QAG/C,MAAM,MAAM,GAA+B,EAAE,CAAC;AAC9C,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAChD,IAAI,CAAC,GAAG,CAA+B,CACxC,CAAC;aACH;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aAClC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;AAIG;IACH,aAAa,GAAA;QACX,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;aACnD;iBAAM;gBACL,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC1C,gBAAA,IAAI,SAAS;AAAE,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;aACxC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,GAAW,EAAA;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACtB;AAED;;;;;AAKG;AACH,IAAA,WAAW,CAAC,GAAW,EAAA;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;YAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;SAClD;AACD,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAACA,QAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;KAChE;AAED;;;;AAIG;IACH,cAAc,GAAA;QACZ,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;YACpD,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACnC,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;;;AAKG;IACH,QAAQ,CAAC,GAAW,EAAE,KAAc,EAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE;YACZ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;gBACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAmC,CAAC,CAAC;aACpE;iBAAM;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACzB,IAAI,CAACA,QAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;iBAChC;aACF;AACD,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;YAC7C,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE;AACzD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;aAChD;SACF;KACF;AAED;;;;AAIG;AACH,IAAA,SAAS,CAAC,MAAkC,EAAA;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAC3B,MAAM,CAAC,GAAG,CAA+B,CAC1C,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACjC;SACF;KACF;AAED;;;;AAIG;AACH,IAAA,aAAa,CAAC,UAA8B,EAAA;AAC1C,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,aAAa,CAC/B,UAAU,CAAC,GAAG,CAAuB,CACtC,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAoB,CAAC;aAC9D;SACF;KACF;AAED;;;;AAIG;AACH,IAAA,eAAe,CAAC,MAAkC,EAAA;AAChD,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,eAAe,CACjC,MAAM,CAAC,GAAG,CAA+B,CAC1C,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACjC;SACF;KACF;AAED;;;;AAIG;IACH,kBAAkB,CAChB,MAAkC,EAClC,SAA0B,EAAA;AAE1B,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,kBAAkB,CACpC,MAAM,CAAC,GAAG,CAA+B,EACzC,SAAS,CACV,CAAC;aACH;iBAAM;AACL,gBAAA,IAAI,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE;oBACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;iBACrC;aACF;SACF;KACF;AAED;;;;AAIG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACnD,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;YAC7C,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;aACtD;iBAAM;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;aAC3D;YACD,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE;AACzD,gBAAA,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE;AACvC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC3D;qBAAM;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBAC5D;aACF;AACD,YAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACzC;iBAAM;AACL,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACtC;SACF;KACF;AAED;;;;;AAKG;AACK,IAAA,oBAAoB,CAAC,GAAW,EAAA;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,QAAQ,CAAC,eAAe,CACtB,eAAe,CAAC,QAAQ,CAAC,YAAY,CAA+B,CACrE,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED;;;;;AAKG;AACH,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KAC5B;AAED;;;;AAIG;AACH,IAAA,eAAe,CAAC,QAAkB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAChD,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxC,YAAA,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;SACjD;KACF;AAED;;;;AAIG;AACH,IAAA,YAAY,CAAC,QAAkB,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrC,YAAA,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;SACpD;KACF;AACF,CAAA;AAED;;;;AAIG;AACI,MAAM,KAAK,GAAG,CAAC,CAAU,KAAa;IAC3C,QACE,CAAC,KAAK,SAAS;AACf,QAAA,CAAC,KAAK,IAAI;AACV,QAAA,CAAC,KAAK,EAAE;SACP,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACtC,SAAC,CAAC,YAAY,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EACpD;AACJ,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAMA,QAAM,GAAG,CAAC,CAAU,EAAE,CAAU,KAAa;AACxD,IAAA,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,IAAI,GAAG,CAClB,CAEC,EACD,CAEC,KAQC;IACF,MAAM,KAAK,GAEP,EAAE,CAAC;IACP,MAAM,KAAK,GAEP,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,IAAA,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE;AACnB,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACnB;AACD,IAAA,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE;AACnB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACnB;KACF;AACD,IAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACzB,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AACxC,YAAA,MAAM,MAAM,GAAG,IAAI,CACjB,CAAC,CAAC,GAAG,CAA+B,EACpC,CAAC,CAAC,GAAG,CAA+B,CACrC,CAAC;;AAEF,YAAA,IACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AACjC,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EACjC;gBACA,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;aACxB;SACF;aAAM;AACL,YAAA,IAAI,CAACA,QAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aACrB;SACF;KACF;AACD,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC,CAAC;AAEK,MAAM,QAAQ,GAAG,CAAC,CAAU,KACjC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM;;ACxoB3D;;;;AAIG;AACI,MAAM,gCAAgC,GAAG;AAC9C,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,SAAS,CAAC,QAAQ;IACzB,KAAK,EAAE,SAAS,CAAC,KAAK;AACtB,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,sBAAsB,EAAE,IAAI;AAC5B,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,UAAU,EAAE,EAAE;CACf,CAAC;AAEF;AACA;;AAEG;AACI,MAAM,+CAA+C,GAAG,KAAK,CAAC;AACrE;;AAEG;AACI,MAAM,+CAA+C,GAAG,KAAK,CAAC;AACrE;;AAEG;AACI,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAChD;;AAEG;AACI,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C;;;;AAIG;MACU,qBAAqB,CAAA;AAehC,IAAA,WAAA,CAAY,OAA6B,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,GAAG,gCAAgC;AACnC,YAAA,GAAG,OAAO;SACX,CAAC;AACF,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC5D,QAAA,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACxD,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KACvD;AAED,IAAA,gBAAgB,CAAC,IAAY,EAAA;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3C;AAED,IAAA,eAAe,CAAC,IAAY,EAAA;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzC;AACF,CAAA;AAED;;;;AAIG;AACG,MAAO,iBAAkB,SAAQ,cAAc,CAAA;AAyEnD;;;AAGG;AACH,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IACD,IAAI,IAAI,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;IAED,WACE,CAAA,KAAmB,EACnB,IAA2B,EAC3B,KAA8B,EAC9B,GAA4B,EAC5B,EAAU,EAAA;QAEV,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;AAC3C,YAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,EAAE,CAAA,gBAAA,CAAkB,CAAC,CAAC;SACrE;AACD,QAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAxEnB;;;AAGG;AACH,QAAA,IAAA,CAAA,WAAW,GAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAgB5B;;;AAGG;AACH,QAAA,IAAA,CAAA,SAAS,GAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAM1B;;;AAGG;QACH,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AAChB;;;AAGG;QACH,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AACjB;;;AAGG;QACH,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AACd;;;AAGG;QACH,IAAM,CAAA,MAAA,GAAY,EAAE,CAAC;AAwBnB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC;AACnD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC;AAC/C,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAClB;AAED,IAAA,IAAI,OAAO,GAAA;QACT,QACE,IAAI,CAAC,WAAW;aACf,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAChD,aAAC,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAC5C;KACH;IAED,YAAY,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrD;AAED;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,KAAmB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC5B,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;aACtD;AACD,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,gBAAA,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,SAAS,CAAC;AACvC,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC5C;SACF;aAAM;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAED;;;;;AAKG;AACH,IAAA,MAAM,CAAC,GAAiB,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;gBAC1B,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;aACpD;AACD,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,gBAAA,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,SAAS,CAAC;AACnC,gBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC;SACF;aAAM;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAED;;;;AAIG;IACH,OAAO,GAAA;QACL,IAAI,CAAC,uBAAuB,EAAE;YAC5B,OAAO;SACR;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE;YACvC,MAAM,8CAA8C,GAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK;AACzB,iBAAA,GAAG,CAAwB,CAAC,CAAC,KAAK;gBACjC,CAAC;gBACD,CAAC,CAAC,UAAU,CAAE,IAAI,CAAC,GAAmB,CAAC,MAAM,CAAC;aAC/C,CAAC;AACD,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,0BAA0B,EAAE,KAAK,MAAM,oBAAoB,IAAI,8CAA8C,EAAE;AAC7G,gBAAA,IACE,CAAC,+CAA+C;AAChD,oBAAA,oBAAoB,KAAK,IAAI,CAAC,GAAG,EACjC;;AAEA,oBAAA,SAAS,0BAA0B,CAAC;iBACrC;AACD,gBAAA,IACE,CAAC,2BAA2B;AAC5B,qBAAC,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;AACrD,wBAAA,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI;AACpD,wBAAA,oBAAoB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;AACnD,yBAAC,oBAAoB,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;AACpD,4BAAA,oBAAoB,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;wBACvD,oBAAoB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,EACtD;;AAEA,oBAAA,SAAS,0BAA0B,CAAC;iBACrC;gBACD,IAAI,CAAC,+CAA+C,EAAE;AACpD,oBAAA,KAAK,MAAM,UAAU,IAAI,oBAAoB,CAAC,mBAAmB,EAAE;AACjE,wBAAA,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE;;AAEtD,4BAAA,SAAS,0BAA0B,CAAC;yBACrC;qBACF;AACD,oBAAA,KAAK,MAAM,UAAU,IAAI,oBAAoB,CAAC,mBAAmB,EAAE;AACjE,wBAAA,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE;;AAExD,4BAAA,SAAS,0BAA0B,CAAC;yBACrC;qBACF;iBACF;;AAED,gBAAA,IAAI,oBAAoB,KAAK,IAAI,CAAC,KAAK,EAAE;AACvC,oBAAA,MAAM,0BAA0B,CAAC;iBAClC;qBAAM;AACL,oBAAA,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AACpC,oBAAA,MAAM,0BAA0B,CAAC;iBAClC;aACF;SACF;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE;YACvC,MAAM,4CAA4C,GAChD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK;AACvB,iBAAA,GAAG,CAAwB,CAAC,CAAC,KAAK;gBACjC,CAAC;gBACD,CAAC,CAAC,UAAU,CAAE,IAAI,CAAC,KAAqB,CAAC,MAAM,CAAC;aACjD,CAAC;AACD,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,wBAAwB,EAAE,KAAK,MAAM,kBAAkB,IAAI,4CAA4C,EAAE;AACvG,gBAAA,IACE,CAAC,+CAA+C;AAChD,oBAAA,kBAAkB,KAAK,IAAI,CAAC,KAAK,EACjC;;AAEA,oBAAA,SAAS,wBAAwB,CAAC;iBACnC;AACD,gBAAA,IACE,CAAC,2BAA2B;AAC5B,qBAAC,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;AACnD,wBAAA,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI;AAClD,wBAAA,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;AACjD,yBAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;AAClD,4BAAA,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;wBACrD,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,EACpD;;AAEA,oBAAA,SAAS,wBAAwB,CAAC;iBACnC;gBACD,IAAI,CAAC,+CAA+C,EAAE;AACpD,oBAAA,KAAK,MAAM,UAAU,IAAI,kBAAkB,CAAC,mBAAmB,EAAE;AAC/D,wBAAA,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;;AAE1D,4BAAA,SAAS,wBAAwB,CAAC;yBACnC;qBACF;AACD,oBAAA,KAAK,MAAM,UAAU,IAAI,kBAAkB,CAAC,mBAAmB,EAAE;AAC/D,wBAAA,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,EAAE;;AAExD,4BAAA,SAAS,wBAAwB,CAAC;yBACnC;qBACF;iBACF;;AAED,gBAAA,IAAI,kBAAkB,KAAK,IAAI,CAAC,GAAG,EAAE;AACnC,oBAAA,MAAM,wBAAwB,CAAC;iBAChC;qBAAM;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAChC,oBAAA,MAAM,wBAAwB,CAAC;iBAChC;aACF;SACF;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;aACnE;iBAAM;AACL,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;aACjC;SACF;aAAM;AACL,YAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;aAC/B;iBAAM;AACL,gBAAA,OAAO,gBAAgB,CAAC;aACzB;SACF;KACF;AACF,CAAA;AAEK,MAAO,oBAAqB,SAAQ,iBAAoC,CAAA;AAQ5E;;;AAGG;AACH,IAAA,WAAA,CAAY,KAAmB,EAAA;AAC7B,QAAA,KAAK,EAAE,CAAC;AAXV;;;AAGG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,gBAAgB,EAAyB,CAAC;AAQpD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED;;;;;;;;AAQG;AACH,IAAA,GAAG,CACD,IAAoC,EACpC,KAA8B,EAC9B,GAA4B,EAC5B,EAAU,EAAA;AAEV,QAAA,IAAI,cAAqC,CAAC;AAC1C,QAAA,IAAI,IAAI,YAAY,qBAAqB,EAAE;YACzC,cAAc,GAAG,IAAI,CAAC;SACvB;aAAM;YACL,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,IAAI,mBAAmB,KAAK,SAAS,EAAE;AACrC,gBAAA,MAAM,IAAI,SAAS,CACjB,4BAA4B,IAAI,CAAA,qBAAA,CAAuB,CACxD,CAAC;aACH;YACD,cAAc,GAAG,mBAAmB,CAAC;SACtC;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,iBAAiB,CACtC,IAAI,CAAC,KAAK,EACV,cAAc,EACd,KAAK,EACL,GAAG,EACH,EAAE,CACH,CAAC;AACF,QAAA,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtB,UAAU,CAAC,YAAY,EAAE,CAAC;AAC1B,QAAA,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAClC,QAAA,OAAO,UAAU,CAAC;KACnB;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAA;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,UAAU,EAAE;;YAEd,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,mBAAmB,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YACxE,cAAc,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;;AAEtE,YAAA,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAEjB,UAAU,CAAC,YAAY,EAAE,CAAC;SAC3B;KACF;AACF;;ACvcD;;;;;AAKG;AACI,MAAM,UAAU,GAAG,CAAC,KAAY,KAAW;IAChD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF;;;;;;;AAOG;AACI,MAAM,OAAO,GAAG,CACrB,UAAkB,EAClB,KAAa,EACb,GAAW,KACA;AACX,IAAA,IAAI,KAAK,GAAG,GAAG,EAAE;AACf,QAAA,OAAO,KAAK,IAAI,UAAU,IAAI,UAAU,IAAI,GAAG,CAAC;KACjD;SAAM;AACL,QAAA,OAAO,GAAG,IAAI,UAAU,IAAI,UAAU,IAAI,KAAK,CAAC;KACjD;AACH,CAAC,CAAC;AAEF;;;;;;;AAOG;AACI,MAAM,mBAAmB,GAAG,CACjC,aAAqB,EACrB,cAAgC,EAChC,cAAgC,KACtB;IACV,QACE,CAAC,CAAC,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC;SAChC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;SACtC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,cAAc,CAAC,CAAC,CAAC,EACjB;AACJ,CAAC,CAAC;AAEF;;;;;;;;;AASG;AACI,MAAM,cAAc,GAAG,CAC5B,QAAe,EACf,UAA4B,EAC5B,UAA4B,EAC5B,UAA4B,EAC5B,UAA4B,KACnB;IACT,OAAO;QACL,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC;QACxD,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC;KACzD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;AAOG;AACI,MAAM,SAAS,GAAG,CACvB,KAAY,EACZ,SAAe,EACf,QAAgB,KACP;IACT,QAAQ,SAAS;QACf,KAAK,IAAI,CAAC,KAAK;AACb,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,IAAI;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,MAAM;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG;AACX,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;KAC1C;AACH,CAAC,CAAC;AAEF;;;;;;AAMG;AACI,MAAM,MAAM,GAAG,CAAC,MAAa,EAAE,MAAa,KAAa;AAC9D,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF;;;;;;AAMG;AACI,MAAM,qBAAqB,GAAG,CAAC,MAAa,EAAE,MAAa,KAAY;AAC5E,IAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AAC9E,CAAC,CAAC;AAEF;;;;;;AAMG;AACI,MAAM,iBAAiB,GAAG,CAAC,IAAU,EAAE,KAAY,KAAa;AACrE,IAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;AAC5B,QAAA,OAAO,KAAK,CAAC;KACd;AACD,IAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,MAAM,KAAK,MAAM,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;;AAMG;AACI,MAAM,sBAAsB,GAAG,CACpC,SAAoB,EACpB,KAAY,KACD;IACX,QACE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnD;AACJ,CAAC,CAAC;AAEF;;;;;;AAMG;AACI,MAAM,cAAc,GAAG,CAAC,KAAW,EAAE,KAAW,KAAa;;IAElE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5D,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACnC;;AAED,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9B,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;AACD,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9B,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;;IAED,IACE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAC1B;AACA,QAAA,OAAO,IAAI,CAAC;KACb;;AAED,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,IAAA,MAAM,EAAE,GACN,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,IAAA,MAAM,EAAE,GACN,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,IAAA,MAAM,EAAE,GACN,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,IAAA,MAAM,EAAE,GACN,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,CAAC,KAAW,EAAE,KAAW,KAAa;;IAEhE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAC5D,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACnC;;AAED,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9B,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;AACD,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC9B,OAAO,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;;;;IAID,QACE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACjC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SACnC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1E;AACJ,CAAC,CAAC;AAEF;;;;;;AAMG;AACI,MAAM,uBAAuB,GAAG,CACrC,IAAU,EACV,SAAoB,KACT;;AAEX,IAAA,MAAM,MAAM,GAAU,SAAS,CAAC,CAAC,CAAC,CAAC;;AAEnC,IAAA,MAAM,MAAM,GAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEzD,IAAA,MAAM,MAAM,GAAU,SAAS,CAAC,CAAC,CAAC,CAAC;;AAEnC,IAAA,MAAM,MAAM,GAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,QACE,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC;AACJ,CAAC;;ACjRD;;;AAGG;IACS,YAmDX;AAnDD,CAAA,UAAY,WAAW,EAAA;AACrB;;;AAGG;AACH,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB;;;AAGG;AACH,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf;;;AAGG;AACH,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;;AAGG;AACH,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB;;;AAGG;AACH,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB;;;AAGG;AACH,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb;;;AAGG;AACH,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB;;;AAGG;AACH,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB;;;AAGG;AACH,IAAA,WAAA,CAAA,kBAAA,CAAA,GAAA,mBAAsC,CAAA;AACtC;;;AAGG;AACH,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,aAA0B,CAAA;AAC5B,CAAC,EAnDW,WAAW,KAAX,WAAW,GAmDtB,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;AACI,MAAM,iBAAiB,GAAG,CAC/B,KAAkB,EAClB,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;IACV,QAAQ,KAAK;QACX,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,WAAW,CAAC,KAAK;YACpB,OAAO,SAAS,EAAE,CAAC;QACrB,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACzC,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,KAAK,WAAW,CAAC,gBAAgB;YAC/B,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACnD,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC7C,QAAA;YACE,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;KAC7C;AACH,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,WAAW,GAAG,CACzB,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;AACV,IAAA,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA,GAAA,EAAM,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CACzD,OAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CACd,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,CAAA,GAAA,EAAM,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAU,OAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAAI,CAAA,EAAA,CAAC,IAAI,CAAC;AAC9E,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,SAAS,GAAG,MAAa;AACpC,IAAA,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,UAAU,GAAG,CACxB,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;IACV,OAAO,CAAA,EAAA,EAAK,CAAC,CAAI,CAAA,EAAA,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAC3D,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CACf,MAAM,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,CAAM,GAAA,EAAA,CAAC,IACnE,CAAC,GAAG,MACN,CAAA,EAAA,CAAI,CAAC;AACP,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,WAAW,GAAG,CACzB,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;AACV,IAAA,OAAO,CAAK,EAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAAI,CAAA,EAAA,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAI,CAAA,EAAA,CAAC,CAC1D,GAAA,EAAA,CAAC,GAAG,KACN,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA,GAAA,EAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,CAAA,GAAA,EACvD,CAAC,GAAG,KAAK,GAAG,CACd,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,CAAM,GAAA,EAAA,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,WAAW,GAAG,CACzB,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;IACV,OAAO,CAAA,EAAA,EAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,GAAA,EAC1D,CAAC,GAAG,KACN,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CACvD,GAAA,EAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CACpB,IAAI,CAAC,GAAG,MAAM,CAAM,GAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,EACpD,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,CACrB,CAAM,GAAA,EAAA,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,CAAI,CAAC;AACxD,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,QAAQ,GAAG,CACtB,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;AACV,IAAA,IAAI,MAAM,GAAG,KAAK,EAAE;QAClB,OAAO,CAAA,EAAA,EAAK,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAA,GAAA,EAC9D,MAAM,GAAG,CACX,CAAA,CAAA,EAAI,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,CACjE,CAAA,EAAA,MAAM,GAAG,CACX,CAAA,OAAA,EAAU,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAM,GAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,IAChE,CAAC,GAAG,MACN,CAAM,GAAA,EAAA,MAAM,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,CACzD,GAAA,EAAA,MAAM,GAAG,CACX,CAAI,CAAA,EAAA,MAAM,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,CAAI,CAAC;KACjD;AAAM,SAAA,IAAI,MAAM,GAAG,KAAK,EAAE;QACzB,OAAO,CAAA,EAAA,EAAK,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAAM,GAAA,EAAA,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,CAAA,GAAA,EAC7D,KAAK,GAAG,CACV,CAAA,CAAA,EAAI,KAAK,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,MAAM,KAAK,GAAG,CAAC,CAC/D,CAAA,EAAA,KAAK,GAAG,CACV,CAAA,OAAA,EAAU,CAAC,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,KAAK,CAC1D,CAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CACd,CAAM,GAAA,EAAA,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAM,GAAA,EAAA,KAAK,GAAG,CAAC,CACrE,CAAA,EAAA,KAAK,GAAG,CACV,CAAA,OAAA,EAAU,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA,EAAA,CAAI,CAAC;KAClC;SAAM;QACL,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;KACzC;AACH,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,aAAa,GAAG,CAC3B,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;IACV,OAAO,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,EACxE,CAAC,GAAG,MACN,CAAA,EAAA,CAAI,CAAC;AACP,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,WAAW,GAAG,CACzB,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;AACV,IAAA,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAI,CAAA,EAAA,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAC7D,GAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CACd,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,CAAM,GAAA,EAAA,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,oBAAoB,GAAG,CAClC,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;AACV,IAAA,OAAO,CAAK,EAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CAAC,CAAI,CAAA,EAAA,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAI,CAAA,EAAA,CAAC,CAC1D,GAAA,EAAA,KAAK,GAAG,CACV,CAAI,CAAA,EAAA,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA,EAChE,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,CACrB,CAAA,GAAA,EAAM,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,GAAG,CAAC,CAAA,OAAA,EAAU,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,CACtE,GAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CACd,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,CAAM,GAAA,EAAA,KAAK,GAAG,CAAC,CAAI,CAAA,EAAA,MAAM,GAAG,CAAC,CAAU,OAAA,EAAA,CAAC,IACpD,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,CACrB,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAM,GAAA,EAAA,KAAK,GAAG,CAAC,CAAI,CAAA,EAAA,MAAM,GAAG,CAAC,CACpD,OAAA,EAAA,CAAC,GAAG,KAAK,GAAG,CACd,CAAI,CAAA,EAAA,CAAC,IAAI,CAAC;AACZ,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,cAAc,GAAG,CAC5B,CAAS,EACT,CAAS,EACT,KAAa,EACb,MAAc,KACJ;IACV,OAAO,CAAA,EAAA,EAAK,CAAC,CAAI,CAAA,EAAA,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAI,CAAA,EAAA,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CACvE,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CACf,CAAM,GAAA,EAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,CAAC,GAAG,MAAM,GAAG,CAAC,CAC7D,GAAA,EAAA,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CACpB,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAM,GAAA,EAAA,CAAC,GAAG,KAAK,CAAA,CAAA,EAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,IAChE,CAAC,GAAG,MACN,CAAM,GAAA,EAAA,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA,EAAA,CAAI,CAAC;AAC5B,CAAC;;ACrQD;;;;AAIG;AACI,MAAM,6BAA6B,GAAmB;AAC3D,IAAA,QAAQ,EAAE,aAAa;IACvB,KAAK,EAAE,WAAW,CAAC,SAAS;AAC5B,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,iBAAiB,EAAE,SAAS;AAC5B,IAAA,mBAAmB,EAAE,SAAS;CAC/B,CAAC;AAEF;;;;AAIG;AACI,MAAM,wBAAwB,GAAG;AACtC,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,IAAI,EAAE,6BAA6B;AACnC,IAAA,QAAQ,EAAE,gBAAgB;CAC3B,CAAC;AAEF;;;;AAIG;AACI,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAC/C;;;;AAIG;AACI,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAChD;;;;AAIG;AACI,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C;;;;AAIG;AACI,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAQ5C;;;;;;AAMG;AACG,MAAO,cAAe,SAAQ,cAAc,CAAA;AA6ChD;;;AAGG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;KAC/B;IACD,IAAI,IAAI,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;SACxB;KACF;AAED,IAAA,WAAA,CACE,KAAmB,EACnB,IAA6B,EAC7B,YAAoB,EACpB,YAAoB,EACpB,MAAa,EACb,KAAa,EACb,MAAc,EACd,EAAU,EAAA;QAEV,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;AACxC,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAA,gBAAA,CAAkB,CAAC,CAAC;SAClE;AACD,QAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AApDnB;;;AAGG;QACH,IAAK,CAAA,KAAA,GAAkB,EAAE,CAAC;AAC1B;;;AAGG;QACH,IAAU,CAAA,UAAA,GAAuB,EAAE,CAAC;AA4ClC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC3E;IAED,YAAY,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAClD;IAED,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAChE,IAAI,CAAC,YAAY,CAClB,CAAC;KACH;IAED,WAAW,GAAA;AACT,QAAA,QACE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;AAC5D,YAAA,yBAAyB,EACzB;KACH;IAED,YAAY,GAAA;AACV,QAAA,QACE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;AAC7D,YAAA,0BAA0B,EAC1B;KACH;IAED,WAAW,GAAA;AACT,QAAA,QACE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GACzD,IAAI,CAAC,YAAY,CAClB,EAAE,QAAQ,IAAI,wBAAwB,CAAC,QAAQ,EAChD;KACH;AAED;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,MAAa,EAAA;QACjC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,SAAS,CAAC;SAClB;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACtB;aAAM;YACL,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,YAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC,OAAO,CAChD,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,CAC7B,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACnD,YAAA,OAAO,WAAW,CAAC;SACpB;KACF;AAED;;;;AAIG;IACH,sBAAsB,CAAC,cAAc,GAAG,KAAK,EAAA;QAC3C,MAAM,MAAM,GAAwB,EAAE,CAAC;AACvC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;AAIG;IACH,sBAAsB,CAAC,cAAc,GAAG,KAAK,EAAA;QAC3C,MAAM,MAAM,GAAwB,EAAE,CAAC;AACvC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;AAIG;IACH,cAAc,CAAC,cAAc,GAAG,KAAK,EAAA;QACnC,MAAM,MAAM,GAAwB,EAAE,CAAC;AACvC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjC;AACD,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAa,EAAA;QAChB,IAAI,CAAC,WAAW,CAAC;YACf,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ;AAED;;;;;AAKG;IACH,OAAO,CAAC,SAAe,EAAE,QAAgB,EAAA;QACvC,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACzE,QAAA,IAAI,UAAiB,CAAC;AACtB,QAAA,IAAI,UAAiB,CAAC;QACtB,QAAQ,SAAS;YACf,KAAK,IAAI,CAAC,IAAI;AACZ,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;AACtD,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;iBACpD;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,GAAG;AACX,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;AACvD,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;iBACrD;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,KAAK;AACb,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvD,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;AACtD,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;iBACpD;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,MAAM;AACd,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvD,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE;AACvD,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;iBACrD;gBACD,MAAM;SACT;QAED,IAAI,CAAC,WAAW,CAAC;YACf,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACtC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YACpC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACtC,SAAA,CAAC,CAAC;KACJ;AAED;;;AAGG;IACH,WAAW,GAAA;QACT,OAAO;AACL,YAAA,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;KACH;AAED;;;AAGG;AACH,IAAA,WAAW,CAAC,QAAgC,EAAA;QAC1C,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE9B,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;;AAGzE,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CACP,cAAc,CACZ,IAAI,CAAC,MAAM,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,CACX,CACF,CAAC;SACH;;AAGD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG;AAClB,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;AACvD,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;aACvD,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,KAAK;AACd,gBAAA,IAAI,CAAC,KAAK;AACV,oBAAA,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;oBACtC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,MAAM;AACf,gBAAA,IAAI,CAAC,MAAM;AACX,oBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;oBACrC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;SAC3B;;AAGD,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,SAAS,CAAC,IAAI,CACZ,cAAc,CACZ,SAAS,CAAC,MAAM,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,CACX,CACF,CAAC;SACH;;AAGD,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AACF,CAAA;AAEK,MAAO,iBAAkB,SAAQ,iBAAiC,CAAA;AAGtE;;;AAGG;AACH,IAAA,WAAA,CAAY,KAAmB,EAAA;AAC7B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED;;;AAGG;AACH,IAAA,GAAG,CACD,IAAiB,EACjB,YAAoB,EACpB,YAAoB,EACpB,MAAa,EACb,KAAa,EACb,MAAc,EACd,EAAU,EAAA;QAEV,MAAM,OAAO,GAAG,IAAI,cAAc,CAChC,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,EAAE,CACH,CAAC;AACF,QAAA,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO,CAAC,YAAY,EAAE,CAAC;;AAEvB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;;AAEpB,QAAA,MAAM,YAAY,GAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC,EAAE,KAAK,CAAC;QACzE,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC5C,gBAAA,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAC/B,OAAO,EACP;AACE,oBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAClD,oBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACnD,iBAAA,EACD,UAAU,EAAE,SAAS,EACrB,CAAG,EAAA,OAAO,CAAC,EAAE,CAAI,CAAA,EAAA,CAAC,CAAE,CAAA,CACrB,CAAC;AACF,gBAAA,IAAI,UAAU,CAAC,KAAK,EAAE;AACpB,oBAAA,MAAM,kBAAkB,GAAG;AACzB,wBAAA,GAAG,sBAAsB;wBACzB,GAAG,UAAU,CAAC,KAAK;qBACpB,CAAC;AACF,oBAAA,IAAI,WAAkB,CAAC;AACvB,oBAAA,QAAQ,IAAI,CAAC,SAAS;wBACpB,KAAK,IAAI,CAAC,GAAG,CAAC;wBACd,KAAK,IAAI,CAAC,IAAI;AACZ,4BAAA,WAAW,GAAG;gCACZ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;gCAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;6BAC7C,CAAC;4BACF,MAAM;wBACR,KAAK,IAAI,CAAC,MAAM;AACd,4BAAA,WAAW,GAAG;gCACZ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;gCAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;6BAC7C,CAAC;4BACF,MAAM;wBACR,KAAK,IAAI,CAAC,KAAK;AACb,4BAAA,WAAW,GAAG;gCACZ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;gCAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;6BAC7C,CAAC;4BACF,MAAM;AACR,wBAAA;AACE,4BAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;qBAC7B;oBACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACnB,IAAI,EACJ,WAAW,EACX,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,aAAa,EAChC,EAAE,EACF,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,GAAG,CACvB,CAAC;iBACH;aACF;SACF;;AAED,QAAA,MAAM,YAAY,GAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC,EAAE,KAAK,CAAC;QACzE,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,kBAAkB,GAAG;AACzB,gBAAA,GAAG,sBAAsB;AACzB,gBAAA,GAAG,YAAY;aAChB,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACnB,OAAO,EACP;gBACE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC;gBACrD,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,kBAAkB,CAAC;AACrD,aAAA,EACD,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,OAAO,CAAC,KAAK;gBACX,aAAa,CAAC,kBAAkB,CAAC;AACjC,gBAAA,cAAc,CAAC,kBAAkB,CAAC,EACpC,OAAO,CAAC,MAAM;gBACZ,YAAY,CAAC,kBAAkB,CAAC;gBAChC,eAAe,CAAC,kBAAkB,CAAC,EACrC,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,aAAa,EAChC,EAAE,EACF,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,GAAG,CACvB,CAAC;SACH;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAA;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,OAAO,EAAE;;YAEX,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC9C;;AAED,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC5C;;AAED,YAAA,IAAI,OAAO,CAAC,IAAI,EAAE;gBAChB,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aAChD;;AAED,YAAA,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAEjB,OAAO,CAAC,YAAY,EAAE,CAAC;SACxB;KACF;AACF;;AC5hBD;;;;AAIG;AACI,MAAM,0BAA0B,GAAmB;AACxD,IAAA,QAAQ,EAAE,aAAa;IACvB,KAAK,EAAE,WAAW,CAAC,SAAS;AAC5B,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,iBAAiB,EAAE,SAAS;AAC5B,IAAA,mBAAmB,EAAE,SAAS;CAC/B,CAAC;AAEF;;;;AAIG;AACI,MAAM,0BAA0B,GAAG;AACxC,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,IAAI,EAAE,0BAA0B;AAChC,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,gBAAgB;AAC1B,IAAA,UAAU,EAAE,EAAE;CACf,CAAC;AAWF;;;;AAIG;MACU,eAAe,CAAA;AAiB1B,IAAA,WAAA,CAAY,OAAuB,EAAA;AACjC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,GAAG,0BAA0B;AAC7B,YAAA,GAAG,OAAO;SACX,CAAC;AACF,QAAA,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACxC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;KAC/D;AACF,CAAA;AAED;;;;;;AAMG;AACG,MAAO,WAAY,SAAQ,cAAc,CAAA;AAqD7C;;;AAGG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;KAC/B;IACD,IAAI,IAAI,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;SACxB;KACF;IAED,WACE,CAAA,KAAmB,EACnB,IAAqB,EACrB,MAAA,GAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,EAAU,EAAA;QAEV,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAA,gBAAA,CAAkB,CAAC,CAAC;SAC/D;AACD,QAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AA1DnB;;;AAGG;QACH,IAAQ,CAAA,QAAA,GAAqB,EAAE,CAAC;AAChC;;;AAGG;QACH,IAAK,CAAA,KAAA,GAAkB,EAAE,CAAC;AAC1B;;;AAGG;QACH,IAAU,CAAA,UAAA,GAAuB,EAAE,CAAC;AAMpC;;;AAGG;QACH,IAAiB,CAAA,iBAAA,GAA2B,IAAI,CAAC;AAmC/C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;KAClC;AAED,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,YAAY,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC/C;IAED,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;KAC3B;AAED;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,MAAa,EAAA;QACjC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,SAAS,CAAC;SAClB;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACtB;aAAM;YACL,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,YAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC,OAAO,CAChD,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,CAC7B,CAAC;YACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACnD,YAAA,OAAO,WAAW,CAAC;SACpB;KACF;AAED;;;;AAIG;IACH,sBAAsB,CAAC,cAAc,GAAG,KAAK,EAAA;QAC3C,MAAM,MAAM,GAAwB,EAAE,CAAC;AACvC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;AAIG;IACH,sBAAsB,CAAC,cAAc,GAAG,KAAK,EAAA;QAC3C,MAAM,MAAM,GAAwB,EAAE,CAAC;AACvC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;AAIG;IACH,cAAc,CAAC,cAAc,GAAG,KAAK,EAAA;QACnC,MAAM,MAAM,GAAwB,EAAE,CAAC;AACvC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjC;AACD,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACjC;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;AAIG;IACH,gBAAgB,CAAC,cAAc,GAAG,KAAK,EAAA;QACrC,MAAM,MAAM,GAAkB,EAAE,CAAC;AACjC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;gBACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBACtD,IAAI,SAAS,EAAE;AACb,oBAAA,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO,EAAE;wBACxC,SAAS;qBACV;AACD,oBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACxB;aACF;AACD,YAAA,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,OAAO,EAAE;oBACjD,SAAS;iBACV;gBACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;gBACpD,IAAI,SAAS,EAAE;AACb,oBAAA,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO,EAAE;wBACxC,SAAS;qBACV;AACD,oBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACxB;aACF;SACF;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAa,EAAA;AAChB,QAAA,MAAM,gBAAgB,GAAG;YACvB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SAC3B,CAAC;AACF,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;AACxC,aAAA,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,WAAW,CAAC;YACf,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;;AAEnB,YAAA,QAAQ,EAAE,EAAE;AACb,SAAA,CAAC,CAAC;KACJ;AAED;;;;;AAKG;IACH,OAAO,CAAC,SAAe,EAAE,QAAgB,EAAA;QACvC,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACzE,QAAA,IAAI,UAAiB,CAAC;AACtB,QAAA,IAAI,UAAiB,CAAC;QACtB,QAAQ,SAAS;YACf,KAAK,IAAI,CAAC,IAAI;AACZ,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtD,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACpD;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,GAAG;AACX,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACvD,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;iBACrD;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,KAAK;AACb,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvD,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACtD,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACpD;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,MAAM;AACd,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,gBAAA,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvD,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACvD,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;iBACrD;gBACD,MAAM;SACT;QAED,IAAI,CAAC,WAAW,CAAC;YACf,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACtC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YACpC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;;AAErC,YAAA,QAAQ,EAAE,EAAE;AACb,SAAA,CAAC,CAAC;KACJ;AAED;;;;;;;AAOG;AACH,IAAA,eAAe,CACb,SAAe,EACf,QAAgB,EAChB,MAAc,EACd,MAAc,EAAA;AAEd,QAAA,IAAI,0BAA0B,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAC1D,QAAQ,SAAS;YACf,KAAK,IAAI,CAAC,MAAM;AACd,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACnC,wBAAA,0BAA0B,GAAG,IAAI,CAAC,GAAG,CACnC,0BAA0B,EAC1B,OAAO,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CACxC,CAAC;qBACH;iBACF;AACD,gBAAA,IAAI,QAAQ,GAAG,0BAA0B,EAAE;oBACzC,QAAQ,GAAG,0BAA0B,CAAC;iBACvC;AACD,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACnC,wBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACtC;AAAM,yBAAA,IAAI,OAAO,CAAC,YAAY,GAAG,MAAM,EAAE;wBACxC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;qBACjE;iBACF;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,KAAK;AACb,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACnC,wBAAA,0BAA0B,GAAG,IAAI,CAAC,GAAG,CACnC,0BAA0B,EAC1B,OAAO,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CACtC,CAAC;qBACH;iBACF;AACD,gBAAA,IAAI,QAAQ,GAAG,0BAA0B,EAAE;oBACzC,QAAQ,GAAG,0BAA0B,CAAC;iBACvC;AACD,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACnC,wBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACtC;AAAM,yBAAA,IAAI,OAAO,CAAC,YAAY,GAAG,MAAM,EAAE;wBACxC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACjE;iBACF;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,GAAG;AACX,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACnC,wBAAA,0BAA0B,GAAG,IAAI,CAAC,GAAG,CACnC,0BAA0B,EAC1B,OAAO,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CACxC,CAAC;qBACH;iBACF;AACD,gBAAA,IAAI,QAAQ,GAAG,0BAA0B,EAAE;oBACzC,QAAQ,GAAG,0BAA0B,CAAC;iBACvC;AACD,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACnC,wBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACtC;AAAM,yBAAA,IAAI,OAAO,CAAC,YAAY,GAAG,MAAM,EAAE;wBACxC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;qBACjE;iBACF;gBACD,MAAM;YACR,KAAK,IAAI,CAAC,IAAI;AACZ,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACnC,wBAAA,0BAA0B,GAAG,IAAI,CAAC,GAAG,CACnC,0BAA0B,EAC1B,OAAO,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CACtC,CAAC;qBACH;iBACF;AACD,gBAAA,IAAI,QAAQ,GAAG,0BAA0B,EAAE;oBACzC,QAAQ,GAAG,0BAA0B,CAAC;iBACvC;AACD,gBAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE;AACnC,wBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;qBACtC;AAAM,yBAAA,IAAI,OAAO,CAAC,YAAY,GAAG,MAAM,EAAE;wBACxC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACjE;iBACF;gBACD,MAAM;SACT;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;KACnC;AAED;;;AAGG;IACH,WAAW,GAAA;QACT,MAAM,QAAQ,GAAoD,EAAE,CAAC;AACrE,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;SAC9C;QACD,OAAO;AACL,YAAA,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ;SACT,CAAC;KACH;AAED;;;AAGG;AACH,IAAA,WAAW,CAAC,QAA6B,EAAA;QACvC,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE9B,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,UAAU,GAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;;AAGzE,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,eAAe,EAAE;AACnB,gBAAA,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;aACtC;SACF;;AAGD,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CACP,cAAc,CACZ,IAAI,CAAC,MAAM,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,CACX,CACF,CAAC;SACH;;AAGD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG;AAClB,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/C,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aAC/C,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,KAAK;AACd,gBAAA,IAAI,CAAC,KAAK;AACV,oBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,oBAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,MAAM;AACf,gBAAA,IAAI,CAAC,MAAM;AACX,oBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,oBAAA,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;SAC3B;;AAGD,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,SAAS,CAAC,IAAI,CACZ,cAAc,CACZ,SAAS,CAAC,MAAM,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,CACX,CACF,CAAC;SACH;;AAGD,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AACF,CAAA;AAEK,MAAO,cAAe,SAAQ,iBAA8B,CAAA;AAQhE;;;AAGG;AACH,IAAA,WAAA,CAAY,KAAmB,EAAA;AAC7B,QAAA,KAAK,EAAE,CAAC;AAXV;;;AAGG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,gBAAgB,EAAmB,CAAC;AAQ9C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED;;;;;;;AAOG;AACH,IAAA,GAAG,CAAC,IAA8B,EAAE,MAAa,EAAE,EAAU,EAAA;AAC3D,QAAA,IAAI,QAAyB,CAAC;AAC9B,QAAA,IAAI,IAAI,YAAY,eAAe,EAAE;YACnC,QAAQ,GAAG,IAAI,CAAC;SACjB;aAAM;YACL,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,YAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,gBAAA,MAAM,IAAI,SAAS,CAAC,sBAAsB,IAAI,CAAA,qBAAA,CAAuB,CAAC,CAAC;aACxE;YACD,QAAQ,GAAG,aAAa,CAAC;SAC1B;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC/D,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,YAAY,EAAE,CAAC;;AAEpB,QAAA,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI,EAAE;;AAEjC,YAAA,IAAI,iBAAiB,GACnB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACtD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC7D,gBAAA,IAAI,gBAAgB,GAClB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;gBACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBAChE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CACrB,IAAI,EACJ,CAAC,EACD,CAAC,EACD,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,EACrC,QAAQ,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC;wBACrC,6BAA6B,EAC/B,QAAQ,CAAC,WAAW,CAAC,cAAc,GAAG,CAAC,CAAC;wBACtC,8BAA8B,EAChC,CAAG,EAAA,IAAI,CAAC,EAAE,CAAI,CAAA,EAAA,CAAC,CAAI,CAAA,EAAA,CAAC,CAAE,CAAA,CACvB,CAAC;oBACF,gBAAgB;wBACd,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC;AACtC,4BAAA,6BAA6B;6BAC9B,QAAQ,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;iBACtC;gBACD,iBAAiB;oBACf,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,GAAG,CAAC,CAAC;AACvC,wBAAA,8BAA8B;yBAC/B,QAAQ,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;aACtC;SACF;;QAED,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAC9C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAC/B,IAAI,EACJ;oBACE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,iBAAA,EACD,UAAU,CAAC,SAAS,EACpB,CAAG,EAAA,IAAI,CAAC,EAAE,CAAI,CAAA,EAAA,CAAC,CAAE,CAAA,CAClB,CAAC;AACF,gBAAA,IAAI,UAAU,CAAC,KAAK,EAAE;AACpB,oBAAA,MAAM,kBAAkB,GAAG;AACzB,wBAAA,GAAG,sBAAsB;wBACzB,GAAG,UAAU,CAAC,KAAK;qBACpB,CAAC;AACF,oBAAA,IAAI,WAAkB,CAAC;AACvB,oBAAA,QAAQ,IAAI,CAAC,SAAS;wBACpB,KAAK,IAAI,CAAC,GAAG,CAAC;wBACd,KAAK,IAAI,CAAC,IAAI;AACZ,4BAAA,WAAW,GAAG;gCACZ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;gCAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;6BAC7C,CAAC;4BACF,MAAM;wBACR,KAAK,IAAI,CAAC,MAAM;AACd,4BAAA,WAAW,GAAG;gCACZ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;gCAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;6BAC7C,CAAC;4BACF,MAAM;wBACR,KAAK,IAAI,CAAC,KAAK;AACb,4BAAA,WAAW,GAAG;gCACZ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;gCAC5C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;6BAC7C,CAAC;4BACF,MAAM;AACR,wBAAA;AACE,4BAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;qBAC7B;oBACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACnB,IAAI,EACJ,WAAW,EACX,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,aAAa,EAChC,EAAE,EACF,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,GAAG,CACvB,CAAC;iBACH;aACF;SACF;;AAED,QAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,kBAAkB,GAAG;AACzB,gBAAA,GAAG,sBAAsB;gBACzB,GAAG,QAAQ,CAAC,KAAK;aAClB,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACnB,IAAI,EACJ;gBACE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,kBAAkB,CAAC;AAClD,aAAA,EACD,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,IAAI,CAAC,KAAK;gBACR,aAAa,CAAC,kBAAkB,CAAC;AACjC,gBAAA,cAAc,CAAC,kBAAkB,CAAC,EACpC,IAAI,CAAC,MAAM;gBACT,YAAY,CAAC,kBAAkB,CAAC;gBAChC,eAAe,CAAC,kBAAkB,CAAC,EACrC,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,aAAa,EAChC,EAAE,EACF,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,GAAG,CACvB,CAAC;SACH;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC;KACb;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,IAAI,EAAE;;YAER,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACjD;;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC3C;;YAED,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACrD;;AAED,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACzC;;AAED,YAAA,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAEjB,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;KACF;AACF;;ACtxBD;;;;AAIG;AACI,MAAM,qBAAqB,GAAG;AACnC,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,gBAAgB,EAAE,MAAM;AACxB,IAAA,aAAa,EAAE,QAAQ;CACxB,CAAC;AAEF;;;;;;AAMG;AACG,MAAO,WAAY,SAAQ,cAAc,CAAA;IAgC7C,WACE,CAAA,KAAmB,EACnB,WAAqD,EACrD,MAAa,EACb,SAAe,EACf,EAAU,EAAA;QAEV,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAA,gBAAA,CAAkB,CAAC,CAAC;SAC/D;AACD,QAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AArBnB;;;AAGG;QACH,IAAmB,CAAA,mBAAA,GAAwB,EAAE,CAAC;AAC9C;;;AAGG;QACH,IAAmB,CAAA,mBAAA,GAAwB,EAAE,CAAC;AAa5C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;AAED,IAAA,IAAI,OAAO,GAAA;QACT,QACE,IAAI,CAAC,WAAW;AAChB,aAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAC5D;KACH;IAED,YAAY,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC/C;AAED;;;;AAIG;AACH,IAAA,eAAe,CAAC,UAA6B,EAAA;AAC3C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC3C;AAED;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,UAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC3C;AAED;;;;AAIG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,WAAW,YAAY,WAAW,EAAE;YAC3C,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;AAAM,aAAA,IAAI,IAAI,CAAC,WAAW,YAAY,cAAc,EAAE;AACrD,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;SAC9B;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,gBAAgB,CAAC;KAC5D;AAED;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAa,EAAA;AAChB,QAAA,MAAM,gBAAgB,GAAG;YACvB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SAC3B,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACjD,YAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC3B;AACD,QAAA,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACjD,YAAA,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACzB;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;AAC3C,aAAA,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,MAAa,EAAA;QACtB,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACnD;AACF,CAAA;AAEK,MAAO,cAAe,SAAQ,iBAA8B,CAAA;AAGhE;;;AAGG;AACH,IAAA,WAAA,CAAY,KAAmB,EAAA;AAC7B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED;;;AAGG;AACH,IAAA,GAAG,CACD,WAAqD,EACrD,MAAa,EACb,SAAe,EACf,EAAU,EAAA;AAEV,QAAA,MAAM,IAAI,GAAG,IAAI,WAAW,CAC1B,IAAI,CAAC,KAAK,EACV,WAAW,EACX,MAAM,EACN,SAAS,EACT,EAAE,CACH,CAAC;AACF,QAAA,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,YAAY,EAAE,CAAC;;AAEpB,QAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,YAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,IAAI,EAAE;;YAER,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC/D;YACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,gBAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC/D;;AAED,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACzC;;AAED,YAAA,IACE,IAAI,CAAC,WAAW,YAAY,WAAW;AACvC,gBAAA,IAAI,CAAC,WAAW,YAAY,cAAc,EAC1C;gBACA,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aAC9C;;AAED,YAAA,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAEjB,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;KACF;AACF;;ACjND;;;;AAIG;AACI,MAAM,sBAAsB,GAAG;AACpC,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,UAAU,EAAE,gCAAgC;AAC5C,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,aAAa,EAAE,SAAS;IACxB,eAAe,EAAE,eAAe,CAAC,MAAM;IACvC,aAAa,EAAE,aAAa,CAAC,MAAM;AACnC,IAAA,GAAG,EAAE,KAAK;CACX,CAAC;AAEF;;;;;;AAMG;AACG,MAAO,YAAa,SAAQ,cAAc,CAAA;AAyD9C;;;AAGG;AACH,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IACD,IAAI,IAAI,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACvB,YAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;SAC1B;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAChD;KACF;IAiBD,WACE,CAAA,KAAmB,EACnB,WAAmE,EACnE,MAAa,EACb,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,UAAyB,EACzB,KAAa,EACb,aAAqB,EACrB,eAAgC,EAChC,aAA4B,EAC5B,IAAY,EACZ,QAAiB,EACjB,GAAY,EAAA;AAEZ,QAAA,MAAM,EAAE,GAAG,CAAA,EAAG,WAAW,EAAE,EAAE,QAAQ,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;AACtC,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;AACD,QAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AApCnB;;;AAGG;QACH,IAAa,CAAA,aAAA,GAA2B,IAAI,CAAC;AAiC3C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AACvC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;KAChB;IAEQ,MAAM,GAAA;AAGb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;AACtB,cAAE,gBAAgB,EAAE;cAClB,MAAM,CAAC,CAAiB,cAAA,EAAA,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC;KACxC;AAED,IAAA,IAAI,OAAO,GAAA;QACT,QACE,IAAI,CAAC,WAAW;AAChB,aAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAC5D;KACH;IAED,YAAY,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAChD;AAED;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAa,EAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,gBAAgB,CAAC;KAC5D;AACF,CAAA;AAEK,MAAO,eAAgB,SAAQ,iBAA+B,CAAA;AAGlE;;;AAGG;AACH,IAAA,WAAA,CAAY,KAAmB,EAAA;AAC7B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED;;;AAGG;IACH,GAAG,CACD,WAAmE,EACnE,MAAa,EACb,QAAgB,EAChB,UAAyB,EACzB,KAAa,EACb,aAAqB,EACrB,KAAa,EACb,MAAc,EACd,eAAgC,EAChC,aAA4B,EAC5B,IAAY,EACZ,QAAiB,EACjB,GAAY,EAAA;AAEZ,QAAA,MAAM,KAAK,GAAG,IAAI,YAAY,CAC5B,IAAI,CAAC,KAAK,EACV,WAAW,EACX,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,KAAK,EACL,aAAa,EACb,eAAe,EACf,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,GAAG,CACJ,CAAC;AACF,QAAA,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjB,KAAK,CAAC,YAAY,EAAE,CAAC;;AAErB,QAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,YAAA,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;SAC3B;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,KAAK,EAAE;;AAET,YAAA,IACE,KAAK,CAAC,WAAW,YAAY,WAAW;gBACxC,KAAK,CAAC,WAAW,YAAY,cAAc;AAC3C,gBAAA,KAAK,CAAC,WAAW,YAAY,WAAW,EACxC;gBACA,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,KAAK,KAAK,EAAE;AACrC,oBAAA,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;iBACrC;aACF;;AAED,YAAA,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAEjB,KAAK,CAAC,YAAY,EAAE,CAAC;SACtB;KACF;AACF,CAAA;AAEM,MAAM,eAAe,GAAG,CAAC,MAA2B,KAAY;AACrE,IAAA,IAAI,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE;QAC3D,OAAO,sBAAsB,CAAC,MAAM,CAAC;KACtC;AAAM,SAAA,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC;KACtB;SAAM;QACL,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,sBAAsB,CAAC,MAAM,CAAC;SACtC;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM;AACL,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;KACF;AACH,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAAC,MAA2B,KAAY;AACnE,IAAA,IAAI,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE;QAC3D,OAAO,sBAAsB,CAAC,MAAM,CAAC;KACtC;AAAM,SAAA,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC;KACtB;SAAM;QACL,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,sBAAsB,CAAC,MAAM,CAAC;SACtC;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM;AACL,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;KACF;AACH,CAAC,CAAC;AAEK,MAAM,cAAc,GAAG,CAAC,MAA2B,KAAY;AACpE,IAAA,IAAI,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE;QAC3D,OAAO,sBAAsB,CAAC,MAAM,CAAC;KACtC;AAAM,SAAA,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC;KACtB;SAAM;QACL,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,sBAAsB,CAAC,MAAM,CAAC;SACtC;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM;AACL,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;KACF;AACH,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,MAA2B,KAAY;AAClE,IAAA,IAAI,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE;QAC3D,OAAO,sBAAsB,CAAC,MAAM,CAAC;KACtC;AAAM,SAAA,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC;KACtB;SAAM;QACL,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,sBAAsB,CAAC,MAAM,CAAC;SACtC;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;aAAM;AACL,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB;KACF;AACH,CAAC,CAAC;AAEK,MAAM,gBAAgB,GAAG,CAAC,MAA2B,KAAY;AACtE,IAAA,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE;QAC7D,OAAO,sBAAsB,CAAC,OAAO,CAAC;KACvC;AAAM,SAAA,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;SAAM;QACL,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO,sBAAsB,CAAC,OAAO,CAAC;SACvC;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM;AACL,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;AACH,CAAC,CAAC;AAEK,MAAM,cAAc,GAAG,CAAC,MAA2B,KAAY;AACpE,IAAA,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE;QAC7D,OAAO,sBAAsB,CAAC,OAAO,CAAC;KACvC;AAAM,SAAA,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;SAAM;QACL,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO,sBAAsB,CAAC,OAAO,CAAC;SACvC;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM;AACL,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;AACH,CAAC,CAAC;AAEK,MAAM,eAAe,GAAG,CAAC,MAA2B,KAAY;AACrE,IAAA,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE;QAC7D,OAAO,sBAAsB,CAAC,OAAO,CAAC;KACvC;AAAM,SAAA,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;SAAM;QACL,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO,sBAAsB,CAAC,OAAO,CAAC;SACvC;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM;AACL,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;AACH,CAAC,CAAC;AAEK,MAAM,aAAa,GAAG,CAAC,MAA2B,KAAY;AACnE,IAAA,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE;QAC7D,OAAO,sBAAsB,CAAC,OAAO,CAAC;KACvC;AAAM,SAAA,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC7C,OAAO,MAAM,CAAC,OAAO,CAAC;KACvB;SAAM;QACL,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO,sBAAsB,CAAC,OAAO,CAAC;SACvC;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM;AACL,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;AACH,CAAC;;AChaD;;;AAGG;MACU,YAAY,CAAA;IACvB,MAAM,CAAC,KAAmB,EAAE,IAAe,EAAA;;QAEzC,KAAK,CAAC,KAAK,EAAE,CAAC;AAEd,QAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACX,YAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;SACpB;AACD,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC9B;QACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;SAC1C;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrC;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAClD,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;SAC9D;AAED,QAAA,OAAO,KAAK,CAAC;KACd;IAED,UAAU,CAAC,KAAmB,EAAE,IAAc,EAAA;AAC5C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1E,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzB,YAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,YAAA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;;AAEd,gBAAA,IAAI,WAAW,CAAC,KAAK,EAAE;AACrB,oBAAA,MAAM,kBAAkB,GAAG;AACzB,wBAAA,GAAG,sBAAsB;wBACzB,GAAG,WAAW,CAAC,KAAK;qBACrB,CAAC;oBACF,MAAM,QAAQ,GAAG,IAAI,YAAY,CAC/B,KAAK,EACL,OAAO,EACP;wBACE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC;wBACrD,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,kBAAkB,CAAC;qBACrD,EACD,OAAO,CAAC,KAAK;wBACX,aAAa,CAAC,kBAAkB,CAAC;AACjC,wBAAA,cAAc,CAAC,kBAAkB,CAAC,EACpC,OAAO,CAAC,MAAM;wBACZ,YAAY,CAAC,kBAAkB,CAAC;AAChC,wBAAA,eAAe,CAAC,kBAAkB,CAAC,EACrC,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,aAAa,EAChC,EAAE,EACF,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,GAAG,CACvB,CAAC;AACF,oBAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,oBAAA,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,oBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC;iBACzB;aACF;YACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;AACzC,gBAAA,MAAM,UAAU,GAAG,IAAI,cAAc,CACnC,KAAK,EACL,OAAO,EACP,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,EAAE,CACX,CAAC;AACF,gBAAA,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACnC,gBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC/B,gBAAA,IAAI,OAAO,CAAC,KAAK,EAAE;;oBAEjB,IACE,WAAW,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GACvD,OAAO,CAAC,YAAY,CACrB,EAAE,KAAK,EACR;AACA,wBAAA,MAAM,kBAAkB,GAAG;AACzB,4BAAA,GAAG,sBAAsB;AACzB,4BAAA,GAAG,WAAW,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAC1D,OAAO,CAAC,YAAY,CACrB,EAAE,KAAK;yBACT,CAAC;wBACF,MAAM,QAAQ,GAAG,IAAI,YAAY,CAC/B,KAAK,EACL,UAAU,EACV;4BACE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC;4BACxD,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,kBAAkB,CAAC;yBACxD,EACD,UAAU,CAAC,KAAK;4BACd,aAAa,CAAC,kBAAkB,CAAC;AACjC,4BAAA,cAAc,CAAC,kBAAkB,CAAC,EACpC,UAAU,CAAC,MAAM;4BACf,YAAY,CAAC,kBAAkB,CAAC;AAChC,4BAAA,eAAe,CAAC,kBAAkB,CAAC,EACrC,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,aAAa,EAChC,EAAE,EACF,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,GAAG,CACvB,CAAC;AACF,wBAAA,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;AAC9B,wBAAA,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;AAC5B,wBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC;qBACzB;iBACF;gBACD,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE;oBACtC,MAAM,OAAO,GAAG,IAAI,WAAW,CAC7B,KAAK,EACL,UAAU,EACV,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,EAAE,CACR,CAAC;AACF,oBAAA,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzB,oBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;;AAEd,wBAAA,IACE,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;4BACtC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,EACpC;AACA,4BAAA,MAAM,kBAAkB,GAAG;AACzB,gCAAA,GAAG,sBAAsB;AACzB,gCAAA,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK;6BACxC,CAAC;AACF,4BAAA,IAAI,WAAkB,CAAC;AACvB,4BAAA,QAAQ,OAAO,CAAC,SAAS;gCACvB,KAAK,IAAI,CAAC,GAAG,CAAC;gCACd,KAAK,IAAI,CAAC,IAAI;AACZ,oCAAA,WAAW,GAAG;wCACZ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;wCAC/C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;qCAChD,CAAC;oCACF,MAAM;gCACR,KAAK,IAAI,CAAC,MAAM;AACd,oCAAA,WAAW,GAAG;wCACZ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;wCAC/C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;qCAChD,CAAC;oCACF,MAAM;gCACR,KAAK,IAAI,CAAC,KAAK;AACb,oCAAA,WAAW,GAAG;wCACZ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;wCAC/C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;qCAChD,CAAC;oCACF,MAAM;AACR,gCAAA;AACE,oCAAA,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;6BAChC;4BACD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAC/B,KAAK,EACL,OAAO,EACP,WAAW,EACX,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,aAAa,EAChC,EAAE,EACF,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,GAAG,CACvB,CAAC;AACF,4BAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,4BAAA,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,4BAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC;yBACzB;AACD,wBAAA,EAAE,WAAW,CAAC;qBACf;AACD,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;wBACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;wBAClD,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;AACpE,wBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;qBAClE;oBACD,OAAO,CAAC,YAAY,EAAE,CAAC;iBACxB;AACD,gBAAA,IAAI,OAAO,CAAC,UAAU,EAAE;oBACtB,UAAU,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC;AACxD,oBAAA,UAAU,CAAC,oBAAoB;AAC7B,wBAAA,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC;AAC1C,oBAAA,IAAI,CAAC,qBAAqB,CACxB,UAAU,CAAC,KAAK,EAChB,OAAO,CAAC,UAAU,CAAC,KAAK,CACzB,CAAC;iBACH;gBACD,UAAU,CAAC,YAAY,EAAE,CAAC;aAC3B;YACD,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE;gBACnC,MAAM,OAAO,GAAG,IAAI,WAAW,CAC7B,KAAK,EACL,OAAO,EACP,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,EAAE,CACR,CAAC;AACF,gBAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACzB,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;;AAEd,oBAAA,IACE,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;wBACtC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,EACpC;AACA,wBAAA,MAAM,kBAAkB,GAAG;AACzB,4BAAA,GAAG,sBAAsB;AACzB,4BAAA,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK;yBACxC,CAAC;AACF,wBAAA,IAAI,WAAkB,CAAC;AACvB,wBAAA,QAAQ,OAAO,CAAC,SAAS;4BACvB,KAAK,IAAI,CAAC,GAAG,CAAC;4BACd,KAAK,IAAI,CAAC,IAAI;AACZ,gCAAA,WAAW,GAAG;oCACZ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;oCAC/C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;iCAChD,CAAC;gCACF,MAAM;4BACR,KAAK,IAAI,CAAC,MAAM;AACd,gCAAA,WAAW,GAAG;oCACZ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;oCAC/C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;iCAChD,CAAC;gCACF,MAAM;4BACR,KAAK,IAAI,CAAC,KAAK;AACb,gCAAA,WAAW,GAAG;oCACZ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;oCAC/C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ;iCAChD,CAAC;gCACF,MAAM;AACR,4BAAA;AACE,gCAAA,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;yBAChC;wBACD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAC/B,KAAK,EACL,OAAO,EACP,WAAW,EACX,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,aAAa,EAChC,EAAE,EACF,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,GAAG,CACvB,CAAC;AACF,wBAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,wBAAA,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;AACzB,wBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC;qBACzB;AACD,oBAAA,EAAE,WAAW,CAAC;iBACf;AACD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;oBAClD,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;AACpE,oBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBAClE;gBACD,OAAO,CAAC,YAAY,EAAE,CAAC;aACxB;AACD,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvC;AACD,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAClD,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;gBACpE,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;AAC9D,gBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;aAChE;YACD,OAAO,CAAC,YAAY,EAAE,CAAC;SACxB;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,gBAAgB,CACd,KAAmB,EACnB,UAA0B,EAAA;AAE1B,QAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,iBAAiB,EAAE;YACrB,MAAM,aAAa,GAAG,IAAI,iBAAiB,CACzC,KAAK,EACL,iBAAiB,EACjB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,SAAS,EAChE,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,EAC5D,UAAU,CAAC,EAAE,CACd,CAAC;AACF,YAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACrC,YAAA,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;AACjD,YAAA,aAAa,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;AACnD,YAAA,aAAa,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;AAC7C,YAAA,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,UAAU,CAAC,IAAI,EAAE;gBACnB,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACnD;AACD,YAAA,IAAI,UAAU,CAAC,UAAU,EAAE;gBACzB,aAAa,CAAC,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC;AAC9D,gBAAA,aAAa,CAAC,oBAAoB;AAChC,oBAAA,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC;gBAC7C,aAAa,CAAC,QAAQ,CAAC,aAAa,CAClC,UAAU,CAAC,UAAU,CAAC,cAAc,CACrC,CAAC;aACH;YACD,aAAa,CAAC,YAAY,EAAE,CAAC;SAC9B;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,qBAAqB,CACnB,QAAuB,EACvB,eAIC,EAAA;AAED,QAAA,IAAI,QAAQ,IAAI,eAAe,EAAE;AAC/B,YAAA,QAAQ,CAAC,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;AACnD,YAAA,QAAQ,CAAC,oBAAoB,GAAG,eAAe,CAAC,oBAAoB,CAAC;AACrE,YAAA,QAAQ,CAAC,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC;SACxD;KACF;AACF;;ACtTD;;;;AAIG;MACU,mBAAmB,CAAA;IAC9B,WACW,CAAA,MAAc,EACd,EAAU,EACV,MAAc,EACd,MAAa,EACb,KAAc,EACd,MAAmC,EAAA;QALnC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAQ;QACV,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAO;QACb,IAAK,CAAA,KAAA,GAAL,KAAK,CAAS;QACd,IAAM,CAAA,MAAA,GAAN,MAAM,CAA6B;KAC1C;IAEJ,EAAE,GAAA;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5E,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CACrB,eAAe,CAAC;AACd,gBAAA,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;gBAC5B,GAAG,IAAI,CAAC,MAAM;AACf,aAAA,CAAC,CACH,CAAC;SACH;AACD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;SACpC;KACF;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;KACH;AAED,IAAA,OAAO,WAAW,CAChB,MAAc,EACd,UAA6B,EAAA;QAE7B,OAAO,IAAI,mBAAmB,CAC5B,MAAM,EACN,UAAU,CAAC,EAAE,EACb,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,MAAM,CAClB,CAAC;KACH;AACF,CAAA;AAYD;;;;AAIG;MACU,uBAAuB,CAAA;AAClC,IAAA,WAAA,CACW,MAAc,EACd,MAAc,EACd,EAAuB,EACvB,SAA0B,EAAA;QAH1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;QACvB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;KACjC;IAEJ,EAAE,GAAA;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5D,QAAA,IAAI,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;AACjE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AAE1B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC/C;AACD,YAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,gBAAA,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBAClD;aACF;AACD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC;SACzC;KACF;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;KACH;AAED,IAAA,OAAO,WAAW,CAChB,MAAc,EACd,UAAiC,EAAA;AAEjC,QAAA,OAAO,IAAI,uBAAuB,CAChC,MAAM,EACN,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,EAAE,EACb,UAAU,CAAC,SAAS,CACrB,CAAC;KACH;AACF,CAAA;AAaD;;;;AAIG;MACU,yBAAyB,CAAA;IACpC,WACW,CAAA,MAAc,EACd,EAAU,EACV,MAAc,EACd,OAAe,EACf,KAAa,EAAA;QAJb,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAQ;QACV,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QACf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;KACpB;IAEJ,EAAE,GAAA;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC9D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1D,QAAA,IAAI,KAAK,IAAI,GAAG,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;SACrE;KACF;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;KACH;AAED,IAAA,OAAO,WAAW,CAChB,MAAc,EACd,UAAmC,EAAA;QAEnC,OAAO,IAAI,yBAAyB,CAClC,MAAM,EACN,UAAU,CAAC,EAAE,EACb,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,KAAK,CACjB,CAAC;KACH;AACF,CAAA;AAYD;;;;AAIG;MACU,qBAAqB,CAAA;AAChC,IAAA,WAAA,CACW,MAAc,EACd,OAAe,EACf,EAAU,EACV,SAA0B,EAAA;QAH1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QACf,IAAE,CAAA,EAAA,GAAF,EAAE,CAAQ;QACV,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;KACjC;IAEJ,EAAE,GAAA;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC/D,QAAA,IAAI,KAAK,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE;AAC/D,YAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;AACrB,YAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;SACtC;KACF;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;KACH;AAED,IAAA,OAAO,WAAW,CAChB,MAAc,EACd,UAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,qBAAqB,CAC9B,MAAM,EACN,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,EAAE,EACb,UAAU,CAAC,SAAS,CACrB,CAAC;KACH;AACF,CAAA;AAYD;;;;AAIG;MACU,wBAAwB,CAAA;AACnC,IAAA,WAAA,CACW,MAAc,EACd,EAAsB,EACtB,EAA8B,EAC9B,SAA0B,EAAA;QAH1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAoB;QACtB,IAAE,CAAA,EAAA,GAAF,EAAE,CAA4B;QAC9B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;KACjC;IAEJ,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;SACnC;aAAM;AACL,YAAA,OAAO,CACL,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AAC1C,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAC/C,QAAQ,CAAC;SACb;KACF;IAED,EAAE,GAAA;AACA,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KACjE;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;KACH;AAED,IAAA,OAAO,WAAW,CAChB,MAAc,EACd,UAAkC,EAAA;AAElC,QAAA,OAAO,IAAI,wBAAwB,CACjC,MAAM,EACN,UAAU,CAAC,EAAE,EACb,UAAU,CAAC,EAAE,EACb,UAAU,CAAC,SAAS,CACrB,CAAC;KACH;AACF,CAAA;AAgBD;;;;;;;;;;AAUG;MACU,0BAA0B,CAAA;AACrC,IAAA,WAAA,CACW,MAAc,EACd,OAAiB,EACjB,UAAoB,EACpB,OAAiB,EACjB,aAAuB,EACvB,QAAkB,EAClB,WAAoB,EACpB,SAA0B,EAAA;QAP1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAO,CAAA,OAAA,GAAP,OAAO,CAAU;QACjB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAU;QACpB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAU;QACjB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAU;QACvB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAS;QACpB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;KACjC;AAEI,IAAA,KAAK,CAAC,GAA+B,EAAA;AAC3C,QAAA,IAAI,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,oBAAoB,CAAC,EAAE;AAClE,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACnC,YAAA,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC;SAC3C;KACF;IAED,EAAE,GAAA;AACA,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;SACvD;AACD,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;SAC7D;AACD,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;SACvD;AACD,QAAA,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;AAC7C,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;SACnE;AACD,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;SACzD;;QAED,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAEjD,QAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;KACtC;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;KACH;AAED,IAAA,OAAO,WAAW,CAChB,MAAc,EACd,UAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI,0BAA0B,CACnC,MAAM,EACN,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,QAAQ,EACnB,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,SAAS,CACrB,CAAC;KACH;AACF,CAAA;AAWD;;;;;AAKG;MACU,iBAAiB,CAAA;AAC5B,IAAA,WAAA,CACW,MAAc,EACd,KAAiB,EACjB,WAA6B,EAAA;QAF7B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QACjB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAkB;KACpC;IAEJ,EAAE,GAAA;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;AACpC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC9C;AACD,QAAA,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;YACzC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;SAC1D;KACF;IAED,SAAS,GAAA;QACP,OAAO;AACL,YAAA,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;KACH;AAED,IAAA,OAAO,WAAW,CAChB,MAAc,EACd,UAA2B,EAAA;AAE3B,QAAA,OAAO,IAAI,iBAAiB,CAC1B,MAAM,EACN,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,WAAW,CACvB,CAAC;KACH;AACF;;ACxeD;;;AAGG;MACU,WAAW,CAAA;IAuBtB,WAAY,CAAA,MAAc,EAAE,OAAe,EAAA;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAChB;AAED;;;AAGG;AACH,IAAA,GAAG,CAAC,MAAqB,EAAA;QACvB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACpC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SAClD;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3B;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,EAAE,IAAI,CAAC,KAAK,CAAC;SACd;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KACpC;AAED;;;AAGG;IACH,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;YAClB,EAAE,IAAI,CAAC,KAAK,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;SACjC;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KACpC;AAED;;;AAGG;IACH,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,EAAE,IAAI,CAAC,KAAK,CAAC;SACd;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KACpC;AACF,CAAA;AAyBD;;;;AAIG;IACS,eAsEX;AAtED,CAAA,UAAY,cAAc,EAAA;AACxB;;;;AAIG;AACH,IAAA,cAAA,CAAA,eAAA,CAAA,GAAA,gBAAgC,CAAA;AAChC;;;;AAIG;AACH,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACpB;;;AAGG;AACH,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB;;;AAGG;AACH,IAAA,cAAA,CAAA,aAAA,CAAA,GAAA,cAA4B,CAAA;AAC5B;;;;AAIG;AACH,IAAA,cAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB;;;;AAIG;AACH,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACtB;;;;AAIG;AACH,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf;;;;AAIG;AACH,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB;;;;AAIG;AACH,IAAA,cAAA,CAAA,aAAA,CAAA,GAAA,cAA4B,CAAA;AAC5B;;;;AAIG;AACH,IAAA,cAAA,CAAA,gBAAA,CAAA,GAAA,iBAAkC,CAAA;AAClC;;;;AAIG;AACH,IAAA,cAAA,CAAA,cAAA,CAAA,GAAA,eAA8B,CAAA;AAC9B;;;AAGG;AACH,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACf,CAAC,EAtEW,cAAc,KAAd,cAAc,GAsEzB,EAAA,CAAA,CAAA,CAAA;AAED;;;;AAIG;MACU,aAAa,CAAA;IAQxB,WACE,CAAA,MAAc,EACd,IAAqB,EACrB,MAAa,EACb,KAAc,EACd,MAAmC,EAAA;AAEnC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;KAC9C;IAED,EAAE,GAAA;AACA,QAAA,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAC1C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,CAAC,EAAE,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CACZ,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;AACF,QAAA,MAAM,YAAY,GAAG,IAAI,0BAA0B,CACjD,IAAI,CAAC,MAAM,EACX,CAAC,IAAI,CAAC,EAAE,CAAC,EACT,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;AACF,QAAA,MAAM,YAAY,GAAG,IAAI,0BAA0B,CACjD,IAAI,CAAC,MAAM,EACX,CAAC,IAAI,CAAC,EAAE,CAAC,EACT,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,KAAK,EACL,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;AACF,CAAA;AAED;;;;AAIG;MACU,iBAAiB,CAAA;IAU5B,WACE,CAAA,MAAc,EACd,MAGiC,EACjC,MAAc,EACd,IAAyB,EACzB,EAAuB,EAAA;AAEvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KACd;IAED,EAAE,GAAA;QACA,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAC9C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;AACF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAC9C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;SAC1D;KACF;IAED,IAAI,GAAA;AACF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAC9C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;SAC1D;KACF;AACF,CAAA;AAED;;;;AAIG;MACU,mBAAmB,CAAA;AAO9B,IAAA,WAAA,CACE,MAAc,EACd,IAA2B,EAC3B,OAAe,EACf,KAAa,EAAA;AAEb,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;KAC9C;IAED,EAAE,GAAA;QACA,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAChD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,CAAC,EAAE,EACZ,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,KAAK,CACX,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;AACF,QAAA,MAAM,YAAY,GAAG,IAAI,0BAA0B,CACjD,IAAI,CAAC,MAAM,EACX,EAAE,EACF,EAAE,EACF,EAAE,EACF,CAAC,IAAI,CAAC,EAAE,CAAC,EACT,EAAE,EACF,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;AACF,QAAA,MAAM,YAAY,GAAG,IAAI,0BAA0B,CACjD,IAAI,CAAC,MAAM,EACX,EAAE,EACF,EAAE,EACF,EAAE,EACF,CAAC,IAAI,CAAC,EAAE,CAAC,EACT,EAAE,EACF,KAAK,EACL,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;AACF,CAAA;AAED;;;;AAIG;MACU,eAAe,CAAA;AAM1B,IAAA,WAAA,CAAY,MAAc,EAAE,OAAe,EAAE,IAAY,EAAE,EAAU,EAAA;AACnE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KACd;IAED,EAAE,GAAA;QACA,MAAM,YAAY,GAAG,IAAI,qBAAqB,CAC5C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;YACrB,MAAM,YAAY,GAAG,IAAI,qBAAqB,CAC5C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;SAC1D;KACF;IAED,IAAI,GAAA;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACvB,MAAM,YAAY,GAAG,IAAI,qBAAqB,CAC5C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;SAC1D;KACF;AACF,CAAA;AAED;;;;AAIG;MACU,kBAAkB,CAAA;AAM7B,IAAA,WAAA,CACE,MAAc,EACd,EAAsB,EACtB,IAAgC,EAChC,EAA8B,EAAA;AAE9B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KACd;IAED,EAAE,GAAA;QACA,MAAM,YAAY,GAAG,IAAI,wBAAwB,CAC/C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;QACF,MAAM,YAAY,GAAG,IAAI,wBAAwB,CAC/C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;SAC1D;KACF;IAED,IAAI,GAAA;QACF,MAAM,YAAY,GAAG,IAAI,wBAAwB,CAC/C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;SAC1D;KACF;AACF,CAAA;AAED;;;;;;;;;;AAUG;MACU,YAAY,CAAA;IAQvB,WACE,CAAA,MAAc,EACd,OAAiB,EACjB,UAAoB,EACpB,OAAiB,EACjB,aAAuB,EACvB,QAAkB,EAAA;AAElB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IAED,EAAE,GAAA;AACA,QAAA,MAAM,YAAY,GAAG,IAAI,0BAA0B,CACjD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,QAAQ,EACb,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;AACF,QAAA,MAAM,YAAY,GAAG,IAAI,0BAA0B,CACjD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,QAAQ,EACb,KAAK,EACL,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;QACF,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;AACF,CAAA;AAED;;;;AAIG;MACU,WAAW,CAAA;AAMtB,IAAA,WAAA,CACE,MAAc,EACd,KAAiB,EACjB,WAA6B,EAC7B,MAAc,EAAA;AAEd,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;IAED,EAAE,GAAA;QACA,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACvE,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;gBACjC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC/B;AACD,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;gBACjC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC/B;SACF;AACD,QAAA,MAAM,UAAU,GACd,IAAI,CAAC,MAAM,KAAK,SAAS;cACrB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;cAC9D,SAAS,CAAC;;QAEhB,MAAM,SAAS,GAA8B,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAe,EAAE,CAAC;QAChC,MAAM,cAAc,GAAqB,EAAE,CAAC;AAC5C,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AACrD,YAAA,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;AACjC,YAAA,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;AACtC,YAAA,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;YACvB,IAAI,UAAU,EAAE;gBACd,OAAO,CAAC,MAAM,GAAG;oBACf,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;oBACjC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;iBAClC,CAAC;aACH;AACD,YAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvB,YAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;AACpB,gBAAA,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE;AACzC,oBAAA,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;oBACnC,IAAI,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACnC,wBAAA,UAAU,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;qBAC3D;yBAAM;wBACL,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;qBACpD;AACD,oBAAA,SAAS,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC;oBACxC,IAAI,UAAU,EAAE;wBACd,UAAU,CAAC,MAAM,GAAG;4BAClB,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;4BACpC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;yBACrC,CAAC;qBACH;AACD,oBAAA,IAAI,UAAU,CAAC,KAAK,EAAE;AACpB,wBAAA,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE;AACtC,4BAAA,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;4BAC7B,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAChC,gCAAA,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;6BACrD;iCAAM;gCACL,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;6BACjD;AACD,4BAAA,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;4BAClC,IAAI,UAAU,EAAE;gCACd,OAAO,CAAC,MAAM,GAAG;oCACf,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;oCACjC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;iCAClC,CAAC;6BACH;yBACF;qBACF;iBACF;aACF;AACD,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,gBAAA,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE;AACnC,oBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;oBAC7B,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAChC,wBAAA,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;qBACrD;yBAAM;wBACL,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;qBACjD;AACD,oBAAA,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;oBAClC,IAAI,UAAU,EAAE;wBACd,OAAO,CAAC,MAAM,GAAG;4BACf,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;4BACjC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;yBAClC,CAAC;qBACH;iBACF;aACF;SACF;AACD,QAAA,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;YACzC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC3D,YAAA,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC;AAC3C,YAAA,MAAM,aAAa,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;AAClD,YAAA,aAAa,CAAC,EAAE,GAAG,eAAe,CAAC;;AAEnC,YAAA,aAAa,CAAC,KAAK;gBACjB,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC;AACxD,YAAA,aAAa,CAAC,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC;YACtE,IAAI,UAAU,EAAE;AACd,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACpD,oBAAA,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;AACxB,wBAAA,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAC1C,wBAAA,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;qBAC3C,CAAC;iBACH;aACF;AACD,YAAA,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACpC;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,iBAAiB,CACxC,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,cAAc,CACf,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;QACF,MAAM,YAAY,GAAG,IAAI,0BAA0B,CACjD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAC3B,EAAE,EACF,EAAE,EACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EACjC,EAAE,EACF,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;IAED,IAAI,GAAA;QACF,MAAM,YAAY,GAAG,IAAI,0BAA0B,CACjD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAC3B,EAAE,EACF,EAAE,EACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EACjC,EAAE,EACF,KAAK,EACL,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;KAC1D;AACF;;ACtuBD;;;AAGG;MACU,IAAI,CAAA;AAAjB,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,IAAI,GAAwB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C,IAAO,CAAA,OAAA,GAAG,CAAC,CAAC;QACZ,IAAO,CAAA,OAAA,GAAG,CAAC,CAAC;KA8IrB;AA5IC;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;KACtB;AAED;;AAEG;IACH,IAAI,GAAA;QACF,OAAO,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;KACxC;AAED;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;KACtB;AAED;;AAEG;IACH,IAAI,GAAA;QACF,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;KACzC;AAED;;AAEG;IACH,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;KAC5B;AAED;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;KACzB;AAED;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;SAC7B;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;KACjC;AAED;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAA,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACrB;KACF;AAED;;AAEG;IACH,SAAS,GAAA;QACP,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC5C,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxB;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;KACjC;AAED;;AAEG;IACH,YAAY,GAAA;QACV,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AAC5C,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxB;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACxB;AAED;;AAEG;AACH,IAAA,GAAG,CAAC,MAAa,EAAA;AACf,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;SACtE;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAED;;AAEG;IACH,GAAG,CAAC,MAAa,EAAE,KAAoB,EAAA;QACrC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;AACD,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;YAChC,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;AACD,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;YAChD,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;KACvE;AAED;;AAEG;AACH,IAAA,yBAAyB,CAAC,MAAa,EAAA;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AAClC,YAAA,OAAO,MAAM,CAAC;SACf;AACD,QAAA,MAAM,WAAW,GAAU,CAAC,GAAG,MAAM,CAAC,CAAC;;QAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,EAAE,CAAC,EAAE;AACrB,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,YAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,YAAA,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;YAC1E,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;AAClE,gBAAA,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE;AACvC,oBAAA,OAAO,WAAW,CAAC;iBACpB;aACF;YACD,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE;AAClE,gBAAA,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE;AACvC,oBAAA,OAAO,WAAW,CAAC;iBACpB;aACF;SACF;KACF;AACF;;AChJD;;;AAGG;MACU,eAAe,CAAA;AAC1B,IAAA,KAAK,CAAC,KAAmB,EAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC;SACd;;AAID,QAAA,MAAM,eAAe,GAAG,IAAI,IAAI,EAAe,CAAC;QAChD,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AAE5C,QAAA,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,WAAW,CACT,iBAAiB,CAAC,CAAC,CAAC,EACpB,eAAe,EACf,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,iBAAiB,CAClB,CAAC;SACH;;QAID,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;AAElD,QAAA,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;AACrE,YAAA,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;AACrE,gBAAA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC;AACR,wBAAA,CAAC,IAAI,YAAY,GAAG,OAAO,CAAC;AAC5B,wBAAA,CAAC,IAAI,aAAa,GAAG,OAAO,CAAC;AAC9B,qBAAA,CAAC,CAAC;iBACJ;aACF;SACF;AAED,QAAA,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC;KACd;AACF,CAAA;AAED,MAAM,WAAW,GAAG,CAClB,IAAiB,EACjB,eAAkC,EAClC,MAAa,EACb,iBAAgC,KACxB;IACR,MAAM,eAAe,GAAG,eAAe,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC1E,IAAA,eAAe,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC3C,IAAA,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACxC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC/C,QAAA,IAAI,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACzC,WAAW,CACT,SAAS,EACT,eAAe,EACf,eAAe,EACf,iBAAiB,CAClB,CAAC;SACH;KACF;AACH,CAAC;;ACpED;;;AAGG;MACU,sBAAsB,CAAA;AACjC,IAAA,KAAK,CAAC,KAAmB,EAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC;SACd;;AAID,QAAA,MAAM,eAAe,GAAG,IAAI,IAAI,EAAe,CAAC;QAChD,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,eAAe,GAA6B,EAAE,CAAC;AACrD,QAAA,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAEvC,QAAA,IAAI,gBAAgB,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvC,QAAA,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,MAAM,aAAa,GAAkB,EAAE,CAAC;AACxC,YAAA,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;AAC9C,gBAAA,eAAe,CAAC,GAAG,CACjB,eAAe,CAAC,yBAAyB,CACvC,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC,CACpC,EACD,eAAe,CAChB,CAAC;AACF,gBAAA,cAAc,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;AACnD,gBAAA,MAAM,uBAAuB,GAAG,eAAe,CAAC,gBAAgB,EAAE,CAAC;AACnE,gBAAA,KAAK,MAAM,YAAY,IAAI,uBAAuB,EAAE;AAClD,oBAAA,IAAI,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AAC5C,wBAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjC,wBAAA,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;AAC9B,4BAAA,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;qBACvC;iBACF;aACF;AACD,YAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,gBAAgB,GAAG,aAAa,CAAC;aAClC;AAAM,iBAAA,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,gBAAA,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC9C,gBAAA,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACtC,gBAAA,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAClC,eAAe,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACrD;SACF;;QAID,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;AAElD,QAAA,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;AACrE,YAAA,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE;AACrE,gBAAA,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC;AACR,wBAAA,CAAC,IAAI,YAAY,GAAG,OAAO,CAAC;AAC5B,wBAAA,CAAC,IAAI,aAAa,GAAG,OAAO,CAAC;AAC9B,qBAAA,CAAC,CAAC;iBACJ;aACF;SACF;AAED,QAAA,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;AC1ED;;;AAGG;MACU,aAAa,CAAA;AACxB,IAAA,KAAK,CAAC,KAAmB,EAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;;AAG1C,QAAA,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACvC,QAAA,cAAc,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;AAC7C;;;;;;AAMG;AACH,QAAA,MAAM,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,QAAA,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,MAAM,cAAc,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnE,MAAM,cAAc,GAAkB,EAAE,CAAC;AACzC,YAAA,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;AAC1C,gBAAA,MAAM,uBAAuB,GAAG,aAAa,CAAC,gBAAgB,EAAE,CAAC;AACjE,gBAAA,KAAK,MAAM,YAAY,IAAI,uBAAuB,EAAE;AAClD,oBAAA,IAAI,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AAC5C,wBAAA,cAAc,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAChD,wBAAA,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;qBACnC;iBACF;aACF;AACD,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aACtC;iBAAM;;;AAGL,gBAAA,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACxC,iBAAiB,GAAG,EAAE,CAAC;aACxB;SACF;QAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,QAAA,KAAK,MAAM,kBAAkB,IAAI,eAAe,EAAE;YAChD,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAC1B,YAAA,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE;gBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACjD,gBAAA,iBAAiB,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;aAC5C;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE,YAAA,gBAAgB,IAAI,OAAO,GAAG,YAAY,CAAC;SAC5C;AAED,QAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;YAC1C,UAAU,CAAC,OAAO,EAAE,CAAC;SACtB;AAED,QAAA,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;AClED;;;AAGG;MACU,WAAW,CAAA;AACtB,IAAA,KAAK,CAAC,KAAmB,EAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC;SACd;;AAGD,QAAA,IAAI,aAAa,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAEjC,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC;QAC3B,MAAM,kBAAkB,GAAG,CAAC,CAAC;QAC7B,MAAM,gBAAgB,GAAG,GAAG,CAAC;QAC7B,MAAM,eAAe,GAAG,OAAO,CAAC;QAChC,MAAM,kBAAkB,GAAG,GAAG,CAAC;QAC/B,MAAM,kBAAkB,GAAG,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAG,KAAK,CAAC;QAC5B,IAAI,WAAW,GAAG,GAAG,CAAC;AAEtB,QAAA,OAAO,WAAW,GAAG,kBAAkB,EAAE;AACvC,YAAA,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;;AAE1C,YAAA,MAAM,mBAAmB,GAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,aAAa,GAAG,CAAC,EAAE;AACrB,gBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;oBAC9B,mBAAmB,CAAC,CAAC,CAAC;AACpB,wBAAA,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC3D,mBAAmB,CAAC,CAAC,CAAC;AACpB,wBAAA,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;iBAC5D;AACD,gBAAA,mBAAmB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACrE,gBAAA,mBAAmB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;aACtE;AAED,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;AAC/B,gBAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;AAClD,gBAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;AAC/B,oBAAA,MAAM,iBAAiB,GAAU;wBAC/B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;wBACjC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;qBACnC,CAAC;AACF,oBAAA,MAAM,iBAAiB,GAAU;wBAC/B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC;wBACjC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;qBACnC,CAAC;AACF,oBAAA,MAAM,oBAAoB,GAAG,qBAAqB,CAChD,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,MAAM,CACb,CAAC;AACF,oBAAA,MAAM,cAAc,GAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEjE,oBAAA,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACpC,wBAAA,IAAI,oBAAoB,GAAG,CAAC,EAAE;AAC5B,4BAAA,IACE,oBAAoB;gCACpB,OAAO;oCACL,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;wCAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;AACnC,wCAAA,CAAC,EACL;gCACA,cAAc,CAAC,CAAC,CAAC;oCACf,cAAc,CAAC,CAAC,CAAC;wCACjB,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC1C,4CAAA,gBAAgB,CAAC;gCACrB,cAAc,CAAC,CAAC,CAAC;oCACf,cAAc,CAAC,CAAC,CAAC;wCACjB,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC1C,4CAAA,gBAAgB,CAAC;6BACtB;iCAAM;gCACL,cAAc,CAAC,CAAC,CAAC;oCACf,cAAc,CAAC,CAAC,CAAC;wCACjB,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC1C,4CAAA,kBAAkB,CAAC;gCACvB,cAAc,CAAC,CAAC,CAAC;oCACf,cAAc,CAAC,CAAC,CAAC;wCACjB,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;AAC1C,4CAAA,kBAAkB,CAAC;6BACxB;yBACF;qBACF;;AAED,oBAAA,IAAI,oBAAoB,GAAG,CAAC,EAAE;wBAC5B,MAAM,KAAK,GACT,eAAe,IAAI,oBAAoB,GAAG,oBAAoB,CAAC,CAAC;wBAClE,cAAc,CAAC,CAAC,CAAC;4BACf,cAAc,CAAC,CAAC,CAAC;AACjB,gCAAA,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACpD,oCAAA,oBAAoB,CAAC;wBACzB,cAAc,CAAC,CAAC,CAAC;4BACf,cAAc,CAAC,CAAC,CAAC;AACjB,gCAAA,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACpD,oCAAA,oBAAoB,CAAC;qBAC1B;yBAAM;wBACL,cAAc,CAAC,CAAC,CAAC;AACf,4BAAA,cAAc,CAAC,CAAC,CAAC,GAAG,kBAAkB,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBACnE,cAAc,CAAC,CAAC,CAAC;AACf,4BAAA,cAAc,CAAC,CAAC,CAAC,GAAG,kBAAkB,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;qBACpE;;AAED,oBAAA,IAAI,aAAa,GAAG,CAAC,EAAE;wBACrB,cAAc,CAAC,CAAC,CAAC;4BACf,cAAc,CAAC,CAAC,CAAC;AACjB,gCAAA,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC;wBAClE,cAAc,CAAC,CAAC,CAAC;4BACf,cAAc,CAAC,CAAC,CAAC;AACjB,gCAAA,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC;qBACnE;;AAED,oBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE;AACrD,wBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;qBACnD;AAAM,yBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;AAC7D,wBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;qBACnD;AACD,oBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE;AACrD,wBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;qBACnD;AAAM,yBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;AAC7D,wBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;qBACnD;AAED,oBAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBAC5B;aACF;SACF;QAED,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE;AAC3C,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AAC9B,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpE,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aAC1B;SACF;AAED,QAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;YAC1C,UAAU,CAAC,OAAO,EAAE,CAAC;SACtB;AAED,QAAA,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;AClJD;;;AAGG;MACU,gBAAgB,CAAA;AAC3B,IAAA,KAAK,CAAC,KAAmB,EAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;QAElD,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5C,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpE,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,QAAA,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,gBAAgB,IAAI,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;SAC1C;AAED,QAAA,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;ACxBD;;;AAGG;MACU,cAAc,CAAA;AACzB,IAAA,KAAK,CAAC,KAAmB,EAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC;SACd;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3C,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3C,CAAC;AACF,QAAA,IAAI,eAAe,KAAK,eAAe,EAAE;;AAEvC,YAAA,IAAI,aAAa,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,eAAe,GAAoB,EAAE,CAAC;QAE5C,MAAM,oCAAoC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAC7D,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,IAAI,eAAe,CAC1C,CAAC;QACF,MAAM,wBAAwB,GAAkB,EAAE,CAAC;AACnD,QAAA,IAAI,oCAAoC,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnD,YAAA,MAAM,OAAO,GAAG,oCAAoC,CAAC,CAAC,CAAC,CAAC;AACxD,YAAA,oCAAoC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,YAAA,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,YAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC;AAC3B,YAAA,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9B,YAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,gBAAA,IAAI,oCAAoC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC1D,oBAAA,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvC,oBAAA,cAAc,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;iBAC/D;AACD,gBAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;AACpD,gBAAA,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;oBAC9C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AAC1C,wBAAA,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC/B,wBAAA,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;qBACnC;iBACF;aACF;;AAED,YAAA,KAAK,MAAM,IAAI,IAAI,oCAAoC,EAAE;AACvD,gBAAA,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrC;SACF;aAAM;YACL,wBAAwB,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxE;AACD,QAAA,KAAK,MAAM,IAAI,IAAI,wBAAwB,EAAE;AAC3C,YAAA,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;AACxC,YAAA,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;SAC9B;;AAED,QAAA,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpE,QAAA,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnC,YAAA,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,YAAA,MAAM,QAAQ,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACpC,YAAA,MAAM,WAAW,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACvC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,YAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtB,MAAM,cAAc,GAAG,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjE,gBAAA,IAAI,cAAc,IAAI,CAAC,EAAE;oBACvB,eAAe,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACvD,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;iBACP;qBAAM;AACL,oBAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;AACpD,oBAAA,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;wBAC9C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AAC1C,4BAAA,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC/B,4BAAA,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;yBACnC;qBACF;iBACF;aACF;YACD,IAAI,CAAC,QAAQ,EAAE;;AAEb,gBAAA,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aACpE;SACF;QAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC/C,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAClD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACjD,gBAAA,iBAAiB,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;aAC5C;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE,YAAA,gBAAgB,IAAI,OAAO,GAAG,YAAY,CAAC;SAC5C;AAED,QAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;YAC1C,UAAU,CAAC,OAAO,EAAE,CAAC;SACtB;AAED,QAAA,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;ACxHD;;;AAGG;MACU,UAAU,CAAA;AACrB,IAAA,KAAK,CAAC,KAAmB,EAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC;SACd;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3C,CAAC;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAC9B,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3C,CAAC;AACF,QAAA,IAAI,eAAe,KAAK,eAAe,EAAE;;AAEvC,YAAA,IAAI,aAAa,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,MAAM,iBAAiB,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAC7C,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAChD,CAAC;QACF,MAAM,QAAQ,GAAa,EAAE,CAAC;AAE9B,QAAA,OAAO,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AACvD,YAAA,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAC5C,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACvB;QAED,MAAM,iBAAiB,GAAe,EAAE,CAAC;AACzC,QAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;AAC7B,YAAA,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;SACtE;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACjD,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC,CAAC;gBACxD,iBAAiB;oBACf,CAAC,OAAO,GAAG,aAAa,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;aAC1D;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CACjD,CAAC;AACF,YAAA,gBAAgB,IAAI,OAAO,GAAG,YAAY,CAAC;SAC5C;AAED,QAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;YAC1C,UAAU,CAAC,OAAO,EAAE,CAAC;SACtB;AAED,QAAA,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC;KACd;AACF,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,iBAAgC,KAAI;AAC5E,IAAA,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,IAAI;AACnC,SAAA,gBAAgB,EAAE;AAClB,SAAA,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE;QACxD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACpE,QAAA,IAAI,mBAAmB,IAAI,CAAC,EAAE;AAC5B,YAAA,iBAAiB,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACjD,YAAA,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;SAChD;KACF;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,MAAc,EACd,iBAA6B,EAC7B,KAAa,KACX;IACF,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,QAAA,OAAO,KAAK,IAAI,iBAAiB,CAAC,MAAM,EAAE;AACxC,YAAA,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC5B;AACD,QAAA,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE;YACvC,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,eAAe,CAAC,SAAS,EAAE,iBAAiB,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;SAC1D;KACF;AACH,CAAC,CAAC;AAEF,MAAM,MAAM,CAAA;IAMV,WAAY,CAAA,MAA0B,EAAE,IAAiB,EAAA;AACvD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,SAAS,CAAC,IAAiB,EAAA;QACzB,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9B,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,CAAC,CAAC;SACV;aAAM;YACL,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,YAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;AACrC,gBAAA,KAAK,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;aACxC;AACD,YAAA,OAAO,KAAK,CAAC;SACd;KACF;AACF;;ACnID;;;AAGG;MACU,cAAc,CAAA;AACzB,IAAA,KAAK,CAAC,KAAmB,EAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;QAElD,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5C,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpE,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B,QAAA,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAClC,YAAA,iBAAiB,IAAI,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;SAC5C;AAED,QAAA,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;ACRD;;AAEG;AACU,MAAA,OAAO,GAAqC;IACvD,SAAS,EAAE,IAAI,eAAe,EAAE;IAChC,OAAO,EAAE,IAAI,aAAa,EAAE;IAC5B,mBAAmB,EAAE,IAAI,sBAAsB,EAAE;IACjD,KAAK,EAAE,IAAI,WAAW,EAAE;IACxB,UAAU,EAAE,IAAI,gBAAgB,EAAE;IAClC,QAAQ,EAAE,IAAI,cAAc,EAAE;IAC9B,IAAI,EAAE,IAAI,UAAU,EAAE;IACtB,QAAQ,EAAE,IAAI,cAAc,EAAE;;;ACjChC;;;AAGG;AACH,IAAY,MAoBX,CAAA;AApBD,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,MAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,MAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,MAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,MAAA,CAAA,aAAA,CAAA,GAAA,UAAwB,CAAA;AACxB,IAAA,MAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,MAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,MAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,MAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,MAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,MAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,MAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,MAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,MAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,MAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,MAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EApBW,MAAM,KAAN,MAAM,GAoBjB,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;AACH,IAAY,IAmBX,CAAA;AAnBD,CAAA,UAAY,IAAI,EAAA;AACd,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,IAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,IAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,IAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,IAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,IAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,IAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,IAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,IAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,IAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EAnBW,IAAI,KAAJ,IAAI,GAmBf,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;AACH,IAAY,UAIX,CAAA;AAJD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EAJW,UAAU,KAAV,UAAU,GAIrB,EAAA,CAAA,CAAA,CAAA;AAED;;;AAGG;AACH,IAAY,UAIX,CAAA;AAJD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,UAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACb,CAAC,EAJW,UAAU,KAAV,UAAU,GAIrB,EAAA,CAAA,CAAA;;ACrED,IAAY,WAYX,CAAA;AAZD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACtB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACtB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,aAA0B,CAAA;AAC1B,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,UAAoB,CAAA;AACtB,CAAC,EAZW,WAAW,KAAX,WAAW,GAYtB,EAAA,CAAA,CAAA;;ACZM,MAAM,eAAe,GAAG,CAAC,CAAS,KAAY;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC;AACK,MAAM,YAAY,GAAG,CAAC,CAAS,KAAY;IAChD,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AACrC,CAAC;;ACUD;;;AAGG;MACU,YAAY,CAAA;AAmBvB,IAAA,WAAA,CAAY,MAAc,EAAA;AAL1B;;AAEG;QACH,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAGf,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,GAAGC,EAAM,EAAE,CAAC;KAC3B;AAED;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AACjC,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;KACzD;AAED;;AAEG;IACH,OAAO,GAAA;;;;;AAML,QAAA,OAAO,IAAI,GAAGA,EAAM,EAAE,CAAC;KACxB;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAoB,EAAA;;;QAGpC,MAAM,CAAC,EAAE,EAAE,CAAC;AAEZ,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;;AAEf,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SACzB;KACF;AAED;;;;;AAKG;AACH,IAAA,OAAO,CAAC,OAA+B,EAAA;;AAErC,QAAA,IAAI,WAAW,IAAI,OAAO,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAC9B,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CACrB,CAAC;SACH;;AAGD,QAAA,QAAQ,OAAO,CAAC,IAAI;YAClB,KAAK,SAAS,EAAE;AACd,gBAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACrE,MAAM,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM;aACP;YACD,KAAK,aAAa,EAAE;AAClB,gBAAA,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAW,CAChD,IAAI,CAAC,MAAM,EACX,OAAO,CACR,CAAC;gBACF,MAAM,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM;aACP;YACD,KAAK,eAAe,EAAE;AACpB,gBAAA,MAAM,MAAM,GAAG,yBAAyB,CAAC,WAAW,CAClD,IAAI,CAAC,MAAM,EACX,OAAO,CACR,CAAC;gBACF,MAAM,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM;aACP;YACD,KAAK,WAAW,EAAE;AAChB,gBAAA,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACvE,MAAM,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM;aACP;YACD,KAAK,cAAc,EAAE;AACnB,gBAAA,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CACjD,IAAI,CAAC,MAAM,EACX,OAAO,CACR,CAAC;gBACF,MAAM,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM;aACP;YACD,KAAK,gBAAgB,EAAE;AACrB,gBAAA,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,CACnD,IAAI,CAAC,MAAM,EACX,OAAO,CACR,CAAC;gBACF,MAAM,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM;aACP;YACD,KAAK,OAAO,EAAE;AACZ,gBAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnE,MAAM,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM;aACP;YACD,SAAS;gBACP,MAAM,iBAAiB,GAAU,OAAO,CAAC;AACzC,gBAAA,OAAO,CAAC,KAAK,CACX,sCAAsC,EACtC,iBAAiB,CAClB,CAAC;aACH;SACF;KACF;AACF;;ACnJM,MAAM,iBAAiB,GAAG,CAAC;;ACSlC;;;AAGG;MACU,YAAY,CAAA;AACvB,IAAA,MAAM,CAAC,KAAmB,EAAE,iBAAiB,GAAG,KAAK,EAAA;AACnD,QAAA,MAAM,MAAM,GAAc;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,YAAA,WAAW,EAAE,iBAAiB;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE;AAChC,YAAA,IAAI,iBAAiB;AACnB,kBAAE;AACE,oBAAA,UAAU,EAAE;wBACV,YAAY,EAAE,KAAK,CAAC,YAAY;AAChC,wBAAA,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC/C,qBAAA;AACF,iBAAA;kBACD,EAAE,CAAC;SACR,CAAC;AACF,QAAA,IAAI,KAAK,CAAC,EAAE,EAAE;AACZ,YAAA,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;SACtB;AACD,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;SACxC;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO;gBAAE,SAAS;AACjD,YAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;SAC7D;AACD,QAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,iBAAiB,IAAI,UAAU,CAAC,OAAO;gBAAE,SAAS;AACvD,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CACrB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CACrD,CAAC;SACH;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,UAAU,CAAC,IAAiB,EAAE,iBAAiB,GAAG,KAAK,EAAA;QACrD,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,YAAA,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;gBAChC,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,oBAAA,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE;AAC7B,oBAAA,IAAI,iBAAiB;AACnB,0BAAE;AACE,4BAAA,UAAU,EAAE;gCACV,OAAO,EAAE,IAAI,CAAC,OAAO;gCACrB,WAAW,EAAE,IAAI,CAAC,WAAW;gCAC7B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;AAC/C,gCAAA,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACpC,6BAAA;AACF,yBAAA;0BACD,EAAE,CAAC;AACR,iBAAA,CAAC,CAAC;aACJ;YACD,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK;AACL,gBAAA,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE;gBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,YAAY,EAAE,OAAO,CAAC,YAAY;AAClC,gBAAA,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,gBAAA,IAAI,iBAAiB;AACnB,sBAAE;AACE,wBAAA,UAAU,EAAE;4BACV,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,WAAW,EAAE,OAAO,CAAC,WAAW;4BAChC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;AAClD,4BAAA,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;AACvC,yBAAA;AACF,qBAAA;sBACD,EAAE,CAAC;AACR,aAAA,CAAC,CAAC;SACJ;QACD,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,gBAAA,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE;AAC7B,gBAAA,IAAI,iBAAiB;AACnB,sBAAE;AACE,wBAAA,UAAU,EAAE;4BACV,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,WAAW,EAAE,IAAI,CAAC,WAAW;4BAC7B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;AAC/C,4BAAA,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACpC,yBAAA;AACF,qBAAA;sBACD,EAAE,CAAC;AACR,aAAA,CAAC,CAAC;SACJ;QACD,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YAClB,QAAQ;YACR,KAAK;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE;AAC7B,YAAA,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC/B,YAAA,IAAI,iBAAiB;AACnB,kBAAE;AACE,oBAAA,UAAU,EAAE;wBACV,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;wBAC/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,wBAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC7C,wBAAA,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACpC,qBAAA;AACF,iBAAA;kBACD,EAAE,CAAC;SACR,CAAC;KACH;AAED,IAAA,gBAAgB,CACd,UAA6B,EAC7B,iBAAiB,GAAG,KAAK,EAAA;QAEzB,OAAO;YACL,EAAE,EAAE,UAAU,CAAC,EAAE;AACjB,YAAA,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE;AACxB,YAAA,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE;AACjC,YAAA,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE;YAC7B,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;AACzB,YAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE;AACrC,YAAA,IAAI,iBAAiB;AACnB,kBAAE;AACE,oBAAA,UAAU,EAAE;wBACV,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,WAAW,EAAE,UAAU,CAAC,WAAW;wBACnC,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;AACrD,wBAAA,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE;AACpD,qBAAA;AACF,iBAAA;kBACD,EAAE,CAAC;SACR,CAAC;KACH;IAED,qBAAqB,CAAC,EAAE,KAAK,EAA4B,EAAA;QACvD,IAAI,KAAK,EAAE;YACT,OAAO;AACL,gBAAA,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;oBAChD,aAAa,EAAE,KAAK,CAAC,aAAa;AACnC,iBAAA;aACF,CAAC;SACH;;AAAM,YAAA,OAAO,EAAE,CAAC;KAClB;AACF;;ACpLD;;;AAGG;MACU,YAAY,CAAA;AAOvB,IAAA,WAAA,CACE,KAAY,EACZ,IAAY,EACZ,MAAuB,EACvB,MAAc,EAAA;AAEd,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;KAC/B;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;KAC9B;AACF;;ACxBD;;;;;;;;AAQG;AACG,MAAO,gBAAiB,SAAQ,cAAc,CAAA;AAwBlD,IAAA,WAAA,CACE,KAAmB,EACnB,WAAqD,EACrD,MAAa,EACb,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,IAAY,EACZ,EAAU,EAAA;QAEV,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,EAAE,CAAA,gBAAA,CAAkB,CAAC,CAAC;SACjE;AACD,QAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAEQ,MAAM,GAAA;AAGb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;AACtB,cAAE,gBAAgB,EAAE;cAClB,MAAM,CAAC,CAAiB,cAAA,EAAA,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC;KACxC;AAED,IAAA,IAAI,OAAO,GAAA;QACT,QACE,IAAI,CAAC,WAAW;AAChB,aAAC,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAC5D;KACH;IAED,YAAY,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACpD;AAED;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAa,EAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AACF,CAAA;AAEK,MAAO,mBAAoB,SAAQ,iBAAmC,CAAA;AAG1E;;;AAGG;AACH,IAAA,WAAA,CAAY,KAAmB,EAAA;AAC7B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED;;;AAGG;AACH,IAAA,GAAG,CACD,WAAqD,EACrD,MAAa,EACb,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,IAAY,EACZ,EAAU,EAAA;QAEV,MAAM,SAAS,GAAG,IAAI,gBAAgB,CACpC,IAAI,CAAC,KAAK,EACV,WAAW,EACX,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,EAAE,CACH,CAAC;AACF,QAAA,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrB,SAAS,CAAC,YAAY,EAAE,CAAC;;AAEzB,QAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,YAAA,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxC;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAA;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,SAAS,EAAE;;AAEb,YAAA,IACE,SAAS,CAAC,WAAW,YAAY,WAAW;AAC5C,gBAAA,SAAS,CAAC,WAAW,YAAY,cAAc,EAC/C;gBACA,cAAc,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;aAC7D;;AAED,YAAA,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAEjB,SAAS,CAAC,YAAY,EAAE,CAAC;SAC1B;KACF;AACF;;ACxJD;;;;AAIG;AACG,MAAO,aAAc,SAAQ,cAAc,CAAA;AAmB/C,IAAA,WAAA,CACE,KAAmB,EACnB,MAAa,EACb,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,IAAY,EACZ,EAAU,EAAA;QAEV,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,EAAE,CAAA,gBAAA,CAAkB,CAAC,CAAC;SACjE;AACD,QAAA,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAEQ,MAAM,GAAA;AAGb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;AACtB,cAAE,gBAAgB,EAAE;cAClB,MAAM,CAAC,CAAiB,cAAA,EAAA,IAAI,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC;KACxC;AAED,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,YAAY,GAAA;QACV,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACjD;AAED;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAa,EAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AACF,CAAA;AAEK,MAAO,gBAAiB,SAAQ,iBAAgC,CAAA;AAGpE;;;AAGG;AACH,IAAA,WAAA,CAAY,KAAmB,EAAA;AAC7B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED;;;AAGG;IACH,GAAG,CACD,MAAa,EACb,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,IAAY,EACZ,EAAU,EAAA;QAEV,MAAM,MAAM,GAAG,IAAI,aAAa,CAC9B,IAAI,CAAC,KAAK,EACV,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,EAAE,CACH,CAAC;AACF,QAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,CAAC,YAAY,EAAE,CAAC;AACtB,QAAA,OAAO,MAAM,CAAC;KACf;AAEQ,IAAA,MAAM,CAAC,EAAU,EAAA;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,MAAM,EAAE;;AAEV,YAAA,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;YAEjB,MAAM,CAAC,YAAY,EAAE,CAAC;SACvB;KACF;AACF;;ACpHD;;;;AAIG;MACU,YAAY,CAAA;IAyFvB,WACE,CAAA,MAA0B,EAC1B,EAAsB,EACtB,IAAY,EACZ,WAA+B,EAC/B,IAAY,EACZ,UAAA,GAAyB,EAAE,EAAA;AAzF7B;;;;AAIG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;AACjC;;;;AAIG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACvC;;;;AAIG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;AACjC;;;;AAIG;AACH,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;AAC7C;;;;AAIG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AACnC;;;;AAIG;AACH,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACrC;;;;AAIG;AACH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAkDzC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;KACjE;AAED;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;KAClC;AACF;;ACxFD;;;AAGG;AACI,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAChD;;;AAGG;AACI,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC;;;;AAIG;AACI,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAE5D;;;;AAIG;AACI,MAAM,iBAAiB,GAAG,GAAG;AAEpC,MAAM,wBAAwB,GAAG,+BAA+B,CAAC;AAEjE,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC;AACA,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACtC,MAAM,yBAAyB,GAC7B,wBAAwB,GAAG,0BAA0B,CAAC;AACxD,MAAM,mCAAmC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACxD,MAAM,kCAAkC,GAAG,GAAG,CAAC;MAElC,aAAa,CAAA;aAgBT,IAAW,CAAA,WAAA,GAAG,CAAH,CAAK,EAAA;IAmD/B,WAAY,CAAA,eAA8B,EAAE,MAAqB,EAAA;AAlDzD,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAA8B,2BAAA,EAAA,aAAa,CAAC,WAAW,EAAE,EAAE,CAAC;AAGlF,QAAA,IAAA,CAAA,aAAa,GAAqB,EAAE,CAAC,YAAY,CAAC;QAGlD,IAAiB,CAAA,iBAAA,GAAoB,SAAS,CAAC;QAC/C,IAAa,CAAA,aAAA,GAAqB,EAAE,CAAC;AAC7C;;AAEG;QACK,IAAa,CAAA,aAAA,GAAqB,EAAE,CAAC;;AA6BrC,QAAA,IAAA,CAAA,YAAY,GAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAIrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAQ,CAAC;AACvC,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAQ,CAAC;AACxC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAQ,CAAC;AACtC,QAAA,IAAA,CAAA,wBAAwB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC/C,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAG3C,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAEvC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAC3B,IAAI,EACJ,SAAS,EACT,MAAM,CAAC,IAAI,IAAI,SAAS,EACxB,EAAE,EACF,MAAM,CAAC,IAAI,IAAI,EAAE,EACjB,MAAM,CAAC,UAAU,IAAI,EAAE,CACxB,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,SAAS,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,KAAK,CAAC;QAC/D,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB;AAC9C,cAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;cAC1B,SAAS,CAAC;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;;AAG3C,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,YAAA,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,SAAS,EAAE;AAC7C,gBAAA,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;oBACnC,GAAG,MAAM,CAAC,gBAAgB;AAC1B,oBAAA,GAAG,cAAc;AAClB,iBAAA,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACtC;SACF;;AAED,QAAA,IAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,YAAA,KAAK,MAAM,oBAAoB,IAAI,MAAM,CAAC,eAAe,EAAE;AACzD,gBAAA,MAAM,cAAc,GAAG,IAAI,qBAAqB,CAAC;oBAC/C,GAAG,MAAM,CAAC,sBAAsB;AAChC,oBAAA,GAAG,oBAAoB;AACxB,iBAAA,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;aAClD;AACD,YAAA,IAAI,CAAC,cAAc;gBACjB,MAAM,CAAC,iBAAiB,KAAK,SAAS;AACpC,sBAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC;sBAC1D,SAAS,CAAC;SACjB;AACD,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACnE,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,YAAY,CAAC,SAA2B,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;KAC/B;AAED,IAAA,eAAe,CAAC,SAA2B,EAAA;AACzC,QAAA,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;KAC/B;IAED,2BAA2B,GAAA;QACzB,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;IAED,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;AAED,IAAA,oBAAoB,CAAC,QAAgB,EAAA;AACnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC7B;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;KAChD;;AAID,IAAA,QAAQ,CAAC,QAAqB,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAiB,CAAC;AAE3E,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AACxB,aAAA,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACnB,aAAA,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AACtB,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;aACvB,MAAM,CAAC,KAAK,CAAC;AACb,aAAA,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AACtB,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE3B,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;AACxB,aAAA,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAK;;;AAGrB,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;AAC9C,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,KAAI;AAC5C,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,KAAK,EACL,MAAM,CAAC,WAAW,EAClB,SAAS,CACV,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EACrD;gBACA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,KAAI;AAChC,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,KAAK,EACL,MAAM,CAAC,WAAW,EAClB,SAAS,CACV,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAoB,KAAI;YAC3C,IACE,CAAC,KAAK,CAAC,OAAO;AACd,iBAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC;gBAC3D,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,EAChD;gBACA,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;;gBAEvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACnC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;iBAC/B;gBACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAC/C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;iBACrC;aACF;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;;gBAEvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACnC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;iBAChC;gBACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAC/C,oBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;iBACtC;aACF;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;;gBAEvB,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;;gBAEvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,IAAI,CAAC,4BAA4B,EAAE,CAAC;gBACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACtD,gBAAA,IAAI,CAAC,+BAA+B,CAClC,IAAI,CAAC,mBAAmB,CAAC;AACvB,oBAAA,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,oBAAA,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,iBAAA,CAAC,CACH,CAAC;gBACF,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;aACzB;YACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;aACzB;AACD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;aAC9C;AACD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;aAC/C;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,EAAE;gBAChC,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAClD;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE;gBACjC,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACjD;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,EAAE;gBAChC,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aAClD;YACD,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE;gBAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACjD;AACH,SAAC,CAAC,CAAC;AAEL,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;aACjC,MAAM,CAAC,GAAG,CAAC;AACX,aAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;AACjC,aAAA,IAAI,CAAC,OAAO,EAAE,CAAA,IAAA,CAAM,CAAC;AACrB,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAA,IAAA,CAAM,CAAC,CAAC;QAE1B,MAAM,gBAAgB,GAAG,UAAU;aAChC,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,CAAA,IAAA,CAAM,CAAC;AACrB,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAA,IAAA,CAAM,CAAC;AACtB,aAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC;AAClC,aAAA,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC;aACzB,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,KAAiB,KAAI;AAC1C,YAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;gBAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACrE,gBAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG,aAAa,CAAC;aACrD;AACH,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,MAAK;YACzB,IAAI,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAK;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,SAAC,CAAC;AACD,aAAA,IAAI,EACF,IAAI,CAAC,YAAY,GAAG,EAAE;AACpB,aAAA,IAAI,EAA2B;aAC/B,EAAE,CACD,UAAU,CAAC,IAAI,EACf,CAAC,KAA8C,KAAI;AACjD,YAAA,IAAI,KAAK,CAAC,WAAW,EAAE;;gBAErB,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AACnD,oBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBACpC,OAAO;iBACR;gBACD,IACE,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK;AACvC,oBAAA,KAAK,CAAC,WAAW,CAAC,UAAU,KAAK,SAAS,EAC1C;oBACA,IAAI,KAAK,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,EAAE;AACpC,wBAAA,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;qBACjC;oBACD,IAAI,KAAK,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,EAAE;AACpC,wBAAA,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;qBAClC;iBACF;qBAAM,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,EAAE;AACtD,oBAAA,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;iBACpC;aACF;AACD,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;YACrC,MAAM,kBAAkB,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACtD,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAClE,YAAA,EAAE,CAAC,MAAM,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,mBAAmB,CAAA,CAAE,CAAC,CAAC,IAAI,CAC5C,kBAAkB,EAClB,kBAAkB,CACnB,CAAC;YACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,SAAC,CACF;AACA,aAAA,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,MAAK;AACvB,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,EACL,CAAC;QAEJ,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAE7C,QAAA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;YACrB,MAAM,uBAAuB,GAAG,UAAU;iBACvC,MAAM,CAAC,SAAS,CAAC;AACjB,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC;iBACpC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;iBAC7B,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC7B,iBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC5B,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC7B,iBAAA,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YAC1C,uBAAuB;iBACpB,MAAM,CAAC,MAAM,CAAC;AACd,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,iBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC5B,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC7B,iBAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACtC,uBAAuB;iBACpB,MAAM,CAAC,QAAQ,CAAC;iBAChB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;iBAC7B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;iBAC7B,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC7B,iBAAA,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AACrB,iBAAA,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAC7B,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAQ,KAAA,EAAA,IAAI,CAAC,mBAAmB,CAAG,CAAA,CAAA,CAAC,CAAC;SACpE;QAED,MAAM,cAAc,GAAG,UAAU;aAC9B,MAAM,CAAC,GAAG,CAAC;AACX,aAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;AACzC,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAC9D,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;AACjE,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAC9D,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;AACpE,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AAC/D,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;AAChE,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAEnE,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAC9B;AAED,IAAA,MAAM,CAAC,IAAY,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;SACzE;KACF;AAED,IAAA,MAAM,CAAC,IAAY,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;SACzE;KACF;IAED,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EACtC,CAAC,EACD,CAAC,CACF,CAAC;SACH;KACF;IAED,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EACtC,CAAC,EACD,CAAC,CACF,CAAC;SACH;KACF;IAED,MAAM,GAAA;;QAEJ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,qBAAqB,GACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAC5C,CAAC,OAAO,EAAE,CAAC;YACZ,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CACrD,CAAC;YACF,MAAM,QAAQ,GAAG,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AAC3C,YAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACnC,YAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CACtD,CAAC;YACF,MAAM,QAAQ,GAAG,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AAC3C,YAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACnC,YAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAAC;AAClD;;;;;;AAMG;AACH,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;AACvE,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SACnB;KACF;AAED,IAAA,mBAAmB,CAAC,KAAY,EAAA;AAC9B,QAAA,IACE,IAAI,CAAC,QAAQ,KAAK,CAAC;AACnB,YAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpB,YAAA,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB;AACA,YAAA,OAAO,KAAK,CAAC;SACd;aAAM;YACL,OAAO;AACL,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ;AACpD,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ;aACrD,CAAC;SACH;KACF;IAED,sBAAsB,GAAA;AACpB,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7C,aAAA,IAAI,EAAE;cACL,qBAAqB,EAAE,CAAC;AAC5B,QAAA,MAAM,cAAc,GAAG;YACrB,sBAAsB,EAAE,KAAK,IAAI,CAAC;YAClC,sBAAsB,EAAE,MAAM,IAAI,CAAC;SACpC,CAAC;QACF,OAAO;AACL,YAAA;gBACE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5C,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7C,aAAA;AACD,YAAA;AACE,gBAAA,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;AACjE,gBAAA,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;AAClE,aAAA;SACF,CAAC;KACH;;AAGO,IAAA,0BAA0B,CAAC,KAAiB,EAAA;AAClD,QAAA,IACE,KAAK,CAAC,IAAI,KAAK,MAAM;YACrB,KAAK,CAAC,IAAI,KAAK,OAAO;AACtB,YAAA,KAAK,CAAC,IAAI,KAAK,KAAK,EACpB;;AAEA,YAAA,MAAM,WAAW,GAAI,KAAa,CAAC,WAAW,CAAC;AAC/C,YAAA,IACE,WAAW;AACX,iBAAC,WAAW,CAAC,IAAI,KAAK,WAAW;oBAC/B,WAAW,CAAC,IAAI,KAAK,YAAY;AACjC,oBAAA,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,EAClC;gBACA;;AAEG,gBAAA,KAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;;oBAEpC,KAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,EAC5C;aACH;SACF;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,kCAAkC,CAAC,KAAiB,EAAA;AAClD,QAAA,OAAO,EAAE,CAAC,OAAO,CACf,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,EACtC,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,CACnC,CAAC;KACH;AAED,IAAA,gCAAgC,CAAC,KAAiB,EAAA;AAChD,QAAA,OAAO,EAAE,CAAC,OAAO,CACf,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,EACtC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CACzB,CAAC;KACH;AAED,IAAA,gCAAgC,CAAC,KAAiB,EAAA;QAChD,OAAO,EAAE,CAAC,OAAO,CACf,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,EACtC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CACzB,CAAC;KACH;AAED,IAAA,kCAAkC,CAAC,KAAiB,EAAA;QAClD,MAAM,6BAA6B,GACjC,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO;AACL,YAAA,6BAA6B,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO;AACjD,YAAA,6BAA6B,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO;SAClD,CAAC;KACH;IAED,iBAAiB,GAAA;QACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAED,iBAAiB,CAAC,GAAG,GAAa,EAAA;AAChC,QAAA,IAAI,eAAe,GAKf,IAAI,CAAC,iBAAiB,EAAE;aACzB,SAAS,CAA2B,gBAAgB,CAAC;AACrD,aAAA,IAAI,CACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KACxB,IAAI,CAAC,iBAAiB,KAAK,SAAS;cAChC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB;AAC3C,cAAE,IAAI,CACT,EACD,CAAC,CAAc,KAAK,CAAC,CAAC,EAAE,CACzB,CAAC;AACJ,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe;AACnC,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;aACvB,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KACA,CAAe,YAAA,EAAA,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,cAAc,GAAG,EAAE,CAAA,EACpD,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,cAAc,GAAG,EACvC,CAAI,CAAA,EAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAE,CAAA,CAC7B,CAAC;QAEJ,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACrE;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;aACX,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAc,KAAI;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpB,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAiB,EAAE,CAAc,KAAI;YACtD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC3B;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAc,KAAI;AAC5D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EACrD;gBACA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAc,KAAI;AAC5D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAAyC;aAC7C,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACzD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,QAAQ,EACvB,CAAC,CAAC,EAAE,EACJ,CAAC,CAAC,WAAW,EAAE,EACf,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACxD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,MAAM,aAAa,GAAU;AAC3B,oBAAA,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;AACrB,oBAAA,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;iBACvB,CAAC;AACF,gBAAA,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACvB;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACvD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;;gBAEA,IACE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;oBAC/B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;oBAClC,IAAI,CAAC,aAAa,YAAY,iBAAiB;oBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,QAAQ,EACrD;AACA,oBAAA,IAAI,aAAa,GAAU;AACzB,wBAAA,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;AACrB,wBAAA,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;qBACvB,CAAC;AACF,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,wBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;qBACzD;AACD,oBAAA,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACtB,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,oBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;oBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,oBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;iBAChC;aACF;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QACJ,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,cAAc;aACX,MAAM,CAAC,aAAa,CAAC;aACrB,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAC/B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAC1B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;AAChC,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAC3B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC7B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;AAC5B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC;AAClC,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC7B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;AACnC,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAEvC,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC7B,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;aAC9C,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAc,KAAI;AAC/C,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAc,KAAI;AAC9C,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA4C;aAChD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAc,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,WAAW,EAC1B,CAAC,CAAC,EAAE,EACJ,CAAC,CAAC,WAAW,EAAE,EACf,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACxD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;gBACA,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aACtD;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACvD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;gBACjB,CAAC,CAAC,CAAC,OAAO;gBACV,IAAI,CAAC,aAAa,YAAY,iBAAiB;gBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,WAAW,EACxD;gBACA,IAAI,aAAa,GACf,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBACzD;AACD,gBAAA,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;AAC5B,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;aAC9C,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAc,KAAI;AAC3D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAkB,EAAE,CAAc,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA4C;aAChD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAc,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,WAAW,EAC1B,CAAC,CAAC,EAAE,EACJ,CAAC,CAAC,WAAW,EAAE,EACf,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACxD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;gBACA,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aACrD;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACvD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;gBACjB,CAAC,CAAC,CAAC,OAAO;gBACV,IAAI,CAAC,aAAa,YAAY,iBAAiB;gBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,WAAW,EACxD;gBACA,IAAI,aAAa,GACf,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBACzD;AACD,gBAAA,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;AAC9B,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;aAC9C,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAc,KAAI;AAC3D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAkB,EAAE,CAAc,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA4C;aAChD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAc,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,WAAW,EAC1B,CAAC,CAAC,EAAE,EACJ,CAAC,CAAC,WAAW,EAAE,EACf,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACxD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;gBACA,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;gBACjD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aACnE;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACvD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;gBACjB,CAAC,CAAC,CAAC,OAAO;gBACV,IAAI,CAAC,aAAa,YAAY,iBAAiB;gBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,WAAW,EACxD;gBACA,IAAI,aAAa,GACf,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBACzD;gBACD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAClE,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAC/B,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;aAC9C,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAc,KAAI;AAC3D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAkB,EAAE,CAAc,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA4C;aAChD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAc,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,WAAW,EAC1B,CAAC,CAAC,EAAE,EACJ,CAAC,CAAC,WAAW,EAAE,EACf,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACxD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;AACjB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;gBACA,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;gBACjD,CAAC,CAAC,OAAO,CACP,IAAI,CAAC,MAAM,EACX,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAC5C,CAAC;aACH;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACvD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC;gBACrD,CAAC,CAAC,IAAI,CAAC,UAAU;gBACjB,CAAC,CAAC,CAAC,OAAO;gBACV,IAAI,CAAC,aAAa,YAAY,iBAAiB;gBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,WAAW,EACxD;gBACA,IAAI,aAAa,GACf,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBACzD;gBACD,CAAC,CAAC,OAAO,CACP,IAAI,CAAC,MAAM,EACX,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAC5C,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QAEJ,cAAc;aACX,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAA,UAAA,EAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;aACpE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjD,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KACX,iBAAiB,CACd,CAAC,CAAC,IAAI,CAAC,IAAuB,CAAC,KAAK,EACrC,CAAC,EACD,CAAC,EACD,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,MAAM,CACT,CACF;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAuB,CAAC,iBAAiB;cAChD,CAAC,CAAC,IAAI,CAAC,IAAuB,CAAC,SAAS,CAC9C;aACA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAChB,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAuB,CAAC,mBAAmB;cAClD,CAAC,CAAC,IAAI,CAAC,IAAuB,CAAC,WAAW,CAChD;aACA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAI,EAAA,CAAA,CAAC,CAAC;QAC7D,cAAc;aACX,MAAM,CAAC,aAAa,CAAC;aACrB,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;aAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;aAC/B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAsB,CAAC,uBAAuB;cACrD,CAAC,CAAC,IAAI,CAAC,IAAsB,CAAC,eAAe,CACnD,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,sBAAsB,CAAC;AAC9B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CAC5D;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CAC3D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC;iBACtC,8BAA8B;cAChC,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,sBAAsB,CACrE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,iBAAiB,CAAC;AACzB,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CAAC;AACtE,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;AACN,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW;AACpD,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CACvD;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CAC3D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,0BAA0B;cACnE,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,kBAAkB,CACjE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,uBAAuB,CAAC;AAC/B,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAI,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW,CACvE;AACA,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW,CAC7D;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CAC3D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC;iBACtC,+BAA+B;cACjC,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,uBAAuB,CACtE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,kBAAkB,CAAC;AAC1B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CAAC;AACrE,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CAC5D;aACA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;AACP,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY;AACrD,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CACtD;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC;iBACtC,2BAA2B;cAC7B,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,mBAAmB,CAClE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,oBAAoB,CAAC;AAC5B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CAAC;AACtE,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CAAC;aACrE,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;AACN,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW;AACpD,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CACvD;aACA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;AACP,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY;AACrD,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CACtD;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC;iBACtC,6BAA6B;cAC/B,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,qBAAqB,CACpE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,mBAAmB,CAAC;AAC3B,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAI,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW,CACvE;AACA,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CAAC;AACrE,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW,CAC7D;aACA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;AACP,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY;AACrD,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,SAAS,CACtD;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC;iBACtC,4BAA4B;cAC9B,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,oBAAoB,CACnE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,yBAAyB,CAAC;AACjC,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAI,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY,CACzE;AACA,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CAC5D;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY,CAC9D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC;iBACtC,iCAAiC;cACnC,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,yBAAyB,CACxE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,oBAAoB,CAAC;AAC5B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CAAC;AACtE,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAI,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY,CACzE;aACA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;AACN,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW;AACpD,YAAA,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,UAAU,CACvD;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY,CAC9D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC;iBACtC,6BAA6B;cAC/B,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,qBAAqB,CACpE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,0BAA0B,CAAC;AAClC,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAI,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW,CACvE;AACA,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAI,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY,CACzE;AACA,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,WAAW,CAC7D;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,YAAY,CAC9D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;AACR,cAAG,CAAC,CAAC,IAAI,CAAC,IAAiC;iBACtC,kCAAkC;cACpC,CAAC,CAAC,IAAI,CAAC,IAAiC,CAAC,0BAA0B,CACzE,CAAC;QAEJ,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,mBAAmB,CAAC;AAC3B,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC;AACjC,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC;AACjC,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACb,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/B,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,kBAAkB,CAAC;AAC1B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACb,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAC1B,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC;AACjC,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;QACrC,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,oBAAoB,CAAC;AAC5B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAClD,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAClD,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACb,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/B,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,qBAAqB,CAAC;AAC7B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACb,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAC1B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,iBAAiB,GAAG,CAAC,CAAC;AACnD,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC;KACxD;IAED,oBAAoB,CAAC,GAAG,GAAa,EAAA;AACnC,QAAA,IAAI,eAAe,GAKf,IAAI,CAAC,oBAAoB,EAAE;aAC5B,SAAS,CAA8B,mBAAmB,CAAC;AAC3D,aAAA,IAAI,CACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAC3B,IAAI,CAAC,iBAAiB,KAAK,SAAS;cAChC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB;AAC3C,cAAE,IAAI,CACT,EACD,CAAC,CAAiB,KAAK,CAAC,CAAC,EAAE,CAC5B,CAAC;AACJ,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe;AACnC,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;aACvB,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KACA,CAAA,eAAA,EAAkB,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,EAAE,CAAA,EAC9D,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,EAC9C,CAAI,CAAA,EAAA,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAE,CAAA,CACtC,CAAC;QAEJ,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACrE;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;aACX,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAiB,KAAI;AAC9D,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpB,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAiB,EAAE,CAAiB,KAAI;YACzD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC3B;YACD,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAiB,KAAI;AAC/D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EACrD;gBACA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,MAAM,eAAe,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAClD,gBAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAiB,KAAI;AAC/D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA4C;aAChD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC5D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAmB,CAAC;AACnC,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,QAAQ,EACvB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC3D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAmB,CAAC;AACnC,gBAAA,MAAM,aAAa,GAAU;AAC3B,oBAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;iBAC1B,CAAC;AACF,gBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aAC1B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAmB,CAAC;;gBAEnC,IACE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;oBAC/B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;oBAClC,IAAI,CAAC,aAAa,YAAY,iBAAiB;oBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,QAAQ,EACrD;AACA,oBAAA,IAAI,aAAa,GAAU;AACzB,wBAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AACxB,wBAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;qBAC1B,CAAC;AACF,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,wBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;qBACzD;AACD,oBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACzB,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3C,oBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;oBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,oBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;iBAChC;aACF;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QACJ,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,cAAc;aACX,MAAM,CAAC,aAAa,CAAC;aACrB,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAC/B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAC1B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;AAChC,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAC3B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC7B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;AAC5B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC;AAClC,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC7B,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;AACnC,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAEvC,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC7B,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;aAC9C,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAiB,KAAI;AAClD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAiB,KAAI;AACjD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA+C;aACnD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAiB,KAAI;AAC7D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,cAAc,EAC7B,CAAC,CAAC,IAAI,CAAC,EAAE,EACT,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EACpB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CACrB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC3D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;gBACA,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,IAAI,CAAC,IAAI,EACT,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC9B,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,YAAY,CACf,CAAC;aACH;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;gBACxB,CAAC,CAAC,CAAC,OAAO;gBACV,IAAI,CAAC,aAAa,YAAY,iBAAiB;gBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,cAAc,EAC3D;gBACA,IAAI,aAAa,GACf,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBACzD;AACD,gBAAA,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,IAAI,CAAC,IAAI,EACT,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC9B,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,YAAY,CACf,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;AAC5B,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;aAC9C,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAiB,KAAI;AAC9D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAkB,EAAE,CAAiB,KAAI;AAC7D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA+C;aACnD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAiB,KAAI;AAC7D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,cAAc,EAC7B,CAAC,CAAC,IAAI,CAAC,EAAE,EACT,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EACpB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CACrB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC3D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;gBACA,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,IAAI,CAAC,GAAG,EACR,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC9B,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,YAAY,CACf,CAAC;aACH;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;gBACxB,CAAC,CAAC,CAAC,OAAO;gBACV,IAAI,CAAC,aAAa,YAAY,iBAAiB;gBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,cAAc,EAC3D;gBACA,IAAI,aAAa,GACf,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBACzD;AACD,gBAAA,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,IAAI,CAAC,GAAG,EACR,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC9B,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,YAAY,CACf,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;AAC9B,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;aAC9C,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAiB,KAAI;AAC9D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAkB,EAAE,CAAiB,KAAI;AAC7D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA+C;aACnD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAiB,KAAI;AAC7D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,cAAc,EAC7B,CAAC,CAAC,IAAI,CAAC,EAAE,EACT,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EACpB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CACrB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC3D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;gBACA,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,IAAI,CAAC,KAAK,EACV,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAC1C,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,YAAY,CACf,CAAC;aACH;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;gBACxB,CAAC,CAAC,CAAC,OAAO;gBACV,IAAI,CAAC,aAAa,YAAY,iBAAiB;gBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,cAAc,EAC3D;gBACA,IAAI,aAAa,GACf,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBACzD;AACD,gBAAA,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,IAAI,CAAC,KAAK,EACV,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAC1C,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,YAAY,CACf,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAC/B,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;aAC9C,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAiB,KAAI;AAC9D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAkB,EAAE,CAAiB,KAAI;AAC7D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAA+C;aACnD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAiB,KAAI;AAC7D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,cAAc,EAC7B,CAAC,CAAC,IAAI,CAAC,EAAE,EACT,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EACpB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CACrB,CAAC;aACH;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC3D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;AACxB,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;gBACA,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,IAAI,CAAC,MAAM,EACX,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAC3C,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,YAAY,CACf,CAAC;aACH;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAiB,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC;AACxD,gBAAA,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;gBACxB,CAAC,CAAC,CAAC,OAAO;gBACV,IAAI,CAAC,aAAa,YAAY,iBAAiB;gBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,cAAc,EAC3D;gBACA,IAAI,aAAa,GACf,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,oBAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBACzD;AACD,gBAAA,CAAC,CAAC,IAAI,CAAC,eAAe,CACpB,IAAI,CAAC,MAAM,EACX,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAC3C,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,YAAY,CACf,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;aAChC;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;QAEJ,cAAc;aACX,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAA,UAAA,EAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;aACpE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjD,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KACX,iBAAiB,CACf,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAuB,EAAC,KAAK,EAC7C,CAAC,EACD,CAAC,EACD,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,MAAM,CACT,CACF;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAuB,EAAC,iBAAiB;cACzD,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAuB,EAAC,SAAS,CACtD;aACA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAChB,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAuB,EAAC,mBAAmB;cAC3D,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAuB,EAAC,WAAW,CACxD;aACA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAI,EAAA,CAAA,CAAC,CAAC;QAC7D,cAAc;aACX,MAAM,CAAC,aAAa,CAAC;aACrB,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;aAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;aAC/B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAsB,EAAC,uBAAuB;AAChE,cAAE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAsB,EAAC,eAAe,CAC3D,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,sBAAsB,CAAC;AAC9B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CACpE;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CACnE;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,8BAA8B;cACjC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;AAC9C,iBAAA,sBAAsB,CAC9B,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,iBAAiB,CAAC;AACzB,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CACpE;AACA,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW;YAC7D,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CAC/D;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CACnE;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,0BAA0B;AAC/B,cAAE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,kBAAkB,CACzE,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,uBAAuB,CAAC;aAC/B,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW,CAChE;AACA,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW,CACrE;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CACnE;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,+BAA+B;cAClC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;AAC9C,iBAAA,uBAAuB,CAC/B,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,kBAAkB,CAAC;AAC1B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CACnE;AACA,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CACpE;aACA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY;YAC9D,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CAC9D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,2BAA2B;cAC9B,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;AAC9C,iBAAA,mBAAmB,CAC3B,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,oBAAoB,CAAC;AAC5B,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CACpE;AACA,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CACnE;aACA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW;YAC7D,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CAC/D;aACA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY;YAC9D,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CAC9D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,6BAA6B;cAChC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;AAC9C,iBAAA,qBAAqB,CAC7B,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,mBAAmB,CAAC;aAC3B,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW,CAChE;AACA,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CACnE;AACA,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW,CACrE;aACA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY;YAC9D,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,SAAS,CAC9D;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,4BAA4B;cAC/B,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;AAC9C,iBAAA,oBAAoB,CAC5B,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,yBAAyB,CAAC;AACjC,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY,CACjE;AACA,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CACpE;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY,CACtE;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,iCAAiC;cACpC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;AAC9C,iBAAA,yBAAyB,CACjC,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,oBAAoB,CAAC;AAC5B,aAAA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CACpE;aACA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY,CACjE;aACA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW;YAC7D,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,UAAU,CAC/D;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY,CACtE;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,6BAA6B;cAChC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;AAC9C,iBAAA,qBAAqB,CAC7B,CAAC;QACJ,cAAc;aACX,MAAM,CAAC,yBAAyB,CAAC;aACjC,MAAM,CAAC,0BAA0B,CAAC;aAClC,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KACA,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW,CAChE;aACA,IAAI,CACH,GAAG,EACH,CAAC,CAAC,KACA,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY,CACjE;AACA,aAAA,IAAI,CACH,OAAO,EACP,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,WAAW,CACrE;AACA,aAAA,IAAI,CACH,QAAQ,EACR,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC,EAAC,YAAY,CACtE;aACA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;iBAC9C,kCAAkC;cACrC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,IAAiC;AAC9C,iBAAA,0BAA0B,CAClC,CAAC;QAEJ,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,mBAAmB,CAAC;AAC3B,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC;AACjC,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC;AACjC,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACb,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/B,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,kBAAkB,CAAC;AAC1B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACb,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAC1B,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC;AACjC,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;QACrC,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,oBAAoB,CAAC;AAC5B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAClD,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAClD,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACb,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/B,cAAc;aACX,MAAM,CAAC,cAAc,CAAC;aACtB,MAAM,CAAC,qBAAqB,CAAC;AAC7B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACb,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AAC1B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,iBAAiB,GAAG,CAAC,CAAC;AACnD,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC;KACxD;IAED,iBAAiB,CAAC,GAAG,GAAa,EAAA;AAChC,QAAA,IAAI,eAAe,GAKf,IAAI,CAAC,iBAAiB,EAAE;aACzB,SAAS,CAA2B,gBAAgB,CAAC;AACrD,aAAA,IAAI,CACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KACxB,IAAI,CAAC,iBAAiB,KAAK,SAAS;cAChC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB;AAC3C,cAAE,IAAI,CACT,EACD,CAAC,CAAc,KAAK,CAAC,CAAC,EAAE,CACzB,CAAC;AACJ,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe;AACnC,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAEjC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACrE;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;aACX,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAc,KAAI;AAC3D,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;;AAE9B,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACnB;AACD,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC7B,MAAM,6BAA6B,GACjC,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAC9C,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC3D;AACC,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAC5C,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC5B;AACH,qBAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAC9C,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC5B;wBACC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAC5C,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC3D,CAAC,CAAC;gBACP,IAAI,CAAC,6BAA6B,EAAE;AAClC,oBAAA,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBACjC;aACF;AACH,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAK;AACxB,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;aACnC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAiB,EAAE,CAAc,KAAI;YACtD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC3B;YACD,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAc,KAAI;AAC5D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EACrD;gBACA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,MAAM,eAAe,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAClD,gBAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAc,KAAI;AAC5D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAAyC;aAC7C,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,MAAiB,EAAE,CAAc,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,aAAa,CAAC;AACvD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;AAExB,gBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,oBAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,oBAAoB,EAAE;yBAC1D,MAAM,CAAC,MAAM,CAAC;AACd,yBAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AACtB,yBAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;iBACzB;aACF;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACxD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,aAAa,CAAC;AACvD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;oBAC3C,MAAM,SAAS,GAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5C,oBAAA,IAAI,CAAC,0BAA0B,EAAE,IAAI,CACnC,GAAG,EACH,iBAAiB,CACf,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EACpC,IAAI,CAAC,oBAAoB,CAAC,WAAW,EACrC,SAAS,EACT,IAAI,CAAC,oBAAoB,CAAC,cAAc,EACxC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EACtC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EACpC,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,WAAW,EACtD,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,WAAW,CACrD,CACF,CAAC;oBACF,MAAM,6BAA6B,GACjC,IAAI,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC;oBAC1C,IAAI,6BAA6B,EAAE;wBACjC,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,wBAAA,MAAM,+BAA+B,GACnC,6BAA6B,CAAC,cAAc,EAAE,CAAC;AACjD,wBAAA,IAAI,+BAA+B,GAAG,MAAM,EAAE;4BAC5C,MAAM,GAAG,CAAC,CAAC;yBACZ;wBACD,MAAM,6BAA6B,GACjC,6BAA6B,CAAC,gBAAgB,CAC5C,+BAA+B,GAAG,MAAM,CACzC,CAAC;AACJ,wBAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG;AACpC,4BAAA,6BAA6B,CAAC,CAAC;AAC/B,4BAAA,6BAA6B,CAAC,CAAC;yBAChC,CAAC;qBACH;yBAAM;;AAEL,wBAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG,SAAS,CAAC;qBACjD;AACD,oBAAA,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,CAAC;;oBAEvD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC/B,MAAM,aAAa,GACjB,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACjD,wBAAA,IAAI,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC;wBAChD,IAAI,gBAAgB,GAAG,SAAS,CAAC;wBACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;4BACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAChD,4BAAA,IAAI,QAAQ,GAAG,gBAAgB,EAAE;gCAC/B,gBAAgB,GAAG,QAAQ,CAAC;gCAC5B,gBAAgB,GAAG,IAAI,CAAC;6BACzB;yBACF;AACD,wBAAA,IACE,gBAAgB;4BAChB,gBAAgB,GAAG,oBAAoB,EACvC;AACA,4BAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;yBAClC;6BAAM;4BACL,IAAI,CAAC,WAAW,EAAE,CAAC;yBACpB;qBACF;iBACF;aACF;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAc,KAAI;AACvD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,aAAa,CAAC;AACvD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,IAAI,CAAC,0BAA0B,EAAE,MAAM,EAAE,CAAC;AAC1C,gBAAA,IAAI,IAAI,CAAC,iBAAiB,YAAY,WAAW,EAAE;AACjD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;iBAC/C;AAAM,qBAAA,IACL,IAAI,CAAC,iBAAiB,YAAY,WAAW;oBAC7C,IAAI,CAAC,iBAAiB,YAAY,cAAc;AAChD,oBAAA,IAAI,CAAC,iBAAiB,YAAY,YAAY,EAC9C;AACA,oBAAA,IAAI,iBAA+C,CAAC;AACpD,oBAAA,IACE,IAAI,CAAC,iBAAiB,YAAY,WAAW;AAC7C,wBAAA,IAAI,CAAC,iBAAiB,YAAY,cAAc,EAChD;AACA,wBAAA,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;qBAC5C;AAAM,yBAAA,IACL,IAAI,CAAC,iBAAiB,CAAC,WAAW,YAAY,WAAW;AACzD,wBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,YAAY,cAAc,EAC5D;AACA,wBAAA,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;qBACxD;yBAAM;wBACL,IAAI,CAAC,cAAc,EAAE,CAAC;wBACtB,OAAO;qBACR;AACD,oBAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,qBAAqB,CAAC;AAC1D,wBAAA,KAAK,CAAC,CAAC;AACP,wBAAA,KAAK,CAAC,CAAC;AACR,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,wBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;qBACpC;yBAAM;wBACL,IAAI,CAAC,cAAc,EAAE,CAAC;qBACvB;iBACF;qBAAM;oBACL,IAAI,CAAC,cAAc,EAAE,CAAC;iBACvB;aACF;AACD,YAAA,WAAW,EAAE,CAAC;SACf,CAAC,CACL,CAAC;AACJ,QAAA,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEhC,cAAc;aACX,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAA,UAAA,EAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;aACpE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;aAC7C,MAAM,CAAC,QAAQ,CAAC;AAChB,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACb,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACb,aAAA,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,MAAM,CAAC;aACvC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KACd,CAAC,CAAC,QAAQ;cACN,qBAAqB,CAAC,aAAa;AACrC,cAAE,qBAAqB,CAAC,gBAAgB,CAC3C;aACA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;KACpE;IAED,uBAAuB,CAAC,GAAG,GAAa,EAAA;AACtC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KACrD,IAAI,CAAC,iBAAiB,KAAK,SAAS;cAChC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB;cACzC,IAAI,CACT,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;SAChD;AAED,QAAA,IAAI,eAAe,GAKf,IAAI,CAAC,uBAAuB,EAAE;aAC/B,SAAS,CAAiC,sBAAsB,CAAC;AACjE,aAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAoB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACxD,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe;AACnC,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,aAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QAEvC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACrE;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;aACX,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAoB,KAAI;AACjE,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACnB;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAiB,EAAE,CAAoB,KAAI;YAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC3B;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAoB,KAAI;AAClE,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EACrD;gBACA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAoB,KAAI;AAClE,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;AAEL,QAAA,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;AACvE,QAAA,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;QAC3E,cAAc;aACX,MAAM,CAAC,QAAQ,CAAC;AAChB,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,EAAE,eAAe,CAAC;AACzC,aAAA,IAAI,CAAC,OAAO,EAAE,iCAAiC,CAAC;aAChD,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACvC,cAAc;aACX,MAAM,CAAC,QAAQ,CAAC;AAChB,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,EAAE,aAAa,CAAC;AACvC,aAAA,IAAI,CAAC,OAAO,EAAE,+BAA+B,CAAC;aAC9C,MAAM,CAAC,OAAO,CAAC;AACf,aAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACvC,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;QAC3E,cAAc,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzE,cAAc;aACX,MAAM,CAAC,kCAAkC,CAAC;aAC1C,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAChC,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC;QAC5E,cAAc,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1E,cAAc;aACX,MAAM,CAAC,mCAAmC,CAAC;aAC3C,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAChC,QAAA,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;QACzE,cAAc,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvE,cAAc;aACX,MAAM,CAAC,gCAAgC,CAAC;aACxC,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAEhC,cAAc;aACX,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;aAC7C,MAAM,CAAC,8BAA8B,CAAC;aACtC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KACX,iBAAiB,CACf,CAAC,CAAC,IAAI,CAAC,KAAK,EACZ,CAAC,CAAC,WAAW,EACb,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,cAAc,EAChB,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,IAAI,CAAC,KAAK,EACZ,CAAC,CAAC,eAAe,EAAE,WAAW,EAC9B,CAAC,CAAC,aAAa,EAAE,WAAW,CAC7B,CACF;AACA,aAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,CAAQ,KAAA,EAAA,CAAC,CAAC,EAAE,gBAAgB,CAAC;AACzD,aAAA,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAQ,KAAA,EAAA,CAAC,CAAC,EAAE,cAAc,CAAC;AACrD,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzE,aAAA,IAAI,CACH,cAAc,EACd,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAC9D;aACA,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAC1B,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAC/C;AACA,aAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxB,cAAc;aACX,MAAM,CAAC,kCAAkC,CAAC;aAC1C,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KACX,iBAAiB,CACf,CAAC,CAAC,IAAI,CAAC,KAAK,EACZ,CAAC,CAAC,WAAW,EACb,CAAC,CAAC,SAAS,EACX,CAAC,CAAC,cAAc,EAChB,CAAC,CAAC,YAAY,EACd,CAAC,CAAC,IAAI,CAAC,KAAK,EACZ,CAAC,CAAC,eAAe,EAAE,WAAW,EAC9B,CAAC,CAAC,aAAa,EAAE,WAAW,CAC7B,CACF;AACA,aAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;;AAE7B,aAAA,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;AAChC,aAAA,IAAI,CACH,cAAc,EACd,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,6BAA6B,IAAI,CAC3D;aACA,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAC1B,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAC/C;AACA,aAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExB,cAAc,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC3C,YAAA,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,CAAC;AACjD,SAAC,CAAC,CAAC;KACJ;IAED,kBAAkB,CAAC,GAAG,GAAa,EAAA;AACjC,QAAA,IAAI,eAAe,GAKf,IAAI,CAAC,kBAAkB,EAAE;aAC1B,SAAS,CACR,6BAA6B,CAC9B;AACA,aAAA,IAAI,CACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KACzB,IAAI,CAAC,iBAAiB,KAAK,SAAS;cAChC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB;AAC3C,cAAE,IAAI,CACT,EACD,CAAC,CAAe,KAAK,CAAC,CAAC,EAAE,CAC1B,CAAC;AACJ,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe;AACnC,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,eAAe,CAAC;aACvB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,aAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAElC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACrE;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;AACX,aAAA,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC;aACjC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAkB,EAAE,CAAe,KAAI;AAC5D,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpB,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAiB,EAAE,CAAe,KAAI;YACvD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC3B;YACD,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAe,KAAI;AAC7D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EACrD;gBACA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,MAAM,eAAe,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAClD,gBAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAe,KAAI;AAC7D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;AAC9B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,SAAS,CAAC;AACnD,gBAAA,CAAC,CAAC,QAAQ;AACV,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACjE,gBAAA,IAAI,CAAC,gBAAgB,CACnB,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,QAAQ,EACV,CAAC,CAAC,UAAU,IAAI,sBAAsB,CAAC,UAAU,EACjD,CAAC,IAAI,KAAI;AACP,oBAAA,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AAChB,iBAAC,EACD,CAAC,IAAI,KAAI;AACP,oBAAA,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AACd,oBAAA,IAAI,IAAI,CAAC,aAAa,YAAY,eAAe,EAAE;AACjD,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC;AAC7B,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;wBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,wBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;qBAChC;AACH,iBAAC,CACF,CAAC;aACH;AACH,SAAC,CAAC;AACD,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAAsD;aAC1D,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAgB,EAAE,CAAe,KAAI;AAC1D,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,IACE,CAAC,CAAC,WAAW,YAAY,WAAW;AACpC,oBAAA,CAAC,CAAC,WAAW,YAAY,cAAc,EACvC;AACA,oBAAA,MAAM,IAAI,GACR,CAAC,CAAC,WAAW,YAAY,WAAW;0BAChC,CAAC,CAAC,WAAW;AACf,0BAAG,CAAC,CAAC,WAAW,CAAC,IAAoB,CAAC;AAC1C,oBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClC,oBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CACxC,IAAI,EACJ,cAAc,CAAC,QAAQ,EACvB,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;iBACH;aACF;iBAAM;AACL,gBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACrC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,EAAE,CAAe,KAAI;AACzD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,IACE,CAAC,CAAC,WAAW,YAAY,WAAW;AACpC,oBAAA,CAAC,CAAC,WAAW,YAAY,cAAc,EACvC;AACA,oBAAA,MAAM,IAAI,GACR,CAAC,CAAC,WAAW,YAAY,WAAW;0BAChC,CAAC,CAAC,WAAW;AACf,0BAAG,CAAC,CAAC,WAAW,CAAC,IAAoB,CAAC;AAC1C,oBAAA,MAAM,aAAa,GAAU;AAC3B,wBAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AACxB,wBAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;qBAC1B,CAAC;AACF,oBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBAC1B;aACF;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,EAAE,CAAe,KAAI;AACxD,YAAA,IACE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClD,gBAAA,CAAC,CAAC,CAAC,OAAO,EACV;AACA,gBAAA,IACE,CAAC,CAAC,WAAW,YAAY,WAAW;AACpC,oBAAA,CAAC,CAAC,WAAW,YAAY,cAAc,EACvC;AACA,oBAAA,MAAM,IAAI,GACR,CAAC,CAAC,WAAW,YAAY,WAAW;0BAChC,CAAC,CAAC,WAAW;AACf,0BAAG,CAAC,CAAC,WAAW,CAAC,IAAoB,CAAC;;oBAE1C,IACE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;wBAC/B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;wBAClC,IAAI,CAAC,aAAa,YAAY,iBAAiB;wBAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,cAAc,CAAC,QAAQ,EACrD;AACA,wBAAA,IAAI,aAAa,GAAU;AACzB,4BAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AACxB,4BAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;yBAC1B,CAAC;AACF,wBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,4BAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;yBACzD;AACD,wBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBACzB,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3C,wBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;wBACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,wBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;qBAChC;iBACF;aACF;AACD,YAAA,WAAW,EAAE,CAAC;AAChB,SAAC,CAAC,CACL;aACA,MAAM,CAAC,WAAW,CAAC;AACnB,aAAA,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AACtB,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;AACvB,aAAA,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;aACxB,MAAM,CAAC,SAAS,CAAC;AACjB,aAAA,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC;AACjC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClB,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClB,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;AAC5B,aAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;AAC7B,aAAA,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAElC,cAAc;AACX,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,KAAK,IAAI,CAAC;AACpC,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,MAAM,IAAI,CAAC;aACtC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAA,UAAA,EAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;aACpE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;aAC7C,MAAM,CAAC,KAAK,CAAC;AACb,aAAA,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,KAC1B,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM;AAC1C,cAAE,QAAQ;AACV,cAAE,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,KAAK;AAC3C,kBAAE,UAAU;kBACV,YAAY,CACnB;AACA,aAAA,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,KACtB,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM;AACtC,cAAE,QAAQ;AACV,cAAE,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM;AACxC,kBAAE,KAAK;kBACL,OAAO,CACd;aACA,MAAM,CAAC,GAAG,CAAC;aACX,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;aACvD,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC;aACxD,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;aACxD,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAC/D,aAAA,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,KACrB,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM;AAC1C,cAAE,QAAQ;AACV,cAAE,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,KAAK;AAC3C,kBAAE,KAAK;kBACL,OAAO,CACd;AACA,aAAA,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,QAAQ,IAAI,CAAC;AAC5C,aAAA,KAAK,CACJ,aAAa,EACb,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,IAAI,gCAAgC,CACxD;aACA,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;aACxD,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,KAChB,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,aAAa,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK,IAAI,SAAS,CACjE;aACA,IAAI,CAAC,CAAC,CAAC,KACN,CAAC,CAAC,IAAI;AACH,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACrB,aAAA,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAC3B,CAAC;KACL;IAED,mBAAmB,CAAC,GAAG,GAAa,EAAA;AAClC,QAAA,IAAI,eAAe,GAKf,IAAI,CAAC,mBAAmB,EAAE;aAC3B,SAAS,CACR,8BAA8B,CAC/B;AACA,aAAA,IAAI,CACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAC1B,IAAI,CAAC,iBAAiB,KAAK,SAAS;cAChC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB;AAC3C,cAAE,IAAI,CACT,EACD,CAAC,CAAgB,KAAK,CAAC,CAAC,EAAE,CAC3B,CAAC;AACJ,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe;AACnC,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,eAAe,CAAC;aACvB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,aAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAEnC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACrE;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,cAAc;AACX,aAAA,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,KAAK,IAAI,CAAC;AACpC,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,MAAM,IAAI,CAAC;aACtC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAA,UAAA,EAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;aACpE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvB,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;aACX,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,KAAI;AAC5C,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,KAAK,EACL,MAAM,CAAC,WAAW,EAClB,SAAS,CACV,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EACrD;gBACA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAgB,KAAI;AAC9D,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;KACN;IAED,sBAAsB,CAAC,GAAG,GAAa,EAAA;AACrC,QAAA,IAAI,eAAe,GAKf,IAAI,CAAC,sBAAsB,EAAE;aAC9B,SAAS,CACR,iCAAiC,CAClC;AACA,aAAA,IAAI,CACH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAC7B,IAAI,CAAC,iBAAiB,KAAK,SAAS;cAChC,CAAC,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB;AAC3C,cAAE,IAAI,CACT,EACD,CAAC,CAAmB,KAAK,CAAC,CAAC,EAAE,CAC9B,CAAC;AACJ,QAAA,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,eAAe;AACnC,aAAA,KAAK,EAAE;aACP,MAAM,CAAC,eAAe,CAAC;aACvB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACvB,aAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAEtC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACrE;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7D,cAAc;AACX,aAAA,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,KAAK,IAAI,CAAC;AACpC,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAG,EAAA,CAAC,CAAC,MAAM,IAAI,CAAC;aACtC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAA,UAAA,EAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;aACpE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvB,aAAa,CAAC,MAAM,EAAE,CAAC;QAEvB,cAAc;aACX,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,KAAI;AAC5C,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,KAAK,EACL,MAAM,CAAC,WAAW,EAClB,SAAS,CACV,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,IACE,CAAC,YAAY,CAAC,gBAAgB;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EACrD;gBACA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,CAAmB,KAAI;AACjE,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;KACN;AAED,IAAA,4BAA4B,CAAC,UAA6B,EAAA;AACxD,QAAA,MAAM,mBAAmB,GAKrB,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,wBAAwB,UAAU,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC;QAC5E,MAAM,aAAa,GACjB,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrC,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,MAAM,kBAAkB,GAAG;AACzB,YAAA,GAAG,sBAAsB;AACzB,YAAA,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK;SACzB,CAAC;QACF,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;;YAG7C,mBAAmB;iBAChB,MAAM,CAAC,uCAAuC,CAAC;AAC/C,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACZ,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC1C,iBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,iBAAA,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,UAAU,CAAC;AAClD,iBAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC;AAC9C,iBAAA,IAAI,CACH,MAAM,EACN,UAAU,CAAC,QAAQ;kBACf,kBAAkB,CAAC,aAAa;AAClC,kBAAE,kBAAkB,CAAC,KAAK,CAC7B;AACA,iBAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;AAC7B,iBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,sBAAsB,GAAG,mBAAmB;iBAC/C,MAAM,CAAiB,uCAAuC,CAAC;AAC/D,iBAAA,IAAI,EAAE;kBACL,qBAAqB,EAAE,CAAC;YAC5B,IAAI,sBAAsB,EAAE;;AAE1B,gBAAA,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,UAAU;AAC1C,sBAAE,CAAC;sBACD,sBAAsB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;wBACnD,cAAc,CAAC,kBAAkB,CAAC;wBAClC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AACxC,gBAAA,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,UAAU;AAC3C,sBAAE,CAAC;sBACD,sBAAsB,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;wBACpD,aAAa,CAAC,kBAAkB,CAAC;wBACjC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBACzC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,gBAAgB,CACnD,IAAI,CAAC,GAAG,CACN,aAAa,CAAC,kBAAkB,CAAC,GAAG,aAAa,GAAG,CAAC,EACrD,cAAc,CAAC,kBAAkB,CAAC,GAAG,aAAa,GAAG,CAAC,EACtD,YAAY,CAAC,kBAAkB,CAAC,GAAG,cAAc,GAAG,CAAC,EACrD,eAAe,CAAC,kBAAkB,CAAC,GAAG,cAAc,GAAG,CAAC,CACzD,CACF,CAAC;gBACF,mBAAmB;qBAChB,MAAM,CAAC,uCAAuC,CAAC;AAC/C,qBAAA,IAAI,CACH,GAAG,EACH,QAAQ,CACN,CAAC,aAAa,GAAG,CAAC,EAClB,CAAC,cAAc,GAAG,CAAC,EACnB,aAAa,EACb,cAAc,CACf,CACF;AACA,qBAAA,IAAI,CACH,MAAM,EACN,UAAU,CAAC,QAAQ;AACjB,sBAAE,UAAU,CAAC,IAAI,CAAC,aAAa;AAC/B,sBAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAC1B;AACA,qBAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC1B,mBAAmB;qBAChB,MAAM,CAAC,kCAAkC,CAAC;AAC1C,qBAAA,IAAI,CACH,WAAW,EACX,CAAA,UAAA,EAAa,mBAAmB,CAAC,CAAC,CAAA,CAAA,EAAI,mBAAmB,CAAC,CAAC,CAAA,CAAA,CAAG,CAC/D,CAAC;aACL;;YAGD,mBAAmB;iBAChB,MAAM,CAAC,wCAAwC,CAAC;AAChD,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACZ,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC1C,iBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,iBAAA,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,UAAU,CAAC;AAClD,iBAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC;AAC9C,iBAAA,IAAI,CACH,MAAM,EACN,UAAU,CAAC,QAAQ;kBACf,kBAAkB,CAAC,aAAa;AAClC,kBAAE,kBAAkB,CAAC,KAAK,CAC7B;AACA,iBAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;AAC7B,iBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAChC,MAAM,uBAAuB,GAAG,mBAAmB;iBAChD,MAAM,CAAiB,wCAAwC,CAAC;AAChE,iBAAA,IAAI,EAAE;kBACL,qBAAqB,EAAE,CAAC;YAC5B,IAAI,uBAAuB,EAAE;;AAE3B,gBAAA,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,WAAW;AAC3C,sBAAE,CAAC;sBACD,uBAAuB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;wBACpD,cAAc,CAAC,kBAAkB,CAAC;wBAClC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AACxC,gBAAA,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,WAAW;AAC5C,sBAAE,CAAC;sBACD,uBAAuB,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;wBACrD,aAAa,CAAC,kBAAkB,CAAC;wBACjC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBACzC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBACvE,mBAAmB;qBAChB,MAAM,CAAC,wCAAwC,CAAC;AAChD,qBAAA,IAAI,CACH,GAAG,EACH,QAAQ,CACN,CAAC,aAAa,GAAG,CAAC,EAClB,CAAC,cAAc,GAAG,CAAC,EACnB,aAAa,EACb,cAAc,CACf,CACF;AACA,qBAAA,IAAI,CACH,MAAM,EACN,UAAU,CAAC,QAAQ;AACjB,sBAAE,UAAU,CAAC,IAAI,CAAC,aAAa;AAC/B,sBAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAC1B;AACA,qBAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC1B,mBAAmB;qBAChB,MAAM,CAAC,mCAAmC,CAAC;AAC3C,qBAAA,IAAI,CACH,WAAW,EACX,CAAA,UAAA,EAAa,oBAAoB,CAAC,CAAC,CAAA,CAAA,EAAI,oBAAoB,CAAC,CAAC,CAAA,CAAA,CAAG,CACjE,CAAC;aACL;;YAGD,mBAAmB;iBAChB,MAAM,CAAC,qCAAqC,CAAC;AAC7C,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACZ,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,GAAG,CAAC,CAAC;AAC1C,iBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,iBAAA,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,UAAU,CAAC;AAClD,iBAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,QAAQ,CAAC;AAC9C,iBAAA,IAAI,CACH,MAAM,EACN,UAAU,CAAC,QAAQ;kBACf,kBAAkB,CAAC,aAAa;AAClC,kBAAE,kBAAkB,CAAC,KAAK,CAC7B;AACA,iBAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;AAC7B,iBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,oBAAoB,GAAG,mBAAmB;iBAC7C,MAAM,CAAiB,qCAAqC,CAAC;AAC7D,iBAAA,IAAI,EAAE;kBACL,qBAAqB,EAAE,CAAC;YAC5B,IAAI,oBAAoB,EAAE;;AAExB,gBAAA,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,QAAQ;AACxC,sBAAE,CAAC;sBACD,oBAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;wBACjD,cAAc,CAAC,kBAAkB,CAAC;wBAClC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AACxC,gBAAA,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,QAAQ;AACzC,sBAAE,CAAC;sBACD,oBAAoB,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;wBAClD,aAAa,CAAC,kBAAkB,CAAC;wBACjC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AACzC,gBAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,gBAAgB,CACjD,UAAU;AACR,oBAAA,IAAI,CAAC,GAAG,CACN,aAAa,CAAC,kBAAkB,CAAC,GAAG,aAAa,GAAG,CAAC,EACrD,cAAc,CAAC,kBAAkB,CAAC,GAAG,aAAa,GAAG,CAAC,EACtD,YAAY,CAAC,kBAAkB,CAAC,GAAG,cAAc,GAAG,CAAC,EACrD,eAAe,CAAC,kBAAkB,CAAC,GAAG,cAAc,GAAG,CAAC,CACzD,CACJ,CAAC;gBACF,mBAAmB;qBAChB,MAAM,CAAC,qCAAqC,CAAC;AAC7C,qBAAA,IAAI,CACH,GAAG,EACH,QAAQ,CACN,CAAC,aAAa,GAAG,CAAC,EAClB,CAAC,cAAc,GAAG,CAAC,EACnB,aAAa,EACb,cAAc,CACf,CACF;AACA,qBAAA,IAAI,CACH,MAAM,EACN,UAAU,CAAC,QAAQ;AACjB,sBAAE,UAAU,CAAC,IAAI,CAAC,aAAa;AAC/B,sBAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAC1B;AACA,qBAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC1B,mBAAmB;qBAChB,MAAM,CAAC,gCAAgC,CAAC;AACxC,qBAAA,IAAI,CACH,WAAW,EACX,CAAA,UAAA,EAAa,iBAAiB,CAAC,CAAC,CAAA,CAAA,EAAI,iBAAiB,CAAC,CAAC,CAAA,CAAA,CAAG,CAC3D,CAAC;aACL;SACF;KACF;AAED,IAAA,6BAA6B,CAAC,UAA6B,EAAA;AACzD,QAAA,MAAM,mBAAmB,GAKrB,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,wBAAwB,UAAU,CAAC,EAAE,CAAA,CAAE,CAAC,CAAC;QAC5E,MAAM,oBAAoB,GAKtB,mBAAmB,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;QACzE,MAAM,kBAAkB,GAKpB,mBAAmB,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;AAEvE,QAAA,IAAI,UAAU,CAAC,eAAe,KAAK,IAAI,EAAE;YACvC,oBAAoB;AACjB,iBAAA,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC;iBACpC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC;iBAC3D,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC;iBAC7D,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC;iBACnD,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC;iBACnD,MAAM,CAAC,OAAO,CAAC;AACf,iBAAA,IAAI,CACH,MAAM,EACN,UAAU,CAAC,QAAQ;AACjB,kBAAE,UAAU,CAAC,eAAe,CAAC,aAAa;AAC1C,kBAAE,UAAU,CAAC,eAAe,CAAC,KAAK,CACrC;iBACA,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC;iBACrD,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;SAC5D;aAAM;YACL,oBAAoB;AACjB,iBAAA,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC;AACpC,iBAAA,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AACtB,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;SAC5B;AAED,QAAA,IAAI,UAAU,CAAC,aAAa,KAAK,IAAI,EAAE;YACrC,kBAAkB;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC;iBACpC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;iBACzD,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC;iBAC3D,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;iBACjD,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;iBACjD,MAAM,CAAC,OAAO,CAAC;AACf,iBAAA,IAAI,CACH,MAAM,EACN,UAAU,CAAC,QAAQ;AACjB,kBAAE,UAAU,CAAC,aAAa,CAAC,aAAa;AACxC,kBAAE,UAAU,CAAC,aAAa,CAAC,KAAK,CACnC;iBACA,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;iBACnD,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;SAC1D;aAAM;YACL,kBAAkB;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC;AACpC,iBAAA,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AACtB,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;SAC5B;KACF;AAED,IAAA,kBAAkB,CAAC,EAAU,EAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,IAAI,KAAK,CAAC,WAAW,YAAY,WAAW,IAAI,KAAK,CAAC,GAAG,EAAE;YACzD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACvD,YAAA,IAAI,QAAQ,GACV,eAAe,CAAC,CAAC,CAAC;gBAClB,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3C,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5C,gBAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,QAAQ,GACV,eAAe,CAAC,CAAC,CAAC;gBAClB,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC1C,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,gBAAA,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/D,gBAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;aAChE;;AAED,YAAA,IACE,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,QAAQ;AAClC,gBAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAC/B;AACA,gBAAA,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;aACtE;AACD,YAAA,IACE,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,QAAQ;AACnC,gBAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAChC;AACA,gBAAA,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;aACxE;YACD,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChD,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SAClD;QACD,IAAI,KAAK,CAAC,WAAW,YAAY,cAAc,IAAI,KAAK,CAAC,GAAG,EAAE;YAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACvD,YAAA,IAAI,iBAAiB,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAA,IAAI,kBAAkB,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAC5C,YAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE;AAC5D,gBAAA,IAAI,OAAO,CAAC,KAAK,EAAE;oBACjB,IACE,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,WAAW,CAAC,YAAY;wBACvD,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,WAAW,CAAC,YAAY,EACvD;AACA,wBAAA,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAC1B,iBAAiB,EACjB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1C,CAAC;qBACH;yBAAM,IACL,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,WAAW,CAAC,YAAY;wBACvD,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,WAAW,CAAC,YAAY,EACvD;AACA,wBAAA,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAC3B,kBAAkB,EAClB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1C,CAAC;qBACH;iBACF;aACF;AACD,YAAA,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,iBAAiB,EAAE;AAC1C,gBAAA,eAAe,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;aACxC;AACD,YAAA,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,kBAAkB,EAAE;AAC3C,gBAAA,eAAe,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;aACzC;AACD,YAAA,IAAI,QAAQ,GACV,eAAe,CAAC,CAAC,CAAC;gBAClB,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC;gBACpD,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC;AACrD,gBAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,QAAQ,GACV,eAAe,CAAC,CAAC,CAAC;gBAClB,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC;gBACnD,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC;AACtD,gBAAA,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/D,gBAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;aAChE;;AAED,YAAA,IACE,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,QAAQ;iBACjC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,EACtC;gBACA,QAAQ;AACN,oBAAA,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;aACpE;AACD,YAAA,IACE,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,QAAQ;iBAClC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,EACvC;gBACA,QAAQ;AACN,oBAAA,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;aACtE;YACD,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CACrC,IAAI,CAAC,KAAK,EACV,QAAQ,EACR,KAAK,CAAC,WAAW,CAAC,YAAY,EAC9B,KAAK,CAAC,WAAW,CAAC,YAAY,CAC/B,CAAC;YACF,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,CACrC,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,KAAK,CAAC,WAAW,CAAC,YAAY,EAC9B,KAAK,CAAC,WAAW,CAAC,YAAY,CAC/B,CAAC;SACH;KACF;AAED,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACtD,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,aAAa,GAAG,CAAC,CAAC;;AAEtB,YAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACnC,IAAI,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACnD,oBAAA,MAAM,+BAA+B,GACnC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrD,oBAAA,MAAM,+BAA+B,GACnC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACtD,YAAY,GAAG,IAAI,CAAC,GAAG,CACrB,YAAY,EACZ,+BAA+B,CAChC,CAAC;oBACF,aAAa,GAAG,IAAI,CAAC,GAAG,CACtB,aAAa,EACb,+BAA+B,CAChC,CAAC;iBACH;aACF;;YAED,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC;YACnD,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SACxD;KACF;IAED,UAAU,GAAA;AACR,QAAA,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAClD;IAED,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAmB,iBAAA,CAAA,CAAC,CAAC;KACtD;IAED,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAuB,qBAAA,CAAA,CAAC,CAAC;KAC1D;IAED,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAoB,kBAAA,CAAA,CAAC,CAAC;KACvD;IAED,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAuB,qBAAA,CAAA,CAAC,CAAC;KAC1D;IAED,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAoB,kBAAA,CAAA,CAAC,CAAC;KACvD;IAED,uBAAuB,GAAA;QACrB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAA0B,wBAAA,CAAA,CAAC,CAAC;KAC7D;IAED,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAqB,mBAAA,CAAA,CAAC,CAAC;KACxD;IAED,mBAAmB,GAAA;QACjB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAsB,oBAAA,CAAA,CAAC,CAAC;KACzD;IAED,sBAAsB,GAAA;QACpB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAyB,uBAAA,CAAA,CAAC,CAAC;KAC5D;;AAID,IAAA,eAAe,CAAC,IAAiB,EAAA;QAC/B,IACE,IAAI,CAAC,cAAc;AACnB,aAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;AACnE,gBAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EACtE;YACA,IAAI,CAAC,oBAAoB,GAAG,IAAI,iBAAiB,CAC/C,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,cAAc,EACnB,IAAI,EACJ,SAAS,EACT,wBAAwB,CACzB,CAAC;SACH;aAAM;AACL,YAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,IAAI,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK;AACvD,qBAAA,GAAG,EAAE;qBACL,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACnE,gBAAA,IAAI,uBAAuB,KAAK,SAAS,EAAE;AACzC,oBAAA,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK;AACnD,yBAAA,GAAG,EAAE;yBACL,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;iBACnE;AACD,gBAAA,IAAI,uBAAuB,KAAK,SAAS,EAAE;AACzC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,iBAAiB,CAC/C,IAAI,CAAC,KAAK,EACV,uBAAuB,EACvB,IAAI,EACJ,SAAS,EACT,wBAAwB,CACzB,CAAC;iBACH;qBAAM;;iBAEN;aACF;iBAAM;;aAEN;SACF;KACF;AAED,IAAA,gBAAgB,CAAC,IAAiB,EAAA;QAChC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;YAC3C,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,KAAK,IAAI,EAAE;gBAC5C,IACE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAC7C,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC5D;AACD,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAC5C,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC/B,EACD;oBACA,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,IAAI,EACJ,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAY,EAC7C,IAAI,CAAC,EAAE,CACR,CAAC;;oBAEF,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,mBAAmB,CAAC,EAAE,EAAE,CAAC;AACzB,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;iBAC3C;qBAAM,IACL,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAC5C,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC5D;AACD,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAC7C,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC/B,EACD;oBACA,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,IAAI,EACJ,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAC9B,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAY,CAC9C,CAAC;;oBAEF,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,mBAAmB,CAAC,EAAE,EAAE,CAAC;AACzB,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;iBAC3C;qBAAM;AACL,oBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;wBAC5B,IAAI,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK;AACvD,6BAAA,GAAG,EAAE;AACL,6BAAA,IAAI,CACH,CAAC,CAAC,KACA,CAAC,CAAC,gBAAgB,CAChB,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAC5D,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CACzD,CAAC;wBACJ,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAC7B,wBAAA,IAAI,uBAAuB,KAAK,SAAS,EAAE;AACzC,4BAAA,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK;AACnD,iCAAA,GAAG,EAAE;iCACL,IAAI,CACH,CAAC,CAAC,KACA,CAAC,CAAC,eAAe,CACf,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE;AACnD,gCAAA,EAAE,CACL,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAC1D,CAAC;4BACJ,gBAAgB,GAAG,IAAI,CAAC;yBACzB;AACD,wBAAA,IAAI,uBAAuB,KAAK,SAAS,EAAE;4BACzC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CACjD,IAAI,EACJ,uBAAuB,EACvB,gBAAgB;kCACZ,IAAI,CAAC,EAAE;kCACN,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAa,EACnD,gBAAgB;AACd,kCAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAa;AACjD,kCAAE,IAAI,CAAC,EAAE,CACZ,CAAC;;4BAEF,IAAI,CAAC,cAAc,EAAE,CAAC;4BACtB,mBAAmB,CAAC,EAAE,EAAE,CAAC;AACzB,4BAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;yBAC3C;6BAAM;;4BAEL,IAAI,CAAC,cAAc,EAAE,CAAC;yBACvB;qBACF;yBAAM;;wBAEL,IAAI,CAAC,cAAc,EAAE,CAAC;qBACvB;iBACF;aACF;iBAAM;;gBAEL,IAAI,CAAC,cAAc,EAAE,CAAC;aACvB;SACF;KACF;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,oBAAoB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;KACvC;AAED,IAAA,SAAS,CAAC,OAAuB,EAAA;QAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,QAAA,IAAI,OAAO,YAAY,WAAW,EAAE;AAClC,YAAA,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACjC;AACD,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC3C;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACpC;AAAM,aAAA,IAAI,OAAO,YAAY,cAAc,EAAE;AAC5C,YAAA,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACjC;AACD,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC3C;AACD,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACvC;AAAM,aAAA,IAAI,OAAO,YAAY,WAAW,EAAE;AACzC,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC3C;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACpC;AAAM,aAAA,IAAI,OAAO,YAAY,iBAAiB,EAAE;AAC/C,YAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SAC1C;aAAM,IAAI,OAAO,YAAY,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE;AACjE,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACrC;KACF;IAED,WAAW,GAAA;AACT,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE;AACxC,YAAA,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;YAC5B,OAAO,CAAC,YAAY,EAAE,CAAC;SACxB;AACD,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KACzB;AAED,IAAA,0BAA0B,CACxB,SAAoE,EAAA;QAEpE,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAE9B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;AAC3D,QAAA,MAAM,gBAAgB,GAAG,SAAS,EAAE,QAAQ,CAAC;QAC7C,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;YACzC,IAAI,CAAC,oBAAoB,GAAG,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1E,IAAI,cAAc,EAAE;gBAClB,IACE,SAAS,YAAY,WAAW;oBAChC,SAAS,YAAY,iBAAiB,EACtC;AACA,oBAAA,IAAI,SAAS,YAAY,WAAW,EAAE;AACpC,wBAAA,IAAI,SAAS,CAAC,IAAI,EAAE;AAClB,4BAAA,cAAc,CAAC,KAAK,GAAG,CAAA,EAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAK,EAAA,EAAA,SAAS,CAAC,IAAI,EAAE,CAAC;yBACpE;6BAAM;4BACL,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;yBAC5C;qBACF;AAAM,yBAAA,IAAI,SAAS,YAAY,iBAAiB,EAAE;wBACjD,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;qBAC5C;;AAED,oBAAA,cAAc,CAAC,QAAQ,GAAG,SAAS,CAAC;AACpC,oBAAA,cAAc,CAAC,QAAQ,GAAG,gBAAgB,CAAC;iBAC5C;qBAAM;AACL,oBAAA,cAAc,CAAC,KAAK,GAAG,uBAAuB,CAAC;;AAE/C,oBAAA,cAAc,CAAC,QAAQ,GAAG,SAAS,CAAC;AACpC,oBAAA,cAAc,CAAC,QAAQ,GAAG,gBAAgB,CAAC;iBAC5C;aACF;SACF;aAAM;AACL,YAAA,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;AACzC,YAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;YACtC,IAAI,cAAc,EAAE;AAClB,gBAAA,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC;AAC1B,gBAAA,cAAc,CAAC,QAAQ,GAAG,SAAS,CAAC;aACrC;SACF;KACF;IAEO,sBAAsB,GAAA;AAC5B,QAAA,IACE,IAAI,CAAC,uBAAuB,KAAK,SAAS;AAC1C,YAAA,IAAI,CAAC,oBAAoB,KAAK,SAAS,EACvC;YACA,OAAO;SACR;AACD,QAAA,MAAM,mBAAmB,GACvB,IAAI,CAAC,uBAAuB,YAAY,YAAY;AAClD,cAAE,SAAS;AACX,cAAG,IAAI,CAAC,uBAA0C,CAAC,EAAE,CAAC;;;AAG1D,QAAA,IACED,QAAM,CACJ,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,SAAS,EAAE,CACnD,EACD;YACA,OAAO;SACR;AACD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACvC,QAAA,MAAM,EAAE,GAAG,eAAe,CACxB,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,SAAS,EAAE,CACnD,CAAC;AACF,QAAA,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1C,QAAA,MAAM,aAAa,GAAG,IAAI,kBAAkB,CAC1C,IAAI,EACJ,mBAAmB,EACnB,QAAQ,EACR,MAAM,CACP,CAAC;QACF,aAAa,CAAC,EAAE,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;KAChC;AAED,IAAA,iBAAiB,CAAC,SAAyB,EAAA;QACzC,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACnD;AAED,IAAA,kBAAkB,CAAC,SAAyB,EAAA;AAC1C,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE;;YAEtB,OAAO;SACR;AACD,QAAA,IACE,IAAI,CAAC,uBAAuB,KAAK,SAAS;aACzC,SAAS,YAAY,WAAW;AAC/B,gBAAA,SAAS,YAAY,iBAAiB,CAAC,EACzC;AACA,YAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;SAC5C;AAAM,aAAA,IACL,IAAI,CAAC,uBAAuB,KAAK,SAAS;YAC1C,SAAS,YAAY,cAAc,EACnC;AACA,YAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACjD;aAAM;AACL,YAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;SAC5C;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnC,QAAA,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,YAAY,EAAE,CAAC;;QAEzB,IAAI,SAAS,YAAY,WAAW,IAAI,SAAS,CAAC,QAAQ,EAAE;AAC1D,YAAA,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE;AACxC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;aAClC;SACF;KACF;AAED,IAAA,uBAAuB,CAAC,SAAyB,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,uBAAuB,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;SAC5C;QACD,MAAM,+BAA+B,GACnC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACxC,QAAA,IAAI,+BAA+B,IAAI,CAAC,EAAE;YACxC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;SAC/D;AACD,QAAA,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC3B,SAAS,CAAC,YAAY,EAAE,CAAC;;QAEzB,IAAI,SAAS,YAAY,WAAW,IAAI,SAAS,CAAC,QAAQ,EAAE;AAC1D,YAAA,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE;AACxC,gBAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;aACvC;SACF;KACF;AAED,IAAA,mBAAmB,CAAC,SAAyB,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;SACzC;aAAM;AACL,YAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SACpC;KACF;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;AAC3C,QAAA,KAAK,MAAM,oBAAoB,IAAI,IAAI,CAAC,aAAa,EAAE;AACrD,YAAA,oBAAoB,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtC,oBAAoB,CAAC,YAAY,EAAE,CAAC;SACrC;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KACzB;IAED,mBAAmB,GAAA;QACjB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,MAAM,qBAAqB,GAAa,EAAE,CAAC;YAC3C,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,MAAM,wBAAwB,GAAa,EAAE,CAAC;YAC9C,MAAM,mBAAmB,GAAa,EAAE,CAAC;AACzC,YAAA,KAAK,MAAM,oBAAoB,IAAI,IAAI,CAAC,aAAa,EAAE;AACrD,gBAAA,IAAI,oBAAoB,YAAY,WAAW,EAAE;AAC/C,oBAAA,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;iBAClD;AAAM,qBAAA,IAAI,oBAAoB,YAAY,cAAc,EAAE;AACzD,oBAAA,qBAAqB,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;iBACrD;AAAM,qBAAA,IAAI,oBAAoB,YAAY,WAAW,EAAE;AACtD,oBAAA,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;iBAClD;AAAM,qBAAA,IAAI,oBAAoB,YAAY,iBAAiB,EAAE;AAC5D,oBAAA,wBAAwB,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;iBACxD;AAAM,qBAAA,IAAI,oBAAoB,YAAY,YAAY,EAAE;AACvD,oBAAA,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;iBACnD;aACF;AACD,YAAA,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,IAAI,EACJ,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,CACpB,CAAC;YACF,YAAY,CAAC,EAAE,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;SACpC;KACF;IAED,4BAA4B,GAAA;AAC1B,QAAA,MAAM,aAAa,GAIf,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAChE,QAAA,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;AACpC,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE;AACxC,YAAA,IAAI,OAAO,YAAY,WAAW,EAAE;AAClC,gBAAA,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;aAC/D;AACD,YAAA,IAAI,OAAO,YAAY,iBAAiB,EAAE;AACxC,gBAAA,aAAa,CAAC,WAAW,CAAC,IAAI,CAC5B,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAC1C,CAAC;aACH;SACF;AACD,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;KAC9D;AAED,IAAA,+BAA+B,CAAC,MAAc,EAAA;QAC5C,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAC3C,YAAA,IAAI;gBACF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,gBAAA,IAAI,aAAa,CAAC,IAAI,KAAK,qBAAqB,EAAE;oBAChD,OAAO;iBACR;AACD,gBAAA,MAAM,MAAM,GAAG,IAAI,WAAW,CAC5B,IAAI,EACJ,aAAa,CAAC,KAAK,EACnB,aAAa,CAAC,WAAW,EACzB,MAAM,CACP,CAAC;AACF,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM,CAAC,EAAE,EAAE,CAAC;aACb;AAAC,YAAA,MAAM;gBACN,OAAO;aACR;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,oBAAoB,GAAG,IAAI,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,sBAAsB,GAC1B,IAAI,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;;AAGjD,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,EAAE;aAC3C,MAAM,CAAC,eAAe,CAAC;AACvB,aAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC;aAClC,IAAI,CAAC,GAAG,EAAE,CAAG,EAAA,oBAAoB,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAA,EAAA,CAAI,CAAC;aACrE,IAAI,CAAC,GAAG,EAAE,CAAG,EAAA,oBAAoB,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAA,EAAA,CAAI,CAAC;aACrE,IAAI,CAAC,OAAO,EAAE,CAAA,EAAG,CAAC,GAAG,yBAAyB,IAAI,CAAC;aACnD,IAAI,CAAC,QAAQ,EAAE,CAAA,EAAG,CAAC,GAAG,yBAAyB,IAAI,CAAC;AACpD,aAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;aAC/B,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAoB,KAAI;YAC/C,IAAI,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBACzD,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;aAChC;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAiB,KAAI;YACtC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,SAAC,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,MAAM,OAAO,GAIP,EAAE,CAAC;AACT,QAAA,IACE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,SAAS,CAAC;YACnD,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,EAChD;YACA,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,OAAO,EAAE,CAAC,gBAAyB,KAAI;oBACrC,gBAAgB,CAAC,cAAc,EAAE,CAAC;oBAClC,IAAI,CAAC,4BAA4B,EAAE,CAAC;oBACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC7B;AACF,aAAA,CAAC,CAAC;SACJ;AACD,QAAA,IACE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAC7B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,SAAS,CAAC,EACnD;YACA,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,OAAO,EAAE,CAAC,gBAAyB,KAAI;oBACrC,gBAAgB,CAAC,cAAc,EAAE,CAAC;oBAClC,IAAI,CAAC,4BAA4B,EAAE,CAAC;oBACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC7B;AACF,aAAA,CAAC,CAAC;SACJ;QACD,IAAI,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YACnD,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,OAAO,EAAE,CAAC,gBAAyB,KAAI;oBACrC,gBAAgB,CAAC,cAAc,EAAE,CAAC;oBAClC,IAAI,CAAC,+BAA+B,CAClC,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CACjD,CAAC;oBACF,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC7B;AACF,aAAA,CAAC,CAAC;SACJ;AACD,QAAA,IACE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAC7B,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,EAChD;YACA,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,UAAU,EAAE,aAAa;AACzB,gBAAA,OAAO,EAAE,CAAC,gBAAyB,KAAI;oBACrC,gBAAgB,CAAC,cAAc,EAAE,CAAC;oBAClC,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;iBAC7B;AACF,aAAA,CAAC,CAAC;SACJ;;AAED,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,UAAU,EAAE,YAAY;AACxB,gBAAA,OAAO,EAAE,SAAS;AACnB,aAAA,CAAC,CAAC;SACJ;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACvC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;AACrC,YAAA,MAAM,KAAK,GACT,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,mCAAmC,CAAC;YACvE,MAAM,eAAe,GAAG,oBAAoB;iBACzC,MAAM,CAAC,WAAW,CAAC;iBACnB,IAAI,CACH,OAAO,EACP,CAAA,yBAAA,EAA4B,MAAM,CAAC,UAAU,CAAU,OAAA,EAAA,MAAM,CAAC,OAAO,IAAI,SAAS,GAAG,iBAAiB,GAAG,EAAE,CAAA,CAAE,CAC9G;AACA,iBAAA,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACnB,iBAAA,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAC7B,iBAAA,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC;iBACjC,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,CAAC,GAAG,0BAA0B,IAAI,CAAC;iBACrD,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,CAAC,GAAG,0BAA0B,IAAI,CAAC;AACtD,iBAAA,KAAK,CAAC,eAAe,EAAE,CAAG,EAAA,0BAA0B,IAAI,CAAC;AACzD,iBAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;;iBAE/B,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAiB,KAAI;gBACtC,IAAI,aAAa,EAAE;oBACjB,aAAa,CAAC,KAAK,CAAC,CAAC;iBACtB;AACH,aAAC,CAAC;;iBAED,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAoB,KAAI;gBAC3C,IAAI,aAAa,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,EAAE;oBAC7C,aAAa,CAAC,KAAK,CAAC,CAAC;iBACtB;AACH,aAAC,CAAC,CAAC;YACL,eAAe;iBACZ,MAAM,CAAC,WAAW,CAAC;AACnB,iBAAA,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;iBAC7B,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,IAAI,GAAG,0BAA0B,IAAI,CAAC;iBACvD,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,GAAG,GAAG,0BAA0B,IAAI,CAAC;iBACrD,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,GAAG,GAAG,0BAA0B,IAAI,CAAC;iBACvD,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,GAAG,GAAG,0BAA0B,IAAI,CAAC;AACxD,iBAAA,KAAK,CAAC,iBAAiB,EAAE,SAAS,CAAC;AACnC,iBAAA,KAAK,CAAC,mBAAmB,EAAE,WAAW,CAAC;AACvC,iBAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YACpC,eAAe;iBACZ,MAAM,CAAC,YAAY,CAAC;AACpB,iBAAA,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;iBAC7B,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,GAAG,GAAG,0BAA0B,IAAI,CAAC;iBACtD,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,GAAG,GAAG,0BAA0B,IAAI,CAAC;AACrD,iBAAA,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC;iBAC7B,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,GAAG,GAAG,0BAA0B,IAAI,CAAC;iBACvD,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,IAAI,GAAG,0BAA0B,IAAI,CAAC;AACzD,iBAAA,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;iBACpB,KAAK,CAAC,WAAW,EAAE,CAAA,EAAG,IAAI,GAAG,0BAA0B,IAAI,CAAC;AAC5D,iBAAA,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC;AAC3B,iBAAA,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;AAC5B,iBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrB,eAAe;AACZ,iBAAA,UAAU,EAAE;AACZ,iBAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;iBACnB,QAAQ,CAAC,kCAAkC,CAAC;AAC5C,iBAAA,KAAK,CAAC,UAAU,EAAE,MAAK;gBACtB,OAAO,CAAC,KAAa,KAAI;AACvB,oBAAA,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC;AACnC,oBAAA,OAAO,eAAe;AACnB,yBAAA,KAAK,CACJ,MAAM,EACN,CAAG,EAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,wBAAwB,GAAG,0BAA0B,GAAG,yBAAyB,IAAI,CAClH;AACA,yBAAA,KAAK,CACJ,KAAK,EACL,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,wBAAwB,GAAG,0BAA0B,GAAG,yBAAyB,CAAA,EAAA,CAAI,CACnH,CAAC;AACN,iBAAC,CAAC;AACJ,aAAC,CAAC,CAAC;SACN;KACF;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,oBAAoB,EAAE,MAAM,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;KACvC;IAED,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;AAED,IAAA,oBAAoB,CAAC,MAAsB,EAAA;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;KAC3C;AAEO,IAAA,gBAAgB,CACtB,IAAY,EACZ,MAAa,EACb,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,UAAkB,EAClB,cAAuC,EACvC,cAAuC,EAAA;;QAGvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE;aACpD,MAAM,CAAC,eAAe,CAAC;aACvB,IAAI,CAAC,GAAG,EAAE,CAAA,EAAG,MAAM,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;aAC3B,IAAI,CAAC,GAAG,EAAE,CAAA,EAAG,MAAM,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;AAC3B,aAAA,IAAI,CAAC,OAAO,EAAE,CAAG,EAAA,KAAK,IAAI,CAAC;AAC3B,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAG,EAAA,MAAM,IAAI,CAAC;AAC7B,aAAA,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC;AACjC,aAAA,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAChE,QAAA,IAAI,eAAuB,CAAC;AAC5B,QAAA,IAAI,gBAAwB,CAAC;QAC7B,UAAU;aACP,IAAI,CAAC,IAAI,CAAC;AACV,aAAA,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC;AACjC,aAAA,KAAK,CAAC,OAAO,EAAE,CAAG,EAAA,KAAK,IAAI,CAAC;AAC5B,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAG,EAAA,MAAM,IAAI,CAAC;AAC9B,aAAA,KAAK,CAAC,WAAW,EAAE,CAAG,EAAA,QAAQ,IAAI,CAAC;AACnC,aAAA,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC;AAChC,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;AACvB,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClB,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClB,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAoB,KAAI;YAC3C,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAoB,KAAI;YACzC,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE;gBAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC3C,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,cAAc,EAAE;oBAClB,cAAc,CAAC,KAAK,CAAC,CAAC;iBACvB;aACF;AACH,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAK;YACrB,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;AAEjD,YAAA,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC9B,YAAA,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;;YAE/B,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACzD,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;;YAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YACrD,mBAAmB,EAAE,IAAI,CAAC,OAAO,EAAE,CAAG,EAAA,QAAQ,CAAI,EAAA,CAAA,CAAC,CAAC;YACpD,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAG,EAAA,QAAQ,CAAI,EAAA,CAAA,CAAC,CAAC;YAC3C,mBAAmB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAG,EAAA,SAAS,CAAI,EAAA,CAAA,CAAC,CAAC;YACtD,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAG,EAAA,SAAS,CAAI,EAAA,CAAA,CAAC,CAAC;YAC7C,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,KAAK,CAAC,CAAC;aACvB;AACH,SAAC,CAAC;aACD,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAiB,KAAI;YACtC,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAK;YACxB,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,KAAK,CAAC,CAAC;aACvB;AACH,SAAC,CAAC,CAAC;AACL,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAsB,CAAC;QACxD,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,CAAC,MAAM,EAAE,CAAC;KACpB;IAEO,gBAAgB,GAAA;;;AAGtB,QAAA,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;KACtC;AAEO,IAAA,kBAAkB,CAAC,KAAmB,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAA0B,CAAC;QAC1E,IAAI,CAAC,KAAK,EAAE;;AAEV,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACf;AACD,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;QACnD,OAAO;AACL,YAAA,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AACzC,YAAA,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;SAC3C,CAAC;KACH;;AAGH;;;;AAIG;AACH,MAAM,iBAAiB,GAAG,CACxB,KAAgB,EAChB,WAAkB,EAClB,SAAgB,EAChB,cAAgC,EAChC,YAA8B,EAC9B,KAAa,EACb,gBAAoC,EACpC,cAAkC,KACxB;AACV,IAAA,OAAO,QAAQ,CACb,KAAK,EACL,CAAC,WAAW,EAAE,SAAS,CAAC,EACxB,cAAc,EACd,YAAY,EACZ,IAAI,CAAC,GAAG;;AAEN,IAAA,EAAE,EACF,gBAAgB,IAAI,CAAC,EACrB,cAAc,IAAI,CAAC,CACpB,GAAG,KAAK,CACV,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,WAAW,GAAG,CAAC,KAAmB,KAAI;IACjD,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;KACrD;SAAM;AACL,QAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC1C;AACH,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,OAAkE,KACL;AAC7D,IAAA,IAAI,OAAO,YAAY,WAAW,EAAE;AAClC,QAAA,OAAO,OAAO,CAAC;KAChB;AACD,IAAA,IAAI,OAAO,YAAY,cAAc,EAAE;AACrC,QAAA,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;KAChC;AACD,IAAA,OAAO,OAAO,CAAC,WAAW,KAAK,SAAS;AACtC,UAAE,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC;UAC3C,OAAO,CAAC;AACd,CAAC;;AChqID;;;AAGG;MAEU,qBAAqB,CAAA;AAGhC;;;;;AAKG;IACH,UAAU,CAAC,eAA8B,EAAE,MAAqB,EAAA;QAC9D,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;KAC3D;AAED;;;;AAIG;AACH,IAAA,cAAc,CAAC,QAAqB,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACjC;AAED;;;;AAIG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;8GA7BU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA,EAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;;;ACMX;;;AAGG;MAOU,uBAAuB,CAAA;AAClC,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;KACxC;AA8BD,IAAA,WAAA,CAAoB,cAAqC,EAAA;QAArC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;QArBzD,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;QAEpB,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;QAEpB,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC;QAEtB,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;QAElB,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;QAEb,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QACjB,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;QACjB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QAOzB,IAAc,CAAA,cAAA,GAAG,cAAc,CAAC;KAE6B;IAE7D,eAAe,GAAA;AACb,QAAA,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,IAAI,CAAC,MAAM;AACd,gBAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAC3B,MAAM;YACR,KAAK,IAAI,CAAC,GAAG;AACX,gBAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;AAC9B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;AAChC,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,MAAM;YACR,KAAK,IAAI,CAAC,IAAI;AACZ,gBAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;AAC7B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;AAC/B,gBAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;gBACzB,MAAM;YACR,KAAK,IAAI,CAAC,KAAK;AACb,gBAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;AAC7B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAClC,gBAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;AAC9B,gBAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC1B,MAAM;SACT;QACD,MAAM,0BAA0B,GAAG,EAAE;AAClC,aAAA,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;AAC7C,aAAA,cAAc,EAAE;AAChB,aAAA,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,sBAAsB,GAAG,CAAA,EAAG,CAAC,GAAG,0BAA0B,KAAK,CAAC;QACrE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;aAC7C,KAAK,CAAC,UAAU,IAAI,CAAC,UAAU,CAAE,CAAA,EAAE,OAAO,CAAC;AAC3C,aAAA,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;aACjC,KAAK,CAAC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,iBAAiB,KAAK,CAAC;AAClD,aAAA,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;KACpD;;AAID,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,YAAA,MAAM,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAClC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CACtC,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,kBAAkB;AACf,qBAAA,UAAU,EAAE;qBACZ,QAAQ,CAAC,QAAQ,CAAC;AAClB,qBAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;qBACnB,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAAC;qBACtD,KAAK,CAAC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAK,GAAA,CAAA,CAAC,CAAC;gBACtD,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;iBAC/B,EAAE,QAAQ,CAAC,CAAC;aACd;iBAAM;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,kBAAkB;AACf,qBAAA,UAAU,EAAE;qBACZ,QAAQ,CAAC,QAAQ,CAAC;AAClB,qBAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;AACnB,qBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;qBACjC,KAAK,CAAC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAK,GAAA,CAAA,CAAC,CAAC;gBACtD,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;iBAC/B,EAAE,QAAQ,CAAC,CAAC;aACd;SACF;KACF;;IAID,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACnC;IAED,OAAO,GAAA;QACL,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;KACvC;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;KACtB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,OAAO,EAAE;AACnE,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC5D;KACF;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC;QACrE,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,IAAI,CAAC,EAAE;YACxD,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAC9B,kBAAkB,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAC1C,CAAC;SACH;KACF;IAED,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KAChC;IAED,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KAChC;8GAhJU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BpC,21DAkDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1BY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAEX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACN,QAAA,EAAA,sBAAsB,EAEvB,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,21DAAA,EAAA,CAAA;uFAQvB,kBAAkB,EAAA,CAAA;sBADjB,SAAS;uBAAC,oBAAoB,CAAA;gBAG/B,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAGN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAGN,YAAY,EAAA,CAAA;sBADX,KAAK;gBAGN,YAAY,EAAA,CAAA;sBADX,KAAK;gBAGN,cAAc,EAAA,CAAA;sBADb,KAAK;gBAGN,UAAU,EAAA,CAAA;sBADT,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,KAAK;;;AEnCR;;;;AAIG;MAOU,eAAe,CAAA;AAC1B,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;KACxC;AAQD,IAAA,WAAA,CAAoB,cAAqC,EAAA;QAArC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;QAJzD,IAAM,CAAA,MAAA,GAAmB,EAAE,CAAC;QAE5B,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;KAEiD;IAE7D,eAAe,GAAA;AACb,QAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;aAC9D,IAAI;;AAEH,QAAA,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAC3B;AACA,aAAA,SAAS,EAAE,CAAC;KAChB;IAED,WAAW,GAAA;AACT,QAAA,OAAO,EAAE;AACN,aAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;aAC1C,MAAM,CAAC,mBAAmB,CAAC,CAAC;KAChC;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;SAC9C;KACF;AAED,IAAA,SAAS,CAAC,KAAmB,EAAA;QAC3B,IACE,KAAK,CAAC,SAAS;AACf,aAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,EACvE;AACA,YAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC5C,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aAChC;SACF;aAAM,IACL,KAAK,CAAC,SAAS;YACf,KAAK,CAAC,aAAa,KAAK,SAAS;AACjC,YAAA,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAC9B;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,0BAA0B,CACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1C,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CACrD,CAAC;AACF,YAAA,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC5C,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aAChC;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,iBAAiB,CAC3D,GAAG,KAAK,CAAC,aAAa,CACvB,CAAC;SACH;aAAM,IACL,CAAC,KAAK,CAAC,SAAS;YAChB,KAAK,CAAC,aAAa,KAAK,SAAS;AACjC,YAAA,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAC9B;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,iBAAiB,CAC3D,GAAG,KAAK,CAAC,aAAa,CACvB,CAAC;SACH;KACF;8GA5EU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,ECrB5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,sjCAiCA,EDdY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,gQAAE,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,+BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAEpC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,aAAa,EAAA,OAAA,EAEd,CAAC,YAAY,EAAE,uBAAuB,CAAC,EAAA,QAAA,EAAA,sjCAAA,EAAA,CAAA;uFAO3B,eAAe,EAAA,CAAA;sBAAnC,SAAS;uBAAC,QAAQ,CAAA;;;AEWrB;;;;;AAKG;MAOU,gBAAgB,CAAA;AAG3B,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;KACxC;AAmBD,IAAA,WAAA,CAAoB,cAAqC,EAAA;QAArC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;QAVzD,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;KAUwC;IAE7D,kBAAkB,GAAA;;;AAGhB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC/D;IAED,eAAe,GAAA;QACb,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,IAAI,CAAC,MAAM,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG;AACX,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,IAAI,CAAC,IAAI,CAAC;YACf,KAAK,IAAI,CAAC,KAAK;AACb,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/C,MAAM;SACT;KACF;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACzC;AAED,IAAA,aAAa,CAAC,OAA6B,EAAA;AACzC,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAE9B,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;AAE5D,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;SAC3C;AACD,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;AACrB,YAAA,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE;AACxC,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;aAC/B;SACF;KACF;IAED,WAAW,GAAA;QACT,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;KAC5C;IAED,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;KACxD;AAEO,IAAA,gBAAgB,CAAC,UAExB,EAAA;AACC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;aACvC,MAAM,CAAC,QAAQ,CAAC;AAChB,aAAA,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AACtB,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;AACvB,aAAA,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC1B,aAAA,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC;AACjC,aAAA,KAAK,CAAC,kBAAkB,EAAE,SAAS,CAAC;AACpC,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAA,iBAAA,CAAmB,CAAC,CAAC;AACxC,QAAA,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACzE,QAAA,KAAK,MAAM,WAAW,IAAI,UAAU,EAAE;YACpC,aAAa;iBACV,MAAM,CAAC,QAAQ,CAAC;AAChB,iBAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;iBAC1B,IAAI,CAAC,WAAW,CAAC,CAAC;SACtB;QACD,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAK;AACnC,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,aAAa,EAAE;qBACjB,SAAS,CAAC,2CAA2C,CAAC;AACtD,qBAAA,MAAM,EAAE,CAAC;aACb;YAED,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;YACnC,MAAM,mBAAmB,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AAC1D,YAAA,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE;AAC1C,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;aACnD;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;;YAExB,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACtD,YAAA,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACvC;KACF;IAEO,cAAc,CACpB,QAAuD,EACvD,OAAgB,EAAA;AAEhB,QAAA,IAAI,QAAQ,CAAC,YAAY,KAAK,MAAM,EAAE;AACpC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClE,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;aACtD;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,CAAA,mCAAA,EAAsC,QAAQ,CAAC,IAAI,CAAG,CAAA,CAAA,CAAC,CAAC;aACvE;SACF;AAAM,aAAA,IAAI,QAAQ,CAAC,YAAY,KAAK,YAAY,EAAE;YACjD;AACE,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAC5D,QAAQ,CAAC,IAAI,CACd,CAAC;gBACF,IAAI,cAAc,EAAE;oBAClB,IAAI,CAAC,wBAAwB,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;iBAClE;qBAAM;oBACL,OAAO,CAAC,KAAK,CACX,CAAA,yCAAA,EAA4C,QAAQ,CAAC,IAAI,CAAG,CAAA,CAAA,CAC7D,CAAC;iBACH;aACF;SACF;KACF;AAEO,IAAA,kBAAkB,CACxB,IAAqB,EACrB,cAAkC,EAClC,OAAgB,EAAA;AAEhB,QAAA,IACE,IAAI,CAAC,iBAAiB,KAAK,SAAS;AACpC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EACtC;YACA,OAAO;SACR;AACD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;aACvC,MAAM,CAAC,KAAK,CAAC;AACb,aAAA,IAAI,CACH,OAAO,EACP,CAA2B,wBAAA,EAAA,OAAO,KAAK,SAAS,GAAG,OAAO,GAAG,EAAE,EAAE,CAClE;aACA,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,YAAY,IAAI,CAAC;aACxC,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,aAAa,IAAI,CAAC;AAC1C,aAAA,IAAI,CACH,EAAE;AACC,aAAA,IAAI,EAAwC;aAC5C,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,KAAI;YACxC,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBAC5D,MAAM,aAAa,GACjB,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACxD,gBAAA,IACE,aAAa,CAAC,MAAM,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACvB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EACvB;oBACA,OAAO;iBACR;gBACD,aAAa;AACV,qBAAA,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;AAC1B,qBAAA,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;AAC9D,qBAAA,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC;AAC9D,qBAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aACxB;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAgB,KAAI;YACzC,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;AAC5D,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClC,MAAM,aAAa,GACjB,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACxD,gBAAA,IACE,aAAa,CAAC,MAAM,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACvB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EACvB;oBACA,OAAO;iBACR;gBACD,aAAa;AACV,qBAAA,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;AAC1B,qBAAA,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;AAC9D,qBAAA,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC;AAC9D,qBAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;;gBAEvB,IACE,IAAI,CAAC,QAAQ;AACb,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAC1B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAC3C,KAAK,SAAS,EACf;AACA,oBAAA,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;iBACrC;aACF;AACH,SAAC,CAAC;aACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,KAAI;YACvC,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;;AAE5D,gBAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9B,aAAa;AACV,qBAAA,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAC7B,qBAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAChB,qBAAA,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACf,qBAAA,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;;gBAE5B,IACE,IAAI,CAAC,QAAQ;AACb,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAC1B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAC3C,KAAK,SAAS,EACf;;oBAEA,OAAO;iBACR;gBACD,MAAM,6BAA6B,GACjC,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACxD,gBAAA,IACE,6BAA6B,CAAC,MAAM,GAAG,CAAC;AACxC,oBAAA,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;AACvC,oBAAA,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC,EACvC;;oBAEA,OAAO;iBACR;AAED,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CACvC,6BAA6B,CAAC,CAAC,CAAC,EAChC,6BAA6B,CAAC,CAAC,CAAC,CACjC,CAAC;AACF,gBAAA,IACE,OAAO;AACP,oBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,EACzD;;oBAEA,OAAO;iBACR;gBACD,MAAM,aAAa,GACjB,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACxD,gBAAA,IACE,aAAa,CAAC,MAAM,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACvB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EACvB;;oBAEA,OAAO;iBACR;AACD,gBAAA,IAAI,aAAa,GAAU;oBACzB,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;oBACxC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;iBAC1C,CAAC;AACF,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;oBAC1B,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;iBAChE;gBACD,MAAM,aAAa,GAAG,IAAI,aAAa,CACrC,IAAI,CAAC,MAAM,EACX,IAAI,EACJ,aAAa,EACb,cAAc,CAAC,KAAK,EACpB,cAAc,CAAC,MAAM,CACtB,CAAC;gBACF,aAAa,CAAC,EAAE,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;;AAE3C,gBAAA,WAAW,EAAE,CAAC;aACf;AACH,SAAC,CAAC,CACL;aACA,MAAM,CAAC,KAAK,CAAC;aACb,IAAI,CAAC,OAAO,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAC,EAAE,EAAE,CAAC;AACxC,aAAA,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAC7B,aAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAChB,aAAA,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACf,aAAA,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AACtB,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE3B,QAAA,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;AACxB,YAAA,KAAK,aAAa;gBAChB,aAAa;qBACV,MAAM,CAAC,MAAM,CAAC;qBACd,IAAI,CACH,GAAG,EACH,iBAAiB,CACf,IAAI,CAAC,IAAI,CAAC,KAAK,EACf,CAAC,EACD,CAAC,EACD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,CACnB,CACF;qBACA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;qBACjC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,qBAAA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBAC/B,MAAM;AACR,YAAA,KAAK,YAAY;gBACf,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;AACf,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,qBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;AAChC,qBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;qBAClC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACvC,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,MAAM;AACR,YAAA,KAAK,wBAAwB;gBAC3B,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;AACf,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;qBACZ,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;qBACnC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;qBACnC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC9C,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/B,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,qBAAA,IAAI,CACH,OAAO,EACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CACjE;qBACA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;qBACnC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC1C,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;AACf,qBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACpD,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;qBACZ,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;qBACpC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;qBACnC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAC/C,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;AACf,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;qBACZ,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;qBAC9B,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,qBAAA,IAAI,CACH,QAAQ,EACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAClE;qBACA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC3C,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;qBAC/B,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,qBAAA,IAAI,CACH,OAAO,EACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CACjE;AACA,qBAAA,IAAI,CACH,QAAQ,EACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAClE;qBACA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC7C,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;AACf,qBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;qBACpD,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;qBAC9B,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACpC,qBAAA,IAAI,CACH,QAAQ,EACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAClE;qBACA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC5C,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;AACf,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,qBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;qBACtD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;qBACnC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;qBACtC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC;AACjD,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/B,qBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACtD,qBAAA,IAAI,CACH,OAAO,EACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CACjE;qBACA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;qBACtC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC7C,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvC,aAAa;qBACV,MAAM,CAAC,OAAO,CAAC;AACf,qBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACpD,qBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;qBACtD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;qBACpC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;qBACtC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC;AAClD,qBAAA,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;SAC1C;AAED,QAAA,IAAI,cAAc,CAAC,KAAK,EAAE;AACxB,YAAA,MAAM,WAAW,GAAG;AAClB,gBAAA,GAAG,sBAAsB;gBACzB,GAAG,IAAI,CAAC,KAAK;gBACb,GAAG,cAAc,CAAC,SAAS;aAC5B,CAAC;YACF,aAAa;iBACV,MAAM,CAAC,MAAM,CAAC;AACd,iBAAA,IAAI,CACH,WAAW,EACX,CAAA,UAAA,EAAa,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,GAAG,CAC7H;AACA,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACZ,IAAI,CAAC,WAAW,EAAE,CAAA,EAAG,WAAW,CAAC,QAAQ,IAAI,CAAC;AAC9C,iBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,iBAAA,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC;AAC3C,iBAAA,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC;AACxB,iBAAA,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC;AAC/B,iBAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AACtB,iBAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;AAC7B,iBAAA,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;AAC5B,iBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAC/B;KACF;AAEO,IAAA,wBAAwB,CAC9B,IAA2B,EAC3B,cAAwC,EACxC,OAAgB,EAAA;AAEhB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;aACvC,MAAM,CAAC,KAAK,CAAC;AACb,aAAA,IAAI,CACH,OAAO,EACP,CAA2B,wBAAA,EAAA,OAAO,KAAK,SAAS,GAAG,OAAO,GAAG,EAAE,EAAE,CAClE;aACA,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,cAAc,CAAC,KAAK,IAAI,CAAC;aAC3C,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,cAAc,CAAC,MAAM,IAAI,CAAC;aAC7C,MAAM,CAAC,KAAK,CAAC;aACb,IAAI,CAAC,OAAO,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,EAAE,EAAE,CAAC;AAC1C,aAAA,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAC7B,aAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAChB,aAAA,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACf,aAAA,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;AACtB,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;AACvB,aAAA,EAAE,CAAC,OAAO,EAAE,MAAK;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;AACpC,SAAC,CAAC,CAAC;QAEL,aAAa;aACV,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CACH,GAAG,EACH,iBAAiB,CACf,WAAW,CAAC,SAAS,EACrB,CAAC,EACD,CAAC,EACD,cAAc,CAAC,KAAK,EACpB,cAAc,CAAC,MAAM,CACtB,CACF;AACA,aAAA,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,eAAe,CAAC;AAC5C,aAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;AACvB,aAAA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AAE/B,QAAA,IAAI,cAAc,CAAC,IAAI,KAAK,EAAE,EAAE;YAC9B,aAAa;iBACV,MAAM,CAAC,OAAO,CAAC;AACf,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,iBAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;AACnC,iBAAA,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC;AACrC,iBAAA,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;SACtC;AAED,QAAA,IAAI,cAAc,CAAC,KAAK,KAAK,EAAE,EAAE;YAC/B,aAAa;iBACV,MAAM,CAAC,MAAM,CAAC;AACd,iBAAA,IAAI,CACH,WAAW,EACX,aAAa,cAAc,CAAC,KAAK,GAAG,CAAC,CACnC,CAAA,EAAA,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,CAC9B,GAAG,CACJ;AACA,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,iBAAA,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;AACzB,iBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,iBAAA,IAAI,CAAC,aAAa,EAAE,gCAAgC,CAAC;AACrD,iBAAA,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC;AACxB,iBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AACvB,iBAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AACtB,iBAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC;AAC7B,iBAAA,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;AAC5B,iBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAC/B;KACF;8GA1fU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,ECjD7B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,uzBAwBA,EDuBY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,gQAAE,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,+BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAEpC,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,cAAc,EAAA,OAAA,EAEf,CAAC,YAAY,EAAE,uBAAuB,CAAC,EAAA,QAAA,EAAA,uzBAAA,EAAA,CAAA;uFAS5B,KAAK,EAAA,CAAA;sBAAxB,SAAS;uBAAC,OAAO,CAAA;gBAGlB,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAGN,cAAc,EAAA,CAAA;sBADb,KAAK;gBAGN,eAAe,EAAA,CAAA;sBADd,KAAK;gBAGN,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAGN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAGN,KAAK,EAAA,CAAA;sBADJ,KAAK;;;AE5CR;;;;;AAKG;MAOU,yBAAyB,CAAA;AACpC,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;KACxC;AAGD,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,QAA8B,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;AAE1B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;AASD,IAAA,WAAA,CACU,OAAmB,EACnB,GAAsB,EACtB,cAAqC,EAAA;QAFrC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAY;QACnB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;;QAVtC,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;;QAGnB,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;QACZ,IAAiB,CAAA,iBAAA,GAAG,iBAAiB,CAAC;QACtC,IAAQ,CAAA,QAAA,GAAG,QAAQ,CAAC;KAMhB;IAEJ,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,YAAY,GAAA;QAClB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB,IAAI,EAAE,EAAE;YAC/D,IAAI,oBAAoB,GAAG,CAAC,CAAC;YAC7B,IAAI,qBAAqB,GAAG,CAAC,CAAC;YAC9B,IAAI,mBAAmB,GAAG,CAAC,CAAC;YAC5B,MAAM,eAAe,GAAG,EAAE;AACvB,iBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAClC,iBAAA,MAAM,CACL,CAAA,eAAA,EAAkB,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,CAAA,CAAE,CAC9E,CAAC;YACJ,eAAe,CAAC,MAAM,CAAoB,yBAAyB,CAAC,CAAC,IAAI,CACvE,EAAE;AACC,iBAAA,IAAI,EAA2C;iBAC/C,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAgB,KAAI;AACzC,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClC,MAAM,aAAa,GACjB,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACxD,gBAAA,IACE,aAAa,CAAC,MAAM,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACvB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EACvB;oBACA,OAAO;iBACR;gBACD,MAAM,YAAY,GAAG,eAAe;AACjC,qBAAA,IAAI,EAAE;sBACL,qBAAqB,EAAE,CAAC;AAC5B,gBAAA,oBAAoB,GAAG,YAAY,EAAE,KAAK,IAAI,CAAC,CAAC;AAChD,gBAAA,qBAAqB,GAAG,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC;gBAClD,eAAe;AACZ,qBAAA,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;AAC1B,qBAAA,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,aAAa,CAAC,CAAC,CAAC,GAAG,oBAAoB,GAAG,CAAC,IAAI,CAAC;AACjE,qBAAA,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,aAAa,CAAC,CAAC,CAAC,GAAG,qBAAqB,GAAG,CAAC,IAAI,CAAC;AACjE,qBAAA,KAAK,CAAC,OAAO,EAAE,CAAG,EAAA,oBAAoB,IAAI,CAAC;AAC3C,qBAAA,KAAK,CAAC,QAAQ,EAAE,CAAG,EAAA,qBAAqB,IAAI,CAAC;AAC7C,qBAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACzB,aAAC,CAAC;iBACD,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAgB,KAAI;AACxC,gBAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAClC,MAAM,aAAa,GACjB,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACxD,gBAAA,IACE,aAAa,CAAC,MAAM,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACvB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EACvB;oBACA,OAAO;iBACR;gBACD,eAAe;AACZ,qBAAA,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC;AAC1B,qBAAA,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,aAAa,CAAC,CAAC,CAAC,GAAG,oBAAoB,GAAG,CAAC,IAAI,CAAC;AACjE,qBAAA,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,aAAa,CAAC,CAAC,CAAC,GAAG,qBAAqB,GAAG,CAAC,IAAI,CAAC;AACjE,qBAAA,KAAK,CAAC,OAAO,EAAE,CAAG,EAAA,oBAAoB,IAAI,CAAC;AAC3C,qBAAA,KAAK,CAAC,QAAQ,EAAE,CAAG,EAAA,qBAAqB,IAAI,CAAC;AAC7C,qBAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACvB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;qBAClC,MAAM,CACL,4BAA4B,mBAAmB,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,EAAE,CAC3E;AACA,qBAAA,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC;AAC7B,qBAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACtB,gBAAA,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;gBACjE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;qBAClC,MAAM,CACL,4BAA4B,mBAAmB,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,EAAE,CAC3E;AACA,qBAAA,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC;AAC9B,qBAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAChC,aAAC,CAAC;iBACD,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAgB,KAAI;AACvC,gBAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9B,eAAe;AACZ,qBAAA,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAC7B,qBAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAChB,qBAAA,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACf,qBAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,qBAAA,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;AACvB,qBAAA,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC5B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;qBAClC,MAAM,CACL,4BAA4B,mBAAmB,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,EAAE,CAC3E;AACA,qBAAA,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC;AAC7B,qBAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACtB,MAAM,aAAa,GACjB,IAAI,CAAC,MAAM,CAAC,kCAAkC,CAAC,KAAK,CAAC,CAAC;AACxD,gBAAA,IACE,aAAa,CAAC,MAAM,GAAG,CAAC;AACxB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACvB,oBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EACvB;oBACA,OAAO;iBACR;AACD,gBAAA,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;gBACjE,IAAI,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CACxC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,EACnD,CAAC,CACF,CAAC;AACF,gBAAA,IAAI,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CACxC,mBAAmB,EACnB,CAAC,EACD,QAAQ,CACT,CAAC;aACH,CAAC,CACL,CAAC;SACH;KACF;AAED,IAAA,sBAAsB,CAAC,aAAoB,EAAA;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC;;QAEnE,MAAM,UAAU,GAAY,EAAE,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC7C,MAAM,YAAY,GAAG,EAAE;AACpB,iBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;iBAClC,MAAM,CACL,4BAA4B,CAAC,CAAA,YAAA,EAAe,IAAI,CAAC,KAAK,EAAE,CACzD;AACA,iBAAA,IAAI,EAAE;kBACL,qBAAqB,EAAE,CAAC;YAC5B,IAAI,YAAY,EAAE;gBAChB,UAAU,CAAC,IAAI,CAAC;AACd,oBAAA,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,CAAC;AACvC,oBAAA,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;AACzC,iBAAA,CAAC,CAAC;aACJ;SACF;AACD,QAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,MAAM,kBAAkB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAC1C,qBAAqB,CAAC,aAAa,EAAE,CAAC,CAAC,CACxC,CAAC;AACF,YAAA,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,OAAO,CACtD,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAChC,CAAC;AACF,YAAA,OAAO,qBAAqB,CAAC;SAC9B;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AAED,IAAA,eAAe,CAAC,QAA+C,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,OAAO;SACR;AACD,QAAA,IAAI,gBAAsC,CAAC;AAC3C,QAAA,IAAI,QAAQ,YAAY,QAAQ,EAAE;YAChC,gBAAgB,GAAG,QAAQ,CAAC;SAC7B;AAAM,aAAA,IAAI,QAAQ,YAAY,KAAK,EAAE;AACpC,YAAA,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,CACtD,QAAQ,CAAC,MAAuC,EAAE,KAAK,IAAI,EAAE,CAC/D,CAAC;SACH;aAAM;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;SAC3E;QACD,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;SACjD;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAED,IAAA,YAAY,CAAC,QAA+C,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,OAAO;SACR;AACD,QAAA,IAAI,gBAAsC,CAAC;AAC3C,QAAA,IAAI,QAAQ,YAAY,QAAQ,EAAE;YAChC,gBAAgB,GAAG,QAAQ,CAAC;SAC7B;AAAM,aAAA,IAAI,QAAQ,YAAY,KAAK,EAAE;AACpC,YAAA,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,CACtD,QAAQ,CAAC,MAAuC,EAAE,KAAK,IAAI,EAAE,CAC/D,CAAC;SACH;aAAM;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;SAC3E;QACD,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;SAC9C;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;8GAtNU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,oICpCtC,i7DAyDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrBa,yBAAyB,EAF1B,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAExB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,wBAAwB,EAAA,OAAA,EAEzB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,i7DAAA,EAAA,CAAA;gJAShC,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAYG,KAAK,EAAA,CAAA;sBAAb,KAAK;;AAuMD,MAAM,QAAQ,GAAG,CAAC,KAAc,KAAY;AACjD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzB;AACD,IAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnB,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,KAAe,CAAC;aACnC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5D,IAAI,CAAC,IAAI,CAAC,CAAC;KACf;AACD,IAAA,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,QAAA,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;KAC/B;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,QAAA,OAAO,EAAE,CAAC;KACX;IACD,OAAO,EAAE,GAAG,KAAK,CAAC;AACpB,CAAC;;AE9PM,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C;;;;;AAKG;MAOU,qBAAqB,CAAA;IAIhC,IACI,KAAK,CAAC,KAAc,EAAA;QACtB,IAAIJ,QAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAC9B,OAAO;SACR;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KAC/C;AACD,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAcD,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAbjC,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAQhB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAC1B,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AAEV,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAW,CAAC;KAEN;AAE9C,IAAA,eAAe,CAAC,KAAc,EAAA;AAC5B,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACjC,IAAIA,QAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE;gBAC7B,OAAO,MAAM,CAAC,KAAK,CAAC;aACrB;SACF;AACD,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;KACxB;AAED,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,QAAQ,KAAK,CAAC,GAAG;gBACf,KAAK,IAAI,CAAC,QAAQ;AAChB,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;AACjC,wBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACtB,wBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;qBACxB;yBAAM;wBACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACxC,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBACtC;oBACD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,IAAI,CAAC,SAAS;AACjB,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;AACjC,wBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACtB,wBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;qBACxB;yBAAM;wBACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACxC,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBACtC;oBACD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,IAAI,CAAC,MAAM;AACd,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;wBACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBAC9C;yBAAM;wBACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACxC,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBACtC;oBACD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,IAAI,CAAC,OAAO;AACf,oBAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;wBACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBAC9C;yBAAM;wBACL,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACxC,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBACtC;oBACD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,IAAI,CAAC,MAAM;oBACd,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,IAAI,CAAC,KAAK;AACb,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;AACR,gBAAA;oBACE,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;SACF;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAC3B,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACtD,gBAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;AACjB,oBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,oBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CACvC,QAAQ,EACR,QAAQ,GAAG,WAAW,CAAC,MAAM,CAC9B,CAAC;AACF,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CACrC,QAAQ,GAAG,WAAW,CAAC,MAAM,CAC9B,CAAC;AACF,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACtC;aACF;AACD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;AAED,IAAA,aAAa,CAAC,KAAyB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,OAAO;aACR;AACD,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;aACrB;YACD,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3C;SACF;KACF;IAED,WAAW,GAAA;QACT,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,EAAE,yBAAyB,CAAC,CAAC;KAC/B;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;SAC5C;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC7B;KACF;AAED,IAAA,QAAQ,CAAC,MAAuB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACnC;KACF;8GA9KU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EC7BlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,m0CA0CA,EDfY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAExB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,mBAAmB,EAAA,OAAA,EAEpB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,m0CAAA,EAAA,CAAA;sFAGC,WAAW,EAAA,CAAA;sBAA/C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAI/B,KAAK,EAAA,CAAA;sBADR,KAAK;gBAWG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAMG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGI,WAAW,EAAA,CAAA;sBAApB,MAAM;;AAuJT,MAAM,eAAe,GAAG,CAAC,CAAS,KAChC,CAAC,CAAC,IAAI,EAAE;AACL,KAAA,WAAW,EAAE;KACb,SAAS,CAAC,KAAK,CAAC;AAChB,KAAA,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;;AEtMpC;;;;;;AAMG;MAOU,yBAAyB,CAAA;IAEpC,IACI,KAAK,CAAC,KAAgB,EAAA;AACxB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;YACzB,OAAO;SACR;AACD,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;SACpD;QACD,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpC;QACD,IAAI,CAAC,8BAA8B,EAAE,CAAC;KACvC;AACD,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAeD,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAlClC,IAAM,CAAA,MAAA,GAAc,EAAE,CAAC;QAoB/B,IAAa,CAAA,aAAA,GAAa,EAAE,CAAC;QAEpB,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;QAEhC,IAAU,CAAA,UAAA,GAAa,SAAS,CAAC;QAEjC,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;QAEpB,IAAwB,CAAA,wBAAA,GAAsB,EAAE,CAAC;QAEjD,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEhB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAa,CAAC;KAER;AAE9C,IAAA,eAAe,CAAC,KAAc,EAAA;AAC5B,QAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACjC,YAAA,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,EAAE;gBACxB,OAAO,MAAM,CAAC,KAAK,CAAC;aACrB;SACF;QACD,OAAO,CAAA,EAAG,KAAK,CAAA,CAAE,CAAC;KACnB;AAED,IAAA,QAAQ,CAAC,KAAc,EAAA;QACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;AACpC,YAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,UAAU,GAAA;AACR,QAAA,IACE,IAAI,CAAC,UAAU,KAAK,SAAS;aAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAC5D;YACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;IAED,8BAA8B,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,YAAA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AAC9B,oBAAA,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACvC;aACF;AACD,YAAA,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;SAC1D;KACF;AAED,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;KACF;8GAnGU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,gTCzBtC,g1BAyBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDFY,qBAAqB,EAAE,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,WAAW,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAE/C,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,yBAAyB,EAE1B,OAAA,EAAA,CAAC,qBAAqB,EAAE,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,g1BAAA,EAAA,CAAA;sFAKvD,KAAK,EAAA,CAAA;sBADR,KAAK;gBAqBG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;AEhDT;;;;;;AAMG;MAOU,uBAAuB,CAAA;IAElC,IACI,KAAK,CAAC,KAAe,EAAA;AACvB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;YACzB,OAAO;SACR;AACD,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpC;KACF;AACD,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AASD,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAvBlC,IAAM,CAAA,MAAA,GAAa,EAAE,CAAC;QAerB,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAEhB,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;QAEpB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEhB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAY,CAAC;KAEP;AAE9C,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC5B,QAAA,OAAQ,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;KACjD;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;AACpC,YAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC;aACb;SACF;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,aAAa,CAAC,IAAY,EAAE,KAAa,EAAA;AACvC,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,EAAE,EAAE;YAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,UAAU,GAAA;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1C,IACE,UAAU,KAAK,EAAE;AACjB,aAAC,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EACvD;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;AAED,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;KACF;8GA7EU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,ECvBpC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,s+BAgCA,EDXY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+PAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAExB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,uBAAuB,EAAA,OAAA,EAExB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,s+BAAA,EAAA,CAAA;sFAKhC,KAAK,EAAA,CAAA;sBADR,KAAK;gBAcG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;AEnCT;;;;;;AAMG;MAOU,sBAAsB,CAAA;IAGjC,IACI,KAAK,CAAC,KAAiC,EAAA;AACzC,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;YACzB,OAAO;SACR;QACD,MAAM,eAAe,GACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpC;KACF;AACD,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAQD,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAxBlC,IAAM,CAAA,MAAA,GAA+B,EAAE,CAAC;QAiBvC,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;QACd,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAEhB,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEhB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA8B,CAAC;KAEzB;AAE9C,IAAA,iBAAiB,CAAC,KAAY,EAAA;AAC5B,QAAA,OAAQ,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;KACjD;AAED,IAAA,eAAe,CAAC,GAAW,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,OAAO,CAAC,MAAc,EAAE,MAAc,EAAA;AACpC,QAAA,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1C,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,SAAS,CAAC,GAAW,EAAE,KAAa,EAAA;AAClC,QAAA,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,UAAU,GAAA;QACR,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,QAAQ,KAAK,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;AAED,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;KACF;8GA7EU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,ECvBnC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,k8CA4CA,EDvBY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,0TAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAExB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,sBAAsB,EAAA,OAAA,EAEvB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,k8CAAA,EAAA,CAAA;sFAMhC,KAAK,EAAA,CAAA;sBADR,KAAK;gBAeG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;AE5BT;;;;;AAKG;MAcU,qBAAqB,CAAA;AAChC,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;KACxC;AACD,IAAA,IAAI,WAAW,GAAA;QACb,QACE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,YAAY,CAAC;YAC7D,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,CAAC,KAAK,IAAI,EAChD;KACH;AAGD,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,QAA8B,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;AAE1B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAQD,WACU,CAAA,GAAsB,EACtB,cAAqC,EAAA;QADrC,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;;QARtC,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC;;QAGnB,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;QACZ,IAAiB,CAAA,iBAAA,GAAG,iBAAiB,CAAC;KAKlC;IAEJ,QAAQ,CAAC,QAAkB,EAAE,KAAc,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,OAAO;SACR;AACD,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACrB,YAAA,IAAI,CAACA,QAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;gBACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;AAE7C,gBAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;AACpC,gBAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC;aAC5C;SACF;KACF;AAED,IAAA,yBAAyB,CACvB,IAA+C,EAAA;AAE/C,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AAChE,YAAA,OAAO,EAAE,CAAC;SACX;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACtD,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,CAAC;AAChE,QAAA,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAClD;AAED,IAAA,yBAAyB,CAAC,MAAc,EAAA;;AAEtC,QAAA,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;KACzB;8GAnEU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ECrClC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0xJA+HA,ED1Fa,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,8FAR9B,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EACzB,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,yJACvB,sBAAsB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGb,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,oBAAoB,EAErB,OAAA,EAAA;wBACP,qBAAqB;wBACrB,YAAY;wBACZ,WAAW;wBACX,yBAAyB;wBACzB,uBAAuB;wBACvB,sBAAsB;AACvB,qBAAA,EAAA,QAAA,EAAA,0xJAAA,EAAA,CAAA;uHAeG,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAYG,KAAK,EAAA,CAAA;sBAAb,KAAK;;;AE5CR;;AAEG;AACI,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAEpD;;;;AAIG;MAYU,uBAAuB,CAAA;AAYlC,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,QAA8B,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;;AAE1B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;AAID,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;KAAI;IAE9C,eAAe,GAAA;AACb,QAAA,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,IAAI,CAAC,MAAM,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG;AACX,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,IAAI,CAAC,IAAI,CAAC;YACf,KAAK,IAAI,CAAC,KAAK;AACb,gBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/C,MAAM;SACT;KACF;IAED,WAAW,GAAA;QACT,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;KAC5C;IAED,iBAAiB,CAAC,GAAG,aAAuB,EAAA;QAC1C,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;YACxC,QAAQ,IAAI,mBAAmB,iBAAiB,CAAC,YAAY,CAAC,CAAA,YAAA,EAAe,KAAK,CAAA,CAAE,CAAC;AACrF,YAAA,EAAE,KAAK,CAAC;SACT;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;iBAChC,MAAM,CAAC,QAAQ,CAAC;AAChB,iBAAA,UAAU,EAAE;iBACZ,QAAQ,CAAC,+BAA+B,CAAC;AACzC,iBAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;AACnB,iBAAA,UAAU,CAAC,kBAAkB,EAAE,MAAK;gBACnC,MAAM,YAAY,GAAG,EAAE,CAAC,WAAW,CACjC,oBAAoB,EACpB,sBAAsB,CACvB,CAAC;gBACF,OAAO,CAAC,CAAS,KAAK,YAAY,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,aAAC,CAAC,CAAC;SACN;KACF;8GAnEU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCpC,m1CA8CA,EDdI,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,mIACZ,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,+BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,yBAAyB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGhB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,sBAAsB,EAEvB,OAAA,EAAA;wBACP,YAAY;wBACZ,uBAAuB;wBACvB,qBAAqB;wBACrB,yBAAyB;AAC1B,qBAAA,EAAA,QAAA,EAAA,m1CAAA,EAAA,CAAA;sFAGmB,KAAK,EAAA,CAAA;sBAAxB,SAAS;uBAAC,OAAO,CAAA;gBAGlB,QAAQ,EAAA,CAAA;sBADP,KAAK;gBAGN,SAAS,EAAA,CAAA;sBADR,KAAK;gBAGN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAMF,QAAQ,EAAA,CAAA;sBADX,KAAK;;AA0DD,MAAM,iBAAiB,GAAG,CAAC,CAAS,KAAY;IACrD,OAAO,qBAAqB,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;;AE3GD;;;AAGG;MAEU,wBAAwB,CAAA;AAGnC;;;;AAIG;AACH,IAAA,IAAI,CAAC,MAAqB,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACvB;AAED;;;;AAIG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;8GAnBU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA,EAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;;ACeX;;;AAGG;MAaU,sBAAsB,CAAA;AAejC,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC;KAC9C;AACD,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;KACxC;IAKD,WACU,CAAA,oBAA8C,EAC9C,cAAqC,EAAA;QADrC,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAA0B;QAC9C,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;AAnB/C;;;AAGG;AAEH,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAgB,CAAC;QAS9C,IAAM,CAAA,MAAA,GAAG,MAAM,CAAC;QAChB,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;KAKR;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KACnD;IAED,eAAe,GAAA;QACb,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;KACjE;8GApCU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCnC,+jDAgCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDDI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,eAAe,EAAA,QAAA,EAAA,aAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGN,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,SAAS;iCACI,IAAI,EAAA,QAAA,EACN,qBAAqB,EAEtB,OAAA,EAAA;wBACP,YAAY;wBACZ,uBAAuB;wBACvB,gBAAgB;wBAChB,uBAAuB;wBACvB,eAAe;AAChB,qBAAA,EAAA,QAAA,EAAA,+jDAAA,EAAA,CAAA;2HAKsB,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU,CAAA;gBACQ,cAAc,EAAA,CAAA;sBAA1C,SAAS;uBAAC,gBAAgB,CAAA;gBACL,OAAO,EAAA,CAAA;sBAA5B,SAAS;uBAAC,SAAS,CAAA;gBACS,cAAc,EAAA,CAAA;sBAA1C,SAAS;uBAAC,gBAAgB,CAAA;gBAO3B,UAAU,EAAA,CAAA;sBADT,MAAM;;;AEjCT;;;;AAIG;MAOU,gBAAgB,CAAA;AAY3B;;;AAGG;AACH,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AACD;;;AAGG;IACH,IACI,KAAK,CAAC,KAAgB,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACpE;SACF;KACF;IAQD,WACU,CAAA,oBAA8C,EAC9C,cAAqC,EAAA;QADrC,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAA0B;QAC9C,IAAc,CAAA,cAAA,GAAd,cAAc,CAAuB;AAjCvC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;AAuBtC;;;AAGG;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAa,CAAC;KAKxC;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7C;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc;AAChB,aAAA,SAAS,EAAE;AACX,aAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC/B,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,KAAK,EACrC,IAAI,CAAC,KAAK,CACX,CAAC;aACH;AACH,SAAC,CAAC,CAAC;KACN;IAED,eAAe,GAAA;QACb,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,MAAK;AAC7D,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACxC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,KAAK,CACtC,CAAC;AACF,YAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;8GAvEU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,kJAFhB,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,0BADlD,CAAgB,cAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAGf,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,CAAgB,cAAA,CAAA;AAC1B,oBAAA,SAAS,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;AAC7D,iBAAA,CAAA;2HASC,MAAM,EAAA,CAAA;sBADL,KAAK;gBAiBF,KAAK,EAAA,CAAA;sBADR,KAAK;gBAeN,WAAW,EAAA,CAAA;sBADV,MAAM;;;MC7BI,UAAU,CAAA;8GAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,YAhBnB,uBAAuB;YACvB,uBAAuB;YACvB,gBAAgB;YAChB,sBAAsB;YACtB,eAAe;YACf,qBAAqB;YACrB,gBAAgB;YAChB,uBAAuB;YACvB,sBAAsB;YACtB,uBAAuB;YACvB,YAAY;YACZ,WAAW,CAAA,EAAA,OAAA,EAAA,CAEH,gBAAgB,EAAE,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;AAGvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,aAFV,CAAC,wBAAwB,EAAE,qBAAqB,CAAC,YAd1D,uBAAuB;YACvB,uBAAuB;YAEvB,sBAAsB;YACtB,eAAe;YACf,qBAAqB;YACrB,gBAAgB;YAChB,uBAAuB;YACvB,sBAAsB;YACtB,uBAAuB;YACvB,YAAY;YACZ,WAAW,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKF,UAAU,EAAA,UAAA,EAAA,CAAA;kBAnBtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE;wBACP,uBAAuB;wBACvB,uBAAuB;wBACvB,gBAAgB;wBAChB,sBAAsB;wBACtB,eAAe;wBACf,qBAAqB;wBACrB,gBAAgB;wBAChB,uBAAuB;wBACvB,sBAAsB;wBACtB,uBAAuB;wBACvB,YAAY;wBACZ,WAAW;AACZ,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;AACnD,oBAAA,SAAS,EAAE,CAAC,wBAAwB,EAAE,qBAAqB,CAAC;AAC7D,iBAAA,CAAA;;;AC3BD,MAAM,OAAO,GAAG,OAAO,CAAC;AAaxB;;;;;AAKG;MACU,YAAY,CAAA;IAoBvB,WAAY,CAAA,UAAkB,EAAE,MAAc,EAAA;QAXtC,IAAS,CAAA,SAAA,GAAa,EAAE,CAAC;AAEjC;;AAEG;AACK,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC9C;;AAEG;AACK,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;AAGnD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAErB,QAAA,IAAI,CAAC,QAAQ,GAAGL,EAAM,EAAE,CAAC;AAEzB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3D,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,OAAO,EAAE,OAAO;YAChB,EAAE,EAAE,GAAG,EAAE;AACV,SAAA,CAAC,CAAC;KACJ;IAEO,MAAM,GAAA;;AAEZ,QAAA,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;AACvC,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC1B;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAEO,IAAA,SAAS,CAAC,CAAuB,EAAA;AACvC,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAY,CAAC;AAClD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB;AAEO,IAAA,OAAO,CAAC,CAAa,EAAA;AAC3B,QAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;KACtC;AAEO,IAAA,OAAO,CAAC,CAAQ,EAAA;AACtB,QAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;KACrC;AAED;;AAEG;AACK,IAAA,IAAI,CAAC,OAAgB,EAAA;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AACzC,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC1B;aAAM;;AAEL,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACjC;KACF;AAED;;AAEG;AACK,IAAA,OAAO,CAAC,OAAgB,EAAA;AAC9B,QAAA,QAAQ,OAAO,CAAC,IAAI;YAClB,KAAK,MAAM,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACnD,gBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;oBACzB,MAAM,IAAI,KAAK,CAAC,CAAA,2BAAA,EAA8B,OAAO,CAAC,OAAO,CAAG,CAAA,CAAA,CAAC,CAAC;iBACnE;AAED,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,YAAyB,CAAC;AACvD,gBAAA,IAAI,YAAY,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC3B,gBAAA,OAAO,CAAC,eAAe,IAAI,CAAC;AAC5B,gBAAA,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;gBACpC,MAAM;aACP;YACD,KAAK,KAAK,EAAE;AACV,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACnD,gBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;oBACzB,MAAM,IAAI,KAAK,CAAC,CAAA,0BAAA,EAA6B,OAAO,CAAC,OAAO,CAAG,CAAA,CAAA,CAAC,CAAC;iBAClE;AAED,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,OAAiC,CAAC;gBACzD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5C,MAAM;aACP;YACD,KAAK,MAAM,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxD,gBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;oBACzB,MAAM,IAAI,KAAK,CAAC,CAAA,yBAAA,EAA4B,OAAO,CAAC,KAAK,CAAG,CAAA,CAAA,CAAC,CAAC;iBAC/D;AAED,gBAAA,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;gBAClC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5C,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7C,gBAAA,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;;AAGtC,gBAAA,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;AACtC,oBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;iBACrD;AACD,gBAAA,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;aACvB;SACF;KACF;AAED;;;;;;AAMG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;AACD,QAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;AAEpC,QAAA,MAAM,KAAK,GAAGA,EAAM,EAAE,CAAC;AACvB,QAAA,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK;YACL,YAAY;YACZ,EAAE,EAAE,GAAG,EAAE;AACV,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,OAAO,GAAY;YACvB,MAAM;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;;;AAIzC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAE3B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC;AACtC,SAAC,CAAC,CAAC;KACJ;AAED;;;;;;;;AAQG;IACH,QAAQ,CAAC,MAAc,EAAE,OAAe,EAAA;AACtC,QAAA,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;AACD,QAAA,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC;AACR,YAAA,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO;YACP,EAAE,EAAE,GAAG,EAAE;AACV,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,OAAO,GAAY;YACvB,MAAM;YACN,OAAO;AACP,YAAA,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAEpC,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC;AACpC,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,YAAY,CAAC,OAAgB,EAAA;;QAEnC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,MAAM,KAAI;AAC9C,YAAA,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;;AAE5B,gBAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;AACpB,oBAAA,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,oBAAA,OAAO,EAAE,MAAM;oBACf,EAAE,EAAE,GAAG,EAAE;AACV,iBAAA,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC;AACR,oBAAA,IAAI,EAAE,KAAK;oBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,OAAO,CAAC,OAAO;AACxB,oBAAA,OAAO,EAAE,MAAM;oBACf,EAAE,EAAE,GAAG,EAAE;AACV,iBAAA,CAAC,CAAC;aACJ;AACH,SAAC,CAAC;KACH;AACF,CAAA;AAED;;AAEG;AACH,SAAS,GAAG,GAAA;AACV,IAAA,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC;;AClQA;;AAEG;;;;"}