@memberjunction/ng-dashboards 6.1.2 → 6.2.0-edge.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +6 -1
  2. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  3. package/dist/AI/components/vectors/vector-management-resource.component.js +99 -45
  4. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  5. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +4 -0
  6. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  7. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +16 -6
  8. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  9. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +4 -0
  10. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  11. package/dist/DataExplorer/data-explorer-dashboard.component.js +14 -4
  12. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  13. package/dist/DataExplorer/services/explorer-state.service.js +2 -2
  14. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  15. package/dist/DevTools/graphql-console.component.d.ts.map +1 -1
  16. package/dist/DevTools/graphql-console.component.js +2 -0
  17. package/dist/DevTools/graphql-console.component.js.map +1 -1
  18. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  19. package/dist/Integration/components/connections/connections.component.js +2 -0
  20. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  21. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts +4 -12
  22. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.d.ts.map +1 -1
  23. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js +39 -78
  24. package/dist/KnowledgeHub/components/feature-pipelines/feature-pipelines-resource.component.js.map +1 -1
  25. package/dist/Lists/components/lists-browse-resource.component.d.ts +3 -0
  26. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  27. package/dist/Lists/components/lists-browse-resource.component.js +7 -6
  28. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  29. package/dist/Lists/components/lists-my-lists-resource.component.d.ts +3 -0
  30. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  31. package/dist/Lists/components/lists-my-lists-resource.component.js +7 -6
  32. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  33. package/dist/PredictiveStudio/at-risk.view-models.d.ts +41 -3
  34. package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +1 -1
  35. package/dist/PredictiveStudio/at-risk.view-models.js +99 -6
  36. package/dist/PredictiveStudio/at-risk.view-models.js.map +1 -1
  37. package/dist/PredictiveStudio/components/ps-catalog.component.d.ts +4 -1
  38. package/dist/PredictiveStudio/components/ps-catalog.component.d.ts.map +1 -1
  39. package/dist/PredictiveStudio/components/ps-catalog.component.js +61 -37
  40. package/dist/PredictiveStudio/components/ps-catalog.component.js.map +1 -1
  41. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +12 -0
  42. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  43. package/dist/PredictiveStudio/components/ps-experiments.component.js +426 -184
  44. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  45. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +84 -0
  46. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -0
  47. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +1397 -0
  48. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -0
  49. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +66 -34
  50. package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
  51. package/dist/PredictiveStudio/components/ps-pipelines.component.js +2456 -743
  52. package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
  53. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +194 -0
  54. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -0
  55. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +1902 -0
  56. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -0
  57. package/dist/PredictiveStudio/components/ps-production.component.d.ts +17 -1
  58. package/dist/PredictiveStudio/components/ps-production.component.d.ts.map +1 -1
  59. package/dist/PredictiveStudio/components/ps-production.component.js +653 -372
  60. package/dist/PredictiveStudio/components/ps-production.component.js.map +1 -1
  61. package/dist/PredictiveStudio/components/ps-registry.component.d.ts +21 -61
  62. package/dist/PredictiveStudio/components/ps-registry.component.d.ts.map +1 -1
  63. package/dist/PredictiveStudio/components/ps-registry.component.js +214 -681
  64. package/dist/PredictiveStudio/components/ps-registry.component.js.map +1 -1
  65. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +49 -0
  66. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +1 -0
  67. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +658 -0
  68. package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +1 -0
  69. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +42 -0
  70. package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -0
  71. package/dist/PredictiveStudio/predictive-studio-score-history.service.js +90 -0
  72. package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -0
  73. package/dist/PredictiveStudio/predictive-studio.view-models.d.ts +14 -2
  74. package/dist/PredictiveStudio/predictive-studio.view-models.d.ts.map +1 -1
  75. package/dist/PredictiveStudio/predictive-studio.view-models.js +41 -5
  76. package/dist/PredictiveStudio/predictive-studio.view-models.js.map +1 -1
  77. package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts +9 -1
  78. package/dist/PredictiveStudio/resources/ps-models-resource.component.d.ts.map +1 -1
  79. package/dist/PredictiveStudio/resources/ps-models-resource.component.js +178 -65
  80. package/dist/PredictiveStudio/resources/ps-models-resource.component.js.map +1 -1
  81. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +9 -1
  82. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  83. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +307 -369
  84. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  85. package/dist/PredictiveStudio/resources/ps-resource-base.js +1 -1
  86. package/dist/PredictiveStudio/resources/ps-resource-base.js.map +1 -1
  87. package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts +17 -1
  88. package/dist/PredictiveStudio/resources/ps-studio-resource.component.d.ts.map +1 -1
  89. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +309 -138
  90. package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
  91. package/dist/VersionHistory/components/graph-resource.component.d.ts +1 -0
  92. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  93. package/dist/VersionHistory/components/graph-resource.component.js +6 -5
  94. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  95. package/dist/predictive-studio-dashboards.module.d.ts +10 -8
  96. package/dist/predictive-studio-dashboards.module.d.ts.map +1 -1
  97. package/dist/predictive-studio-dashboards.module.js +13 -3
  98. package/dist/predictive-studio-dashboards.module.js.map +1 -1
  99. package/package.json +64 -63
@@ -1 +1 @@
1
- {"version":3,"file":"ps-pipelines.component.js","sourceRoot":"","sources":["../../../src/PredictiveStudio/components/ps-pipelines.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { IMetadataProvider, UserInfo } from '@memberjunction/core';\nimport { MJMLTrainingPipelineEntity, PredictiveStudioTrainModelOperation } from '@memberjunction/core-entities';\nimport {\n DOMINANCE_THRESHOLD_DEFAULT,\n parseDenyList,\n type SourceBinding,\n type FeatureStepGraph,\n type FeatureStep,\n type FeatureStepKind,\n type AsOfStrategy,\n type LeakageGuard,\n type ValidationStrategy,\n type ProblemType,\n} from '@memberjunction/predictive-studio-core';\nimport { PredictiveStudioEngine } from '../engine/predictive-studio.engine';\n\ntype NodeType = 'src' | 'feat' | 'emb' | 'target' | 'algo' | 'output';\n\ninterface DagNode {\n id: string;\n type: NodeType;\n title: string;\n icon: string;\n tag?: string;\n rows: { k: string; v: string }[];\n x: number;\n y: number;\n hasIn: boolean;\n hasOut: boolean;\n}\n\ninterface DagEdge {\n from: string;\n to: string;\n}\n\nconst NODE_W = 190;\nconst NODE_H = 86;\nconst COL_GAP = 86;\nconst ROW_GAP = 30;\nconst PAD_X = 28;\nconst PAD_Y = 28;\n\nconst SOURCE_KINDS: SourceBinding['Kind'][] = ['Entity', 'Query', 'ExternalEntity', 'VectorSet', 'FeaturePipeline'];\nconst STEP_KINDS: FeatureStepKind[] = ['select', 'impute', 'standardize', 'onehot', 'bin', 'embedding', 'llm-derived', 'flow-agent', 'vision-llm'];\nconst PROBLEM_TYPES: ProblemType[] = ['classification', 'regression'];\nconst IMPUTE_STRATEGIES: Array<'mean' | 'median' | 'mode' | 'constant'> = ['mean', 'median', 'mode', 'constant'];\n\nconst SOURCE_ICONS: Record<SourceBinding['Kind'], string> = {\n Entity: 'fa-solid fa-table',\n Query: 'fa-solid fa-magnifying-glass-chart',\n ExternalEntity: 'fa-solid fa-arrows-turn-to-dots',\n VectorSet: 'fa-solid fa-vector-square',\n FeaturePipeline: 'fa-solid fa-diagram-project',\n};\n\nconst STEP_ICONS: Record<FeatureStepKind, string> = {\n select: 'fa-solid fa-list-check',\n impute: 'fa-solid fa-fill-drip',\n standardize: 'fa-solid fa-ruler-combined',\n onehot: 'fa-solid fa-table-cells',\n bin: 'fa-solid fa-chart-simple',\n embedding: 'fa-solid fa-vector-square',\n 'llm-derived': 'fa-solid fa-wand-magic-sparkles',\n 'flow-agent': 'fa-solid fa-robot',\n 'vision-llm': 'fa-solid fa-eye',\n};\n\nconst PS_PIPELINES_STARTER_PROMPT =\n 'Help me build a training pipeline. I will tell you what I want to predict and on which entity; ' +\n 'you assemble the features (guarding against leakage), pick an algorithm, and train a versioned model.';\n\n/**\n * Training Pipelines panel — a LIVE, **editable** visual DAG builder over `MJ: ML Training Pipelines`.\n * The whole graph is persisted as JSON (`SourceBindings` + `FeatureSteps` + `AlgorithmID` +\n * `TargetVariable` + `AsOfStrategy`/`LeakageGuard`/`ValidationStrategy`), so the editor reads/writes the\n * REAL spec. The parsed spec is the editable state; nodes/edges are derived from it for rendering, so an\n * edit → re-derive → re-layout. Save serializes back to the entity; Train runs the pipeline. Editing is\n * inspector-driven (explicit controls, no fiddly port-dragging) — better for a structured, persisted DAG.\n * Fully entity-agnostic — every node derives from the pipeline's own refs. See\n * plans/predictive-studio-pipeline-builder.md.\n */\n@Component({\n standalone: true,\n selector: 'ps-pipelines',\n imports: [CommonModule, MJButtonDirective],\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['../predictive-studio.shared.css', './ps-pipelines.component.css'],\n template: `\n <div class=\"ps-panel ps-pipelines\" data-testid=\"ps-pipelines-panel\">\n @if (pipelines.length === 0) {\n <div class=\"ps-empty\" data-testid=\"ps-pipelines-empty\">\n <span class=\"ps-empty-ico\"><i class=\"fa-solid fa-diagram-project\"></i></span>\n <h3>No training pipelines yet</h3>\n <p>\n A training pipeline assembles features from your data, picks an algorithm, and trains a\n versioned model. The fastest way to build one is to describe your goal to the Model\n Development Agent — it designs the pipeline, guards against target leakage, and trains for you.\n </p>\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-ask-agent\"\n (click)=\"askAgent.emit(starterPrompt)\">\n <i class=\"fa-solid fa-robot\"></i> Ask the agent to build one\n </button>\n </div>\n } @else {\n <!-- Pipeline picker (its own scrollable row) -->\n <div class=\"pl-picker\" data-testid=\"ps-pipelines-picker\">\n @for (p of pipelines; track p.ID) {\n <button class=\"pl-pill\" [class.on]=\"isSelectedPipeline(p)\"\n data-testid=\"ps-pipelines-pill\" (click)=\"selectPipeline(p.ID)\" [title]=\"p.Name\">\n <i class=\"fa-solid fa-diagram-project\"></i> <span class=\"pl-pill-name\">{{ p.Name }}</span>\n <span class=\"ps-badge\" [class]=\"statusClass(p.Status)\">{{ p.Status }}</span>\n </button>\n }\n </div>\n\n <!-- Toolbar for the selected pipeline (its own row) -->\n <div class=\"pl-toolbar\">\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-save\" [disabled]=\"!dirty || busy\" (click)=\"save()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-validate\" [disabled]=\"busy\" (click)=\"validate()\">\n <i class=\"fa-solid fa-circle-check\"></i> Validate\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-train\" [disabled]=\"busy || dirty\" (click)=\"train()\">\n <i class=\"fa-solid fa-play\"></i> Train\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"refine()\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Agent\n </button>\n <span class=\"ps-spacer\"></span>\n @if (dirty) { <span class=\"ps-tag amber\" data-testid=\"ps-pipelines-dirty\"><i class=\"fa-solid fa-pen\"></i> Unsaved</span> }\n </div>\n\n <div class=\"builder\">\n <!-- Canvas -->\n <div class=\"canvas-wrap\">\n <div class=\"canvas-bar\">\n <span class=\"ps-small ps-muted\" style=\"font-weight:600\">Add:</span>\n <button class=\"ps-pchip s\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-database\"></i> Source</button>\n <button class=\"ps-pchip f\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Feature step</button>\n <span class=\"ps-spacer\"></span>\n <span class=\"ps-small ps-muted\"><i class=\"fa-solid fa-circle-nodes\"></i> {{ nodes.length }} nodes · {{ edges.length }} edges</span>\n </div>\n\n <div class=\"ps-flow big\" data-testid=\"ps-pipelines-canvas\"\n [style.width.px]=\"canvasW\" [style.height.px]=\"canvasH\">\n <svg class=\"ps-edges\" data-testid=\"ps-pipelines-edges\"\n [attr.width]=\"canvasW\" [attr.height]=\"canvasH\"\n [attr.viewBox]=\"'0 0 ' + canvasW + ' ' + canvasH\">\n @for (edge of edges; track edge.from + edge.to) {\n <path [attr.d]=\"edgePath(edge)\"></path>\n }\n </svg>\n @for (node of nodes; track node.id) {\n <div class=\"ps-node\" data-testid=\"ps-pipelines-node\" [attr.data-node-id]=\"node.id\"\n [ngClass]=\"node.type\" [class.selected]=\"node.id === selectedId\"\n [style.left.px]=\"node.x\" [style.top.px]=\"node.y\" (click)=\"selectNode(node.id)\">\n <div class=\"nh\">\n <i class=\"tile\" [ngClass]=\"node.icon\"></i>\n <span>{{ node.title }}</span>\n @if (node.tag) { <span class=\"ps-tag\">{{ node.tag }}</span> }\n </div>\n <div class=\"nb\">\n @for (row of node.rows; track row.k) {\n <div class=\"nb-row\"><span class=\"k\">{{ row.k }}</span><span>{{ row.v }}</span></div>\n }\n </div>\n @if (node.hasIn) { <span class=\"port in\"></span> }\n @if (node.hasOut) { <span class=\"port out\"></span> }\n </div>\n }\n </div>\n\n <div class=\"flow-toolbar\">\n <div class=\"legend\">\n <span><i class=\"sw src\"></i> Source</span>\n <span><i class=\"sw feat\"></i> Feature</span>\n <span><i class=\"sw emb\"></i> Embedding</span>\n <span><i class=\"sw target\"></i> Target</span>\n <span><i class=\"sw algo\"></i> Algorithm</span>\n </div>\n </div>\n </div>\n\n <!-- Inspector (editable) -->\n <div class=\"ps-col inspector\" data-testid=\"ps-pipelines-inspector\">\n <div class=\"ps-card insp\">\n <div class=\"ihead\">\n <i class=\"tile\" [ngClass]=\"selectedNode.icon\" [attr.data-type]=\"selectedNode.type\"></i>\n <div style=\"flex:1\">\n <h3 data-testid=\"ps-pipelines-inspector-title\">{{ selectedNode.title }}</h3>\n <div class=\"ps-small ps-muted\">{{ nodeTypeLabel(selectedNode.type) }} · selected</div>\n </div>\n @if (selectedNode.type === 'src' || selectedNode.type === 'feat' || selectedNode.type === 'emb') {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-delete\" (click)=\"deleteSelected()\"><i class=\"fa-solid fa-trash\"></i></button>\n }\n </div>\n <div class=\"ps-card-body\">\n <!-- SOURCE editor -->\n @if (selectedSource) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedSource.Kind\" (change)=\"setSourceKind($any($event.target).value)\">\n @for (k of sourceKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Reference (entity / query / id)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Ref\" (input)=\"setSourceRef($any($event.target).value)\" />\n </div>\n <div class=\"ps-field\"><label>Alias (optional)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Alias || ''\" (input)=\"setSourceAlias($any($event.target).value)\" />\n </div>\n }\n <!-- STEP editor -->\n @if (selectedStep) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedStep.Kind\" (change)=\"setStepKind($any($event.target).value)\">\n @for (k of stepKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Label</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedStep.Label || ''\" (input)=\"setStepLabel($any($event.target).value)\" />\n </div>\n @switch (selectedStep.Kind) {\n @case ('select') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns($any($event.target).value)\" /></div> }\n @case ('standardize') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns($any($event.target).value)\" /></div> }\n @case ('impute') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"stepField('Strategy')\" (change)=\"setStepStr('Strategy', $any($event.target).value)\">@for (s of imputeStrategies; track s) { <option [value]=\"s\">{{ s }}</option> }</select></div>\n }\n @case ('onehot') { <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div> }\n @case ('bin') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Bins</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Bins')\" (input)=\"setStepNum('Bins', $any($event.target).value)\" /></div>\n }\n @case ('embedding') {\n <div class=\"ps-field\"><label>Entity</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Entity')\" (input)=\"setStepStr('Entity', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Embedding model ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('EmbeddingModelRef')\" (input)=\"setStepStr('EmbeddingModelRef', $any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Dimensions</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Dims')\" (input)=\"setStepNum('Dims', $any($event.target).value)\" /></div>\n }\n @case ('llm-derived') { <div class=\"ps-field\"><label>Feature Pipeline ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FeaturePipelineRef')\" (input)=\"setStepStr('FeaturePipelineRef', $any($event.target).value)\" /></div> }\n @case ('flow-agent') { <div class=\"ps-field\"><label>Flow Agent ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FlowAgentRef')\" (input)=\"setStepStr('FlowAgentRef', $any($event.target).value)\" /></div> }\n @case ('vision-llm') { <div class=\"ps-field\"><label>Image column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('ImageColumn')\" (input)=\"setStepStr('ImageColumn', $any($event.target).value)\" /></div> }\n }\n <!-- rewire: upstream step inputs -->\n @if (otherSteps.length > 0) {\n <div class=\"ps-field\"><label>Inputs (upstream steps)</label>\n <div class=\"inputs-list\">\n @for (s of otherSteps; track s.Id) {\n <label class=\"inp-row\"><input type=\"checkbox\" [checked]=\"hasInput(s.Id)\" (change)=\"toggleInput(s.Id)\" /> {{ s.Label || s.Kind }}</label>\n }\n </div>\n <div class=\"ps-small ps-muted\" style=\"margin-top:4px\">No inputs = a root step fed directly by the sources.</div>\n </div>\n }\n }\n <!-- TARGET editor -->\n @if (selectedNode.type === 'target') {\n <div class=\"ps-field\"><label>Target variable</label><input class=\"mj-input\" type=\"text\" [value]=\"editTargetVariable\" (input)=\"setTargetVariable($any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Problem type</label><select class=\"mj-input\" [value]=\"editProblemType\" (change)=\"setProblemType($any($event.target).value)\">@for (pt of problemTypes; track pt) { <option [value]=\"pt\">{{ pt }}</option> }</select></div>\n }\n <!-- ALGORITHM editor -->\n @if (selectedNode.type === 'algo') {\n <div class=\"ps-field\"><label>Algorithm</label><select class=\"mj-input\" [value]=\"editAlgorithmId\" (change)=\"setAlgorithm($any($event.target).value)\">@for (a of algorithms; track a.ID) { <option [value]=\"a.ID\">{{ a.Name }}</option> }</select></div>\n <div class=\"ps-field\"><label>Hyperparameters (JSON)</label><textarea class=\"mj-textarea\" rows=\"4\" [value]=\"editHyperparams\" (input)=\"setHyperparams($any($event.target).value)\"></textarea></div>\n }\n @if (selectedNode.type === 'output') {\n <div class=\"ps-small ps-muted\">The trained model artifact. Run <strong>Train</strong> to produce a new versioned model from this pipeline.</div>\n }\n </div>\n </div>\n\n <!-- Leakage guard (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-shield-halved\" style=\"color:var(--mj-status-warning)\"></i><h3>Leakage guard</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Deny-list columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"denyText\" (input)=\"setDeny($any($event.target).value)\" /></div>\n <div class=\"ps-field\"><label>Single-feature dominance threshold</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" min=\"0\" max=\"1\" [value]=\"editLeakage.SingleFeatureDominanceThreshold\" (input)=\"setThreshold($any($event.target).value)\" /></div>\n </div>\n </div>\n\n <!-- As-of strategy (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i><h3>As-of strategy</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Mode</label><select class=\"mj-input\" [value]=\"editAsOf.Mode\" (change)=\"setAsOfMode($any($event.target).value)\"><option value=\"none\">none</option><option value=\"column\">column</option><option value=\"offset\">offset</option></select></div>\n @if (editAsOf.Mode === 'column') { <div class=\"ps-field\"><label>Decision-date column</label><input class=\"mj-input\" type=\"text\" [value]=\"editAsOf.Column || ''\" (input)=\"setAsOfColumn($any($event.target).value)\" /></div> }\n @if (editAsOf.Mode === 'offset') { <div class=\"ps-field\"><label>Offset days before label</label><input class=\"mj-input\" type=\"number\" [value]=\"editAsOf.OffsetDays ?? 0\" (input)=\"setAsOfOffset($any($event.target).value)\" /></div> }\n </div>\n </div>\n\n <!-- Validation (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-scissors\" style=\"color:var(--mj-brand-primary)\"></i><h3>Validation</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"editValidation.Strategy\" (change)=\"setValStrategy($any($event.target).value)\"><option value=\"train_test_split\">train_test_split</option><option value=\"kfold\">kfold</option><option value=\"holdout\">holdout</option></select></div>\n @if (editValidation.Strategy === 'train_test_split') { <div class=\"ps-field\"><label>Test size</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.TestSize ?? 0.2\" (input)=\"setTestSize($any($event.target).value)\" /></div> }\n @if (editValidation.Strategy === 'kfold') { <div class=\"ps-field\"><label>Folds (k)</label><input class=\"mj-input\" type=\"number\" [value]=\"editValidation.K ?? 5\" (input)=\"setK($any($event.target).value)\" /></div> }\n <div class=\"ps-field\"><label>Locked holdout fraction</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.LockedHoldoutFraction\" (input)=\"setHoldout($any($event.target).value)\" /></div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class PSPipelinesComponent implements OnInit {\n @Input() engine!: PredictiveStudioEngine;\n @Input() provider: IMetadataProvider | null = null;\n @Input() currentUser: UserInfo | null = null;\n\n @Output() askAgent = new EventEmitter<string>();\n\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n\n public readonly starterPrompt = PS_PIPELINES_STARTER_PROMPT;\n public readonly sourceKinds = SOURCE_KINDS;\n public readonly stepKinds = STEP_KINDS;\n public readonly problemTypes = PROBLEM_TYPES;\n public readonly imputeStrategies = IMPUTE_STRATEGIES;\n\n public pipelines: MJMLTrainingPipelineEntity[] = [];\n public selectedPipelineId = '';\n\n // Editable spec state (the source of truth; nodes/edges are derived).\n private editSources: SourceBinding[] = [];\n private editSteps: FeatureStep[] = [];\n public editTargetVariable = '';\n public editProblemType: ProblemType = 'classification';\n public editAlgorithmId = '';\n public editHyperparams = '{}';\n public editLeakage: LeakageGuard = { DenyFields: [], SingleFeatureDominanceThreshold: DOMINANCE_THRESHOLD_DEFAULT };\n public editAsOf: AsOfStrategy = { Mode: 'none' };\n public editValidation: ValidationStrategy = { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 };\n\n public nodes: DagNode[] = [];\n public edges: DagEdge[] = [];\n public selectedId = '';\n public canvasW = 800;\n public canvasH = 460;\n public dirty = false;\n public busy = false;\n\n private nodeById = new Map<string, DagNode>();\n private stepSeq = 0;\n\n ngOnInit(): void {\n this.pipelines = this.engine?.Pipelines ?? [];\n if (this.pipelines.length > 0) {\n this.selectPipeline(this.pipelines[0].ID);\n }\n }\n\n // ---- pipeline selection: entity JSON → editable state ----\n\n public selectPipeline(id: string): void {\n this.selectedPipelineId = id;\n const p = this.pipelines.find((x) => UUIDsEqual(x.ID, id));\n if (!p) {\n return;\n }\n this.editSources = this.parse<SourceBinding[]>(p.SourceBindings, []);\n this.editSteps = this.parse<FeatureStepGraph>(p.FeatureSteps, { Steps: [] }).Steps ?? [];\n this.editTargetVariable = p.TargetVariable ?? '';\n this.editProblemType = (p.ProblemType as ProblemType) ?? 'classification';\n this.editAlgorithmId = p.AlgorithmID ?? '';\n this.editHyperparams = p.Hyperparameters ?? '{}';\n this.editLeakage = this.parse<LeakageGuard>(p.LeakageGuard, { DenyFields: [], SingleFeatureDominanceThreshold: DOMINANCE_THRESHOLD_DEFAULT });\n this.editAsOf = this.parse<AsOfStrategy>(p.AsOfStrategy, { Mode: 'none' });\n this.editValidation = this.parse<ValidationStrategy>(p.ValidationStrategy, { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 });\n this.stepSeq = this.editSteps.length;\n this.dirty = false;\n this.rebuild();\n this.selectedId = this.nodes[0]?.id ?? '';\n }\n\n private get selectedPipeline(): MJMLTrainingPipelineEntity | undefined {\n return this.pipelines.find((p) => UUIDsEqual(p.ID, this.selectedPipelineId));\n }\n\n public isSelectedPipeline(p: MJMLTrainingPipelineEntity): boolean {\n return UUIDsEqual(p.ID, this.selectedPipelineId);\n }\n\n private parse<T>(raw: string | null | undefined, fallback: T): T {\n if (!raw) {\n return fallback;\n }\n try {\n const value: unknown = JSON.parse(raw);\n return (value ?? fallback) as T;\n } catch {\n return fallback;\n }\n }\n\n private markDirty(): void {\n this.dirty = true;\n this.rebuild();\n }\n\n // ---- derive nodes/edges from editable state ----\n\n private rebuild(): void {\n const nodes: DagNode[] = [];\n const edges: DagEdge[] = [];\n\n this.editSources.forEach((sb, i) => nodes.push(this.sourceNode(sb, i)));\n this.editSteps.forEach((step) => nodes.push(this.stepNode(step)));\n nodes.push(this.targetNode());\n nodes.push(this.algoNode());\n nodes.push({ id: '__output', type: 'output', title: 'Model', icon: 'fa-solid fa-cube', x: 0, y: 0, hasIn: false, hasOut: false, rows: [{ k: 'status', v: this.selectedPipeline?.Status ?? 'Draft' }] });\n\n const stepIds = new Set(this.editSteps.map((s) => s.Id));\n const referenced = new Set<string>();\n for (const step of this.editSteps) {\n for (const input of step.Inputs ?? []) {\n if (stepIds.has(input)) {\n edges.push({ from: input, to: step.Id });\n referenced.add(input);\n }\n }\n }\n const roots = this.editSteps.filter((s) => (s.Inputs ?? []).filter((i) => stepIds.has(i)).length === 0);\n const sourceIds = this.editSources.map((_s, i) => `src:${i}`);\n if (this.editSteps.length > 0) {\n for (const sid of sourceIds) {\n for (const r of roots) {\n edges.push({ from: sid, to: r.Id });\n }\n }\n } else {\n for (const sid of sourceIds) {\n edges.push({ from: sid, to: '__algo' });\n }\n }\n for (const t of this.editSteps.filter((s) => !referenced.has(s.Id))) {\n edges.push({ from: t.Id, to: '__algo' });\n }\n edges.push({ from: '__target', to: '__algo' });\n edges.push({ from: '__algo', to: '__output' });\n\n this.nodes = nodes;\n this.edges = edges;\n this.markPorts();\n this.layoutDag();\n }\n\n private sourceNode(sb: SourceBinding, i: number): DagNode {\n const rows = [{ k: 'kind', v: sb.Kind }, { k: 'ref', v: sb.Ref || '—' }];\n if (sb.Alias) {\n rows.push({ k: 'alias', v: sb.Alias });\n }\n return { id: `src:${i}`, type: 'src', title: sb.Alias || sb.Ref || 'source', icon: SOURCE_ICONS[sb.Kind] ?? 'fa-solid fa-database', tag: sb.Kind, rows, x: 0, y: 0, hasIn: false, hasOut: true };\n }\n\n private stepNode(step: FeatureStep): DagNode {\n return { id: step.Id, type: step.Kind === 'embedding' ? 'emb' : 'feat', title: step.Label || step.Kind, icon: STEP_ICONS[step.Kind] ?? 'fa-solid fa-sliders', tag: step.Kind, rows: this.stepRows(step), x: 0, y: 0, hasIn: true, hasOut: true };\n }\n\n private stepRows(step: FeatureStep): { k: string; v: string }[] {\n switch (step.Kind) {\n case 'select': return [{ k: 'columns', v: `${step.Columns.length} cols` }];\n case 'impute': return [{ k: 'column', v: step.Column }, { k: 'strategy', v: step.Strategy }];\n case 'standardize': return [{ k: 'columns', v: `${step.Columns.length} cols` }, { k: 'scaler', v: 'z-score' }];\n case 'onehot': return [{ k: 'column', v: step.Column }];\n case 'bin': return [{ k: 'column', v: step.Column }, { k: 'bins', v: String(step.Bins) }];\n case 'embedding': return [{ k: 'entity', v: step.Entity }, { k: 'dims', v: String(step.Dims) }];\n case 'llm-derived': return [{ k: 'pipeline', v: step.FeaturePipelineRef }];\n case 'flow-agent': return [{ k: 'agent', v: step.FlowAgentRef }];\n case 'vision-llm': return [{ k: 'image', v: step.ImageColumn }, { k: 'output', v: step.Output.FeatureName }];\n default: return [];\n }\n }\n\n private targetNode(): DagNode {\n return { id: '__target', type: 'target', title: `Target: ${this.editTargetVariable || '—'}`, icon: 'fa-solid fa-bullseye', rows: [{ k: 'variable', v: this.editTargetVariable || '—' }, { k: 'type', v: this.editProblemType }], x: 0, y: 0, hasIn: false, hasOut: true };\n }\n\n private algoNode(): DagNode {\n const name = this.engine.AlgorithmName(this.editAlgorithmId);\n const rows = [{ k: 'algorithm', v: name }];\n const hp = this.parse<Record<string, unknown>>(this.editHyperparams, {});\n Object.entries(hp).slice(0, 2).forEach(([k, v]) => rows.push({ k, v: String(v) }));\n return { id: '__algo', type: 'algo', title: name, icon: 'fa-solid fa-shapes', rows, x: 0, y: 0, hasIn: true, hasOut: true };\n }\n\n private markPorts(): void {\n const hasIn = new Set(this.edges.map((e) => e.to));\n const hasOut = new Set(this.edges.map((e) => e.from));\n for (const n of this.nodes) {\n n.hasIn = hasIn.has(n.id);\n n.hasOut = hasOut.has(n.id);\n }\n }\n\n // ---- selection ----\n\n public selectNode(id: string): void {\n this.selectedId = id;\n }\n\n public get selectedNode(): DagNode {\n return this.nodeById.get(this.selectedId) ?? this.nodes[0] ?? { id: '', type: 'feat', title: '—', icon: 'fa-solid fa-sliders', rows: [], x: 0, y: 0, hasIn: false, hasOut: false };\n }\n\n public get selectedSourceIndex(): number {\n return this.selectedId.startsWith('src:') ? Number(this.selectedId.slice(4)) : -1;\n }\n public get selectedSource(): SourceBinding | null {\n const i = this.selectedSourceIndex;\n return i >= 0 ? this.editSources[i] ?? null : null;\n }\n public get selectedStep(): FeatureStep | null {\n return this.editSteps.find((s) => s.Id === this.selectedId) ?? null;\n }\n public get otherSteps(): FeatureStep[] {\n return this.editSteps.filter((s) => s.Id !== this.selectedId);\n }\n public get algorithms() {\n return this.engine?.Algorithms ?? [];\n }\n\n // ---- source editing ----\n\n public setSourceKind(kind: string): void { const s = this.selectedSource; if (s) { s.Kind = kind as SourceBinding['Kind']; this.markDirty(); } }\n public setSourceRef(ref: string): void { const s = this.selectedSource; if (s) { s.Ref = ref; this.markDirty(); } }\n public setSourceAlias(alias: string): void { const s = this.selectedSource; if (s) { s.Alias = alias || undefined; this.markDirty(); } }\n\n // ---- step editing ----\n\n public get columnsText(): string {\n const s = this.selectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n return s.Columns.join(', ');\n }\n return '';\n }\n public setColumns(text: string): void {\n const s = this.selectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n s.Columns = text.split(',').map((c) => c.trim()).filter(Boolean);\n this.markDirty();\n }\n }\n /** Read an arbitrary field off the selected step for display (narrowed by template @switch). */\n public stepField(field: string): string {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n const v = s?.[field];\n return v == null ? '' : String(v);\n }\n public setStepStr(field: string, value: string): void {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n if (s) { s[field] = value; this.markDirty(); }\n }\n public setStepNum(field: string, value: string): void {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n const n = Number(value);\n if (s && !Number.isNaN(n)) { s[field] = n; this.markDirty(); }\n }\n public setStepLabel(label: string): void { const s = this.selectedStep; if (s) { s.Label = label || undefined; this.markDirty(); } }\n\n /** Change a step's Kind, resetting its config to that Kind's defaults (preserving Id/Label/Inputs). */\n public setStepKind(kind: string): void {\n const idx = this.editSteps.findIndex((s) => s.Id === this.selectedId);\n if (idx < 0) {\n return;\n }\n const prev = this.editSteps[idx];\n this.editSteps[idx] = this.defaultStep(kind as FeatureStepKind, prev.Id, prev.Label, prev.Inputs);\n this.markDirty();\n }\n\n public hasInput(stepId: string): boolean {\n return (this.selectedStep?.Inputs ?? []).includes(stepId);\n }\n /** Toggle an upstream step input, preventing cycles. */\n public toggleInput(stepId: string): void {\n const s = this.selectedStep;\n if (!s) {\n return;\n }\n const inputs = s.Inputs ?? [];\n if (inputs.includes(stepId)) {\n s.Inputs = inputs.filter((i) => i !== stepId);\n } else if (!this.createsCycle(stepId, s.Id)) {\n s.Inputs = [...inputs, stepId];\n } else {\n this.notifications.CreateSimpleNotification('That would create a cycle.', 'warning', 2500);\n return;\n }\n this.markDirty();\n }\n /** True if making `target` depend on `from` would create a cycle (from is downstream of target). */\n private createsCycle(from: string, target: string): boolean {\n const byId = new Map(this.editSteps.map((s) => [s.Id, s]));\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n const id = stack.pop()!;\n if (id === target) {\n return true;\n }\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n stack.push(...(byId.get(id)?.Inputs ?? []));\n }\n return false;\n }\n\n // ---- target / algorithm editing ----\n\n public setTargetVariable(v: string): void { this.editTargetVariable = v; this.markDirty(); }\n public setProblemType(v: string): void { this.editProblemType = v as ProblemType; this.markDirty(); }\n public setAlgorithm(id: string): void { this.editAlgorithmId = id; this.markDirty(); }\n public setHyperparams(v: string): void { this.editHyperparams = v; this.markDirty(); }\n\n // ---- leakage / as-of / validation editing ----\n\n public get denyText(): string { return this.editLeakage.DenyFields.join(', '); }\n /**\n * Parse the deny-field input. Uses the shared `parseDenyList` so a pasted\n * bracketed list (\"[CheckInTime, Status]\") yields clean column names rather than\n * \"[CheckInTime\" / \"Status]\" — entries which match no column and therefore leave\n * the most dangerous columns silently unguarded. The server re-validates on save.\n */\n public setDeny(text: string): void { this.editLeakage.DenyFields = parseDenyList(text); this.dirty = true; }\n public setThreshold(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editLeakage.SingleFeatureDominanceThreshold = n; this.dirty = true; } }\n public setAsOfMode(v: string): void { this.editAsOf = { ...this.editAsOf, Mode: v as AsOfStrategy['Mode'] }; this.dirty = true; }\n public setAsOfColumn(v: string): void { this.editAsOf.Column = v; this.dirty = true; }\n public setAsOfOffset(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editAsOf.OffsetDays = n; this.dirty = true; } }\n public setValStrategy(v: string): void { this.editValidation = { ...this.editValidation, Strategy: v as ValidationStrategy['Strategy'] }; this.dirty = true; }\n public setTestSize(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.TestSize = n; this.dirty = true; } }\n public setK(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.K = n; this.dirty = true; } }\n public setHoldout(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.LockedHoldoutFraction = n; this.dirty = true; } }\n\n // ---- add / delete nodes ----\n\n public addSource(): void {\n this.editSources = [...this.editSources, { Kind: 'Entity', Ref: '' }];\n this.markDirty();\n this.selectedId = `src:${this.editSources.length - 1}`;\n }\n public addStep(): void {\n const id = `step_${++this.stepSeq}`;\n this.editSteps = [...this.editSteps, this.defaultStep('select', id)];\n this.markDirty();\n this.selectedId = id;\n }\n public deleteSelected(): void {\n const si = this.selectedSourceIndex;\n if (si >= 0) {\n this.editSources = this.editSources.filter((_s, i) => i !== si);\n this.markDirty();\n this.selectedId = this.nodes[0]?.id ?? '';\n return;\n }\n const step = this.selectedStep;\n if (step) {\n this.editSteps = this.editSteps.filter((s) => s.Id !== step.Id);\n // Drop the deleted id from any downstream Inputs.\n for (const s of this.editSteps) {\n if (s.Inputs?.includes(step.Id)) {\n s.Inputs = s.Inputs.filter((i) => i !== step.Id);\n }\n }\n this.markDirty();\n this.selectedId = this.nodes[0]?.id ?? '';\n }\n }\n\n private defaultStep(kind: FeatureStepKind, id: string, label?: string, inputs?: string[]): FeatureStep {\n const base = { Id: id, Label: label, Inputs: inputs };\n switch (kind) {\n case 'select': return { ...base, Kind: 'select', Columns: [] };\n case 'impute': return { ...base, Kind: 'impute', Column: '', Strategy: 'mean' };\n case 'standardize': return { ...base, Kind: 'standardize', Columns: [] };\n case 'onehot': return { ...base, Kind: 'onehot', Column: '' };\n case 'bin': return { ...base, Kind: 'bin', Column: '', Bins: 5 };\n case 'embedding': return { ...base, Kind: 'embedding', Entity: '', EmbeddingModelRef: '', Dims: 384 };\n case 'llm-derived': return { ...base, Kind: 'llm-derived', FeaturePipelineRef: '' };\n case 'flow-agent': return { ...base, Kind: 'flow-agent', FlowAgentRef: '', InputMapping: {}, OutputMapping: {} };\n case 'vision-llm': return { ...base, Kind: 'vision-llm', ImageColumn: '', Prompt: { InlinePrompt: '' }, Output: { FeatureName: '', Kind: 'category' } };\n }\n }\n\n // ---- save / validate / train ----\n\n /** Serialize the editable state back onto the pipeline entity and Save(). */\n public async save(): Promise<void> {\n const p = this.selectedPipeline;\n if (!p || this.busy) {\n return;\n }\n this.busy = true;\n try {\n p.SourceBindings = JSON.stringify(this.editSources);\n p.FeatureSteps = JSON.stringify({ Steps: this.editSteps });\n p.TargetVariable = this.editTargetVariable;\n p.ProblemType = this.editProblemType;\n p.AlgorithmID = this.editAlgorithmId;\n p.Hyperparameters = this.editHyperparams || null;\n p.LeakageGuard = JSON.stringify(this.editLeakage);\n p.AsOfStrategy = JSON.stringify(this.editAsOf);\n p.ValidationStrategy = JSON.stringify(this.editValidation);\n const ok = await p.Save();\n if (ok) {\n this.dirty = false;\n this.notifications.CreateSimpleNotification(`Saved \"${p.Name}\".`, 'success', 3000);\n } else {\n this.notifications.CreateSimpleNotification(`Save failed: ${p.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error', 5000);\n }\n } finally {\n this.busy = false;\n this.cdr.detectChanges();\n }\n }\n\n /** Client-side spec sanity check before training. */\n public validate(): void {\n const issues: string[] = [];\n if (this.editSources.length === 0) {\n issues.push('at least one source');\n }\n if (!this.editTargetVariable) {\n issues.push('a target variable');\n }\n if (!this.editAlgorithmId) {\n issues.push('an algorithm');\n }\n try {\n JSON.parse(this.editHyperparams || '{}');\n } catch {\n issues.push('valid hyperparameters JSON');\n }\n if (issues.length > 0) {\n this.notifications.CreateSimpleNotification(`Pipeline needs ${issues.join(', ')}.`, 'warning', 4500);\n } else {\n this.notifications.CreateSimpleNotification('Pipeline looks valid — ready to train.', 'success', 3000);\n }\n }\n\n /** Run the pipeline via the Train Remote Op, then refresh the engine. */\n public async train(): Promise<void> {\n const p = this.selectedPipeline;\n if (!p || this.busy || this.dirty) {\n return;\n }\n this.busy = true;\n this.notifications.CreateSimpleNotification(`Training \"${p.Name}\"…`, 'info', 2500);\n try {\n const op = new PredictiveStudioTrainModelOperation();\n const result = await op.Execute({ pipelineId: p.ID }, { provider: this.provider ?? undefined, user: this.currentUser ?? undefined });\n if (result.Success && result.Output) {\n const flagged = result.Output.leakageFlagged ? ' (leakage flag raised — needs sign-off)' : '';\n this.notifications.CreateSimpleNotification(`Trained ${p.Name} v${result.Output.version}${flagged}. See Registry.`, 'success', 5000);\n await this.engine.Config(true, this.currentUser ?? undefined, this.provider ?? undefined);\n } else {\n this.notifications.CreateSimpleNotification(result.ErrorMessage || 'Training failed.', 'error', 6000);\n }\n } catch (e) {\n this.notifications.CreateSimpleNotification(`Training error: ${e instanceof Error ? e.message : String(e)}`, 'error', 6000);\n } finally {\n this.busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public refine(): void {\n const p = this.selectedPipeline;\n if (!p) {\n this.askAgent.emit(this.starterPrompt);\n return;\n }\n const predicts = p.TargetVariable ? ` (predicts ${p.TargetVariable})` : '';\n this.askAgent.emit(`Help me refine the \"${p.Name}\" training pipeline${predicts}. Suggest improvements to the features or algorithm to raise holdout performance.`);\n }\n\n public statusClass(status: string | null): string {\n switch (status) {\n case 'Active': return 'green';\n case 'Draft': return 'amber';\n case 'Disabled': return 'gray';\n default: return 'gray';\n }\n }\n\n public nodeTypeLabel(type: NodeType): string {\n switch (type) {\n case 'src': return 'Source';\n case 'feat': return 'Feature step';\n case 'emb': return 'Embedding';\n case 'target': return 'Target';\n case 'algo': return 'Algorithm';\n case 'output': return 'Model output';\n }\n }\n\n // ---- layered layout (deterministic, topology-driven) ----\n\n private layoutDag(): void {\n this.nodeById = new Map(this.nodes.map((n) => [n.id, n]));\n const incoming = new Map<string, string[]>();\n const outgoing = new Map<string, string[]>();\n for (const n of this.nodes) {\n incoming.set(n.id, []);\n outgoing.set(n.id, []);\n }\n for (const e of this.edges) {\n if (this.nodeById.has(e.from) && this.nodeById.has(e.to)) {\n outgoing.get(e.from)!.push(e.to);\n incoming.get(e.to)!.push(e.from);\n }\n }\n const depth = this.computeLayers(incoming, outgoing);\n const maxDepth = Math.max(0, ...depth.values());\n const columns: DagNode[][] = Array.from({ length: maxDepth + 1 }, () => []);\n for (const n of this.nodes) {\n columns[depth.get(n.id) ?? 0].push(n);\n }\n this.positionColumns(columns);\n }\n\n private computeLayers(incoming: Map<string, string[]>, outgoing: Map<string, string[]>): Map<string, number> {\n const depth = new Map<string, number>(this.nodes.map((n) => [n.id, 0]));\n const indeg = new Map<string, number>(this.nodes.map((n) => [n.id, incoming.get(n.id)!.length]));\n const queue = this.nodes.filter((n) => indeg.get(n.id) === 0).map((n) => n.id);\n while (queue.length) {\n const id = queue.shift()!;\n const d = depth.get(id)!;\n for (const next of outgoing.get(id)!) {\n depth.set(next, Math.max(depth.get(next)!, d + 1));\n indeg.set(next, indeg.get(next)! - 1);\n if (indeg.get(next) === 0) {\n queue.push(next);\n }\n }\n }\n return depth;\n }\n\n private positionColumns(columns: DagNode[][]): void {\n const colStep = NODE_W + COL_GAP;\n const rowStep = NODE_H + ROW_GAP;\n const tallest = Math.max(1, ...columns.map((c) => c.length));\n const contentH = tallest * NODE_H + (tallest - 1) * ROW_GAP;\n columns.forEach((col, ci) => {\n const x = PAD_X + ci * colStep;\n const colH = col.length * NODE_H + (col.length - 1) * ROW_GAP;\n const yStart = PAD_Y + (contentH - colH) / 2;\n col.forEach((node, ri) => {\n node.x = x;\n node.y = yStart + ri * rowStep;\n });\n });\n this.canvasW = PAD_X * 2 + columns.length * NODE_W + (columns.length - 1) * COL_GAP;\n this.canvasH = PAD_Y * 2 + contentH;\n }\n\n public edgePath(edge: DagEdge): string {\n const from = this.nodeById.get(edge.from);\n const to = this.nodeById.get(edge.to);\n if (!from || !to) {\n return '';\n }\n const sx = from.x + NODE_W;\n const sy = from.y + NODE_H / 2;\n const tx = to.x;\n const ty = to.y + NODE_H / 2;\n const dx = tx - sx;\n const c1x = sx + dx * 0.5;\n const c2x = tx - dx * 0.5;\n return `M ${sx} ${sy} C ${c1x} ${sy}, ${c2x} ${ty}, ${tx} ${ty}`;\n }\n}\n"]}
1
+ {"version":3,"file":"ps-pipelines.component.js","sourceRoot":"","sources":["../../../src/PredictiveStudio/components/ps-pipelines.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAqB,MAAM,EAAiB,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvJ,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAA+C,mCAAmC,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACjJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,2BAA2B,EAC3B,aAAa,GASd,MAAM,wCAAwC,CAAC;;;;;;mDAihBZ,IAAI;;;;;IA3c9B,AADF,8BAAuD,cAC1B;IAAA,uBAA2C;IAAA,iBAAO;IAC7E,0BAAI;IAAA,yCAAyB;IAAA,iBAAK;IAClC,yBAAG;IACD,0OAGF;IAAA,iBAAI;IAEF,AADF,8BAA8E,gBAEnD;IAAvB,wLAAS,mBAAY,KAAC;IACtB,uBAAgC;IAAC,+BACnC;IAAA,iBAAS;IACT,kCACyC;IAAvC,yLAAS,0CAA4B,KAAC;IACtC,yBAAiC;IAAC,gCACpC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;;IAKA,AADF,+BAAyF,iBAC+C;IAAvF,uMAAS,sBAAe,KAAC;IACtE,wBAAyC;IAC3C,iBAAS;IACT,+BAAsC;IAAA,uBAA2C;IACnF,AADmF,iBAAM,EACnF;;;IAiDU,gCAA8B;IAAA,wBAAwD;IAAC,YAAQ;IAAA,iBAAO;;IAAf,eAAQ;IAAR,+BAAQ;;;;IAdrG,kCACkF;IAAhD,qOAAS,8BAAoB,KAAC;IAE5D,AADF,+BAAyB,cACG;IAAA,YAAY;IAAA,iBAAM;IAC5C,gCAAuD;IAAA,YAAc;IACvE,AADuE,iBAAO,EACxE;IAEJ,AADF,+BAA0B,eACI;IAAA,YAAyB;IAAA,iBAAO;IAC5D,4BAAM;IAAA,uBAAM;IAAA,iBAAO;IACnB,iCAA4B;IAAA,aAAkC;IAChE,AADgE,iBAAO,EACjE;IAEJ,AADF,gCAAmF,YAC3E;IAAA,aAAmB;IAAA,iBAAO;IAChC,6HAAuC;IAI3C,AADE,iBAAM,EACC;;;;;IAjB6B,qDAAkC;IACP,iCAAgB;IAEnD,eAAY;IAAZ,+BAAY;IACf,cAA+B;IAA/B,8CAA+B;IAAC,cAAc;IAAd,iCAAc;IAGzC,eAAyB;IAAzB,mDAAyB;IAEzB,eAAkC;IAAlC,qDAAkC;IAGxD,eAAmB;IAAnB,sCAAmB;IACzB,cAEC;IAFD,qFAEC;;;;IAxCL,AADF,AADF,AADF,AAFF,yCAAqE,cAER,cAC1B,cACK,SAC5B;IAAA,YAA0C;IAAA,iBAAK;IAEjD,AADF,+BAAqD,iBACgD;IAAvB,uMAAS,mBAAY,KAAC;IAChG,uBAAgC;IAAC,qBACnC;IAAA,iBAAS;IACT,mCAA+H;IAAjF,wMAAS,sBAAe,KAAC;IACrE,yBAAwC;IAG9C,AADE,AADE,iBAAS,EACL,EACF;IACN,gCAA2B;IACzB,yBAA4C;IAC5C,kCAA6G;IAApE,6MAAS,4BAAqB,KAAC;IAC1E,AADE,iBAA6G,EACzG;IAEJ,AADF,gCAA6B,kBACuE;IAA3B,wMAAS,iBAAU,KAAK,CAAC,KAAC;IAAC,oBAAG;IAAA,iBAAS;IAC9G,mCAA8G;IAAjC,wMAAS,iBAAU,WAAW,CAAC,KAAC;IAAC,0BAAS;IAAA,iBAAS;IAChI,mCAAsG;IAA7B,wMAAS,iBAAU,OAAO,CAAC,KAAC;IAAC,sBAAK;IAAA,iBAAS;IACpH,mCAAoG;IAA5B,wMAAS,iBAAU,MAAM,CAAC,KAAC;IAAC,wBAAO;IAE/G,AADE,AAD6G,iBAAS,EAChH,EACF;IAGN,gCAAyD;IACvD,2HAmBC;IAGP,AADE,AADE,iBAAM,EACF,EACQ;;;IAnDsC,AAAf,AAAxB,4CAAuB,eAAe,eAAe;IAKxD,eAA0C;IAA1C,0EAA0C;IAY3B,eAAqB;IAArB,0CAAqB;IAGT,eAAuC;IAAvC,uDAAuC;IACvC,eAA6C;IAA7C,6DAA6C;IAC7C,eAAyC;IAAzC,yDAAyC;IACzC,eAAwC;IAAxC,wDAAwC;IAMzE,eAmBC;IAnBD,uCAmBC;;;IAqBC,gCAA8B;IAAA,wBAAwD;IAAC,YAAQ;IAAA,iBAAO;;IAAf,eAAQ;IAAR,+BAAQ;;;IAFjG,gCAAsE;IAAA,YAA6B;IAAA,iBAAO;IAC1G,qHAAsD;;;;IAD/B,iEAA8C;IAAC,cAA6B;IAA7B,oDAA6B;IACnG,cAEC;IAFD,qGAEC;;;IA0BS,gCAA4D;IAAA,wBAA+B;IAAC,wBAAO;IAAA,iBAAO;;;IAoE5G,AADF,+BAA4B,eACI;IAAA,YAA+B;IAAA,iBAAO;IACpE,iCAAqB;IAAA,YAAY;IACnC,AADmC,iBAAO,EACpC;;;IAF0B,eAA+B;IAA/B,kDAA+B;IACxC,eAAY;IAAZ,+BAAY;;;IAsBzB,iCAA0B;IAAA,YAAS;IAAA,iBAAO;;;IAAhB,cAAS;IAAT,6BAAS;;;IAFvC,gCAA0B;IACxB,4KAEC;IACH,iBAAM;;;IAHJ,cAEC;IAFD,uBAEC;;;IAJL,0IAAuB;;IAAvB,yCAMC;;;IAIC,gCAA4B;IAC1B,yBAAkD;IAClD,4BAAM;IAAA,YAA6B;IACrC,AADqC,iBAAO,EACtC;;;IADE,eAA6B;IAA7B,sDAA6B;;;IAHvC,0IAAyB;;IAAzB,yCAKC;;;;IApBL,gCAA8F;IAA5B,sOAAS,4BAAiB,KAAC;IAEzF,AADF,gCAAoC,eACJ;IAAA,YAAyB;IAAA,iBAAO;IAC9D,iCAAqB;IAAA,YAAa;IACpC,AADoC,iBAAO,EACrC;IACN,gHAAmC;IASnC,gHAAoC;IAQtC,iBAAM;;;;;;IApB4B,eAAyB;IAAzB,iDAAyB;IAClC,eAAa;IAAb,iCAAa;IAEpC,cAQC;IARD,+EAQC;IACD,cAOC;IAPD,8EAOC;;;IA8BH,iCAA0D;IAAA,gDAAgC;IAAA,iBAAO;;;IAG/F,iCAA2B;IAAA,YAAS;IAAA,iBAAO;;;IAAhB,cAAS;IAAT,6BAAS;;;IADtC,yJAEC;;;IAFD,4CAEC;;;IAwDP,gCAA8F;IAC5F,yBAA4G;IAC5G,gEAA+C;IAAA,8BAAQ;IAAA,qBAAK;IAAA,iBAAS;IAAC,oDACxE;IAAA,iBAAM;;;IAsBQ,iCAA6B;IAAA,yBAAkC;IAAC,uBAAM;IAAA,iBAAO;;;;IAPrF,+BAAqK;IAA9F,oPAAS,gCAAqB,KAAC;IAGhG,AADF,AADF,0BAAI,eACmD,aAC0D;IAA1D,mOAAS,wBAAwB,wBAAE,gCAAqB,KAAC;IAC1G,8BAAQ;IAAA,YAAgB;IAC1B,AAD0B,iBAAS,EAC/B;IACJ,6IAAgC;IAIpC,AADE,iBAAM,EACH;IACL,0BAAI;IAAA,YAAgC;IAAA,iBAAK;IACrC,AAAJ,0BAAI,cAAQ;IAAA,aAAsB;IAAS,AAAT,iBAAS,EAAK;IAC5C,AAAJ,2BAAI,gBAAuD;IAAA,aAAc;IAAO,AAAP,iBAAO,EAAK;IACrF,2BAAI;IAAA,aAAgC;;IAAA,iBAAK;IAEvC,AADF,gCAA6B,mBACsH;IAAhG,yOAAS,wBAAwB,wBAAE,gCAAqB,KAAC;IACxG,0BAAsD;IAG5D,AADE,AADE,iBAAS,EACN,EACF;;;;IApBD,0DAA6C;IAIjC,eAAgB;IAAhB,yCAAgB;IAE1B,cAEC;IAFD,uDAEC;IAGD,eAAgC;IAAhC,oDAAgC;IACxB,eAAsB;IAAtB,iDAAsB;IACP,eAA+B;IAA/B,+CAA+B;IAAC,cAAc;IAAd,kCAAc;IACrE,eAAgC;IAAhC,sEAAgC;;;IAxBtC,AADF,AADF,AADF,kCAAwB,YACf,SACD,SACE;IAAA,uBAAO;IAAA,iBAAK;IAChB,0BAAI;IAAA,yBAAS;IAAA,iBAAK;IAClB,0BAAI;IAAA,6BAAa;IAAA,iBAAK;IACtB,0BAAI;IAAA,uBAAM;IAAA,iBAAK;IACf,2BAAI;IAAA,2BAAU;IAAA,iBAAK;IACnB,sBAAS;IAEb,AADE,iBAAK,EACC;IACR,8BAAO;IACL,yIAsBC;IAEL,AADE,iBAAQ,EACF;;;IAxBJ,gBAsBC;IAtBD,oCAsBC;;;;IAkBD,mCAEwC;IADtC,yOAAS,kCAAuB,KAAC;IAEjC,yBAAsD;IAAC,mCACzD;IAAA,iBAAS;IACT,mCAE4C;IAD1C,yOAAS,mCAAwB,KAAC;IAElC,yBAAiC;IAAC,oCACpC;IAAA,iBAAS;;;IAUP,4BAAM;IAAA,YAAwF;IAAA,iBAAO;;;IAA/F,cAAwF;IAAxF,kIAAwF;;;IAE9F,iCAA0C;IAAA,gEAAgD;IAAA,iBAAO;;;;IApQrG,AADF,AADF,AADF,AAFF,+BAA4B,cAEC,cACI,cACM,eACJ;IAAA,iBAAC;IAAA,iBAAO;IAEjC,AADF,2BAAK,SACC;IAAA,8DAA8C;IAAA,iBAAK;IACvD,gCAAgC;IAAA,2GAA0F;IAGhI,AADE,AADE,AAD4H,iBAAO,EAC7H,EACF,EACF;IAIF,AADF,AADF,gCAAuB,eACM,aAClB;IAAA,8BAAa;IAAA,iBAAQ;IAC5B,gCAAiB;IAAA,yBAAuE;IAAC,aAAwC;IAAA,iBAAM;IACvI,gCAAiB;IAAA,sCAAqB;IACxC,AADwC,iBAAM,EACxC;IAEJ,AADF,gCAA2B,aAClB;IAAA,gCAAe;IAAA,iBAAQ;IAC9B,gCAAiB;IAAA,yBAA2E;IAAC,aAAqC;IAAA,iBAAM;IACxI,gCAAiB;IAAA,aAA6B;IAChD,AADgD,iBAAM,EAChD;IAEJ,AADF,gCAA2B,aAClB;IAAA,6BAAY;IAAA,iBAAQ;IAC3B,gCAAiB;IAAA,yBAA2E;IAAC,aAAqB;IAAA,iBAAM;IACxH,gCAAiB;IAAA,wCAAuB;IAC1C,AAD0C,iBAAM,EAC1C;IAEJ,AADF,gCAAmF,aAC1E;IAAA,sCAAqB;IAAA,iBAAQ;IACpC,gCAAiB;IAAA,yBAAmF;IAAC,aAAe;IAAA,iBAAM;IAC1H,gCAAiB;IAAA,mDAAkC;IAGzD,AADE,AADE,AADqD,iBAAM,EACrD,EACF,EACF;IAMA,AADF,AADF,AADF,gCAA2B,eACI,eACM,gBACJ;IAAA,kBAAC;IAAA,iBAAO;IAEjC,AADF,4BAAK,UACC;IAAA,+DAA8C;IAAA,iBAAK;IACvD,iCAAgC;IAAA,qGAAoF;IAExH,AADE,AADsH,iBAAO,EACvH,EACF;IAEJ,AADF,gCAAoC,kBACyE;IAAtB,yMAAS,kBAAW,KAAC;IAAC,wBAAgC;IAAC,4BAAU;IAAA,iBAAS;IAC/J,mCAAuG;IAApB,yMAAS,gBAAS,KAAC;IAAC,yBAAmC;IAAC,0BAAQ;IAEvJ,AADE,AADqJ,iBAAS,EACxJ,EACF;IAMA,AADF,AADF,AAFF,gCAAuB,eAES,eACJ,YAChB;IAAA,yBAAoC;IAAC,aAA0C;IACvF,AADuF,iBAAO,EACxF;IACN,gCAAwB;IACtB,sIAKC;IAEL,AADE,iBAAM,EACF;IAKF,AADF,AADF,gCAA8B,eACJ,YAChB;IAAA,yBAAmC;IAAC,aAA2C;IACvF,AADuF,iBAAO,EACxF;IACN,gCAAwB;IACtB,uHAwBC;IAEL,AADE,iBAAM,EACF;IAKF,AADF,AADF,gCAA8B,eACJ,YAChB;IAAA,yBAAkC;IAAC,oCAAkB;IAC7D,AAD6D,iBAAO,EAC9D;IAGF,AADF,AADF,gCAAwB,eACM,gBACI;IAAA,aAA2B;IAAA,iBAAO;IAChE,iCAA6B;IAAA,uBAAM;IAI3C,AADE,AADE,AADE,AADqC,iBAAO,EACtC,EACF,EACF,EACF;IAGN,gCAA4B;IAC1B,yBAAyC;IAEvC,AADF,gCAAqB,eACyD;IAAA,qCAAoB;IAAA,iBAAM;IACtG,gCAA6E;IAC3E,kGAAgF;IAAA,+BAAQ;IAAA,aAAiD;IAC3I,AAD2I,iBAAS,EAC9I;IACN,gCAA6B;IAGzB,AAFF,wHAA2C,uFAElC;IAQjB,AADE,AADE,AADE,iBAAM,EACF,EACF,EACF;IAMA,AADF,AADF,AADF,iCAA2B,gBACI,gBACM,iBACJ;IAAA,mBAAC;IAAA,iBAAO;IAEjC,AADF,6BAAK,WACC;IAAA,8DAA4C;IAAA,iBAAK;IACrD,kCAAgC;IAAA,sHAAoG;IAG1I,AADE,AADE,AADsI,iBAAO,EACvI,EACF,EACF;IAIF,AADF,AADF,iCAAuB,gBACM,cAClB;IAAA,qCAAmB;IAAA,iBAAQ;IAClC,iCAAiB;IAAA,cAA6B;IAAA,iBAAM;IACpD,iCAAiB;IAAA,wCAAsB;IACzC,AADyC,iBAAM,EACzC;IAEJ,AADF,iCAA2B,cAClB;IAAA,gCAAc;IAAA,iBAAQ;IAC7B,iCAAiB;IAAA,cAA8D;IAAA,iBAAM;IACrF,iCAAiB;IAAA,wCAAsB;IACzC,AADyC,iBAAM,EACzC;IAEJ,AADF,iCAA2B,cAClB;IAAA,+BAAa;IAAA,iBAAQ;IAC5B,iCAAiB;IAAA,cAA+I;IAAA,iBAAM;IACtK,iCAAiB;IAAA,qCAAmB;IACtC,AADsC,iBAAM,EACtC;IAEJ,AADF,iCAA2B,cAClB;IAAA,qCAAmB;IAAA,iBAAQ;IAClC,iCAAiB;IAAA,2BAAuE;IAAC,2BAAQ;IAAA,iBAAM;IACvG,iCAAiB;IAAA,iDAA+B;IAGtD,AADE,AADE,AADkD,iBAAM,EAClD,EACF,EACF;IAMA,AADF,AADF,AADF,iCAA2B,gBACI,gBACM,iBACJ;IAAA,mBAAC;IAAA,iBAAO;IAEjC,AADF,6BAAK,WACC;IAAA,wDAAsC;IAAA,iBAAK;IAC/C,kCAAgC;IAAA,qFAAmE;IAGzG,AADE,AADE,AADqG,iBAAO,EACtG,EACF,EACF;IAOJ,AALF,yHAAmC,sGAK1B;IAuCX,iBAAM;IAMA,AADF,AADF,AADF,iCAA2B,gBACI,gBACM,iBACJ;IAAA,mBAAC;IAAA,iBAAO;IAEjC,AADF,6BAAK,WACC;IAAA,qDAAmC;IAAA,iBAAK;IAC5C,kCAAgC;IAAA,oEAAkD;IAEtF,AADE,AADoF,iBAAO,EACrF,EACF;IACN,kCAAsD;IACpD,6GAA8B;IAalC,AADE,iBAAM,EACF;IAIF,AADF,AADF,kCAA4B,gBACC,cAClB;IAAA,sCAAoB;IAAA,iBAAQ;IACnC,iCAAiB;IAGb,AAFF,qHAA8B,oGAErB;IAGX,iBAAM;IACN,iCAAiB;IAAA,cAA6F;IAChH,AADgH,iBAAM,EAChH;IAEJ,AADF,kCAAgH,cACvG;IAAA,qCAAmB;IAAA,iBAAQ;IAClC,kCAAuD;IACrD,0BAAwC;IAAC,yBAC3C;IAAA,iBAAM;IACN,iCAAiB;IAAA,mDAAiC;IAK1D,AAFE,AADE,AADE,AADoD,iBAAM,EACpD,EACF,EACF,EAEF;;;;;IAxQ2F,gBAAwC;IAAxC,4EAAwC;IAKpC,eAAqC;IAArC,kEAAqC;IACjH,eAA6B;IAA7B,6DAA6B;IAI+C,eAAqB;IAArB,kDAAqB;IAKb,eAAe;IAAf,4CAAe;IA0BvE,gBAA0C;IAA1C,2EAA0C;IAGrF,eAKC;IALD,iCAKC;IAOyC,eAA2C;IAA3C,4EAA2C;IAGrF,eAwBC;IAxBD,+BAwBC;IAW+B,gBAA2B;IAA3B,kDAA2B;IAa6B,gBAAiD;IAAjD,wEAAiD;IAGzI,eAMC;IAND,uEAMC;IAqBc,gBAA6B;IAA7B,oDAA6B;IAK7B,eAA8D;IAA9D,8FAA8D;IAK9D,eAA+I;IAA/I,oLAA+I;IAuBpK,gBA2CC;IA3CD,gEA2CC;IAcG,gBAWC;IAXD,yEAWC;IAQC,eAIC;IAJD,0EAIC;IAEc,eAA6F;IAA7F,gNAA6F;;;;IA2D1G,4BAGiG;;;;IAF3F,uDAAmC;;;;IActB,iCAAqB;IAAA,YAAc;IAAA,iBAAO;;;IAArB,cAAc;IAAd,kCAAc;;;IAKhD,AADF,gCAAoB,gBACF;IAAA,YAAW;IAAA,iBAAO;IAClC,iCAAgC;IAAA,YAAW;IAC7C,AAD6C,iBAAO,EAC9C;;;IAFY,eAAW;IAAX,+BAAW;IACX,cAAe;IAAf,iCAAe;IAAC,cAAW;IAAX,+BAAW;;;IAI9B,4BAA6B;;;IAC5B,4BAA8B;;;;IAnBpD,gCAIgC;IAA9B,wOAAS,8BAAmB,KAAC;IAC7B,gCAAgB;IACd,yBAA0C;IAC1C,iCAAiD;IAAA,YAAgB;IAAA,iBAAO;IACxE,6HAAgB;IAClB,iBAAM;IACN,gCAAgB;IACd,6HAKC;IACH,iBAAM;IACN,6HAAkB;IAClB,+HAAmB;IACrB,iBAAM;;;;IAjBJ,AADyB,AAAzB,wCAAwB,yBAAwB,8BACvB;IAFH,6DAAyC;IAA/D,uCAAqB;;IAKH,eAAqB;IAArB,uCAAqB;IACT,cAAoB;IAApB,sCAAoB;IAAC,cAAgB;IAAhB,oCAAgB;IACjE,cAA6D;IAA7D,uCAA6D;IAG7D,eAKC;IALD,4BAKC;IAEH,eAAkD;IAAlD,yCAAkD;IAClD,cAAoD;IAApD,2CAAoD;;;;IAkCtD,mCAA4G;IAA3B,uOAAS,uBAAgB,KAAC;IAAC,yBAAiC;IAAA,iBAAS;;;IAO/G,mCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IAF5C,AAAtB,gCAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IACvC,mCAAkG;IAA3C,+OAAU,qBAAc,uBAAgB,CAAC,KAAC;IAC/F,yKAAyE;IAE7E,AADE,iBAAS,EACL;IACgB,AAAtB,gCAAsB,YAAO;IAAA,+CAA+B;IAAA,iBAAQ;IAClE,kCAA4G;IAA3C,4OAAS,oBAAa,uBAAgB,CAAC,KAAC;IAC3G,AADE,iBAA4G,EACxG;IACgB,AAAtB,iCAAsB,aAAO;IAAA,iCAAgB;IAAA,iBAAQ;IACnD,mCAAsH;IAA7C,6OAAS,sBAAe,uBAAgB,CAAC,KAAC;IACrH,AADE,iBAAsH,EAClH;;;IATqB,eAA6B;IAA7B,kDAA6B;IACpD,cAAyE;IAAzE,iCAAyE;IAIvC,eAA4B;IAA5B,iDAA4B;IAG5B,eAAoC;IAApC,yDAAoC;;;IAMrC,mCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IAOrB,AAAtB,gCAAsB,YAAO;IAAA,yCAAyB;IAAA,iBAAQ;IAAA,kCAAmG;IAAzC,oPAAS,kBAAW,uBAAgB,CAAC,KAAC;IAAG,AAAnG,iBAAmG,EAAM;;;IAArE,eAAqB;IAArB,0CAAqB;;;;IAC5F,AAAtB,gCAAsB,YAAO;IAAA,yCAAyB;IAAA,iBAAQ;IAAA,kCAAmG;IAAzC,oPAAS,kBAAW,uBAAgB,CAAC,KAAC;IAAG,AAAnG,iBAAmG,EAAM;;;IAArE,eAAqB;IAArB,0CAAqB;;;IAGqD,mCAAoB;IAAA,YAAO;IAAA,iBAAS;;;IAA5B,6BAAW;IAAC,cAAO;IAAP,2BAAO;;;;IADvM,AAAtB,gCAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,kCAAqH;IAAnD,oPAAS,kBAAW,QAAQ,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;IAChJ,AAAtB,gCAAsB,YAAO;IAAA,wBAAQ;IAAA,iBAAQ;IAAA,mCAA6G;IAApD,uPAAU,kBAAW,UAAU,EAAE,uBAAgB,CAAC,KAAC;IAAC,iLAA8E;IAAS,AAAT,iBAAS,EAAM;;;IADxK,eAA6B;IAA7B,kDAA6B;IACtC,eAA+B;IAA/B,oDAA+B;IAAqD,cAA8E;IAA9E,sCAA8E;;;;IAEjM,AAAtB,gCAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,kCAAqH;IAAnD,oPAAS,kBAAW,QAAQ,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;;;IAAvF,eAA6B;IAA7B,kDAA6B;;;;IAEvG,AAAtB,gCAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,kCAAqH;IAAnD,oPAAS,kBAAW,QAAQ,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;IAChJ,AAAtB,gCAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IAAA,kCAAmH;IAAjD,oPAAS,kBAAW,MAAM,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAAnH,iBAAmH,EAAM;;;IADnF,eAA6B;IAA7B,kDAA6B;IAC7B,eAA2B;IAA3B,gDAA2B;;;;IAGpF,AAAtB,gCAAsB,YAAO;IAAA,sBAAM;IAAA,iBAAQ;IAAA,kCAAqH;IAAnD,oPAAS,kBAAW,QAAQ,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;IAChJ,AAAtB,gCAAsB,YAAO;IAAA,mCAAmB;IAAA,iBAAQ;IAAA,kCAA2I;IAA9D,oPAAS,kBAAW,mBAAmB,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAA3I,iBAA2I,EAAM;IACnL,AAAtB,gCAAsB,YAAO;IAAA,2BAAU;IAAA,iBAAQ;IAAA,mCAAmH;IAAjD,qPAAS,kBAAW,MAAM,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAAnH,iBAAmH,EAAM;;;IAFzF,eAA6B;IAA7B,kDAA6B;IAChB,eAAwC;IAAxC,6DAAwC;IAC/C,eAA2B;IAA3B,gDAA2B;;;;IAEpE,AAAtB,gCAAsB,YAAO;IAAA,oCAAoB;IAAA,iBAAQ;IAAA,kCAA6I;IAA/D,oPAAS,kBAAW,oBAAoB,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAA7I,iBAA6I,EAAM;;;IAA/G,eAAyC;IAAzC,8DAAyC;;;;IACjH,AAAtB,gCAAsB,YAAO;IAAA,8BAAc;IAAA,iBAAQ;IAAA,kCAAiI;IAAzD,oPAAS,kBAAW,cAAc,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAAjI,iBAAiI,EAAM;;;IAAnG,eAAmC;IAAnC,wDAAmC;;;;IACpG,AAAtB,gCAAsB,YAAO;IAAA,4BAAY;IAAA,iBAAQ;IAAA,kCAA+H;IAAxD,oPAAS,kBAAW,aAAa,EAAE,uBAAgB,CAAC,KAAC;IAAG,AAA/H,iBAA+H,EAAM;;;IAAjG,eAAkC;IAAlC,uDAAkC;;;;IA3B1H,AAAtB,gCAAsB,YAAO;IAAA,oBAAI;IAAA,iBAAQ;IACvC,mCAA8F;IAAzC,+OAAU,mBAAY,uBAAgB,CAAC,KAAC;IAC3F,yKAAuE;IAE3E,AADE,iBAAS,EACL;IACgB,AAAtB,gCAAsB,YAAO;IAAA,qBAAK;IAAA,iBAAQ;IACxC,kCAAkH;IAA3C,4OAAS,oBAAa,uBAAgB,CAAC,KAAC;IACjH,AADE,iBAAkH,EAC9G;IAoBJ,AADA,AADA,AALA,AAJA,AADA,AAJA,AADA,AADA,8IAAkB,wHACK,6GACL,wHAIA,4GACH,6GAIM,wHAKE,wHACD,wHACA;;;;IA1BG,eAA2B;IAA3B,gDAA2B;IAClD,cAAuE;IAAvE,+BAAuE;IAIrC,eAAkC;IAAlC,uDAAkC;IAExE,cAoBC;IApBD,0DAAA,QAAQ,oBAAR,aAAa,oBAAb,QAAQ,oBAAR,QAAQ,oBAAR,KAAK,oBAAL,WAAW,oBAAX,aAAa,oBAAb,YAAY,oBAAZ,YAAY,WAoBX;;;IAIqL,mCAAqB;IAAA,YAAQ;IAAA,iBAAS;;;IAA9B,8BAAY;IAAC,cAAQ;IAAR,4BAAQ;;;;IAD7L,AAAtB,gCAAsB,YAAO;IAAA,+BAAe;IAAA,iBAAQ;IAAA,kCAAiH;IAAhD,4OAAS,yBAAkB,uBAAgB,CAAC,KAAC;IAAG,AAAjH,iBAAiH,EAAM;IACrJ,AAAtB,gCAAsB,YAAO;IAAA,4BAAY;IAAA,iBAAQ;IAAA,mCAA+F;IAA5C,+OAAU,sBAAe,uBAAgB,CAAC,KAAC;IAAC,yKAA8E;IAAS,AAAT,iBAAS,EAAM;;;IADrJ,eAA4B;IAA5B,iDAA4B;IAC1C,eAAyB;IAAzB,8CAAyB;IAA6C,cAA8E;IAA9E,kCAA8E;;;IAG9C,mCAAuB;IAAA,YAAY;IAAA,iBAAS;;;IAApC,gCAAc;IAAC,cAAY;IAAZ,gCAAY;;;;IAI/M,AADF,gCAA8J,eAClG;IAAA,sCAAsB;IAAA,iBAAM;IAEpF,AADF,gCAA8F,gBACjC;IAAA,YAAmD;IAAA,iBAAO;IACrH,iCAA6B;IAAA,yBAAkC;IAAC,uBAAM;IACxE,AADwE,iBAAO,EACzE;IAEJ,AADF,+BAAmC,mBAC2I;IAA/G,uQAAS,kCAAuB,KAAC;IAC5F,0BAAsD;IAAC,wBACzD;IAAA,iBAAS;IACT,oCAAkK;IAArG,uQAAS,mCAAwB,KAAC;IAC7F,0BAAiC;IAAC,uBACpC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;IAXyD,eAAmD;IAAnD,oFAAmD;;;;IAN9F,AAAtB,gCAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,mCAA6F;IAA1C,+OAAU,oBAAa,uBAAgB,CAAC,KAAC;IAAC,uJAAmF;IAAS,AAAT,iBAAS,EAAM;IACvN,AAAtB,gCAAsB,YAAO;IAAA,sCAAsB;IAAA,iBAAQ;IAAA,qCAA4G;IAA3C,+OAAS,sBAAe,uBAAgB,CAAC,KAAC;IAAY,AAAX,iBAAW,EAAM;IACxL,sJAA8B;;;;IAFyC,eAAyB;IAAzB,8CAAyB;IAA2C,cAAmF;IAAnF,gCAAmF;IAC5H,eAAyB;IAAzB,8CAAyB;IAC3H,cAgBC;IAhBD,sEAgBC;;;IAIC,gCAA+B;IAAA,gDAAgC;IAAA,8BAAQ;IAAA,qBAAK;IAAA,iBAAS;IAAC,qEAAoD;IAAA,iBAAM;;;IAQtI,mCAAuB;IAAA,YAAoE;IAAA,iBAAS;;;IAA5F,gCAAc;IAAC,cAAoE;IAApE,8GAAoE;;;;IAH/F,AADF,gCAAsB,YACb;IAAA,6BAAa;IAAA,iBAAQ;IAC5B,mCAAsG;IAAhD,2QAAU,0BAAmB,uBAAgB,CAAC,KAAC;IACnG,mLAEC;IAEL,AADE,iBAAS,EACL;;;IALqB,eAA4B;IAA5B,uFAA4B;IACnD,cAEC;IAFD,oCAEC;;;IAUG,iCAA6B;IAAA,yBAAkC;IAAC,uBAAM;IAAA,iBAAO;;;;IAF/E,AADF,AADF,AADF,gCAAyL,eAC3G,eACpB,aAC5C;IAAA,YAAkB;IAAA,iBAAS;IACnC,gLAAkC;IAGlC,gCAAyD;IAAA,YAAgB;IAC3E,AAD2E,iBAAO,EAC5E;IACN,iCAAyD;IAAA,YAAyB;IACpF,AADoF,iBAAO,EACrF;IACN,iCAAyE;IACvE,6BAAW;IAAA,+BAAQ;IAAA,aAA4C;IACjE,AADiE,iBAAS,EACpE;IACN,iCAAyE;IACvE,iCAAe;IAAA,+BAAQ;IAAA,aAAwB;IACjD,AADiD,iBAAS,EACpD;IAEJ,AADF,iCAAwE,mBACkE;IAA7E,oRAAS,kCAAuB,KAAC;IAC1F,0BAAsD;IAAC,qCACzD;IAAA,iBAAS;IACT,oCAA2I;IAA9E,oRAAS,mCAAwB,KAAC;IAC7F,0BAAiC;IAAC,qCACpC;IAEJ,AADE,AADE,iBAAS,EACL,EACF;;;;IAtBQ,eAAkB;IAAlB,2CAAkB;IAC1B,cAEC;IAFD,yDAEC;IACsB,cAAiC;IAAjC,iDAAiC;IAAC,cAAgB;IAAhB,oCAAgB;IAEnC,cAAgB;IAAhB,kCAAgB;IAAC,cAAyB;IAAzB,2DAAyB;IAG/D,eAA4C;IAA5C,uEAA4C;IAGxC,eAAwB;IAAxB,mDAAwB;;;IA3BvD,gCAA0D;IACxD,iKAAiC;IAUjC,kKAA8B;IA4BhC,iBAAM;;;;IAtCJ,cASC;IATD,2DASC;IACD,cA2BC;IA3BD,qEA2BC;;;IAvCH,AAFF,mJAAmC,6HAE1B;;;IAFT,4DA2CC;;;;IAmBsD,AAAtB,gCAAsB,YAAO;IAAA,oCAAoB;IAAA,iBAAQ;IAAA,kCAAgH;IAA5C,4OAAS,qBAAc,uBAAgB,CAAC,KAAC;IAAG,AAAhH,iBAAgH,EAAM;;;IAAlF,eAA+B;IAA/B,oDAA+B;;;;IACtG,AAAtB,gCAAsB,YAAO;IAAA,wCAAwB;IAAA,iBAAQ;IAAA,kCAAqH;IAA5C,4OAAS,qBAAc,uBAAgB,CAAC,KAAC;IAAG,AAArH,iBAAqH,EAAM;;;IAArF,eAAkC;IAAlC,uDAAkC;;;;IAS3F,AAAtB,gCAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,kCAAqI;IAA1C,4OAAS,mBAAY,uBAAgB,CAAC,KAAC;IAAG,AAArI,iBAAqI,EAAM;;;IAAzF,eAAwC;IAAxC,6DAAwC;;;;IAC7H,AAAtB,gCAAsB,YAAO;IAAA,yBAAS;IAAA,iBAAQ;IAAA,kCAAyG;IAAnC,4OAAS,YAAK,uBAAgB,CAAC,KAAC;IAAG,AAAzG,iBAAyG,EAAM;;;IAAzE,eAA+B;IAA/B,oDAA+B;;;;IA7JjK,AADF,AADF,AAFF,yCAAuE,eAEF,eACvC,eACL;IACjB,yBAAuF;IAErF,AADF,+BAAoB,cAC6B;IAAA,YAAwB;IAAA,iBAAK;IAC5E,gCAA+B;IAAA,YAAiD;IAClF,AADkF,iBAAM,EAClF;IACN,oCAAuI;IAAvF,yNAAS,wBAAiB,KAAC;IACzE,yBAAyC;IAC3C,iBAAS;IACT,yIAAkG;IAGpG,iBAAM;IACN,iCAA0B;IACxB,2HAAsB;IAatB,2HAAoB;IA+BpB,2HAAsC;IAItC,2HAAoC;IAqBpC,0HAAsC;IA+C1C,AADE,iBAAM,EACF;IAIJ,AADF,iCAAqB,gBACO;IAAA,0BAAgF;IAAA,2BAAI;IAAA,8BAAa;IAAK,AAAL,iBAAK,EAAM;IAE9G,AAAtB,AADF,iCAA0B,gBACF,aAAO;IAAA,oDAAmC;IAAA,iBAAQ;IAAA,mCAA6F;IAAtC,8NAAS,eAAQ,uBAAgB,CAAC,KAAC;IAAG,AAA7F,iBAA6F,EAAM;IACrJ,AAAtB,iCAAsB,aAAO;IAAA,mDAAkC;IAAA,iBAAQ;IAAA,mCAAmK;IAA3C,8NAAS,oBAAa,uBAAgB,CAAC,KAAC;IAE3O,AADE,AAD4O,AAAnK,iBAAmK,EAAM,EAC5O,EACF;IAIJ,AADF,iCAAqB,gBACO;IAAA,yBAAmF;IAAA,2BAAI;IAAA,+BAAc;IAAK,AAAL,iBAAK,EAAM;IAElH,AAAtB,AADF,iCAA0B,gBACF,aAAO;IAAA,qBAAI;IAAA,iBAAQ;IAAA,oCAA0F;IAAzC,iOAAU,mBAAY,uBAAgB,CAAC,KAAC;IAAC,oCAAqB;IAAA,qBAAI;IAAA,iBAAS;IAAA,oCAAuB;IAAA,uBAAM;IAAA,iBAAS;IAAA,oCAAuB;IAAA,uBAAM;IAAkB,AAAT,AAAT,iBAAS,EAAS,EAAM;IAChQ,sIAAkC;IAClC,sIAAkC;IAEtC,AADE,iBAAM,EACF;IAIJ,AADF,iCAAqB,gBACO;IAAA,0BAA0E;IAAA,2BAAI;IAAA,2BAAU;IAAK,AAAL,iBAAK,EAAM;IAErG,AAAtB,AADF,iCAA0B,gBACF,aAAO;IAAA,yBAAQ;IAAA,iBAAQ;IAAA,oCAAuG;IAA5C,iOAAU,sBAAe,uBAAgB,CAAC,KAAC;IAAC,oCAAiC;IAAA,iCAAgB;IAAA,iBAAS;IAAA,oCAAsB;IAAA,sBAAK;IAAA,iBAAS;IAAA,oCAAwB;IAAA,wBAAO;IAAkB,AAAT,AAAT,iBAAS,EAAS,EAAM;IACzS,sIAAsD;IACtD,sIAA2C;IACrB,AAAtB,iCAAsB,aAAO;IAAA,wCAAuB;IAAA,iBAAQ;IAAA,mCAA0I;IAAzC,8NAAS,kBAAW,uBAAgB,CAAC,KAAC;IAIzM,AADE,AADA,AADE,AADwM,AAA1I,iBAA0I,EAAM,EACxM,EACF,EACA,EACQ;;;IAtKsC,AAAf,AAA1B,8CAAyB,eAAe,eAAe;IAK9C,eAA6B;IAA7B,kDAA6B;;IAEI,eAAwB;IAAxB,+CAAwB;IACxC,eAAiD;IAAjD,6FAAiD;IAKlF,eAEC;IAFD,2IAEC;IAGD,eAYC;IAZD,iDAYC;IACD,cA8BC;IA9BD,+CA8BC;IACD,cAGC;IAHD,iEAGC;IACD,cAoBC;IApBD,+DAoBC;IACD,cA6CC;IA7CD,iEA6CC;IAQ2G,gBAAkB;IAAlB,uCAAkB;IACW,eAAqD;IAArD,0EAAqD;IAQ5H,gBAAuB;IAAvB,4CAAuB;IACzF,eAAoN;IAApN,6DAAoN;IACpN,cAA6N;IAA7N,6DAA6N;IAQvJ,gBAAiC;IAAjC,sDAAiC;IACvG,eAAkP;IAAlP,iFAAkP;IAClP,cAA2M;IAA3M,sEAA2M;IAC7F,eAA8C;IAA9C,mEAA8C;;;;IAzPlK,AADF,+BAAqB,oBACyH;IAAlD,qNAAW,4CAAqC,KAAC;IAMjI,AADF,AADF,AADF,AAFF,yCAAkF,eAEvD,eACC,eACO,gBAC6B;IAAA,6BAAa;IAAA,iBAAO;IAC5E,mCAAuF;IAAtB,yMAAS,kBAAW,KAAC;IAAC,wBAAoC;IAAC,wBAAM;IAAA,iBAAS;IAC3I,oCAAmF;IAApB,0MAAS,gBAAS,KAAC;IAAC,yBAAmC;IAAC,8BAAY;IACrI,AADqI,iBAAS,EACxI;IAGF,AADF,AADF,iCAA8B,gBACE,mBACmE;IAAnE,0MAAS,gBAAS,KAAC;IAAgD,0BAAiC;IAAA,iBAAS;IACzI,kCAAwE;IAA5C,wMAAS,kBAAW,KAAC;IAAuB,aAAkC;IAAA,iBAAO;IACjH,oCAA6F;IAAjE,0MAAS,eAAQ,KAAC;IAA+C,wBAAgC;IAC/H,AAD+H,iBAAS,EAClI;IACN,oCAAwK;IAArG,0MAAS,wBAAiB,KAAC;IAC5F,0BAAuC;IACzC,iBAAS;IACT,kCAA8C;IAAA,0BAAwC;IAAC,aAAmD;IAE9I,AADE,AAD4I,iBAAO,EAC7I,EACF;IAGR,AADF,iCAA2D,gBAIL;;IAM9C,AADF,AAJF,iCAG6B,YACrB,mBACuG;IACzG,6BAAmE;IACrE,iBAAS;IACT,oCAAkH;IAChH,6BAAmE;IAEvE,AADE,iBAAS,EACJ;IACP,8HAKC;IACH,iBAAM;IACN,0HAsBC;IAEL,AADE,iBAAM,EACF;;IAIF,AADF,AADF,iCAA0B,gBACJ,YACZ;IAAA,0BAAsB;IAAC,wBAAM;IAAA,iBAAO;IAC1C,6BAAM;IAAA,0BAAuB;IAAC,yBAAO;IAAA,iBAAO;IAC5C,6BAAM;IAAA,0BAAsB;IAAC,2BAAS;IAAA,iBAAO;IAC7C,6BAAM;IAAA,0BAAyB;IAAC,wBAAM;IAAA,iBAAO;IAC7C,6BAAM;IAAA,0BAAuB;IAAC,2BAAS;IAAA,iBAAO;IAC9C,6BAAM;IAAA,0BAAyB;IAAC,uBAAK;IAI7C,AADE,AADE,AADE,AADuC,iBAAO,EACxC,EACF,EACF,EACQ;IAElB,kIAA6B;IA0K/B,AADE,iBAAW,EACP;;;IAhQyE,cAAgB;IAAhB,8BAAgB;IACxE,cAAmD;IAAC,AAApD,+EAAmD,eAAe;IAWvB,gBAA6B;IAA7B,kDAA6B;IACL,eAAkC;IAAlC,yEAAkC;IAC3D,cAA6B;IAA7B,gDAA6B;IAElD,eAAsC;IAAtC,sDAAsC;IAA6B,6FAAwE;IAGhF,eAAmD;IAAnD,gGAAmD;IAM3I,eAA0B;IAE1B,AADA,AADA,6CAA0B,gCACC,gDACmB;IAG5C,cAAsB;;IAUzB,eAKC;IALD,2BAKC;IAEH,eAsBC;IAtBD,2BAsBC;IAiBX,gBAwKG;IAxKH,wDAwKG;;;;IA9oBP,+BAAsE;IACpE,qGAA0B;IAS1B,oCAA8H;IAAzC,oMAAW,mCAA4B,KAAC;IAC3H,iHAA2B;IA6DrB,AADF,AADF,AADF,AADE,AAFF,yCAAmF,cAElB,cAChC,cACM,cACP,WACpB;IAAA,0BAAS;IAAA,iBAAO;IAAC,yBAAkE;IACzF,6BAAM;IAAA,aAAsC;IAAA,iBAAO;IAAC,yBAAkE;IACtH,+BAAQ;IAAA,aAA4B;IACtC,AADsC,iBAAS,EACzC;IAEJ,AADF,gCAA0B,UACpB;IAAA,aAA4B;IAAA,iBAAK;IACrC,4FAAwB;IAO5B,AADE,iBAAM,EACF;IAIJ,AADF,gCAAwB,kBACmJ;IAA1H,yLAAS,uBAAgB,KAAC;IACvE,yBAAuG;IACvG,aACF;IAAA,iBAAS;IACT,mCAAyI;IAA1B,yLAAS,sBAAe,KAAC;IACtI,yBAAgC;IAAC,wBACnC;IAAA,iBAAS;IACT,mCAA4H;IAAjB,yLAAS,aAAM,KAAC;IACzH,yBAAuC;IAAC,uBAC1C;IAAA,iBAAS;IACT,mCAA0H;IAArB,yLAAS,iBAAU,KAAC;IACvH,yBAAwC;IAAC,2BAC3C;IAAA,iBAAS;IACT,mCAA2H;IAAlB,yLAAS,cAAO,KAAC;IACxH,yBAAgC;IAAC,wBACnC;IAAA,iBAAS;IACT,mCAAkE;IAAnB,yLAAS,eAAQ,KAAC;IAC/D,yBAA+C;IAAC,wBAClD;IAAA,iBAAS;IACT,wGAAa;IAEjB,AADE,iBAAM,EACF;IAGN,0GAA6B;IA6R7B,yGAAmB;IAuQvB,AADE,AADE,AADE,iBAAM,EACQ,EACP,EACP;;;IArpBiB,8DAA8C;IACnE,cAOC;IAPD,oDAOC;IAEmE,cAAgB;IAAhB,8BAAgB;IAClF,cAqDC;IArDD,qDAqDC;IAEc,cAAoD;IAAC,AAArD,gFAAoD,eAAe;IAOtE,eAAsC;IAAtC,oEAAsC;IACpC,eAA4B;IAA5B,2FAA4B;IAGhC,eAA4B;IAA5B,2FAA4B;IAChC,cAKC;IALD,mDAKC;IAMuE,eAA8F;IAA9F,mHAA8F;IAClJ,cAAyC;IAAC,AAA1C,yDAAyC,sCAAqC;IAClG,cACF;IADE,kFACF;IACgF,cAA8B;IAA9B,mDAA8B;IAG/B,eAA2B;IAA3B,uDAA2B;IAGvB,eAAiB;IAAjB,sCAAiB;IAGtB,eAA0B;IAA1B,sDAA0B;IAMxG,eAA0H;IAA1H,wCAA0H;IAK9H,cA0RC;IA1RD,wDA0RC;IAGD,cAmQH;IAnQG,8CAmQH;;;;IAQD,+CAQ2B;IAAzB,AADA,AADA,2MAAS,4BAAqB,KAAC,gNACb,qCAA8B,KAAC,0LACvC,oBAAa,KAAC;IAC1B,iBAAqB;;;IAJnB,AADA,AADA,AADA,AADA,sCAAiB,6BACI,mCACM,yCACM,uDACc;;AA/tBzD,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,KAAK,GAAG,EAAE,CAAC;AACjB,MAAM,KAAK,GAAG,EAAE,CAAC;AAEjB,MAAM,YAAY,GAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACpH,MAAM,UAAU,GAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AACnJ,MAAM,aAAa,GAAkB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AACtE,MAAM,iBAAiB,GAAmD,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjH,MAAM,YAAY,GAA0C;IAC1D,MAAM,EAAE,mBAAmB;IAC3B,KAAK,EAAE,oCAAoC;IAC3C,cAAc,EAAE,iCAAiC;IACjD,SAAS,EAAE,2BAA2B;IACtC,eAAe,EAAE,6BAA6B;CAC/C,CAAC;AAEF,MAAM,UAAU,GAAoC;IAClD,MAAM,EAAE,wBAAwB;IAChC,MAAM,EAAE,uBAAuB;IAC/B,WAAW,EAAE,4BAA4B;IACzC,MAAM,EAAE,yBAAyB;IACjC,GAAG,EAAE,0BAA0B;IAC/B,SAAS,EAAE,2BAA2B;IACtC,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,mBAAmB;IACjC,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,MAAM,2BAA2B,GAC/B,iGAAiG;IACjG,uGAAuG,CAAC;AAssB1G,MAAM,OAAO,oBAAoB;IACtB,MAAM,CAA0B;IAChC,QAAQ,GAA6B,IAAI,CAAC;IAC1C,WAAW,GAAoB,IAAI,CAAC;IAEnC,QAAQ,GAAG,IAAI,YAAY,EAAU,CAAC;IACtC,QAAQ,GAAG,IAAI,YAAY,EAAc,CAAC;IAE5C,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAChC,aAAa,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC9C,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE/C,kBAAkB,GAAG,KAAK,CAAC;IAC3B,cAAc,GAAG,EAAE,CAAC;IACpB,gBAAgB,GAAG,EAAE,CAAC;IACtB,oBAAoB,GAAG,KAAK,CAAC;IAC7B,aAAa,GAAG,EAAE,CAAC;IACnB,gBAAgB,GAAG,EAAE,CAAC;IAEb,aAAa,GAAG,2BAA2B,CAAC;IAC5C,WAAW,GAAG,YAAY,CAAC;IAC3B,SAAS,GAAG,UAAU,CAAC;IACvB,YAAY,GAAG,aAAa,CAAC;IAC7B,gBAAgB,GAAG,iBAAiB,CAAC;IAE9C,SAAS,GAAiC,EAAE,CAAC;IAC7C,kBAAkB,GAAG,EAAE,CAAC;IAExB,UAAU,GAAG,KAAK,CAAC;IACnB,mBAAmB,GAAsC,IAAI,CAAC;IAC9D,wBAAwB,CAAU;IAEzB,QAAQ,GAA+B,QAAQ,CAAC;IACzD,WAAW,GAAG,EAAE,CAAC;IACjB,YAAY,GAAG,KAAK,CAAC;IAEZ,MAAM,GAAG,MAAM,CAAC;IAChB,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,GAAG,IAAI,CAAC;IACZ,SAAS,GAAG,CAAC,CAAC;IAEd,UAAU,CAAC,MAAe;QAC/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,QAAoC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;QAC1F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,QAAoC;QACtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;QAC1F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,sEAAsE;IAC/D,WAAW,GAAoB,EAAE,CAAC;IAClC,SAAS,GAAkB,EAAE,CAAC;IAC9B,kBAAkB,GAAG,EAAE,CAAC;IACxB,eAAe,GAAgB,gBAAgB,CAAC;IAChD,eAAe,GAAG,EAAE,CAAC;IACrB,eAAe,GAAG,IAAI,CAAC;IACvB,WAAW,GAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,CAAC;IAC7G,QAAQ,GAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1C,cAAc,GAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAElH,KAAK,GAAc,EAAE,CAAC;IACtB,KAAK,GAAc,EAAE,CAAC;IACtB,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,GAAG,GAAG,CAAC;IACd,OAAO,GAAG,GAAG,CAAC;IACd,KAAK,GAAG,KAAK,CAAC;IACd,IAAI,GAAG,KAAK,CAAC;IAEZ,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtC,OAAO,GAAG,CAAC,CAAC;IAEb,WAAW,CAAC,QAAwB;QACzC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACzF,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,cAAc,IAAI,EAAE,IAAI,MAAM,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;oBAC5G,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;oBAC5C,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;gBACpD,CAAC;gBACD,IAAI,OAAO,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;oBACnD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;gBACtD,CAAC;gBACD,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;oBACzG,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;oBAC1C,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;gBACnD,CAAC;gBACD,IAAI,OAAO,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;oBACrD,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;gBAC1D,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEM,cAAc,CAAC,KAAgC;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC/G,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAEM,uBAAuB,CAAC,KAAgC;QAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC/G,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEM,eAAe;QACpB,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACvD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAEO,eAAe;QACrB,MAAM,KAAK,GAAG;YACZ,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;SAChD,CAAC;QACF,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,sCAAsC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7G,CAAC;IAEM,eAAe,CAAC,OAAe;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpI,CAAC;IACH,CAAC;IAEM,gBAAgB,CAAC,OAAgB;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO;gBACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;gBAC3D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACnG,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;gBACtD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;oBACzD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;oBACpE,OAAO;gBACT,CAAC;YACH,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5I,CAAC;IACH,CAAC;IAEM,iBAAiB;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC;YAC7G,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC;IAC9D,CAAC;IAEM,cAAc;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAClF,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAClF,CAAC;IAEM,SAAS;QACd,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IAEM,QAAQ,CAAC,CAAQ;QACtB,OAAQ,CAAC,CAAC,MAAqE,CAAC,KAAK,CAAC;IACxF,CAAC;IAEM,YAAY,CAAC,IAAa;QAC/B,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;IACtE,CAAC;IAEM,SAAS,CAAC,CAAS;QACxB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAEM,aAAa,CAAC,EAAS;QAC5B,IAAI,CAAC,WAAW,GAAG,CAAE,EAAE,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClF,CAAC;IAED,IAAW,iBAAiB;QAC1B,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACzC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACnE,MAAM,WAAW,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC7E,MAAM,WAAW,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC/E,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW;oBAAE,OAAO,KAAK,CAAC;YAC/D,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW;gBAAE,OAAO,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;YACvE,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO;gBAAE,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC;YAC/D,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM;gBAAE,OAAO,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxG,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,cAAc,CAAC,CAA8B;QAClD,IAAI,CAAC,CAAC;YAAE,OAAO,UAAU,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,kBAAkB,CAAC;QACnI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,yBAAyB,CAAC;QACtG,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,gBAAgB,CAAC,CAA8B;QACpD,IAAI,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAC;QACxB,OAAO,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC;IAChE,CAAC;IAED,IAAW,cAAc;QACvB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,OAAO,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IAEM,sBAAsB,GAAkB,IAAI,CAAC;IAEpD,IAAW,cAAc;QACvB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC7F,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,kBAAkB,CAAC,EAAU;QAClC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAEM,qBAAqB,CAAC,CAA8B;QACzD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEM,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAEM,cAAc,CAAC,IAAiB;QACrC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ,CAAC;YACd,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YAC5B,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,IAAiB;QACpC,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEM,aAAa,CAAC,CAAkB;QACrC,IAAI,CAAC,CAAC,CAAC,cAAc;YAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YAClG,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI;gBAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,EAAE,CAAC,QAAQ,IAAI,IAAI;gBAAE,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACjF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAW,SAAS;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,WAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QAChG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,WAAW,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC;QAC9F,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,IAAW,qBAAqB;QAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,0BAA0B,CAAC;IACxF,CAAC;IAEM,cAAc,CAAC,EAAU;QAC9B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,mDAAmD;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAU,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAC1C,CAAC,CAAE,UAA8B;YACjC,CAAC,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;gBAC9C,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAG,UAAoC,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBACjF,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAU,CAAC,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,QAAyB,CAAC;QAC7C,CAAC;aAAM,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,QAAiC,CAAC,KAAK,CAAC,EAAE,CAAC;YACtI,IAAI,CAAC,SAAS,GAAI,QAAqC,CAAC,KAAK,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,eAAe,GAAI,CAAC,CAAC,WAA2B,IAAI,gBAAgB,CAAC;QAC1E,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAe,CAAC,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC9I,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAe,CAAC,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAqB,CAAC,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;QACzJ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/E,CAAC;IAEM,kBAAkB,CAAC,CAA6B;QACrD,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAI,GAA8B,EAAE,QAAW;QAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAM,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,mDAAmD;IAE3C,OAAO;QACb,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAc,EAAE,CAAC;QAE5B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,gBAAgB;YACvB,IAAI,EAAE,kBAAkB;YACxB,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,OAAO;YAC7C,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,KAAK;YACb,IAAI,EAAE;gBACJ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,OAAO,EAAE;gBAC5D,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE;aAC9F;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC;YACvB,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1C,IAAI,EAAE,CAAC,GAAG;gBAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YACzD,IAAI,EAAE,CAAC,KAAK;gBAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACtC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBACzC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC1D,IAAI,UAAU,EAAE,CAAC;wBACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC9C,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACxC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,YAAY,IAAI,CAAC,cAAc,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,8EAA8E;QAC9E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,UAAU,CAAC,EAAiB,EAAE,CAAS;QAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC3C,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,GAAG,MAAM,EAAE,WAAW,IAAI,MAAM,EAAE,IAAI,CAAC;QAC9C,CAAC;QACD,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,QAAQ,CAAC;QAEpC,MAAM,IAAI,GAA+B,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,KAAK;YACX,KAAK;YACL,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,sBAAsB;YACrD,GAAG,EAAE,EAAE,CAAC,IAAI;YACZ,IAAI;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,IAAiB;QAChC,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;YAChD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;YAC9B,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,qBAAqB;YACpD,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACzB,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,IAAiB;QAChC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;oBACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzB,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC;gBAC9E,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7F,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;oBACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzB,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC;gBAC9E,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,IAAI,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1F,KAAK,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChG,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAC3E,KAAK,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACjE,KAAK,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7G,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,OAAO;YACL,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,WAAW,IAAI,CAAC,kBAAkB,IAAI,GAAG,EAAE;YAClD,IAAI,EAAE,sBAAsB;YAC5B,GAAG,EAAE,IAAI,CAAC,eAAe;YACzB,IAAI,EAAE;gBACJ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,kBAAkB,IAAI,GAAG,EAAE;gBACpD,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE;aACvC;YACD,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEO,QAAQ;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC;QAC7E,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAA0B,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,OAAO;YACL,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,oBAAoB;YAC1B,GAAG,EAAE,WAAW;YAChB,IAAI;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,sBAAsB;IAEf,UAAU,CAAC,EAAU;QAC1B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACrL,CAAC;IAED,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,IAAW,cAAc;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IACD,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IACtE,CAAC;IACD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;IAChE,CAAC;IACD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,2BAA2B;IAEpB,aAAa,CAAC,IAAY,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,IAAI,GAAG,IAA6B,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IACzI,YAAY,CAAC,GAAW,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAC5G,cAAc,CAAC,KAAa,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAExI,yBAAyB;IAEzB,IAAW,WAAW;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACM,UAAU,CAAC,IAAY;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;YAC3D,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACM,SAAS,CAAC,KAAa;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACM,UAAU,CAAC,KAAa,EAAE,KAAa;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,IAAI,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,CAAC;IAChD,CAAC;IACM,UAAU,CAAC,KAAa,EAAE,KAAa;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,YAAyD,CAAC;QACzE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,CAAC;IAChE,CAAC;IACM,YAAY,CAAC,KAAa,IAAU,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAAC,CAAC,CAAC,CAAC;IAE7H,WAAW,CAAC,IAAY;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAuB,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClG,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEM,QAAQ,CAAC,MAAc;QAC5B,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IACM,WAAW,CAAC,MAAc;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5C,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,4BAA4B,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IACO,YAAY,CAAC,IAAY,EAAE,MAAc;QAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YACxB,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uCAAuC;IAEhC,iBAAiB,CAAC,CAAS,IAAU,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACrF,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,eAAe,GAAG,CAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9F,YAAY,CAAC,EAAU,IAAU,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC/E,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEtF,iDAAiD;IAEjD,IAAW,QAAQ,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,IAAY,IAAU,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACrG,YAAY,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,WAAW,CAAC,+BAA+B,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IACzJ,WAAW,CAAC,CAAS,IAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1H,aAAa,CAAC,CAAS,IAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/E,aAAa,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IAClI,cAAc,CAAC,CAAS,IAAU,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAmC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACvJ,WAAW,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IACpI,IAAI,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IACtH,UAAU,CAAC,CAAS,IAAU,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,cAAc,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,CAAC;IAEvJ,+BAA+B;IAExB,SAAS;QACd,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACzD,CAAC;IACM,OAAO;QACZ,MAAM,EAAE,GAAG,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IACM,cAAc;QACnB,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAC/B,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAChE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBAChC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,IAAqB,EAAE,EAAU,EAAE,KAAc,EAAE,MAAiB;QACtF,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAC/D,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YAChF,KAAK,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACzE,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC9D,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACtG,KAAK,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACjG,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;YACjH,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;QAC1J,CAAC;IACH,CAAC;IAED,oCAAoC;IAE7B,KAAK,CAAC,IAAI;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC;YACH,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3D,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC3C,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;YACjD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,YAAY,EAAE,eAAe,IAAI,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACnI,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACvG,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,wCAAwC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,mCAAmC,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;YACrI,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9F,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,iBAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACrI,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;YAC5F,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,MAAM,CAAC,YAAY,IAAI,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACxG,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9H,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,MAAM;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,IAAI,sBAAsB,QAAQ,mFAAmF,CAAC,CAAC;IACrK,CAAC;IAEM,WAAW,CAAC,MAAc;QAC/B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,WAAW,CAAC,CAAC,OAAO,WAAW,CAAC;YACrC,KAAK,WAAW,CAAC,CAAC,OAAO,WAAW,CAAC;YACrC,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC1B,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,IAAc;QACjC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,KAAK,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC5B,KAAK,MAAM,CAAC,CAAC,OAAO,cAAc,CAAC;YACnC,KAAK,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC;YAC/B,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC/B,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC;YAChC,KAAK,QAAQ,CAAC,CAAC,OAAO,cAAc,CAAC;QACvC,CAAC;IACH,CAAC;IAED,iCAAiC;IAEzB,WAAW;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,IAAiB,EAAU,EAAE;YAC7D,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAC1B,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC5D,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;gBAC7C,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;YACjC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QAExF,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YAC5F,4EAA4E;YAC5E,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBAC5B,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACnF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAChD,CAAC;IAEM,QAAQ,CAAC,IAAa;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAC/B,qEAAqE;QACrE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;IAC3E,CAAC;8GA7+BU,oBAAoB;6DAApB,oBAAoB;YA7rB7B,8BAAoE;YAqBhE,AApBF,uFAA8B,kEAoBrB;YAypBT,qGAAkB;YAYpB,iBAAM;;YAzrBJ,cA2qBC;YA3qBD,oDA2qBC;YAED,eAWC;YAXD,yCAWC;4BA7rBK,YAAY,cAAE,iBAAiB,EAAE,yBAAyB,EAAE,kBAAkB;;iFAisB7E,oBAAoB;cApsBhC,SAAS;6BACI,IAAI,YACN,cAAc,WACf,CAAC,YAAY,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,kBAAkB,CAAC,iBAC1E,iBAAiB,CAAC,IAAI,YAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4rBT;;kBAGA,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBAEL,MAAM;;kBACN,MAAM;;kBA0BN,KAAK;;kFAhCK,oBAAoB","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { CompositeKey, IMetadataProvider, Metadata, UserInfo } from '@memberjunction/core';\nimport { MJMLTrainingPipelineEntity, MJMLModelEntity, PredictiveStudioTrainModelOperation, UserInfoEngine } from '@memberjunction/core-entities';\nimport { NavigationService } from '@memberjunction/ng-shared';\nimport { AngularSplitModule } from 'angular-split';\nimport { PSPipelineWizardComponent } from './ps-pipeline-wizard.component';\nimport {\n DOMINANCE_THRESHOLD_DEFAULT,\n parseDenyList,\n type SourceBinding,\n type FeatureStepGraph,\n type FeatureStep,\n type FeatureStepKind,\n type AsOfStrategy,\n type LeakageGuard,\n type ValidationStrategy,\n type ProblemType,\n} from '@memberjunction/predictive-studio-core';\nimport { PSPanelKey } from '../predictive-studio.types';\nimport { PredictiveStudioEngine } from '../engine/predictive-studio.engine';\n\ntype NodeType = 'src' | 'feat' | 'emb' | 'target' | 'algo' | 'output';\n\ninterface DagNode {\n id: string;\n type: NodeType;\n title: string;\n icon: string;\n tag?: string;\n rows: { k: string; v: string }[];\n x: number;\n y: number;\n hasIn: boolean;\n hasOut: boolean;\n}\n\ninterface DagEdge {\n from: string;\n to: string;\n}\n\nconst NODE_W = 230;\nconst NODE_H = 96;\nconst COL_GAP = 96;\nconst ROW_GAP = 28;\nconst PAD_X = 40;\nconst PAD_Y = 40;\n\nconst SOURCE_KINDS: SourceBinding['Kind'][] = ['Entity', 'Query', 'ExternalEntity', 'VectorSet', 'FeaturePipeline'];\nconst STEP_KINDS: FeatureStepKind[] = ['select', 'impute', 'standardize', 'onehot', 'bin', 'embedding', 'llm-derived', 'flow-agent', 'vision-llm'];\nconst PROBLEM_TYPES: ProblemType[] = ['classification', 'regression'];\nconst IMPUTE_STRATEGIES: Array<'mean' | 'median' | 'mode' | 'constant'> = ['mean', 'median', 'mode', 'constant'];\n\nconst SOURCE_ICONS: Record<SourceBinding['Kind'], string> = {\n Entity: 'fa-solid fa-table',\n Query: 'fa-solid fa-magnifying-glass-chart',\n ExternalEntity: 'fa-solid fa-arrows-turn-to-dots',\n VectorSet: 'fa-solid fa-vector-square',\n FeaturePipeline: 'fa-solid fa-diagram-project',\n};\n\nconst STEP_ICONS: Record<FeatureStepKind, string> = {\n select: 'fa-solid fa-list-check',\n impute: 'fa-solid fa-fill-drip',\n standardize: 'fa-solid fa-ruler-combined',\n onehot: 'fa-solid fa-table-cells',\n bin: 'fa-solid fa-chart-simple',\n embedding: 'fa-solid fa-vector-square',\n 'llm-derived': 'fa-solid fa-wand-magic-sparkles',\n 'flow-agent': 'fa-solid fa-robot',\n 'vision-llm': 'fa-solid fa-eye',\n};\n\nconst PS_PIPELINES_STARTER_PROMPT =\n 'Help me build a training pipeline. I will tell you what I want to predict and on which entity; ' +\n 'you assemble the features (guarding against leakage), pick an algorithm, and train a versioned model.';\n\n@Component({\n standalone: true,\n selector: 'ps-pipelines',\n imports: [CommonModule, MJButtonDirective, PSPipelineWizardComponent, AngularSplitModule],\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['../predictive-studio.shared.css', './ps-pipelines.component.css'],\n template: `\n <div class=\"ps-panel ps-pipelines\" data-testid=\"ps-pipelines-panel\">\n @if (pipelines.length === 0) {\n <div class=\"ps-empty\" data-testid=\"ps-pipelines-empty\">\n <span class=\"ps-empty-ico\"><i class=\"fa-solid fa-diagram-project\"></i></span>\n <h3>No training pipelines yet</h3>\n <p>\n A training pipeline assembles features from your data, picks an algorithm, and trains a\n versioned model. You can build one step-by-step with the manual wizard or ask the Model\n Development Agent to design one for you.\n </p>\n <div class=\"empty-actions\" style=\"display: flex; gap: 8px; margin-top: 12px;\">\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-new-btn-empty\"\n (click)=\"openWizard()\">\n <i class=\"fa-solid fa-plus\"></i> New Pipeline\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-ask-agent\"\n (click)=\"askAgent.emit(starterPrompt)\">\n <i class=\"fa-solid fa-robot\"></i> Ask the agent\n </button>\n </div>\n </div>\n } @else {\n <div class=\"pl-layout\" [class.catalog-collapsed]=\"isCatalogCollapsed\">\n @if (isCatalogCollapsed) {\n <div class=\"pl-collapsed-strip\" role=\"region\" aria-label=\"Pipelines catalog (collapsed)\">\n <button class=\"pl-rail-collapse\" type=\"button\" (click)=\"toggleCatalog()\" aria-label=\"Expand pipelines catalog\" title=\"Expand catalog\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n <div class=\"pl-collapsed-strip-label\"><i class=\"fa-solid fa-diagram-project\"></i></div>\n </div>\n }\n\n <as-split direction=\"horizontal\" class=\"pl-splitter\" unit=\"percent\" [gutterSize]=\"6\" (dragEnd)=\"onSplitDragEnd($event.sizes)\">\n @if (!isCatalogCollapsed) {\n <as-split-area [size]=\"catalogSizePct\" [minSize]=\"18\" [maxSize]=\"50\">\n <!-- Left Column: Master Pipeline Catalog -->\n <div class=\"pl-catalog\" data-testid=\"ps-pipelines-catalog\">\n <div class=\"pl-catalog-header\">\n <div class=\"pl-catalog-title-row\">\n <h2>Pipelines ({{ filteredPipelines.length }})</h2>\n <div style=\"display:flex;gap:6px;align-items:center\">\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-new\" (click)=\"openWizard()\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n <button class=\"pl-collapse-btn\" type=\"button\" (click)=\"toggleCatalog()\" title=\"Collapse catalog\" aria-label=\"Collapse catalog\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n </div>\n </div>\n <div class=\"pl-search-box\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <input type=\"text\" [value]=\"searchQuery\" (input)=\"onSearchInput($event)\" placeholder=\"Filter pipelines...\" />\n </div>\n <div class=\"pl-filter-chips\">\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'all'\" (click)=\"setFilter('all')\">All</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'published'\" (click)=\"setFilter('published')\">Published</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'draft'\" (click)=\"setFilter('draft')\">Draft</button>\n <button class=\"pl-filter-chip\" [class.active]=\"activeFilter === 'core'\" (click)=\"setFilter('core')\">MJ Core</button>\n </div>\n </div>\n\n <!-- Scrollable Catalog Cards List (preserves data-testid=\"ps-pipelines-picker\" and \"ps-pipelines-pill\") -->\n <div class=\"pl-picker\" data-testid=\"ps-pipelines-picker\">\n @for (p of filteredPipelines; track p.ID) {\n <button class=\"pl-pill pipeline-card\" [class.on]=\"isSelectedPipeline(p)\"\n data-testid=\"ps-pipelines-pill\" (click)=\"selectPipeline(p.ID)\" [title]=\"p.Name\">\n <div class=\"pl-card-top\">\n <div class=\"pl-card-name\">{{ p.Name }}</div>\n <span class=\"ps-badge\" [class]=\"statusClass(p.Status)\">{{ p.Status }}</span>\n </div>\n <div class=\"pl-card-meta\">\n <span class=\"pl-entity-tag\">{{ targetEntityName(p) }}</span>\n <span>&bull;</span>\n <span class=\"pl-target-tag\">{{ p.TargetVariable || 'Target' }}</span>\n </div>\n <div class=\"pl-card-meta\" style=\"justify-content: space-between; margin-top: 2px;\">\n <span>{{ p.ProblemType }}</span>\n @if (bestMetricForPipeline(p); as bm) {\n <span class=\"pl-metric-badge\"><i class=\"fa-solid fa-trophy\" style=\"color:#eab308\"></i> {{ bm }}</span>\n }\n </div>\n </button>\n }\n </div>\n </div>\n </as-split-area>\n }\n\n <as-split-area [size]=\"isCatalogCollapsed ? 100 : workspaceSizePct\" [minSize]=\"40\">\n <!-- Right Column: Human-Centric Workspace (Stages View Default + DAG View Toggle) -->\n <div class=\"pl-workspace\" data-testid=\"ps-pipelines-workspace\">\n <div class=\"pl-workspace-header\">\n <div class=\"pl-workspace-title-area\">\n <div class=\"pl-breadcrumbs\">\n <span>Pipelines</span> <i class=\"fa-solid fa-chevron-right\" style=\"font-size: 10px;\"></i>\n <span>{{ pipelineDomain(selectedPipeline) }}</span> <i class=\"fa-solid fa-chevron-right\" style=\"font-size: 10px;\"></i>\n <strong>{{ selectedPipeline?.Name }}</strong>\n </div>\n <div class=\"pl-title-row\">\n <h1>{{ selectedPipeline?.Name }}</h1>\n @if (selectedPipeline) {\n <span class=\"ps-badge\" [class]=\"statusClass(selectedPipeline.Status)\">{{ selectedPipeline.Status }}</span>\n @if (bestMetricForPipeline(selectedPipeline); as bm) {\n <span class=\"pl-metric-badge\"><i class=\"fa-solid fa-trophy\" style=\"color:#eab308\"></i> {{ bm }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Action Toolbar -->\n <div class=\"pl-toolbar\">\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"toggleViewMode()\" [title]=\"isGraphView ? 'Switch to 5-Stage Progressive Flow' : 'Switch to Pipeline Graph View'\">\n <i class=\"fa-solid\" [class.fa-diagram-project]=\"!isGraphView\" [class.fa-layer-group]=\"isGraphView\"></i>\n {{ isGraphView ? 'Stages View' : 'Graph View' }}\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-clone\" [disabled]=\"!selectedPipeline\" (click)=\"cloneSelected()\">\n <i class=\"fa-solid fa-copy\"></i> Clone\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-save\" [disabled]=\"!dirty || busy\" (click)=\"save()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-validate\" [disabled]=\"busy\" (click)=\"validate()\">\n <i class=\"fa-solid fa-circle-check\"></i> Validate\n </button>\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-pipelines-train\" [disabled]=\"busy || dirty\" (click)=\"train()\">\n <i class=\"fa-solid fa-play\"></i> Train\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"refine()\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Agent\n </button>\n @if (dirty) { <span class=\"ps-tag amber\" data-testid=\"ps-pipelines-dirty\"><i class=\"fa-solid fa-pen\"></i> Unsaved</span> }\n </div>\n </div>\n\n <!-- Stages View (Human-Readable Progressive Stages) -->\n @if (viewMode === 'stages') {\n <div class=\"pl-stages-body\">\n <!-- STAGE 1: Target Definition & Decision Boundary -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">1</span>\n <div>\n <h3>Target Definition & Temporal Decision Boundary</h3>\n <span class=\"pl-stage-subtitle\">Defines the training unit entity, target variable, problem type, and point-in-time cutoff.</span>\n </div>\n </div>\n </div>\n\n <div class=\"pl-grid-4\">\n <div class=\"pl-metric-box\">\n <label>Target Entity</label>\n <div class=\"val\"><i class=\"fa-solid fa-table\" style=\"color:var(--mj-brand-primary)\"></i> {{ targetEntityName(selectedPipeline) }}</div>\n <div class=\"sub\">Primary training unit</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Target Variable</label>\n <div class=\"val\"><i class=\"fa-solid fa-bullseye\" style=\"color:var(--mj-status-warning)\"></i> {{ editTargetVariable || 'Not set' }}</div>\n <div class=\"sub\">{{ editProblemType }} outcome</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Problem Type</label>\n <div class=\"val\"><i class=\"fa-solid fa-chart-pie\" style=\"color:var(--mj-brand-primary)\"></i> {{ editProblemType }}</div>\n <div class=\"sub\">Optimization discipline</div>\n </div>\n <div class=\"pl-metric-box\" style=\"border-left: 3px solid var(--mj-brand-primary);\">\n <label>As-Of Temporal Anchor</label>\n <div class=\"val\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i> {{ asOfLabel }}</div>\n <div class=\"sub\">Temporal cutoff to prevent leakage</div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 2: Feature Architecture & Relational Sources -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">2</span>\n <div>\n <h3>Feature Architecture & Relational Data Sources</h3>\n <span class=\"pl-stage-subtitle\">Combines core entity attributes with linked relational features across the database.</span>\n </div>\n </div>\n <div style=\"display:flex; gap:6px;\">\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-plus\"></i> Add Source</button>\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Add Step</button>\n </div>\n </div>\n\n <div class=\"pl-grid-3\">\n <!-- Feature Group: Sources -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-database\"></i> Feed-In Sources ({{ editSources.length }})</span>\n </div>\n <div class=\"pl-fg-body\">\n @for (s of editSources; track $index) {\n <div class=\"pl-feature-row\">\n <span class=\"pl-feature-name\">{{ s.Ref || 'Unnamed source' }}</span>\n <span class=\"ps-tag\">{{ s.Kind }}</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Feature Group: Feature Steps -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-sliders\"></i> Feature Transforms ({{ editSteps.length }})</span>\n </div>\n <div class=\"pl-fg-body\">\n @for (st of editSteps; track st.Id) {\n <div class=\"pl-feature-card\" data-testid=\"ps-pipelines-step-card\" (click)=\"selectStep(st.Id)\">\n <div class=\"pl-feature-card-header\">\n <span class=\"pl-feature-name\">{{ st.Label || st.Kind }}</span>\n <span class=\"ps-tag\">{{ st.Kind }}</span>\n </div>\n @if (getStepColumns(st); as cols) {\n @if (cols.length > 0) {\n <div class=\"pl-col-chips\">\n @for (col of cols; track col) {\n <span class=\"pl-col-chip\">{{ col }}</span>\n }\n </div>\n }\n }\n @if (getStepInputs(st); as inputs) {\n @if (inputs.length > 0) {\n <div class=\"pl-step-inputs\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n <span>From: {{ inputs.join(', ') }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Feature Group: Algorithm Selection -->\n <div class=\"pl-feature-group\">\n <div class=\"pl-fg-head\">\n <span><i class=\"fa-solid fa-shapes\"></i> Selected Algorithm</span>\n </div>\n <div class=\"pl-fg-body\">\n <div class=\"pl-feature-row\">\n <span class=\"pl-feature-name\">{{ selectedAlgorithmName }}</span>\n <span class=\"ps-tag primary\">Active</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Leakage Guard Bar -->\n <div class=\"pl-leakage-box\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <div style=\"flex:1;\">\n <div style=\"font-size:13px; font-weight:700; color:var(--mj-text-primary);\">Leakage Guard Active</div>\n <div style=\"font-size:12px; color:var(--mj-text-secondary); margin-top:2px;\">\n Deny-listed columns are excluded prior to matrix assembly. Dominance threshold: <strong>{{ editLeakage.SingleFeatureDominanceThreshold }}</strong>\n </div>\n <div style=\"margin-top:6px;\">\n @if (editLeakage.DenyFields.length === 0) {\n <span style=\"font-size:12px; color:var(--mj-text-muted);\">No deny-list columns configured.</span>\n } @else {\n @for (col of editLeakage.DenyFields; track col) {\n <span class=\"pl-deny-chip\">{{ col }}</span>\n }\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 3: Preprocessing & Data Hygiene -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">3</span>\n <div>\n <h3>Fitted Preprocessing & Validation Discipline</h3>\n <span class=\"pl-stage-subtitle\">Parameters fitted once on training folds and frozen with the model artifact for inference anti-skew.</span>\n </div>\n </div>\n </div>\n\n <div class=\"pl-grid-4\">\n <div class=\"pl-metric-box\">\n <label>Validation Strategy</label>\n <div class=\"val\">{{ editValidation.Strategy }}</div>\n <div class=\"sub\">Cross-validation split</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Locked Holdout</label>\n <div class=\"val\">{{ (editValidation.LockedHoldoutFraction * 100).toFixed(0) }}%</div>\n <div class=\"sub\">Honest benchmark score</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Folds / Split</label>\n <div class=\"val\">{{ editValidation.Strategy === 'kfold' ? (editValidation.K || 5) + ' Folds' : ((editValidation.TestSize || 0.2) * 100).toFixed(0) + '% Test' }}</div>\n <div class=\"sub\">Training evaluation</div>\n </div>\n <div class=\"pl-metric-box\">\n <label>Anti-Skew Guarantee</label>\n <div class=\"val\"><i class=\"fa-solid fa-lock\" style=\"color:var(--mj-status-success)\"></i> Enforced</div>\n <div class=\"sub\">Frozen params travel with model</div>\n </div>\n </div>\n </div>\n\n <!-- STAGE 4: Multi-Algorithm Tournament & Leaderboard -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">4</span>\n <div>\n <h3>Multi-Algorithm Tournament Leaderboard</h3>\n <span class=\"pl-stage-subtitle\">Models trained and scored on locked holdout data for this pipeline.</span>\n </div>\n </div>\n </div>\n\n @if (pipelineModels.length === 0) {\n <div style=\"padding: 16px; text-align: center; color: var(--mj-text-muted); font-size: 13px;\">\n <i class=\"fa-solid fa-flask\" style=\"font-size: 24px; margin-bottom: 8px; display: block; opacity: 0.5;\"></i>\n No models trained yet for this pipeline. Click <strong>Train</strong> to execute the first training run.\n </div>\n } @else {\n <table class=\"pl-table\">\n <thead>\n <tr>\n <th>Version</th>\n <th>Algorithm</th>\n <th>Holdout Score</th>\n <th>Status</th>\n <th>Trained At</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (m of pipelineModels; track m.ID) {\n <tr [class.winner-row]=\"m.Status === 'Published'\" class=\"pl-model-row\" (click)=\"openModelRecord(m.ID)\" style=\"cursor:pointer;\" title=\"Open model record in Explorer\">\n <td>\n <div style=\"display:flex;align-items:center;gap:6px\">\n <a class=\"pl-model-link\" href=\"javascript:void(0)\" (click)=\"$event.stopPropagation(); openModelRecord(m.ID)\">\n <strong>v{{ m.Version }}</strong>\n </a>\n @if (m.Status === 'Published') {\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Winner</span>\n }\n </div>\n </td>\n <td>{{ m.Algorithm || 'Algorithm' }}</td>\n <td><strong>{{ formatHoldout(m) }}</strong></td>\n <td><span class=\"ps-badge\" [class]=\"statusClass(m.Status)\">{{ m.Status }}</span></td>\n <td>{{ m.TrainedAt | date:'short' }}</td>\n <td style=\"text-align:right\">\n <button type=\"button\" class=\"pl-action-icon-btn\" (click)=\"$event.stopPropagation(); openModelRecord(m.ID)\" title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n\n <!-- STAGE 5: Production Serving & Deep Link -->\n <div class=\"pl-stage-card\">\n <div class=\"pl-stage-header\">\n <div class=\"pl-stage-title-left\">\n <span class=\"pl-stage-num\">5</span>\n <div>\n <h3>Production Serving & Model Registry</h3>\n <span class=\"pl-stage-subtitle\">Active inference wiring and model registry status.</span>\n </div>\n </div>\n <div style=\"display:flex;gap:8px;align-items:center;\">\n @if (publishedModel; as pub) {\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\"\n (click)=\"openModelRecord(pub.ID)\"\n title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Model Record\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\"\n (click)=\"viewTrainingRuns(pub.ID)\"\n title=\"View training runs for this model\">\n <i class=\"fa-solid fa-flask\"></i> View Training Runs\n </button>\n }\n </div>\n </div>\n\n <div class=\"pl-serving-box\">\n <div class=\"pl-metric-box\">\n <label>Active Serving Model</label>\n <div class=\"val\">\n @if (publishedModel; as pub) {\n <span>v{{ pub.Version }} ({{ pub.Algorithm || 'Model' }}) &bull; ID: {{ pub.ID.slice(0, 8) }}…</span>\n } @else {\n <span style=\"color:var(--mj-text-muted);\">No published model serving live predictions yet.</span>\n }\n </div>\n <div class=\"sub\">Model: {{ publishedModel?.Status || 'None' }} &bull; Pipeline: {{ selectedPipeline?.Status }}</div>\n </div>\n <div class=\"pl-metric-box\" style=\"background:var(--mj-brand-primary-subtle); border-color:rgba(0,118,182,0.2);\">\n <label>Inference Readiness</label>\n <div class=\"val\" style=\"color:var(--mj-brand-primary)\">\n <i class=\"fa-solid fa-circle-check\"></i> Ready\n </div>\n <div class=\"sub\">Batch & on-demand scoring enabled</div>\n </div>\n </div>\n </div>\n\n </div>\n }\n\n <!-- Graph Canvas & Inspector -->\n @if (isGraphView) {\n <div class=\"builder\">\n <as-split direction=\"horizontal\" class=\"builder-splitter\" unit=\"percent\" [gutterSize]=\"6\" (dragEnd)=\"onInspectorSplitDragEnd($event.sizes)\">\n <as-split-area [size]=\"isInspectorCollapsed ? 100 : canvasSizePct\" [minSize]=\"40\">\n <!-- Canvas Wrap -->\n <div class=\"canvas-wrap\">\n <div class=\"canvas-bar\">\n <div class=\"canvas-bar-left\">\n <span class=\"ps-small ps-muted\" style=\"font-weight:600\">Add to Graph:</span>\n <button class=\"ps-pchip s\" data-testid=\"ps-pipelines-add-source\" (click)=\"addSource()\"><i class=\"fa-solid fa-database\"></i> Source</button>\n <button class=\"ps-pchip f\" data-testid=\"ps-pipelines-add-step\" (click)=\"addStep()\"><i class=\"fa-solid fa-sliders\"></i> Feature step</button>\n </div>\n <div class=\"canvas-bar-right\">\n <div class=\"ps-zoom-controls\">\n <button class=\"ps-icon-btn\" (click)=\"zoomOut()\" [disabled]=\"zoomLevel <= 0.5\" title=\"Zoom Out\"><i class=\"fa-solid fa-minus\"></i></button>\n <span class=\"ps-zoom-label\" (click)=\"resetZoom()\" title=\"Reset to 100%\">{{ Math.round(zoomLevel * 100) }}%</span>\n <button class=\"ps-icon-btn\" (click)=\"zoomIn()\" [disabled]=\"zoomLevel >= 2.0\" title=\"Zoom In\"><i class=\"fa-solid fa-plus\"></i></button>\n </div>\n <button class=\"ps-icon-btn\" [class.active]=\"!isInspectorCollapsed\" (click)=\"toggleInspector()\" [title]=\"isInspectorCollapsed ? 'Open Inspector' : 'Collapse Inspector'\">\n <i class=\"fa-solid fa-circle-info\"></i>\n </button>\n <span class=\"ps-small ps-muted ps-node-count\"><i class=\"fa-solid fa-circle-nodes\"></i> {{ nodes.length }} nodes · {{ edges.length }} edges</span>\n </div>\n </div>\n\n <div class=\"ps-flow big\" data-testid=\"ps-pipelines-canvas\">\n <div class=\"ps-graph-viewport\"\n [style.width.px]=\"canvasW\"\n [style.height.px]=\"canvasH\"\n [style.transform]=\"'scale(' + zoomLevel + ')'\">\n <svg class=\"ps-graph-edges\"\n data-testid=\"ps-pipelines-edges\"\n [attr.width]=\"canvasW\"\n [attr.height]=\"canvasH\">\n <defs>\n <marker id=\"ps-arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto\">\n <path d=\"M 0 1.5 L 8 5 L 0 8.5 z\" fill=\"var(--mj-border-strong)\" />\n </marker>\n <marker id=\"ps-arrow-active\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto\">\n <path d=\"M 0 1.5 L 8 5 L 0 8.5 z\" fill=\"var(--mj-brand-primary)\" />\n </marker>\n </defs>\n @for (edge of edges; track edge.from + '->' + edge.to) {\n <path class=\"ps-edge-path\"\n [class.active]=\"isEdgeActive(edge)\"\n [attr.d]=\"edgePath(edge)\"\n [attr.marker-end]=\"isEdgeActive(edge) ? 'url(#ps-arrow-active)' : 'url(#ps-arrow)'\"></path>\n }\n </svg>\n @for (node of nodes; track node.id) {\n <div class=\"ps-node\" data-testid=\"ps-pipelines-node\" [attr.data-node-id]=\"node.id\"\n [ngClass]=\"node.type\" [class.selected]=\"node.id === selectedId\"\n [style.left.px]=\"node.x\" [style.top.px]=\"node.y\"\n [style.width.px]=\"NODE_W\"\n (click)=\"selectNode(node.id)\">\n <div class=\"nh\">\n <i class=\"tile\" [ngClass]=\"node.icon\"></i>\n <span class=\"ps-node-title\" [title]=\"node.title\">{{ node.title }}</span>\n @if (node.tag) { <span class=\"ps-tag\">{{ node.tag }}</span> }\n </div>\n <div class=\"nb\">\n @for (row of node.rows; track row.k) {\n <div class=\"nb-row\">\n <span class=\"k\">{{ row.k }}</span>\n <span class=\"v\" [title]=\"row.v\">{{ row.v }}</span>\n </div>\n }\n </div>\n @if (node.hasIn) { <span class=\"port in\"></span> }\n @if (node.hasOut) { <span class=\"port out\"></span> }\n </div>\n }\n </div>\n </div>\n\n <div class=\"flow-toolbar\">\n <div class=\"legend\">\n <span><i class=\"sw src\"></i> Source</span>\n <span><i class=\"sw feat\"></i> Feature</span>\n <span><i class=\"sw emb\"></i> Embedding</span>\n <span><i class=\"sw target\"></i> Target</span>\n <span><i class=\"sw algo\"></i> Algorithm</span>\n <span><i class=\"sw output\"></i> Model</span>\n </div>\n </div>\n </div>\n </as-split-area>\n\n @if (!isInspectorCollapsed) {\n <as-split-area [size]=\"inspectorSizePct\" [minSize]=\"20\" [maxSize]=\"55\">\n <!-- Inspector -->\n <div class=\"ps-col inspector\" data-testid=\"ps-pipelines-inspector\">\n <div class=\"ps-card insp\">\n <div class=\"ihead\">\n <i class=\"tile\" [ngClass]=\"selectedNode.icon\" [attr.data-type]=\"selectedNode.type\"></i>\n <div style=\"flex:1\">\n <h3 data-testid=\"ps-pipelines-inspector-title\">{{ selectedNode.title }}</h3>\n <div class=\"ps-small ps-muted\">{{ nodeTypeLabel(selectedNode.type) }} · selected</div>\n </div>\n <button class=\"insp-collapse-btn\" type=\"button\" (click)=\"toggleInspector()\" title=\"Collapse inspector\" aria-label=\"Collapse inspector\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n @if (selectedNode.type === 'src' || selectedNode.type === 'feat' || selectedNode.type === 'emb') {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-pipelines-delete\" (click)=\"deleteSelected()\"><i class=\"fa-solid fa-trash\"></i></button>\n }\n </div>\n <div class=\"ps-card-body\">\n @if (selectedSource) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedSource.Kind\" (change)=\"setSourceKind(inputVal($event))\">\n @for (k of sourceKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Reference (entity / query / id)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Ref\" (input)=\"setSourceRef(inputVal($event))\" />\n </div>\n <div class=\"ps-field\"><label>Alias (optional)</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedSource.Alias || ''\" (input)=\"setSourceAlias(inputVal($event))\" />\n </div>\n }\n @if (selectedStep) {\n <div class=\"ps-field\"><label>Kind</label>\n <select class=\"mj-input\" [value]=\"selectedStep.Kind\" (change)=\"setStepKind(inputVal($event))\">\n @for (k of stepKinds; track k) { <option [value]=\"k\">{{ k }}</option> }\n </select>\n </div>\n <div class=\"ps-field\"><label>Label</label>\n <input class=\"mj-input\" type=\"text\" [value]=\"selectedStep.Label || ''\" (input)=\"setStepLabel(inputVal($event))\" />\n </div>\n @switch (selectedStep.Kind) {\n @case ('select') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns(inputVal($event))\" /></div> }\n @case ('standardize') { <div class=\"ps-field\"><label>Columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"columnsText\" (input)=\"setColumns(inputVal($event))\" /></div> }\n @case ('impute') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"stepField('Strategy')\" (change)=\"setStepStr('Strategy', inputVal($event))\">@for (s of imputeStrategies; track s) { <option [value]=\"s\">{{ s }}</option> }</select></div>\n }\n @case ('onehot') { <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div> }\n @case ('bin') {\n <div class=\"ps-field\"><label>Column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Column')\" (input)=\"setStepStr('Column', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Bins</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Bins')\" (input)=\"setStepNum('Bins', inputVal($event))\" /></div>\n }\n @case ('embedding') {\n <div class=\"ps-field\"><label>Entity</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('Entity')\" (input)=\"setStepStr('Entity', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Embedding model ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('EmbeddingModelRef')\" (input)=\"setStepStr('EmbeddingModelRef', inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Dimensions</label><input class=\"mj-input\" type=\"number\" [value]=\"stepField('Dims')\" (input)=\"setStepNum('Dims', inputVal($event))\" /></div>\n }\n @case ('llm-derived') { <div class=\"ps-field\"><label>Feature Pipeline ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FeaturePipelineRef')\" (input)=\"setStepStr('FeaturePipelineRef', inputVal($event))\" /></div> }\n @case ('flow-agent') { <div class=\"ps-field\"><label>Flow Agent ref</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('FlowAgentRef')\" (input)=\"setStepStr('FlowAgentRef', inputVal($event))\" /></div> }\n @case ('vision-llm') { <div class=\"ps-field\"><label>Image column</label><input class=\"mj-input\" type=\"text\" [value]=\"stepField('ImageColumn')\" (input)=\"setStepStr('ImageColumn', inputVal($event))\" /></div> }\n }\n }\n @if (selectedNode.type === 'target') {\n <div class=\"ps-field\"><label>Target variable</label><input class=\"mj-input\" type=\"text\" [value]=\"editTargetVariable\" (input)=\"setTargetVariable(inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Problem type</label><select class=\"mj-input\" [value]=\"editProblemType\" (change)=\"setProblemType(inputVal($event))\">@for (pt of problemTypes; track pt) { <option [value]=\"pt\">{{ pt }}</option> }</select></div>\n }\n @if (selectedNode.type === 'algo') {\n <div class=\"ps-field\"><label>Algorithm</label><select class=\"mj-input\" [value]=\"editAlgorithmId\" (change)=\"setAlgorithm(inputVal($event))\">@for (a of algorithms; track a.ID) { <option [value]=\"a.ID\">{{ a.Name }}</option> }</select></div>\n <div class=\"ps-field\"><label>Hyperparameters (JSON)</label><textarea class=\"mj-textarea\" rows=\"4\" [value]=\"editHyperparams\" (input)=\"setHyperparams(inputVal($event))\"></textarea></div>\n @if (publishedModel; as pub) {\n <div style=\"margin-top:12px;padding:10px;border-radius:var(--mj-radius-sm);background:var(--mj-bg-surface-sunken);border:1px solid var(--mj-border-default);\">\n <div class=\"ps-small ps-muted\" style=\"margin-bottom:6px;\">Current Serving Winner</div>\n <div style=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;\">\n <span style=\"font-size:var(--mj-text-xs);font-weight:600;\">v{{ pub.Version }} ({{ pub.Algorithm || 'Model' }})</span>\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Active</span>\n </div>\n <div style=\"display:flex;gap:6px;\">\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"openModelRecord(pub.ID)\" style=\"flex:1;justify-content:center;\" title=\"Open model record in Explorer\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Model\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"viewTrainingRuns(pub.ID)\" style=\"flex:1;justify-content:center;\" title=\"View training runs\">\n <i class=\"fa-solid fa-flask\"></i> Runs\n </button>\n </div>\n </div>\n }\n }\n @if (selectedNode.type === 'output') {\n @if (pipelineModels.length === 0) {\n <div class=\"ps-small ps-muted\">The trained model artifact. Run <strong>Train</strong> to produce a new versioned model from this pipeline.</div>\n } @else {\n <div style=\"display:flex;flex-direction:column;gap:12px;\">\n @if (pipelineModels.length > 1) {\n <div class=\"ps-field\">\n <label>Model Version</label>\n <select class=\"mj-input\" [value]=\"inspectedModel?.ID\" (change)=\"selectModelVersion(inputVal($event))\">\n @for (m of pipelineModels; track m.ID) {\n <option [value]=\"m.ID\">v{{ m.Version }} · {{ m.Algorithm || 'Algorithm' }} ({{ m.Status }})</option>\n }\n </select>\n </div>\n }\n @if (inspectedModel; as mdl) {\n <div style=\"border:1px solid var(--mj-border-default);border-radius:var(--mj-radius-md);padding:12px;background:var(--mj-bg-surface-sunken);display:flex;flex-direction:column;gap:8px;\">\n <div style=\"display:flex;justify-content:space-between;align-items:center;\">\n <div style=\"display:flex;align-items:center;gap:6px;\">\n <strong>v{{ mdl.Version }}</strong>\n @if (mdl.Status === 'Published') {\n <span class=\"ps-tag success\"><i class=\"fa-solid fa-trophy\"></i> Winner</span>\n }\n <span class=\"ps-badge\" [class]=\"statusClass(mdl.Status)\">{{ mdl.Status }}</span>\n </div>\n <span class=\"ps-mono ps-small ps-muted\" [title]=\"mdl.ID\">{{ mdl.ID.slice(0, 8) }}…</span>\n </div>\n <div style=\"font-size:var(--mj-text-xs);color:var(--mj-text-secondary);\">\n Algorithm: <strong>{{ mdl.Algorithm || selectedAlgorithmName }}</strong>\n </div>\n <div style=\"font-size:var(--mj-text-xs);color:var(--mj-text-secondary);\">\n Holdout Score: <strong>{{ formatHoldout(mdl) }}</strong>\n </div>\n <div style=\"display:flex;flex-direction:column;gap:6px;margin-top:4px;\">\n <button mjButton variant=\"primary\" size=\"sm\" type=\"button\" (click)=\"openModelRecord(mdl.ID)\" style=\"width:100%;justify-content:center;\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open Model Details\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" type=\"button\" (click)=\"viewTrainingRuns(mdl.ID)\" style=\"width:100%;justify-content:center;\">\n <i class=\"fa-solid fa-flask\"></i> View Training Runs\n </button>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Leakage guard (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-shield-halved\" style=\"color:var(--mj-status-warning)\"></i><h3>Leakage guard</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Deny-list columns (comma-separated)</label><input class=\"mj-input\" type=\"text\" [value]=\"denyText\" (input)=\"setDeny(inputVal($event))\" /></div>\n <div class=\"ps-field\"><label>Single-feature dominance threshold</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" min=\"0\" max=\"1\" [value]=\"editLeakage.SingleFeatureDominanceThreshold\" (input)=\"setThreshold(inputVal($event))\" /></div>\n </div>\n </div>\n\n <!-- As-of strategy (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-clock-rotate-left\" style=\"color:var(--mj-brand-primary)\"></i><h3>As-of strategy</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Mode</label><select class=\"mj-input\" [value]=\"editAsOf.Mode\" (change)=\"setAsOfMode(inputVal($event))\"><option value=\"none\">none</option><option value=\"column\">column</option><option value=\"offset\">offset</option></select></div>\n @if (editAsOf.Mode === 'column') { <div class=\"ps-field\"><label>Decision-date column</label><input class=\"mj-input\" type=\"text\" [value]=\"editAsOf.Column || ''\" (input)=\"setAsOfColumn(inputVal($event))\" /></div> }\n @if (editAsOf.Mode === 'offset') { <div class=\"ps-field\"><label>Offset days before label</label><input class=\"mj-input\" type=\"number\" [value]=\"editAsOf.OffsetDays ?? 0\" (input)=\"setAsOfOffset(inputVal($event))\" /></div> }\n </div>\n </div>\n\n <!-- Validation (editable) -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\"><i class=\"fa-solid fa-scissors\" style=\"color:var(--mj-brand-primary)\"></i><h3>Validation</h3></div>\n <div class=\"ps-card-body\">\n <div class=\"ps-field\"><label>Strategy</label><select class=\"mj-input\" [value]=\"editValidation.Strategy\" (change)=\"setValStrategy(inputVal($event))\"><option value=\"train_test_split\">train_test_split</option><option value=\"kfold\">kfold</option><option value=\"holdout\">holdout</option></select></div>\n @if (editValidation.Strategy === 'train_test_split') { <div class=\"ps-field\"><label>Test size</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.TestSize ?? 0.2\" (input)=\"setTestSize(inputVal($event))\" /></div> }\n @if (editValidation.Strategy === 'kfold') { <div class=\"ps-field\"><label>Folds (k)</label><input class=\"mj-input\" type=\"number\" [value]=\"editValidation.K ?? 5\" (input)=\"setK(inputVal($event))\" /></div> }\n <div class=\"ps-field\"><label>Locked holdout fraction</label><input class=\"mj-input\" type=\"number\" step=\"0.05\" [value]=\"editValidation.LockedHoldoutFraction\" (input)=\"setHoldout(inputVal($event))\" /></div>\n </div>\n </div>\n </div>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n </div>\n </as-split-area>\n </as-split>\n </div>\n }\n\n @if (showWizard) {\n <ps-pipeline-wizard\n [engine]=\"engine\"\n [provider]=\"provider\"\n [currentUser]=\"currentUser\"\n [cloneFrom]=\"wizardClonePipeline\"\n [initialAlgorithmId]=\"initialWizardAlgorithmId\"\n (saved)=\"onWizardSaved($event)\"\n (trainRequested)=\"onWizardTrainRequested($event)\"\n (closed)=\"closeWizard()\">\n </ps-pipeline-wizard>\n }\n </div>\n `,\n})\nexport class PSPipelinesComponent implements OnInit, OnChanges {\n @Input() engine!: PredictiveStudioEngine;\n @Input() provider: IMetadataProvider | null = null;\n @Input() currentUser: UserInfo | null = null;\n\n @Output() askAgent = new EventEmitter<string>();\n @Output() navigate = new EventEmitter<PSPanelKey>();\n\n private cdr = inject(ChangeDetectorRef);\n private notifications = inject(MJNotificationService);\n private navigationService = inject(NavigationService);\n\n public isCatalogCollapsed = false;\n public catalogSizePct = 28;\n public workspaceSizePct = 72;\n public isInspectorCollapsed = false;\n public canvasSizePct = 72;\n public inspectorSizePct = 28;\n\n public readonly starterPrompt = PS_PIPELINES_STARTER_PROMPT;\n public readonly sourceKinds = SOURCE_KINDS;\n public readonly stepKinds = STEP_KINDS;\n public readonly problemTypes = PROBLEM_TYPES;\n public readonly imputeStrategies = IMPUTE_STRATEGIES;\n\n public pipelines: MJMLTrainingPipelineEntity[] = [];\n public selectedPipelineId = '';\n\n public showWizard = false;\n public wizardClonePipeline: MJMLTrainingPipelineEntity | null = null;\n public initialWizardAlgorithmId?: string;\n\n @Input() public viewMode: 'stages' | 'graph' | 'dag' = 'stages';\n public searchQuery = '';\n public activeFilter = 'all';\n\n public readonly NODE_W = NODE_W;\n public readonly NODE_H = NODE_H;\n public Math = Math;\n public zoomLevel = 1;\n\n public openWizard(algoId?: string): void {\n this.wizardClonePipeline = null;\n this.initialWizardAlgorithmId = algoId;\n this.showWizard = true;\n }\n\n public cloneSelected(): void {\n if (!this.selectedPipeline) return;\n this.wizardClonePipeline = this.selectedPipeline;\n this.initialWizardAlgorithmId = undefined;\n this.showWizard = true;\n }\n\n public closeWizard(): void {\n this.showWizard = false;\n this.wizardClonePipeline = null;\n this.initialWizardAlgorithmId = undefined;\n }\n\n public async onWizardSaved(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n this.closeWizard();\n await this.engine.Config(true, this.currentUser ?? undefined, this.provider ?? undefined);\n this.pipelines = this.engine.Pipelines;\n this.selectPipeline(pipeline.ID);\n this.cdr.detectChanges();\n }\n\n public async onWizardTrainRequested(pipeline: MJMLTrainingPipelineEntity): Promise<void> {\n this.closeWizard();\n await this.engine.Config(true, this.currentUser ?? undefined, this.provider ?? undefined);\n this.pipelines = this.engine.Pipelines;\n this.selectPipeline(pipeline.ID);\n await this.train();\n }\n\n // Editable spec state (the source of truth; nodes/edges are derived).\n public editSources: SourceBinding[] = [];\n public editSteps: FeatureStep[] = [];\n public editTargetVariable = '';\n public editProblemType: ProblemType = 'classification';\n public editAlgorithmId = '';\n public editHyperparams = '{}';\n public editLeakage: LeakageGuard = { DenyFields: [], SingleFeatureDominanceThreshold: DOMINANCE_THRESHOLD_DEFAULT };\n public editAsOf: AsOfStrategy = { Mode: 'none' };\n public editValidation: ValidationStrategy = { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 };\n\n public nodes: DagNode[] = [];\n public edges: DagEdge[] = [];\n public selectedId = '';\n public canvasW = 800;\n public canvasH = 460;\n public dirty = false;\n public busy = false;\n\n private nodeById = new Map<string, DagNode>();\n private stepSeq = 0;\n\n public ngOnChanges(_changes?: SimpleChanges): void {\n this.refreshFromEngine();\n }\n\n ngOnInit(): void {\n const saved = UserInfoEngine.Instance.GetSetting('mj.predictiveStudio.pipelines.layout');\n if (saved) {\n try {\n const parsed = JSON.parse(saved);\n if (typeof parsed.catalogSizePct === 'number' && parsed.catalogSizePct >= 15 && parsed.catalogSizePct <= 60) {\n this.catalogSizePct = parsed.catalogSizePct;\n this.workspaceSizePct = 100 - this.catalogSizePct;\n }\n if (typeof parsed.isCatalogCollapsed === 'boolean') {\n this.isCatalogCollapsed = parsed.isCatalogCollapsed;\n }\n if (typeof parsed.canvasSizePct === 'number' && parsed.canvasSizePct >= 40 && parsed.canvasSizePct <= 85) {\n this.canvasSizePct = parsed.canvasSizePct;\n this.inspectorSizePct = 100 - this.canvasSizePct;\n }\n if (typeof parsed.isInspectorCollapsed === 'boolean') {\n this.isInspectorCollapsed = parsed.isInspectorCollapsed;\n }\n } catch {}\n }\n this.refreshFromEngine();\n }\n\n public onSplitDragEnd(sizes: readonly (number | '*')[]): void {\n if (Array.isArray(sizes) && sizes.length === 2 && typeof sizes[0] === 'number' && typeof sizes[1] === 'number') {\n this.catalogSizePct = Math.round(sizes[0]);\n this.workspaceSizePct = Math.round(sizes[1]);\n this.saveLayoutPrefs();\n }\n }\n\n public toggleCatalog(): void {\n this.isCatalogCollapsed = !this.isCatalogCollapsed;\n this.saveLayoutPrefs();\n this.cdr.markForCheck();\n }\n\n public onInspectorSplitDragEnd(sizes: readonly (number | '*')[]): void {\n if (Array.isArray(sizes) && sizes.length === 2 && typeof sizes[0] === 'number' && typeof sizes[1] === 'number') {\n this.canvasSizePct = Math.round(sizes[0]);\n this.inspectorSizePct = Math.round(sizes[1]);\n this.saveLayoutPrefs();\n }\n }\n\n public toggleInspector(): void {\n this.isInspectorCollapsed = !this.isInspectorCollapsed;\n this.saveLayoutPrefs();\n this.cdr.markForCheck();\n }\n\n private saveLayoutPrefs(): void {\n const prefs = {\n catalogSizePct: this.catalogSizePct,\n isCatalogCollapsed: this.isCatalogCollapsed,\n canvasSizePct: this.canvasSizePct,\n inspectorSizePct: this.inspectorSizePct,\n isInspectorCollapsed: this.isInspectorCollapsed,\n };\n UserInfoEngine.Instance.SetSettingDebounced('mj.predictiveStudio.pipelines.layout', JSON.stringify(prefs));\n }\n\n public openModelRecord(modelId: string): void {\n if (!modelId) return;\n try {\n const p = this.provider ?? new Metadata();\n if (!p) return;\n const entity = p.EntityByName('MJ: ML Models');\n if (!entity) return;\n const ck = CompositeKey.FromURLSegment(entity, modelId);\n this.navigationService.OpenEntityRecord('MJ: ML Models', ck);\n } catch (err) {\n this.notifications.CreateSimpleNotification(`Could not open model: ${err instanceof Error ? err.message : String(err)}`, 'error');\n }\n }\n\n public viewTrainingRuns(modelId?: string): void {\n if (this.navigate.observed) {\n this.navigate.emit('experiments');\n return;\n }\n try {\n const p = this.provider ?? new Metadata();\n if (!p) return;\n const runs = this.engine?.TrainingRuns ?? [];\n const match = modelId\n ? runs.find((r) => UUIDsEqual(r.ResultingModelID, modelId))\n : runs.find((r) => this.selectedPipelineId && UUIDsEqual(r.PipelineID, this.selectedPipelineId));\n if (match) {\n const entity = p.EntityByName('MJ: ML Training Runs');\n if (entity) {\n const ck = CompositeKey.FromURLSegment(entity, match.ID);\n this.navigationService.OpenEntityRecord('MJ: ML Training Runs', ck);\n return;\n }\n }\n this.navigationService.OpenNavItemByName('Experiments');\n } catch (err) {\n this.notifications.CreateSimpleNotification(`Could not open training runs: ${err instanceof Error ? err.message : String(err)}`, 'error');\n }\n }\n\n public refreshFromEngine(): void {\n this.pipelines = this.engine?.Pipelines ?? [];\n if (!this.selectedPipelineId && this.pipelines.length > 0) {\n this.selectPipeline(this.pipelines[0].ID);\n } else if (this.selectedPipelineId && !this.pipelines.some((p) => UUIDsEqual(p.ID, this.selectedPipelineId))) {\n if (this.pipelines.length > 0) {\n this.selectPipeline(this.pipelines[0].ID);\n }\n }\n }\n\n public get isGraphView(): boolean {\n return this.viewMode === 'graph' || this.viewMode === 'dag';\n }\n\n public toggleViewMode(): void {\n this.viewMode = this.isGraphView ? 'stages' : 'graph';\n }\n\n public zoomIn(): void {\n this.zoomLevel = Math.min(2.0, Math.round((this.zoomLevel + 0.15) * 100) / 100);\n }\n\n public zoomOut(): void {\n this.zoomLevel = Math.max(0.5, Math.round((this.zoomLevel - 0.15) * 100) / 100);\n }\n\n public resetZoom(): void {\n this.zoomLevel = 1;\n }\n\n public inputVal(e: Event): string {\n return (e.target as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement).value;\n }\n\n public isEdgeActive(edge: DagEdge): boolean {\n return this.selectedId === edge.from || this.selectedId === edge.to;\n }\n\n public setFilter(f: string): void {\n this.activeFilter = f;\n }\n\n public onSearchInput(ev: Event): void {\n this.searchQuery = ((ev.target as HTMLInputElement)?.value ?? '').toLowerCase();\n }\n\n public get filteredPipelines(): MJMLTrainingPipelineEntity[] {\n return (this.pipelines ?? []).filter((p) => {\n if (this.searchQuery) {\n const nameMatch = p.Name?.toLowerCase().includes(this.searchQuery);\n const entityMatch = p.TargetEntity?.toLowerCase().includes(this.searchQuery);\n const targetMatch = p.TargetVariable?.toLowerCase().includes(this.searchQuery);\n if (!nameMatch && !entityMatch && !targetMatch) return false;\n }\n if (this.activeFilter === 'published') return p.Status === 'Published';\n if (this.activeFilter === 'draft') return p.Status === 'Draft';\n if (this.activeFilter === 'core') return p.TargetEntity?.includes('AI') || p.Name?.includes('AI Agent');\n return true;\n });\n }\n\n public pipelineDomain(p?: MJMLTrainingPipelineEntity): string {\n if (!p) return 'Platform';\n const n = (p.Name || '') + (p.TargetEntity || '');\n if (n.includes('MoreCheese') || n.includes('Membership') || n.includes('Event') || n.includes('Course')) return 'More Cheese Club';\n if (n.includes('AI') || n.includes('Prompt') || n.includes('Agent')) return 'MemberJunction Platform';\n return 'BizApps';\n }\n\n public targetEntityName(p?: MJMLTrainingPipelineEntity): string {\n if (!p) return 'Entity';\n return p.TargetEntity || this.editSources[0]?.Ref || 'Entity';\n }\n\n public get pipelineModels(): MJMLModelEntity[] {\n if (!this.selectedPipelineId || !this.engine?.Models) return [];\n return this.engine.Models.filter((m) => UUIDsEqual(m.PipelineID, this.selectedPipelineId));\n }\n\n public get publishedModel(): MJMLModelEntity | undefined {\n return this.pipelineModels.find((m) => m.Status === 'Published') ?? this.pipelineModels[0];\n }\n\n public selectedModelVersionId: string | null = null;\n\n public get inspectedModel(): MJMLModelEntity | undefined {\n if (this.selectedModelVersionId) {\n const found = this.pipelineModels.find((m) => UUIDsEqual(m.ID, this.selectedModelVersionId));\n if (found) return found;\n }\n return this.publishedModel;\n }\n\n public selectModelVersion(id: string): void {\n this.selectedModelVersionId = id;\n this.cdr.markForCheck();\n }\n\n public bestMetricForPipeline(p?: MJMLTrainingPipelineEntity): string | null {\n if (!p || !this.engine?.Models) return null;\n const models = this.engine.Models.filter((m) => UUIDsEqual(m.PipelineID, p.ID));\n if (models.length === 0) return null;\n const best = models.find((m) => m.Status === 'Published') ?? models[0];\n return this.formatHoldout(best);\n }\n\n public selectStep(id: string): void {\n this.selectNode(id);\n }\n\n public getStepColumns(step: FeatureStep): string[] {\n switch (step.Kind) {\n case 'select':\n case 'standardize':\n return step.Columns ?? [];\n case 'impute':\n case 'onehot':\n case 'bin':\n return step.Column ? [step.Column] : [];\n default:\n return [];\n }\n }\n\n public getStepInputs(step: FeatureStep): string[] {\n return step.Inputs ?? [];\n }\n\n public formatHoldout(m: MJMLModelEntity): string {\n if (!m.HoldoutMetrics) return m.Metrics ? 'Trained' : 'Pending';\n try {\n const hm = typeof m.HoldoutMetrics === 'string' ? JSON.parse(m.HoldoutMetrics) : m.HoldoutMetrics;\n if (hm.auc != null) return `AUC ${(Number(hm.auc)).toFixed(3)}`;\n if (hm.r2 != null) return `R² ${(Number(hm.r2)).toFixed(3)}`;\n if (hm.rmse != null) return `RMSE ${(Number(hm.rmse)).toFixed(2)}`;\n if (hm.accuracy != null) return `Acc ${(Number(hm.accuracy) * 100).toFixed(1)}%`;\n return 'Scored';\n } catch {\n return 'Scored';\n }\n }\n\n public get asOfLabel(): string {\n if (this.editAsOf.Mode === 'column') return `Column: ${this.editAsOf.Column || 'DecisionDate'}`;\n if (this.editAsOf.Mode === 'offset') return `Offset: ${this.editAsOf.OffsetDays || 0}d prior`;\n return 'None (Static snapshot)';\n }\n\n public get selectedAlgorithmName(): string {\n return this.engine?.AlgorithmName(this.editAlgorithmId) || 'Auto-select (Tournament)';\n }\n\n public selectPipeline(id: string): void {\n this.selectedPipelineId = id;\n this.selectedModelVersionId = null;\n const p = this.pipelines.find((x) => UUIDsEqual(x.ID, id));\n if (!p) {\n return;\n }\n\n // Defensive parsing against non-array JSON schemas\n const rawSources = this.parse<unknown>(p.SourceBindings, []);\n this.editSources = Array.isArray(rawSources)\n ? (rawSources as SourceBinding[])\n : rawSources && typeof rawSources === 'object'\n ? [{ Kind: 'Entity', Ref: (rawSources as { EntityID?: string }).EntityID || '' }]\n : [];\n\n const rawSteps = this.parse<unknown>(p.FeatureSteps, { Steps: [] });\n if (Array.isArray(rawSteps)) {\n this.editSteps = rawSteps as FeatureStep[];\n } else if (rawSteps && typeof rawSteps === 'object' && 'Steps' in rawSteps && Array.isArray((rawSteps as { Steps: unknown[] }).Steps)) {\n this.editSteps = (rawSteps as { Steps: FeatureStep[] }).Steps;\n } else {\n this.editSteps = [];\n }\n\n this.editTargetVariable = p.TargetVariable ?? '';\n this.editProblemType = (p.ProblemType as ProblemType) ?? 'classification';\n this.editAlgorithmId = p.AlgorithmID ?? '';\n this.editHyperparams = p.Hyperparameters ?? '{}';\n this.editLeakage = this.parse<LeakageGuard>(p.LeakageGuard, { DenyFields: [], SingleFeatureDominanceThreshold: DOMINANCE_THRESHOLD_DEFAULT });\n this.editAsOf = this.parse<AsOfStrategy>(p.AsOfStrategy, { Mode: 'none' });\n this.editValidation = this.parse<ValidationStrategy>(p.ValidationStrategy, { Strategy: 'train_test_split', TestSize: 0.2, LockedHoldoutFraction: 0.15 });\n this.stepSeq = this.editSteps.length;\n this.dirty = false;\n this.rebuild();\n this.selectedId = this.nodes[0]?.id ?? '';\n }\n\n public get selectedPipeline(): MJMLTrainingPipelineEntity | undefined {\n return this.pipelines.find((p) => UUIDsEqual(p.ID, this.selectedPipelineId));\n }\n\n public isSelectedPipeline(p: MJMLTrainingPipelineEntity): boolean {\n return UUIDsEqual(p.ID, this.selectedPipelineId);\n }\n\n private parse<T>(raw: string | null | undefined, fallback: T): T {\n if (!raw) {\n return fallback;\n }\n try {\n const value: unknown = JSON.parse(raw);\n return (value ?? fallback) as T;\n } catch {\n return fallback;\n }\n }\n\n private markDirty(): void {\n this.dirty = true;\n this.rebuild();\n }\n\n // ---- derive nodes/edges from editable state ----\n\n private rebuild(): void {\n const nodes: DagNode[] = [];\n const edges: DagEdge[] = [];\n\n this.editSources.forEach((sb, i) => nodes.push(this.sourceNode(sb, i)));\n this.editSteps.forEach((step) => nodes.push(this.stepNode(step)));\n nodes.push(this.targetNode());\n nodes.push(this.algoNode());\n nodes.push({\n id: '__output',\n type: 'output',\n title: 'Model Artifact',\n icon: 'fa-solid fa-cube',\n tag: this.selectedPipeline?.Status ?? 'Draft',\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: false,\n rows: [\n { k: 'status', v: this.selectedPipeline?.Status ?? 'Draft' },\n { k: 'serving', v: this.selectedPipeline?.Status === 'Published' ? 'Active' : 'Not Serving' }\n ]\n });\n\n const stepIds = new Set(this.editSteps.map((s) => s.Id));\n const sourceKeyToId = new Map<string, string>();\n this.editSources.forEach((sb, i) => {\n const sid = `src:${i}`;\n sourceKeyToId.set(sid.toLowerCase(), sid);\n if (sb.Ref) sourceKeyToId.set(sb.Ref.toLowerCase(), sid);\n if (sb.Alias) sourceKeyToId.set(sb.Alias.toLowerCase(), sid);\n });\n\n const stepSourcesConnected = new Set<string>();\n const referenced = new Set<string>();\n for (const step of this.editSteps) {\n for (const input of step.Inputs ?? []) {\n if (stepIds.has(input)) {\n edges.push({ from: input, to: step.Id });\n referenced.add(input);\n } else {\n const matchedSrc = sourceKeyToId.get(input.toLowerCase());\n if (matchedSrc) {\n edges.push({ from: matchedSrc, to: step.Id });\n stepSourcesConnected.add(step.Id);\n }\n }\n }\n }\n const roots = this.editSteps.filter((s) => {\n const hasStepInput = (s.Inputs ?? []).some((i) => stepIds.has(i));\n const hasSourceInput = stepSourcesConnected.has(s.Id);\n return !hasStepInput && !hasSourceInput;\n });\n const sourceIds = this.editSources.map((_s, i) => `src:${i}`);\n if (this.editSteps.length > 0) {\n for (const sid of sourceIds) {\n for (const r of roots) {\n edges.push({ from: sid, to: r.Id });\n }\n }\n } else {\n for (const sid of sourceIds) {\n edges.push({ from: sid, to: '__algo' });\n }\n }\n for (const t of this.editSteps.filter((s) => !referenced.has(s.Id))) {\n edges.push({ from: t.Id, to: '__algo' });\n }\n // Connect source to target so target sits cleanly in the feature/target layer\n if (sourceIds.length > 0) {\n edges.push({ from: sourceIds[0], to: '__target' });\n }\n edges.push({ from: '__target', to: '__algo' });\n edges.push({ from: '__algo', to: '__output' });\n\n this.nodes = nodes;\n this.edges = edges;\n this.markPorts();\n this.layoutGraph();\n }\n\n private sourceNode(sb: SourceBinding, i: number): DagNode {\n const md = this.provider ?? new Metadata();\n let title = sb.Alias;\n if (!title && sb.Kind === 'Entity' && sb.Ref) {\n const entity = md.EntityByName(sb.Ref);\n title = entity?.DisplayName || entity?.Name;\n }\n title = title || sb.Ref || 'source';\n\n const rows: { k: string; v: string }[] = [{ k: 'kind', v: sb.Kind }];\n if (sb.Alias) {\n rows.push({ k: 'alias', v: sb.Alias });\n }\n if (sb.Kind === 'Entity' && title !== sb.Ref) {\n rows.push({ k: 'entity', v: sb.Ref });\n }\n return {\n id: `src:${i}`,\n type: 'src',\n title,\n icon: SOURCE_ICONS[sb.Kind] ?? 'fa-solid fa-database',\n tag: sb.Kind,\n rows,\n x: 0,\n y: 0,\n hasIn: false,\n hasOut: true\n };\n }\n\n private stepNode(step: FeatureStep): DagNode {\n return {\n id: step.Id,\n type: step.Kind === 'embedding' ? 'emb' : 'feat',\n title: step.Label || step.Kind,\n icon: STEP_ICONS[step.Kind] ?? 'fa-solid fa-sliders',\n tag: step.Kind,\n rows: this.stepRows(step),\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private stepRows(step: FeatureStep): { k: string; v: string }[] {\n switch (step.Kind) {\n case 'select': {\n const preview = step.Columns.length <= 3\n ? step.Columns.join(', ')\n : `${step.Columns.slice(0, 2).join(', ')} +${step.Columns.length - 2} more`;\n return [{ k: 'columns', v: preview || '0 cols' }];\n }\n case 'impute': return [{ k: 'column', v: step.Column }, { k: 'strategy', v: step.Strategy }];\n case 'standardize': {\n const preview = step.Columns.length <= 3\n ? step.Columns.join(', ')\n : `${step.Columns.slice(0, 2).join(', ')} +${step.Columns.length - 2} more`;\n return [{ k: 'columns', v: preview || '0 cols' }, { k: 'scaler', v: 'z-score' }];\n }\n case 'onehot': return [{ k: 'column', v: step.Column }];\n case 'bin': return [{ k: 'column', v: step.Column }, { k: 'bins', v: String(step.Bins) }];\n case 'embedding': return [{ k: 'entity', v: step.Entity }, { k: 'dims', v: String(step.Dims) }];\n case 'llm-derived': return [{ k: 'pipeline', v: step.FeaturePipelineRef }];\n case 'flow-agent': return [{ k: 'agent', v: step.FlowAgentRef }];\n case 'vision-llm': return [{ k: 'image', v: step.ImageColumn }, { k: 'output', v: step.Output.FeatureName }];\n default: return [];\n }\n }\n\n private targetNode(): DagNode {\n return {\n id: '__target',\n type: 'target',\n title: `Target: ${this.editTargetVariable || '—'}`,\n icon: 'fa-solid fa-bullseye',\n tag: this.editProblemType,\n rows: [\n { k: 'variable', v: this.editTargetVariable || '—' },\n { k: 'type', v: this.editProblemType }\n ],\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private algoNode(): DagNode {\n const name = this.engine?.AlgorithmName(this.editAlgorithmId) || 'Algorithm';\n const rows = [{ k: 'algorithm', v: name }];\n const hp = this.parse<Record<string, unknown>>(this.editHyperparams, {});\n Object.entries(hp).slice(0, 1).forEach(([k, v]) => rows.push({ k, v: String(v) }));\n return {\n id: '__algo',\n type: 'algo',\n title: name,\n icon: 'fa-solid fa-shapes',\n tag: 'Algorithm',\n rows,\n x: 0,\n y: 0,\n hasIn: true,\n hasOut: true\n };\n }\n\n private markPorts(): void {\n const hasIn = new Set(this.edges.map((e) => e.to));\n const hasOut = new Set(this.edges.map((e) => e.from));\n for (const n of this.nodes) {\n n.hasIn = hasIn.has(n.id);\n n.hasOut = hasOut.has(n.id);\n }\n }\n\n // ---- selection ----\n\n public selectNode(id: string): void {\n this.selectedId = id;\n }\n\n public get selectedNode(): DagNode {\n return this.nodeById.get(this.selectedId) ?? this.nodes[0] ?? { id: '', type: 'feat', title: '—', icon: 'fa-solid fa-sliders', rows: [], x: 0, y: 0, hasIn: false, hasOut: false };\n }\n\n public get selectedSourceIndex(): number {\n return this.selectedId.startsWith('src:') ? Number(this.selectedId.slice(4)) : -1;\n }\n public get selectedSource(): SourceBinding | null {\n const i = this.selectedSourceIndex;\n return i >= 0 ? this.editSources[i] ?? null : null;\n }\n public get selectedStep(): FeatureStep | null {\n return this.editSteps.find((s) => s.Id === this.selectedId) ?? null;\n }\n public get otherSteps(): FeatureStep[] {\n return this.editSteps.filter((s) => s.Id !== this.selectedId);\n }\n public get algorithms() {\n return this.engine?.Algorithms ?? [];\n }\n\n // ---- source editing ----\n\n public setSourceKind(kind: string): void { const s = this.selectedSource; if (s) { s.Kind = kind as SourceBinding['Kind']; this.markDirty(); } }\n public setSourceRef(ref: string): void { const s = this.selectedSource; if (s) { s.Ref = ref; this.markDirty(); } }\n public setSourceAlias(alias: string): void { const s = this.selectedSource; if (s) { s.Alias = alias || undefined; this.markDirty(); } }\n\n // ---- step editing ----\n\n public get columnsText(): string {\n const s = this.selectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n return s.Columns.join(', ');\n }\n return '';\n }\n public setColumns(text: string): void {\n const s = this.selectedStep;\n if (s && (s.Kind === 'select' || s.Kind === 'standardize')) {\n s.Columns = text.split(',').map((c) => c.trim()).filter(Boolean);\n this.markDirty();\n }\n }\n public stepField(field: string): string {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n const v = s?.[field];\n return v == null ? '' : String(v);\n }\n public setStepStr(field: string, value: string): void {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n if (s) { s[field] = value; this.markDirty(); }\n }\n public setStepNum(field: string, value: string): void {\n const s = this.selectedStep as unknown as Record<string, unknown> | null;\n const n = Number(value);\n if (s && !Number.isNaN(n)) { s[field] = n; this.markDirty(); }\n }\n public setStepLabel(label: string): void { const s = this.selectedStep; if (s) { s.Label = label || undefined; this.markDirty(); } }\n\n public setStepKind(kind: string): void {\n const idx = this.editSteps.findIndex((s) => s.Id === this.selectedId);\n if (idx < 0) {\n return;\n }\n const prev = this.editSteps[idx];\n this.editSteps[idx] = this.defaultStep(kind as FeatureStepKind, prev.Id, prev.Label, prev.Inputs);\n this.markDirty();\n }\n\n public hasInput(stepId: string): boolean {\n return (this.selectedStep?.Inputs ?? []).includes(stepId);\n }\n public toggleInput(stepId: string): void {\n const s = this.selectedStep;\n if (!s) {\n return;\n }\n const inputs = s.Inputs ?? [];\n if (inputs.includes(stepId)) {\n s.Inputs = inputs.filter((i) => i !== stepId);\n } else if (!this.createsCycle(stepId, s.Id)) {\n s.Inputs = [...inputs, stepId];\n } else {\n this.notifications.CreateSimpleNotification('That would create a cycle.', 'warning', 2500);\n return;\n }\n this.markDirty();\n }\n private createsCycle(from: string, target: string): boolean {\n const byId = new Map(this.editSteps.map((s) => [s.Id, s]));\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n const id = stack.pop()!;\n if (id === target) {\n return true;\n }\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n stack.push(...(byId.get(id)?.Inputs ?? []));\n }\n return false;\n }\n\n // ---- target / algorithm editing ----\n\n public setTargetVariable(v: string): void { this.editTargetVariable = v; this.markDirty(); }\n public setProblemType(v: string): void { this.editProblemType = v as ProblemType; this.markDirty(); }\n public setAlgorithm(id: string): void { this.editAlgorithmId = id; this.markDirty(); }\n public setHyperparams(v: string): void { this.editHyperparams = v; this.markDirty(); }\n\n // ---- leakage / as-of / validation editing ----\n\n public get denyText(): string { return this.editLeakage.DenyFields.join(', '); }\n public setDeny(text: string): void { this.editLeakage.DenyFields = parseDenyList(text); this.dirty = true; }\n public setThreshold(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editLeakage.SingleFeatureDominanceThreshold = n; this.dirty = true; } }\n public setAsOfMode(v: string): void { this.editAsOf = { ...this.editAsOf, Mode: v as AsOfStrategy['Mode'] }; this.dirty = true; }\n public setAsOfColumn(v: string): void { this.editAsOf.Column = v; this.dirty = true; }\n public setAsOfOffset(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editAsOf.OffsetDays = n; this.dirty = true; } }\n public setValStrategy(v: string): void { this.editValidation = { ...this.editValidation, Strategy: v as ValidationStrategy['Strategy'] }; this.dirty = true; }\n public setTestSize(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.TestSize = n; this.dirty = true; } }\n public setK(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.K = n; this.dirty = true; } }\n public setHoldout(v: string): void { const n = Number(v); if (!Number.isNaN(n)) { this.editValidation.LockedHoldoutFraction = n; this.dirty = true; } }\n\n // ---- add / delete nodes ----\n\n public addSource(): void {\n this.editSources = [...this.editSources, { Kind: 'Entity', Ref: '' }];\n this.markDirty();\n this.selectedId = `src:${this.editSources.length - 1}`;\n }\n public addStep(): void {\n const id = `step_${++this.stepSeq}`;\n this.editSteps = [...this.editSteps, this.defaultStep('select', id)];\n this.markDirty();\n this.selectedId = id;\n }\n public deleteSelected(): void {\n const si = this.selectedSourceIndex;\n if (si >= 0) {\n this.editSources = this.editSources.filter((_s, i) => i !== si);\n this.markDirty();\n this.selectedId = this.nodes[0]?.id ?? '';\n return;\n }\n const step = this.selectedStep;\n if (step) {\n this.editSteps = this.editSteps.filter((s) => s.Id !== step.Id);\n for (const s of this.editSteps) {\n if (s.Inputs?.includes(step.Id)) {\n s.Inputs = s.Inputs.filter((i) => i !== step.Id);\n }\n }\n this.markDirty();\n this.selectedId = this.nodes[0]?.id ?? '';\n }\n }\n\n private defaultStep(kind: FeatureStepKind, id: string, label?: string, inputs?: string[]): FeatureStep {\n const base = { Id: id, Label: label, Inputs: inputs };\n switch (kind) {\n case 'select': return { ...base, Kind: 'select', Columns: [] };\n case 'impute': return { ...base, Kind: 'impute', Column: '', Strategy: 'mean' };\n case 'standardize': return { ...base, Kind: 'standardize', Columns: [] };\n case 'onehot': return { ...base, Kind: 'onehot', Column: '' };\n case 'bin': return { ...base, Kind: 'bin', Column: '', Bins: 5 };\n case 'embedding': return { ...base, Kind: 'embedding', Entity: '', EmbeddingModelRef: '', Dims: 384 };\n case 'llm-derived': return { ...base, Kind: 'llm-derived', FeaturePipelineRef: '', Columns: [] };\n case 'flow-agent': return { ...base, Kind: 'flow-agent', FlowAgentRef: '', InputMapping: {}, OutputMapping: {} };\n case 'vision-llm': return { ...base, Kind: 'vision-llm', ImageColumn: '', Prompt: { InlinePrompt: '' }, Output: { FeatureName: '', Kind: 'category' } };\n }\n }\n\n // ---- save / validate / train ----\n\n public async save(): Promise<void> {\n const p = this.selectedPipeline;\n if (!p || this.busy) {\n return;\n }\n this.busy = true;\n try {\n p.SourceBindings = JSON.stringify(this.editSources);\n p.FeatureSteps = JSON.stringify({ Steps: this.editSteps });\n p.TargetVariable = this.editTargetVariable;\n p.ProblemType = this.editProblemType;\n p.AlgorithmID = this.editAlgorithmId;\n p.Hyperparameters = this.editHyperparams || null;\n p.LeakageGuard = JSON.stringify(this.editLeakage);\n p.AsOfStrategy = JSON.stringify(this.editAsOf);\n p.ValidationStrategy = JSON.stringify(this.editValidation);\n const ok = await p.Save();\n if (ok) {\n this.dirty = false;\n this.notifications.CreateSimpleNotification(`Saved \"${p.Name}\".`, 'success', 3000);\n } else {\n this.notifications.CreateSimpleNotification(`Save failed: ${p.LatestResult?.CompleteMessage ?? 'unknown error'}`, 'error', 5000);\n }\n } finally {\n this.busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public validate(): void {\n const issues: string[] = [];\n if (this.editSources.length === 0) {\n issues.push('at least one source');\n }\n if (!this.editTargetVariable) {\n issues.push('a target variable');\n }\n if (!this.editAlgorithmId) {\n issues.push('an algorithm');\n }\n try {\n JSON.parse(this.editHyperparams || '{}');\n } catch {\n issues.push('valid hyperparameters JSON');\n }\n if (issues.length > 0) {\n this.notifications.CreateSimpleNotification(`Pipeline needs ${issues.join(', ')}.`, 'warning', 4500);\n } else {\n this.notifications.CreateSimpleNotification('Pipeline looks valid — ready to train.', 'success', 3000);\n }\n }\n\n public async train(): Promise<void> {\n const p = this.selectedPipeline;\n if (!p || this.busy || this.dirty) {\n return;\n }\n this.busy = true;\n this.notifications.CreateSimpleNotification(`Training \"${p.Name}\"…`, 'info', 2500);\n try {\n const op = new PredictiveStudioTrainModelOperation();\n const result = await op.Execute({ pipelineId: p.ID }, { provider: this.provider ?? undefined, user: this.currentUser ?? undefined });\n if (result.Success && result.Output) {\n const flagged = result.Output.leakageFlagged ? ' (leakage flag raised — needs sign-off)' : '';\n this.notifications.CreateSimpleNotification(`Trained ${p.Name} v${result.Output.version}${flagged}. See Registry.`, 'success', 5000);\n await this.engine.Config(true, this.currentUser ?? undefined, this.provider ?? undefined);\n } else {\n this.notifications.CreateSimpleNotification(result.ErrorMessage || 'Training failed.', 'error', 6000);\n }\n } catch (e) {\n this.notifications.CreateSimpleNotification(`Training error: ${e instanceof Error ? e.message : String(e)}`, 'error', 6000);\n } finally {\n this.busy = false;\n this.cdr.detectChanges();\n }\n }\n\n public refine(): void {\n const p = this.selectedPipeline;\n if (!p) {\n this.askAgent.emit(this.starterPrompt);\n return;\n }\n const predicts = p.TargetVariable ? ` (predicts ${p.TargetVariable})` : '';\n this.askAgent.emit(`Help me refine the \"${p.Name}\" training pipeline${predicts}. Suggest improvements to the features or algorithm to raise holdout performance.`);\n }\n\n public statusClass(status: string): string {\n switch (status) {\n case 'Published': return 'published';\n case 'Validated': return 'validated';\n default: return 'draft';\n }\n }\n\n public nodeTypeLabel(type: NodeType): string {\n switch (type) {\n case 'src': return 'Source';\n case 'feat': return 'Feature Step';\n case 'emb': return 'Embedding';\n case 'target': return 'Target';\n case 'algo': return 'Algorithm';\n case 'output': return 'Output Model';\n }\n }\n\n // ---- Graph layered layout ----\n\n private layoutGraph(): void {\n this.nodeById.clear();\n for (const n of this.nodes) {\n this.nodeById.set(n.id, n);\n }\n const inEdges = new Map<string, string[]>();\n for (const n of this.nodes) {\n inEdges.set(n.id, []);\n }\n for (const e of this.edges) {\n inEdges.get(e.to)?.push(e.from);\n }\n const layerOf = new Map<string, number>();\n const computeLayer = (id: string, path: Set<string>): number => {\n if (layerOf.has(id)) {\n return layerOf.get(id)!;\n }\n if (path.has(id)) {\n return 0;\n }\n path.add(id);\n const preds = inEdges.get(id) ?? [];\n let l = 0;\n for (const p of preds) {\n l = Math.max(l, computeLayer(p, path) + 1);\n }\n path.delete(id);\n layerOf.set(id, l);\n return l;\n };\n for (const n of this.nodes) {\n computeLayer(n.id, new Set());\n }\n\n const algoNode = this.nodes.find((n) => n.id === '__algo');\n const outNode = this.nodes.find((n) => n.id === '__output');\n let maxFeatureLayer = 0;\n for (const n of this.nodes) {\n if (n.id !== '__algo' && n.id !== '__output') {\n maxFeatureLayer = Math.max(maxFeatureLayer, layerOf.get(n.id) ?? 0);\n }\n }\n if (algoNode) {\n layerOf.set('__algo', maxFeatureLayer + 1);\n }\n if (outNode) {\n layerOf.set('__output', maxFeatureLayer + 2);\n }\n\n const layers = new Map<number, DagNode[]>();\n for (const n of this.nodes) {\n const l = layerOf.get(n.id) ?? 0;\n const arr = layers.get(l) ?? [];\n arr.push(n);\n layers.set(l, arr);\n }\n\n let maxCol = 0;\n let maxRow = 0;\n layers.forEach((nodesInCol, col) => {\n maxCol = Math.max(maxCol, col);\n maxRow = Math.max(maxRow, nodesInCol.length);\n });\n\n const maxCanvasHeight = PAD_Y * 2 + maxRow * NODE_H + Math.max(0, maxRow - 1) * ROW_GAP;\n\n layers.forEach((nodesInCol, col) => {\n const colHeight = nodesInCol.length * NODE_H + Math.max(0, nodesInCol.length - 1) * ROW_GAP;\n // Vertically center this column relative to the tallest column in the graph\n const colStartY = PAD_Y + Math.max(0, Math.floor((maxCanvasHeight - PAD_Y * 2 - colHeight) / 2));\n nodesInCol.forEach((n, row) => {\n n.x = PAD_X + col * (NODE_W + COL_GAP);\n n.y = colStartY + row * (NODE_H + ROW_GAP);\n });\n });\n\n this.canvasW = Math.max(920, PAD_X * 2 + (maxCol + 1) * NODE_W + maxCol * COL_GAP);\n this.canvasH = Math.max(540, maxCanvasHeight);\n }\n\n public edgePath(edge: DagEdge): string {\n const from = this.nodeById.get(edge.from);\n const to = this.nodeById.get(edge.to);\n if (!from || !to) {\n return '';\n }\n const x1 = from.x + NODE_W;\n const y1 = from.y + NODE_H / 2;\n // Account for port diameter / marker-end: end 2px before port center\n const x2 = to.x - 2;\n const y2 = to.y + NODE_H / 2;\n const dx = Math.max(36, Math.abs(x2 - x1) * 0.45);\n return `M ${x1} ${y1} C ${x1 + dx} ${y1}, ${x2 - dx} ${y2}, ${x2} ${y2}`;\n }\n}\n"]}